Lines Matching refs:keypad

86 	struct ep93xx_keypad *keypad = dev_id;  in ep93xx_keypad_irq_handler()  local
87 struct input_dev *input_dev = keypad->input_dev; in ep93xx_keypad_irq_handler()
91 status = __raw_readl(keypad->mmio_base + KEY_REG); in ep93xx_keypad_irq_handler()
94 key1 = keypad->keycodes[keycode]; in ep93xx_keypad_irq_handler()
97 key2 = keypad->keycodes[keycode]; in ep93xx_keypad_irq_handler()
100 if (keypad->key1 && key1 != keypad->key1 && key2 != keypad->key1) in ep93xx_keypad_irq_handler()
101 input_report_key(input_dev, keypad->key1, 0); in ep93xx_keypad_irq_handler()
103 if (keypad->key2 && key1 != keypad->key2 && key2 != keypad->key2) in ep93xx_keypad_irq_handler()
104 input_report_key(input_dev, keypad->key2, 0); in ep93xx_keypad_irq_handler()
109 keypad->key1 = key1; in ep93xx_keypad_irq_handler()
110 keypad->key2 = key2; in ep93xx_keypad_irq_handler()
113 if (keypad->key1 && key1 != keypad->key1) in ep93xx_keypad_irq_handler()
114 input_report_key(input_dev, keypad->key1, 0); in ep93xx_keypad_irq_handler()
116 if (keypad->key2 && key1 != keypad->key2) in ep93xx_keypad_irq_handler()
117 input_report_key(input_dev, keypad->key2, 0); in ep93xx_keypad_irq_handler()
121 keypad->key1 = key1; in ep93xx_keypad_irq_handler()
122 keypad->key2 = 0; in ep93xx_keypad_irq_handler()
125 input_report_key(input_dev, keypad->key1, 0); in ep93xx_keypad_irq_handler()
126 input_report_key(input_dev, keypad->key2, 0); in ep93xx_keypad_irq_handler()
128 keypad->key1 = keypad->key2 = 0; in ep93xx_keypad_irq_handler()
135 static void ep93xx_keypad_config(struct ep93xx_keypad *keypad) in ep93xx_keypad_config() argument
137 struct ep93xx_keypad_platform_data *pdata = keypad->pdata; in ep93xx_keypad_config()
141 clk_set_rate(keypad->clk, EP93XX_KEYTCHCLK_DIV4); in ep93xx_keypad_config()
143 clk_set_rate(keypad->clk, EP93XX_KEYTCHCLK_DIV16); in ep93xx_keypad_config()
158 __raw_writel(val, keypad->mmio_base + KEY_INIT); in ep93xx_keypad_config()
163 struct ep93xx_keypad *keypad = input_get_drvdata(pdev); in ep93xx_keypad_open() local
165 if (!keypad->enabled) { in ep93xx_keypad_open()
166 ep93xx_keypad_config(keypad); in ep93xx_keypad_open()
167 clk_enable(keypad->clk); in ep93xx_keypad_open()
168 keypad->enabled = true; in ep93xx_keypad_open()
176 struct ep93xx_keypad *keypad = input_get_drvdata(pdev); in ep93xx_keypad_close() local
178 if (keypad->enabled) { in ep93xx_keypad_close()
179 clk_disable(keypad->clk); in ep93xx_keypad_close()
180 keypad->enabled = false; in ep93xx_keypad_close()
189 struct ep93xx_keypad *keypad = platform_get_drvdata(pdev); in ep93xx_keypad_suspend() local
190 struct input_dev *input_dev = keypad->input_dev; in ep93xx_keypad_suspend()
194 if (keypad->enabled) { in ep93xx_keypad_suspend()
195 clk_disable(keypad->clk); in ep93xx_keypad_suspend()
196 keypad->enabled = false; in ep93xx_keypad_suspend()
202 enable_irq_wake(keypad->irq); in ep93xx_keypad_suspend()
210 struct ep93xx_keypad *keypad = platform_get_drvdata(pdev); in ep93xx_keypad_resume() local
211 struct input_dev *input_dev = keypad->input_dev; in ep93xx_keypad_resume()
214 disable_irq_wake(keypad->irq); in ep93xx_keypad_resume()
219 if (!keypad->enabled) { in ep93xx_keypad_resume()
220 ep93xx_keypad_config(keypad); in ep93xx_keypad_resume()
221 clk_enable(keypad->clk); in ep93xx_keypad_resume()
222 keypad->enabled = true; in ep93xx_keypad_resume()
237 struct ep93xx_keypad *keypad; in ep93xx_keypad_probe() local
243 keypad = kzalloc(sizeof(struct ep93xx_keypad), GFP_KERNEL); in ep93xx_keypad_probe()
244 if (!keypad) in ep93xx_keypad_probe()
247 keypad->pdata = dev_get_platdata(&pdev->dev); in ep93xx_keypad_probe()
248 if (!keypad->pdata) { in ep93xx_keypad_probe()
253 keymap_data = keypad->pdata->keymap_data; in ep93xx_keypad_probe()
259 keypad->irq = platform_get_irq(pdev, 0); in ep93xx_keypad_probe()
260 if (!keypad->irq) { in ep93xx_keypad_probe()
277 keypad->mmio_base = ioremap(res->start, resource_size(res)); in ep93xx_keypad_probe()
278 if (keypad->mmio_base == NULL) { in ep93xx_keypad_probe()
287 keypad->clk = clk_get(&pdev->dev, NULL); in ep93xx_keypad_probe()
288 if (IS_ERR(keypad->clk)) { in ep93xx_keypad_probe()
289 err = PTR_ERR(keypad->clk); in ep93xx_keypad_probe()
299 keypad->input_dev = input_dev; in ep93xx_keypad_probe()
309 keypad->keycodes, input_dev); in ep93xx_keypad_probe()
313 if (keypad->pdata->flags & EP93XX_KEYPAD_AUTOREPEAT) in ep93xx_keypad_probe()
315 input_set_drvdata(input_dev, keypad); in ep93xx_keypad_probe()
317 err = request_irq(keypad->irq, ep93xx_keypad_irq_handler, in ep93xx_keypad_probe()
318 0, pdev->name, keypad); in ep93xx_keypad_probe()
326 platform_set_drvdata(pdev, keypad); in ep93xx_keypad_probe()
332 free_irq(keypad->irq, keypad); in ep93xx_keypad_probe()
336 clk_put(keypad->clk); in ep93xx_keypad_probe()
340 iounmap(keypad->mmio_base); in ep93xx_keypad_probe()
344 kfree(keypad); in ep93xx_keypad_probe()
350 struct ep93xx_keypad *keypad = platform_get_drvdata(pdev); in ep93xx_keypad_remove() local
353 free_irq(keypad->irq, keypad); in ep93xx_keypad_remove()
355 if (keypad->enabled) in ep93xx_keypad_remove()
356 clk_disable(keypad->clk); in ep93xx_keypad_remove()
357 clk_put(keypad->clk); in ep93xx_keypad_remove()
359 input_unregister_device(keypad->input_dev); in ep93xx_keypad_remove()
363 iounmap(keypad->mmio_base); in ep93xx_keypad_remove()
368 kfree(keypad); in ep93xx_keypad_remove()