16 #include <linux/kernel.h>
18 #include <linux/errno.h>
19 #include <linux/input.h>
22 #include <linux/slab.h>
27 #include <linux/module.h>
29 #define BITS(x) (BIT(x) - 1)
34 #define DEBOUNCE_MIN 0x400ul
35 #define DEBOUNCE_MAX 0x3ffffffful
53 #define keypad_read(kp, reg) __raw_readl(&(kp)->regs->reg)
54 #define keypad_write(kp, reg, val) __raw_writel(val, &(kp)->regs->reg)
81 memset(curr_keys, 0,
sizeof(curr_keys));
83 for (i = 0; i < 3; i++)
86 for (i = 0; i < 3; i++) {
90 bit = fls(change) - 1;
92 val = curr_keys[
i] &
BIT(bit);
109 spin_unlock_irqrestore(&kp->
lock, flags);
117 unsigned long mask, debounce, clk_rate_khz;
142 spin_unlock_irqrestore(&kp->
lock, flags);
165 pdata = pdev->
dev.platform_data;
167 dev_err(dev,
"cannot find device data\n");
173 dev_err(dev,
"cannot find keymap data\n");
182 dev_err(dev,
"cannot allocate device info\n");
190 platform_set_drvdata(pdev, kp);
196 dev_err(dev,
"cannot determine device interrupts\n");
203 dev_err(dev,
"cannot determine register area\n");
210 dev_err(dev,
"cannot claim register memory\n");
218 dev_err(dev,
"cannot map register memory\n");
224 if (IS_ERR(kp->
clk)) {
225 dev_err(dev,
"cannot claim device clock\n");
226 error = PTR_ERR(kp->
clk);
233 dev_err(kp->
dev,
"Could not allocate keypad press key irq\n");
234 goto error_irq_press;
240 dev_err(kp->
dev,
"Could not allocate keypad release key irq\n");
241 goto error_irq_release;
246 dev_err(dev,
"cannot allocate input device\n");
259 kp->
input_dev->id.product = ((rev >> 8) & 0x07);
260 kp->
input_dev->id.version = ((rev >> 16) & 0xfff);
267 dev_err(dev,
"Failed to build keymap\n");
277 error = input_register_device(kp->
input_dev);
279 dev_err(dev,
"Could not register input device\n");
299 platform_set_drvdata(pdev,
NULL);
306 struct keypad_data *kp = platform_get_drvdata(pdev);
314 platform_set_drvdata(pdev,
NULL);
321 .probe = keypad_probe,
323 .driver.name =
"tnetv107x-keypad",