10 #include <linux/module.h>
11 #include <linux/slab.h>
13 #include <linux/i2c.h>
18 #define LM8333_FIFO_READ 0x20
19 #define LM8333_DEBOUNCE 0x22
20 #define LM8333_READ_INT 0xD0
21 #define LM8333_ACTIVE 0xE4
22 #define LM8333_READ_ERROR 0xF0
24 #define LM8333_KEYPAD_IRQ (1 << 0)
25 #define LM8333_ERROR_IRQ (1 << 3)
27 #define LM8333_ERROR_KEYOVR 0x04
28 #define LM8333_ERROR_FIFOOVR 0x40
30 #define LM8333_FIFO_TRANSFER_SIZE 16
32 #define LM8333_NUM_ROWS 8
33 #define LM8333_NUM_COLS 16
34 #define LM8333_ROW_SHIFT 4
43 #define LM8333_READ_RETRIES 2
90 "Error %d while reading FIFO\n", ret);
95 pressed = keys[
i] & 0x80;
96 code = keys[
i] & 0x7f;
99 input_report_key(input, lm8333->
keycodes[code], pressed);
107 struct lm8333 *lm8333 =
data;
126 lm8333_key_handler(lm8333);
135 struct lm8333 *lm8333;
136 struct input_dev *
input;
137 int err, active_time;
144 dev_err(&client->
dev,
"Active time not big enough!\n");
148 lm8333 = kzalloc(
sizeof(*lm8333),
GFP_KERNEL);
149 input = input_allocate_device();
150 if (!lm8333 || !input) {
158 input->name = client->
name;
159 input->dev.parent = &client->
dev;
174 dev_warn(&client->
dev,
"Unable to set debounce time\n");
181 dev_warn(&client->
dev,
"Unable to set active time\n");
190 err = input_register_device(input);
194 i2c_set_clientdata(client, lm8333);
200 input_free_device(input);
207 struct lm8333 *lm8333 = i2c_get_clientdata(client);
210 input_unregister_device(lm8333->
input);
227 .probe = lm8333_probe,
229 .id_table = lm8333_id,