9 #include <linux/module.h>
10 #include <linux/kernel.h>
13 #include <linux/input.h>
15 #include <linux/slab.h>
25 unsigned short keymask,
int value)
30 if (keymask & (1 << i))
33 input_sync(dev->
input);
41 unsigned short keymask;
49 keymask = (reg_val_hi << 8) | reg_val_lo;
53 keymask |= (reg_val_hi << 8) | reg_val_lo;
54 adp5520_keys_report_event(dev, keymask, 1);
61 keymask = (reg_val_hi << 8) | reg_val_lo;
65 keymask |= (reg_val_hi << 8) | reg_val_lo;
66 adp5520_keys_report_event(dev, keymask, 0);
75 struct input_dev *
input;
78 unsigned char en_mask, ctl_mask = 0;
81 dev_err(&pdev->
dev,
"only ADP5520 supports Keypad\n");
86 dev_err(&pdev->
dev,
"missing platform data\n");
95 dev_err(&pdev->
dev,
"failed to alloc memory\n");
99 input = input_allocate_device();
108 input->name = pdev->
name;
109 input->phys =
"adp5520-keys/input0";
110 input->dev.parent = &pdev->
dev;
112 input_set_drvdata(input, dev);
115 input->id.vendor = 0x0001;
116 input->id.product = 0x5520;
117 input->id.version = 0x0001;
119 input->keycodesize =
sizeof(dev->
keycode[0]);
132 for (i = 0; i < input->keycodemax; i++)
136 ret = input_register_device(input);
138 dev_err(&pdev->
dev,
"unable to register input device\n");
165 dev->
notifier.notifier_call = adp5520_keys_notifier;
169 dev_err(&pdev->
dev,
"failed to register notifier\n");
173 platform_set_drvdata(pdev, dev);
177 input_unregister_device(input);
180 input_free_device(input);
192 input_unregister_device(dev->
input);
199 .name =
"adp5520-keys",
202 .probe = adp5520_keys_probe,