Lines Matching refs:davinci_ks
52 struct davinci_ks { struct
63 static int __init davinci_ks_initialize(struct davinci_ks *davinci_ks) in davinci_ks_initialize() argument
65 struct device *dev = &davinci_ks->input->dev; in davinci_ks_initialize()
66 struct davinci_ks_platform_data *pdata = davinci_ks->pdata; in davinci_ks_initialize()
71 davinci_ks->base + DAVINCI_KEYSCAN_INTENA); in davinci_ks_initialize()
75 davinci_ks->base + DAVINCI_KEYSCAN_INTCLR); in davinci_ks_initialize()
79 davinci_ks->base + DAVINCI_KEYSCAN_STRBWIDTH); in davinci_ks_initialize()
81 davinci_ks->base + DAVINCI_KEYSCAN_INTERVAL); in davinci_ks_initialize()
83 davinci_ks->base + DAVINCI_KEYSCAN_CONTTIME); in davinci_ks_initialize()
100 matrix_ctrl, davinci_ks->base + DAVINCI_KEYSCAN_KEYCTRL); in davinci_ks_initialize()
107 struct davinci_ks *davinci_ks = dev_id; in davinci_ks_interrupt() local
108 struct device *dev = &davinci_ks->input->dev; in davinci_ks_interrupt()
109 unsigned short *keymap = davinci_ks->keymap; in davinci_ks_interrupt()
110 int keymapsize = davinci_ks->pdata->keymapsize; in davinci_ks_interrupt()
117 __raw_writel(0x0, davinci_ks->base + DAVINCI_KEYSCAN_INTENA); in davinci_ks_interrupt()
120 prev_status = __raw_readl(davinci_ks->base + DAVINCI_KEYSCAN_PREVSTATE); in davinci_ks_interrupt()
121 new_status = __raw_readl(davinci_ks->base + DAVINCI_KEYSCAN_CURRENTST); in davinci_ks_interrupt()
136 input_report_key(davinci_ks->input, keycode, in davinci_ks_interrupt()
138 input_sync(davinci_ks->input); in davinci_ks_interrupt()
143 davinci_ks->base + DAVINCI_KEYSCAN_INTCLR); in davinci_ks_interrupt()
147 __raw_writel(0x1, davinci_ks->base + DAVINCI_KEYSCAN_INTENA); in davinci_ks_interrupt()
154 struct davinci_ks *davinci_ks; in davinci_ks_probe() local
174 davinci_ks = kzalloc(sizeof(struct davinci_ks) + in davinci_ks_probe()
176 if (!davinci_ks) { in davinci_ks_probe()
181 memcpy(davinci_ks->keymap, pdata->keymap, in davinci_ks_probe()
191 davinci_ks->input = key_dev; in davinci_ks_probe()
193 davinci_ks->irq = platform_get_irq(pdev, 0); in davinci_ks_probe()
194 if (davinci_ks->irq < 0) { in davinci_ks_probe()
195 error = davinci_ks->irq; in davinci_ks_probe()
206 davinci_ks->pbase = res->start; in davinci_ks_probe()
207 davinci_ks->base_size = resource_size(res); in davinci_ks_probe()
209 mem = request_mem_region(davinci_ks->pbase, davinci_ks->base_size, in davinci_ks_probe()
213 davinci_ks->pbase); in davinci_ks_probe()
218 davinci_ks->base = ioremap(davinci_ks->pbase, davinci_ks->base_size); in davinci_ks_probe()
219 if (!davinci_ks->base) { in davinci_ks_probe()
233 davinci_ks->pdata = pdata; in davinci_ks_probe()
235 for (i = 0; i < davinci_ks->pdata->keymapsize; i++) in davinci_ks_probe()
236 __set_bit(davinci_ks->pdata->keymap[i], key_dev->keybit); in davinci_ks_probe()
245 key_dev->keycode = davinci_ks->keymap; in davinci_ks_probe()
246 key_dev->keycodesize = sizeof(davinci_ks->keymap[0]); in davinci_ks_probe()
247 key_dev->keycodemax = davinci_ks->pdata->keymapsize; in davinci_ks_probe()
249 error = input_register_device(davinci_ks->input); in davinci_ks_probe()
255 error = request_irq(davinci_ks->irq, davinci_ks_interrupt, in davinci_ks_probe()
256 0, pdev->name, davinci_ks); in davinci_ks_probe()
262 error = davinci_ks_initialize(davinci_ks); in davinci_ks_probe()
268 platform_set_drvdata(pdev, davinci_ks); in davinci_ks_probe()
272 free_irq(davinci_ks->irq, davinci_ks); in davinci_ks_probe()
274 input_unregister_device(davinci_ks->input); in davinci_ks_probe()
277 iounmap(davinci_ks->base); in davinci_ks_probe()
279 release_mem_region(davinci_ks->pbase, davinci_ks->base_size); in davinci_ks_probe()
283 kfree(davinci_ks); in davinci_ks_probe()
290 struct davinci_ks *davinci_ks = platform_get_drvdata(pdev); in davinci_ks_remove() local
292 free_irq(davinci_ks->irq, davinci_ks); in davinci_ks_remove()
294 input_unregister_device(davinci_ks->input); in davinci_ks_remove()
296 iounmap(davinci_ks->base); in davinci_ks_remove()
297 release_mem_region(davinci_ks->pbase, davinci_ks->base_size); in davinci_ks_remove()
299 kfree(davinci_ks); in davinci_ks_remove()