23 #include <linux/module.h>
29 #include <linux/slab.h>
31 #include <mach/hardware.h>
42 #define KEY_INIT_DBNC_MASK (0x00ff0000)
43 #define KEY_INIT_DBNC_SHIFT (16)
44 #define KEY_INIT_DIS3KY (1<<15)
45 #define KEY_INIT_DIAG (1<<14)
46 #define KEY_INIT_BACK (1<<13)
47 #define KEY_INIT_T2 (1<<12)
48 #define KEY_INIT_PRSCL_MASK (0x000003ff)
49 #define KEY_INIT_PRSCL_SHIFT (0)
52 #define KEY_DIAG_MASK (0x0000003f)
53 #define KEY_DIAG_SHIFT (0)
56 #define KEY_REG_K (1<<15)
57 #define KEY_REG_INT (1<<14)
58 #define KEY_REG_2KEYS (1<<13)
59 #define KEY_REG_1KEY (1<<12)
60 #define KEY_REG_KEY2_MASK (0x00000fc0)
61 #define KEY_REG_KEY2_SHIFT (6)
62 #define KEY_REG_KEY1_MASK (0x0000003f)
63 #define KEY_REG_KEY1_SHIFT (0)
65 #define EP93XX_MATRIX_SIZE (EP93XX_MATRIX_ROWS * EP93XX_MATRIX_COLS)
87 struct input_dev *input_dev = keypad->
input_dev;
100 if (keypad->
key1 && key1 != keypad->
key1 && key2 != keypad->
key1)
101 input_report_key(input_dev, keypad->
key1, 0);
103 if (keypad->
key2 && key1 != keypad->
key2 && key2 != keypad->
key2)
104 input_report_key(input_dev, keypad->
key2, 0);
106 input_report_key(input_dev, key1, 1);
107 input_report_key(input_dev, key2, 1);
113 if (keypad->
key1 && key1 != keypad->
key1)
114 input_report_key(input_dev, keypad->
key1, 0);
116 if (keypad->
key2 && key1 != keypad->
key2)
117 input_report_key(input_dev, keypad->
key2, 0);
119 input_report_key(input_dev, key1, 1);
125 input_report_key(input_dev, keypad->
key1, 0);
126 input_report_key(input_dev, keypad->
key2, 0);
130 input_sync(input_dev);
135 static void ep93xx_keypad_config(
struct ep93xx_keypad *keypad)
138 unsigned int val = 0;
161 static int ep93xx_keypad_open(
struct input_dev *pdev)
166 ep93xx_keypad_config(keypad);
174 static void ep93xx_keypad_close(
struct input_dev *pdev)
185 #ifdef CONFIG_PM_SLEEP
186 static int ep93xx_keypad_suspend(
struct device *
dev)
190 struct input_dev *input_dev = keypad->
input_dev;
201 if (device_may_wakeup(&pdev->
dev))
202 enable_irq_wake(keypad->
irq);
207 static int ep93xx_keypad_resume(
struct device *dev)
211 struct input_dev *input_dev = keypad->
input_dev;
213 if (device_may_wakeup(&pdev->
dev))
214 disable_irq_wake(keypad->
irq);
218 if (input_dev->users) {
220 ep93xx_keypad_config(keypad);
233 ep93xx_keypad_suspend, ep93xx_keypad_resume);
239 struct input_dev *input_dev;
247 keypad->
pdata = pdev->
dev.platform_data;
248 if (!keypad->
pdata) {
253 keymap_data = keypad->
pdata->keymap_data;
280 goto failed_free_mem;
288 if (IS_ERR(keypad->
clk)) {
289 err = PTR_ERR(keypad->
clk);
290 goto failed_free_gpio;
293 input_dev = input_allocate_device();
301 input_dev->name = pdev->
name;
303 input_dev->open = ep93xx_keypad_open;
304 input_dev->close = ep93xx_keypad_close;
305 input_dev->dev.parent = &pdev->
dev;
311 goto failed_free_dev;
315 input_set_drvdata(input_dev, keypad);
318 0, pdev->
name, keypad);
320 goto failed_free_dev;
322 err = input_register_device(input_dev);
324 goto failed_free_irq;
326 platform_set_drvdata(pdev, keypad);
333 platform_set_drvdata(pdev,
NULL);
335 input_free_device(input_dev);
356 platform_set_drvdata(pdev,
NULL);
362 input_unregister_device(keypad->
input_dev);
378 .name =
"ep93xx-keypad",
380 .pm = &ep93xx_keypad_pm_ops,
382 .probe = ep93xx_keypad_probe,