Lines Matching refs:keypad
3 * Driver for the Cirrus EP93xx matrix keypad controller.
7 * Based on the pxa27x matrix keypad controller by Rodolfo Giometti.
28 #include <linux/platform_data/keypad-ep93xx.h>
82 struct ep93xx_keypad *keypad = dev_id;
83 struct input_dev *input_dev = keypad->input_dev;
87 status = __raw_readl(keypad->mmio_base + KEY_REG);
90 key1 = keypad->keycodes[keycode];
93 key2 = keypad->keycodes[keycode];
96 if (keypad->key1 && key1 != keypad->key1 && key2 != keypad->key1)
97 input_report_key(input_dev, keypad->key1, 0);
99 if (keypad->key2 && key1 != keypad->key2 && key2 != keypad->key2)
100 input_report_key(input_dev, keypad->key2, 0);
105 keypad->key1 = key1;
106 keypad->key2 = key2;
109 if (keypad->key1 && key1 != keypad->key1)
110 input_report_key(input_dev, keypad->key1, 0);
112 if (keypad->key2 && key1 != keypad->key2)
113 input_report_key(input_dev, keypad->key2, 0);
117 keypad->key1 = key1;
118 keypad->key2 = 0;
121 input_report_key(input_dev, keypad->key1, 0);
122 input_report_key(input_dev, keypad->key2, 0);
124 keypad->key1 = keypad->key2 = 0;
131 static void ep93xx_keypad_config(struct ep93xx_keypad *keypad)
133 struct ep93xx_keypad_platform_data *pdata = keypad->pdata;
136 clk_set_rate(keypad->clk, pdata->clk_rate);
151 __raw_writel(val, keypad->mmio_base + KEY_INIT);
156 struct ep93xx_keypad *keypad = input_get_drvdata(pdev);
158 if (!keypad->enabled) {
159 ep93xx_keypad_config(keypad);
160 clk_enable(keypad->clk);
161 keypad->enabled = true;
169 struct ep93xx_keypad *keypad = input_get_drvdata(pdev);
171 if (keypad->enabled) {
172 clk_disable(keypad->clk);
173 keypad->enabled = false;
182 struct ep93xx_keypad *keypad = platform_get_drvdata(pdev);
183 struct input_dev *input_dev = keypad->input_dev;
187 if (keypad->enabled) {
188 clk_disable(keypad->clk);
189 keypad->enabled = false;
195 enable_irq_wake(keypad->irq);
203 struct ep93xx_keypad *keypad = platform_get_drvdata(pdev);
204 struct input_dev *input_dev = keypad->input_dev;
207 disable_irq_wake(keypad->irq);
212 if (!keypad->enabled) {
213 ep93xx_keypad_config(keypad);
214 clk_enable(keypad->clk);
215 keypad->enabled = true;
230 struct ep93xx_keypad *keypad;
236 keypad = kzalloc(sizeof(struct ep93xx_keypad), GFP_KERNEL);
237 if (!keypad)
240 keypad->pdata = dev_get_platdata(&pdev->dev);
241 if (!keypad->pdata) {
246 keymap_data = keypad->pdata->keymap_data;
252 keypad->irq = platform_get_irq(pdev, 0);
253 if (keypad->irq < 0) {
254 err = keypad->irq;
270 keypad->mmio_base = ioremap(res->start, resource_size(res));
271 if (keypad->mmio_base == NULL) {
280 keypad->clk = clk_get(&pdev->dev, NULL);
281 if (IS_ERR(keypad->clk)) {
282 err = PTR_ERR(keypad->clk);
292 keypad->input_dev = input_dev;
302 keypad->keycodes, input_dev);
306 if (keypad->pdata->flags & EP93XX_KEYPAD_AUTOREPEAT)
308 input_set_drvdata(input_dev, keypad);
310 err = request_irq(keypad->irq, ep93xx_keypad_irq_handler,
311 0, pdev->name, keypad);
319 platform_set_drvdata(pdev, keypad);
325 free_irq(keypad->irq, keypad);
329 clk_put(keypad->clk);
333 iounmap(keypad->mmio_base);
337 kfree(keypad);
343 struct ep93xx_keypad *keypad = platform_get_drvdata(pdev);
346 free_irq(keypad->irq, keypad);
348 if (keypad->enabled)
349 clk_disable(keypad->clk);
350 clk_put(keypad->clk);
352 input_unregister_device(keypad->input_dev);
356 iounmap(keypad->mmio_base);
361 kfree(keypad);
368 .name = "ep93xx-keypad",
379 MODULE_ALIAS("platform:ep93xx-keypad");