16 #include <linux/module.h>
17 #include <linux/i2c.h>
18 #include <linux/slab.h>
21 #include <linux/input.h>
24 #define MAX7359_MAX_KEY_ROWS 8
25 #define MAX7359_MAX_KEY_COLS 8
26 #define MAX7359_MAX_KEY_NUM (MAX7359_MAX_KEY_ROWS * MAX7359_MAX_KEY_COLS)
27 #define MAX7359_ROW_SHIFT 3
32 #define MAX7359_REG_KEYFIFO 0x00
33 #define MAX7359_REG_CONFIG 0x01
34 #define MAX7359_REG_DEBOUNCE 0x02
35 #define MAX7359_REG_INTERRUPT 0x03
36 #define MAX7359_REG_PORTS 0x04
37 #define MAX7359_REG_KEYREP 0x05
38 #define MAX7359_REG_SLEEP 0x06
43 #define MAX7359_CFG_SLEEP (1 << 7)
44 #define MAX7359_CFG_INTERRUPT (1 << 5)
45 #define MAX7359_CFG_KEY_RELEASE (1 << 3)
46 #define MAX7359_CFG_WAKEUP (1 << 1)
47 #define MAX7359_CFG_TIMEOUT (1 << 0)
52 #define MAX7359_AUTOSLEEP_8192 0x01
53 #define MAX7359_AUTOSLEEP_4096 0x02
54 #define MAX7359_AUTOSLEEP_2048 0x03
55 #define MAX7359_AUTOSLEEP_1024 0x04
56 #define MAX7359_AUTOSLEEP_512 0x05
57 #define MAX7359_AUTOSLEEP_256 0x06
72 dev_err(&client->
dev,
"%s: reg 0x%x, val 0x%x, err %d\n",
73 __func__, reg, val, ret);
82 dev_err(&client->
dev,
"%s: reg 0x%x, err %d\n",
90 struct input_dev *input_dev = keypad->
input_dev;
95 unsigned int row =
KEY_ROW(key);
96 unsigned int col =
KEY_COL(key);
111 struct input_dev *input_dev = keypad->
input_dev;
116 col = (val >> 3) & 0x7;
117 release = val & 0x40;
122 "key[%d:%d] %s\n", row, col, release ?
"release" :
"press");
125 input_report_key(input_dev, keypad->
keycodes[code], !release);
126 input_sync(input_dev);
136 static inline void max7359_fall_deepsleep(
struct i2c_client *client)
145 static inline void max7359_take_catnap(
struct i2c_client *client)
150 static int max7359_open(
struct input_dev *
dev)
154 max7359_take_catnap(keypad->
client);
159 static void max7359_close(
struct input_dev *
dev)
163 max7359_fall_deepsleep(keypad->
client);
166 static void max7359_initialize(
struct i2c_client *client)
179 max7359_fall_deepsleep(client);
187 struct input_dev *input_dev;
192 dev_err(&client->
dev,
"The irq number should not be zero\n");
199 dev_err(&client->
dev,
"failed to detect device\n");
203 dev_dbg(&client->
dev,
"keys FIFO is 0x%02x\n", ret);
206 input_dev = input_allocate_device();
207 if (!keypad || !input_dev) {
208 dev_err(&client->
dev,
"failed to allocate memory\n");
210 goto failed_free_mem;
216 input_dev->name = client->
name;
217 input_dev->id.bustype =
BUS_I2C;
218 input_dev->open = max7359_open;
219 input_dev->close = max7359_close;
220 input_dev->dev.parent = &client->
dev;
223 input_dev->keycodesize =
sizeof(keypad->
keycodes[0]);
225 input_dev->keycode = keypad->
keycodes;
228 input_set_drvdata(input_dev, keypad);
230 max7359_build_keycode(keypad, keymap_data);
234 client->
name, keypad);
236 dev_err(&client->
dev,
"failed to register interrupt\n");
237 goto failed_free_mem;
241 error = input_register_device(input_dev);
243 dev_err(&client->
dev,
"failed to register input device\n");
244 goto failed_free_irq;
248 max7359_initialize(client);
250 i2c_set_clientdata(client, keypad);
258 input_free_device(input_dev);
268 input_unregister_device(keypad->
input_dev);
275 static int max7359_suspend(
struct device *
dev)
279 max7359_fall_deepsleep(client);
281 if (device_may_wakeup(&client->
dev))
282 enable_irq_wake(client->
irq);
287 static int max7359_resume(
struct device *dev)
291 if (device_may_wakeup(&client->
dev))
292 disable_irq_wake(client->
irq);
295 max7359_take_catnap(client);
309 static struct i2c_driver max7359_i2c_driver = {
314 .probe = max7359_probe,
316 .id_table = max7359_ids,