1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * File: drivers/input/keyboard/adp5588_keys.c
4 * Description: keypad driver for ADP5588 and ADP5587
5 * I2C QWERTY Keypad and IO Expander
6 * Bugs: Enter bugs at http://blackfin.uclinux.org/
8 * Copyright (C) 2008-2010 Analog Devices Inc.
11 #include <linux/bits.h>
12 #include <linux/delay.h>
13 #include <linux/errno.h>
14 #include <linux/gpio/consumer.h>
15 #include <linux/gpio/driver.h>
16 #include <linux/i2c.h>
17 #include <linux/input.h>
18 #include <linux/input/matrix_keypad.h>
19 #include <linux/interrupt.h>
20 #include <linux/irq.h>
21 #include <linux/ktime.h>
22 #include <linux/module.h>
23 #include <linux/mod_devicetable.h>
24 #include <linux/pinctrl/pinconf-generic.h>
25 #include <linux/platform_device.h>
27 #include <linux/regulator/consumer.h>
28 #include <linux/slab.h>
29 #include <linux/timekeeping.h>
31 #define DEV_ID 0x00 /* Device ID */
32 #define CFG 0x01 /* Configuration Register1 */
33 #define INT_STAT 0x02 /* Interrupt Status Register */
34 #define KEY_LCK_EC_STAT 0x03 /* Key Lock and Event Counter Register */
35 #define KEY_EVENTA 0x04 /* Key Event Register A */
36 #define KEY_EVENTB 0x05 /* Key Event Register B */
37 #define KEY_EVENTC 0x06 /* Key Event Register C */
38 #define KEY_EVENTD 0x07 /* Key Event Register D */
39 #define KEY_EVENTE 0x08 /* Key Event Register E */
40 #define KEY_EVENTF 0x09 /* Key Event Register F */
41 #define KEY_EVENTG 0x0A /* Key Event Register G */
42 #define KEY_EVENTH 0x0B /* Key Event Register H */
43 #define KEY_EVENTI 0x0C /* Key Event Register I */
44 #define KEY_EVENTJ 0x0D /* Key Event Register J */
45 #define KP_LCK_TMR 0x0E /* Keypad Lock1 to Lock2 Timer */
46 #define UNLOCK1 0x0F /* Unlock Key1 */
47 #define UNLOCK2 0x10 /* Unlock Key2 */
48 #define GPIO_INT_STAT1 0x11 /* GPIO Interrupt Status */
49 #define GPIO_INT_STAT2 0x12 /* GPIO Interrupt Status */
50 #define GPIO_INT_STAT3 0x13 /* GPIO Interrupt Status */
51 #define GPIO_DAT_STAT1 0x14 /* GPIO Data Status, Read twice to clear */
52 #define GPIO_DAT_STAT2 0x15 /* GPIO Data Status, Read twice to clear */
53 #define GPIO_DAT_STAT3 0x16 /* GPIO Data Status, Read twice to clear */
54 #define GPIO_DAT_OUT1 0x17 /* GPIO DATA OUT */
55 #define GPIO_DAT_OUT2 0x18 /* GPIO DATA OUT */
56 #define GPIO_DAT_OUT3 0x19 /* GPIO DATA OUT */
57 #define GPIO_INT_EN1 0x1A /* GPIO Interrupt Enable */
58 #define GPIO_INT_EN2 0x1B /* GPIO Interrupt Enable */
59 #define GPIO_INT_EN3 0x1C /* GPIO Interrupt Enable */
60 #define KP_GPIO1 0x1D /* Keypad or GPIO Selection */
61 #define KP_GPIO2 0x1E /* Keypad or GPIO Selection */
62 #define KP_GPIO3 0x1F /* Keypad or GPIO Selection */
63 #define GPI_EM1 0x20 /* GPI Event Mode 1 */
64 #define GPI_EM2 0x21 /* GPI Event Mode 2 */
65 #define GPI_EM3 0x22 /* GPI Event Mode 3 */
66 #define GPIO_DIR1 0x23 /* GPIO Data Direction */
67 #define GPIO_DIR2 0x24 /* GPIO Data Direction */
68 #define GPIO_DIR3 0x25 /* GPIO Data Direction */
69 #define GPIO_INT_LVL1 0x26 /* GPIO Edge/Level Detect */
70 #define GPIO_INT_LVL2 0x27 /* GPIO Edge/Level Detect */
71 #define GPIO_INT_LVL3 0x28 /* GPIO Edge/Level Detect */
72 #define DEBOUNCE_DIS1 0x29 /* Debounce Disable */
73 #define DEBOUNCE_DIS2 0x2A /* Debounce Disable */
74 #define DEBOUNCE_DIS3 0x2B /* Debounce Disable */
75 #define GPIO_PULL1 0x2C /* GPIO Pull Disable */
76 #define GPIO_PULL2 0x2D /* GPIO Pull Disable */
77 #define GPIO_PULL3 0x2E /* GPIO Pull Disable */
78 #define CMP_CFG_STAT 0x30 /* Comparator Configuration and Status Register */
79 #define CMP_CONFG_SENS1 0x31 /* Sensor1 Comparator Configuration Register */
80 #define CMP_CONFG_SENS2 0x32 /* L2 Light Sensor Reference Level, Output Falling for Sensor 1 */
81 #define CMP1_LVL2_TRIP 0x33 /* L2 Light Sensor Hysteresis (Active when Output Rising) for Sensor 1 */
82 #define CMP1_LVL2_HYS 0x34 /* L3 Light Sensor Reference Level, Output Falling For Sensor 1 */
83 #define CMP1_LVL3_TRIP 0x35 /* L3 Light Sensor Hysteresis (Active when Output Rising) For Sensor 1 */
84 #define CMP1_LVL3_HYS 0x36 /* Sensor 2 Comparator Configuration Register */
85 #define CMP2_LVL2_TRIP 0x37 /* L2 Light Sensor Reference Level, Output Falling for Sensor 2 */
86 #define CMP2_LVL2_HYS 0x38 /* L2 Light Sensor Hysteresis (Active when Output Rising) for Sensor 2 */
87 #define CMP2_LVL3_TRIP 0x39 /* L3 Light Sensor Reference Level, Output Falling For Sensor 2 */
88 #define CMP2_LVL3_HYS 0x3A /* L3 Light Sensor Hysteresis (Active when Output Rising) For Sensor 2 */
89 #define CMP1_ADC_DAT_R1 0x3B /* Comparator 1 ADC data Register1 */
90 #define CMP1_ADC_DAT_R2 0x3C /* Comparator 1 ADC data Register2 */
91 #define CMP2_ADC_DAT_R1 0x3D /* Comparator 2 ADC data Register1 */
92 #define CMP2_ADC_DAT_R2 0x3E /* Comparator 2 ADC data Register2 */
94 #define ADP5588_DEVICE_ID_MASK 0xF
96 /* Configuration Register1 */
97 #define ADP5588_AUTO_INC BIT(7)
98 #define ADP5588_GPIEM_CFG BIT(6)
99 #define ADP5588_OVR_FLOW_M BIT(5)
100 #define ADP5588_INT_CFG BIT(4)
101 #define ADP5588_OVR_FLOW_IEN BIT(3)
102 #define ADP5588_K_LCK_IM BIT(2)
103 #define ADP5588_GPI_IEN BIT(1)
104 #define ADP5588_KE_IEN BIT(0)
106 /* Interrupt Status Register */
107 #define ADP5588_CMP2_INT BIT(5)
108 #define ADP5588_CMP1_INT BIT(4)
109 #define ADP5588_OVR_FLOW_INT BIT(3)
110 #define ADP5588_K_LCK_INT BIT(2)
111 #define ADP5588_GPI_INT BIT(1)
112 #define ADP5588_KE_INT BIT(0)
114 /* Key Lock and Event Counter Register */
115 #define ADP5588_K_LCK_EN BIT(6)
116 #define ADP5588_LCK21 0x30
117 #define ADP5588_KEC GENMASK(3, 0)
119 #define ADP5588_MAXGPIO 18
120 #define ADP5588_BANK(offs) ((offs) >> 3)
121 #define ADP5588_BIT(offs) (1u << ((offs) & 0x7))
123 /* Put one of these structures in i2c_board_info platform_data */
126 * 128 so it fits matrix-keymap maximum number of keys when the full
127 * 10cols * 8rows are used.
129 #define ADP5588_KEYMAPSIZE 128
131 #define GPI_PIN_ROW0 97
132 #define GPI_PIN_ROW1 98
133 #define GPI_PIN_ROW2 99
134 #define GPI_PIN_ROW3 100
135 #define GPI_PIN_ROW4 101
136 #define GPI_PIN_ROW5 102
137 #define GPI_PIN_ROW6 103
138 #define GPI_PIN_ROW7 104
139 #define GPI_PIN_COL0 105
140 #define GPI_PIN_COL1 106
141 #define GPI_PIN_COL2 107
142 #define GPI_PIN_COL3 108
143 #define GPI_PIN_COL4 109
144 #define GPI_PIN_COL5 110
145 #define GPI_PIN_COL6 111
146 #define GPI_PIN_COL7 112
147 #define GPI_PIN_COL8 113
148 #define GPI_PIN_COL9 114
150 #define GPI_PIN_ROW_BASE GPI_PIN_ROW0
151 #define GPI_PIN_ROW_END GPI_PIN_ROW7
152 #define GPI_PIN_COL_BASE GPI_PIN_COL0
153 #define GPI_PIN_COL_END GPI_PIN_COL9
155 #define GPI_PIN_BASE GPI_PIN_ROW_BASE
156 #define GPI_PIN_END GPI_PIN_COL_END
158 #define ADP5588_ROWS_MAX (GPI_PIN_ROW7 - GPI_PIN_ROW0 + 1)
159 #define ADP5588_COLS_MAX (GPI_PIN_COL9 - GPI_PIN_COL0 + 1)
161 #define ADP5588_GPIMAPSIZE_MAX (GPI_PIN_END - GPI_PIN_BASE + 1)
163 /* Key Event Register xy */
164 #define KEY_EV_PRESSED BIT(7)
165 #define KEY_EV_MASK GENMASK(6, 0)
167 #define KP_SEL(x) (BIT(x) - 1) /* 2^x-1 */
169 #define KEYP_MAX_EVENT 10
172 * Early pre 4.0 Silicon required to delay readout by at least 25ms,
173 * since the Event Counter Register updated 25ms after the interrupt
176 #define WA_DELAYED_READOUT_REVID(rev) ((rev) < 4)
177 #define WA_DELAYED_READOUT_TIME 25
179 #define ADP5588_INVALID_HWIRQ (~0UL)
181 struct adp5588_kpad
{
182 struct i2c_client
*client
;
183 struct input_dev
*input
;
192 unsigned short keycode
[ADP5588_KEYMAPSIZE
];
193 unsigned char gpiomap
[ADP5588_MAXGPIO
];
195 struct mutex gpio_lock
; /* Protect cached dir, dat_out */
203 static int adp5588_read(struct i2c_client
*client
, u8 reg
)
205 int ret
= i2c_smbus_read_byte_data(client
, reg
);
208 dev_err(&client
->dev
, "Read Error\n");
213 static int adp5588_write(struct i2c_client
*client
, u8 reg
, u8 val
)
215 return i2c_smbus_write_byte_data(client
, reg
, val
);
218 static int adp5588_gpio_get_value(struct gpio_chip
*chip
, unsigned int off
)
220 struct adp5588_kpad
*kpad
= gpiochip_get_data(chip
);
221 unsigned int bank
= ADP5588_BANK(kpad
->gpiomap
[off
]);
222 unsigned int bit
= ADP5588_BIT(kpad
->gpiomap
[off
]);
225 guard(mutex
)(&kpad
->gpio_lock
);
227 if (kpad
->dir
[bank
] & bit
)
228 val
= kpad
->dat_out
[bank
];
230 val
= adp5588_read(kpad
->client
, GPIO_DAT_STAT1
+ bank
);
232 return !!(val
& bit
);
235 static void adp5588_gpio_set_value(struct gpio_chip
*chip
,
236 unsigned int off
, int val
)
238 struct adp5588_kpad
*kpad
= gpiochip_get_data(chip
);
239 unsigned int bank
= ADP5588_BANK(kpad
->gpiomap
[off
]);
240 unsigned int bit
= ADP5588_BIT(kpad
->gpiomap
[off
]);
242 guard(mutex
)(&kpad
->gpio_lock
);
245 kpad
->dat_out
[bank
] |= bit
;
247 kpad
->dat_out
[bank
] &= ~bit
;
249 adp5588_write(kpad
->client
, GPIO_DAT_OUT1
+ bank
, kpad
->dat_out
[bank
]);
252 static int adp5588_gpio_set_config(struct gpio_chip
*chip
, unsigned int off
,
253 unsigned long config
)
255 struct adp5588_kpad
*kpad
= gpiochip_get_data(chip
);
256 unsigned int bank
= ADP5588_BANK(kpad
->gpiomap
[off
]);
257 unsigned int bit
= ADP5588_BIT(kpad
->gpiomap
[off
]);
260 switch (pinconf_to_config_param(config
)) {
261 case PIN_CONFIG_BIAS_PULL_UP
:
262 pull_disable
= false;
264 case PIN_CONFIG_BIAS_DISABLE
:
271 guard(mutex
)(&kpad
->gpio_lock
);
274 kpad
->pull_dis
[bank
] |= bit
;
276 kpad
->pull_dis
[bank
] &= bit
;
278 return adp5588_write(kpad
->client
, GPIO_PULL1
+ bank
,
279 kpad
->pull_dis
[bank
]);
282 static int adp5588_gpio_direction_input(struct gpio_chip
*chip
, unsigned int off
)
284 struct adp5588_kpad
*kpad
= gpiochip_get_data(chip
);
285 unsigned int bank
= ADP5588_BANK(kpad
->gpiomap
[off
]);
286 unsigned int bit
= ADP5588_BIT(kpad
->gpiomap
[off
]);
288 guard(mutex
)(&kpad
->gpio_lock
);
290 kpad
->dir
[bank
] &= ~bit
;
291 return adp5588_write(kpad
->client
, GPIO_DIR1
+ bank
, kpad
->dir
[bank
]);
294 static int adp5588_gpio_direction_output(struct gpio_chip
*chip
,
295 unsigned int off
, int val
)
297 struct adp5588_kpad
*kpad
= gpiochip_get_data(chip
);
298 unsigned int bank
= ADP5588_BANK(kpad
->gpiomap
[off
]);
299 unsigned int bit
= ADP5588_BIT(kpad
->gpiomap
[off
]);
302 guard(mutex
)(&kpad
->gpio_lock
);
304 kpad
->dir
[bank
] |= bit
;
307 kpad
->dat_out
[bank
] |= bit
;
309 kpad
->dat_out
[bank
] &= ~bit
;
311 error
= adp5588_write(kpad
->client
, GPIO_DAT_OUT1
+ bank
,
312 kpad
->dat_out
[bank
]);
316 error
= adp5588_write(kpad
->client
, GPIO_DIR1
+ bank
, kpad
->dir
[bank
]);
323 static int adp5588_build_gpiomap(struct adp5588_kpad
*kpad
)
325 bool pin_used
[ADP5588_MAXGPIO
];
329 memset(pin_used
, 0, sizeof(pin_used
));
331 for (i
= 0; i
< kpad
->rows
; i
++)
334 for (i
= 0; i
< kpad
->cols
; i
++)
335 pin_used
[i
+ GPI_PIN_COL_BASE
- GPI_PIN_BASE
] = true;
337 for (i
= 0; i
< ADP5588_MAXGPIO
; i
++)
339 kpad
->gpiomap
[n_unused
++] = i
;
344 static void adp5588_irq_bus_lock(struct irq_data
*d
)
346 struct gpio_chip
*gc
= irq_data_get_irq_chip_data(d
);
347 struct adp5588_kpad
*kpad
= gpiochip_get_data(gc
);
349 mutex_lock(&kpad
->gpio_lock
);
352 static void adp5588_irq_bus_sync_unlock(struct irq_data
*d
)
354 struct gpio_chip
*gc
= irq_data_get_irq_chip_data(d
);
355 struct adp5588_kpad
*kpad
= gpiochip_get_data(gc
);
358 for (i
= 0; i
<= ADP5588_BANK(ADP5588_MAXGPIO
); i
++) {
359 if (kpad
->int_en
[i
] ^ kpad
->irq_mask
[i
]) {
360 kpad
->int_en
[i
] = kpad
->irq_mask
[i
];
361 adp5588_write(kpad
->client
, GPI_EM1
+ i
, kpad
->int_en
[i
]);
365 mutex_unlock(&kpad
->gpio_lock
);
368 static void adp5588_irq_mask(struct irq_data
*d
)
370 struct gpio_chip
*gc
= irq_data_get_irq_chip_data(d
);
371 struct adp5588_kpad
*kpad
= gpiochip_get_data(gc
);
372 irq_hw_number_t hwirq
= irqd_to_hwirq(d
);
373 unsigned long real_irq
= kpad
->gpiomap
[hwirq
];
375 kpad
->irq_mask
[ADP5588_BANK(real_irq
)] &= ~ADP5588_BIT(real_irq
);
376 gpiochip_disable_irq(gc
, hwirq
);
379 static void adp5588_irq_unmask(struct irq_data
*d
)
381 struct gpio_chip
*gc
= irq_data_get_irq_chip_data(d
);
382 struct adp5588_kpad
*kpad
= gpiochip_get_data(gc
);
383 irq_hw_number_t hwirq
= irqd_to_hwirq(d
);
384 unsigned long real_irq
= kpad
->gpiomap
[hwirq
];
386 gpiochip_enable_irq(gc
, hwirq
);
387 kpad
->irq_mask
[ADP5588_BANK(real_irq
)] |= ADP5588_BIT(real_irq
);
390 static int adp5588_irq_set_type(struct irq_data
*d
, unsigned int type
)
392 if (!(type
& IRQ_TYPE_EDGE_BOTH
))
395 irq_set_handler_locked(d
, handle_edge_irq
);
400 static const struct irq_chip adp5588_irq_chip
= {
402 .irq_mask
= adp5588_irq_mask
,
403 .irq_unmask
= adp5588_irq_unmask
,
404 .irq_bus_lock
= adp5588_irq_bus_lock
,
405 .irq_bus_sync_unlock
= adp5588_irq_bus_sync_unlock
,
406 .irq_set_type
= adp5588_irq_set_type
,
407 .flags
= IRQCHIP_SKIP_SET_WAKE
| IRQCHIP_IMMUTABLE
,
408 GPIOCHIP_IRQ_RESOURCE_HELPERS
,
411 static int adp5588_gpio_add(struct adp5588_kpad
*kpad
)
413 struct device
*dev
= &kpad
->client
->dev
;
414 struct gpio_irq_chip
*girq
;
417 kpad
->gc
.ngpio
= adp5588_build_gpiomap(kpad
);
418 if (kpad
->gc
.ngpio
== 0) {
419 dev_info(dev
, "No unused gpios left to export\n");
423 kpad
->gc
.parent
= &kpad
->client
->dev
;
424 kpad
->gc
.direction_input
= adp5588_gpio_direction_input
;
425 kpad
->gc
.direction_output
= adp5588_gpio_direction_output
;
426 kpad
->gc
.get
= adp5588_gpio_get_value
;
427 kpad
->gc
.set
= adp5588_gpio_set_value
;
428 kpad
->gc
.set_config
= adp5588_gpio_set_config
;
429 kpad
->gc
.can_sleep
= 1;
432 kpad
->gc
.label
= kpad
->client
->name
;
433 kpad
->gc
.owner
= THIS_MODULE
;
435 if (device_property_present(dev
, "interrupt-controller")) {
436 if (!kpad
->client
->irq
) {
437 dev_err(dev
, "Unable to serve as interrupt controller without interrupt");
441 girq
= &kpad
->gc
.irq
;
442 gpio_irq_chip_set_chip(girq
, &adp5588_irq_chip
);
443 girq
->handler
= handle_bad_irq
;
444 girq
->threaded
= true;
447 mutex_init(&kpad
->gpio_lock
);
449 error
= devm_gpiochip_add_data(dev
, &kpad
->gc
, kpad
);
451 dev_err(dev
, "gpiochip_add failed: %d\n", error
);
455 for (i
= 0; i
<= ADP5588_BANK(ADP5588_MAXGPIO
); i
++) {
456 kpad
->dat_out
[i
] = adp5588_read(kpad
->client
,
458 kpad
->dir
[i
] = adp5588_read(kpad
->client
, GPIO_DIR1
+ i
);
459 kpad
->pull_dis
[i
] = adp5588_read(kpad
->client
, GPIO_PULL1
+ i
);
465 static unsigned long adp5588_gpiomap_get_hwirq(struct device
*dev
,
466 const u8
*map
, unsigned int gpio
,
471 for (hwirq
= 0; hwirq
< ngpios
; hwirq
++)
472 if (map
[hwirq
] == gpio
)
475 /* should never happen */
476 dev_warn_ratelimited(dev
, "could not find the hwirq for gpio(%u)\n", gpio
);
478 return ADP5588_INVALID_HWIRQ
;
481 static void adp5588_gpio_irq_handle(struct adp5588_kpad
*kpad
, int key_val
,
484 unsigned int irq
, gpio
= key_val
- GPI_PIN_BASE
, irq_type
;
485 struct i2c_client
*client
= kpad
->client
;
486 struct irq_data
*irqd
;
489 hwirq
= adp5588_gpiomap_get_hwirq(&client
->dev
, kpad
->gpiomap
,
490 gpio
, kpad
->gc
.ngpio
);
491 if (hwirq
== ADP5588_INVALID_HWIRQ
) {
492 dev_err(&client
->dev
, "Could not get hwirq for key(%u)\n", key_val
);
496 irq
= irq_find_mapping(kpad
->gc
.irq
.domain
, hwirq
);
500 irqd
= irq_get_irq_data(irq
);
502 dev_err(&client
->dev
, "Could not get irq(%u) data\n", irq
);
506 irq_type
= irqd_get_trigger_type(irqd
);
509 * Default is active low which means key_press is asserted on
512 if ((irq_type
& IRQ_TYPE_EDGE_RISING
&& !key_press
) ||
513 (irq_type
& IRQ_TYPE_EDGE_FALLING
&& key_press
))
514 handle_nested_irq(irq
);
517 static void adp5588_report_events(struct adp5588_kpad
*kpad
, int ev_cnt
)
521 for (i
= 0; i
< ev_cnt
; i
++) {
522 int key
= adp5588_read(kpad
->client
, KEY_EVENTA
+ i
);
523 int key_val
= key
& KEY_EV_MASK
;
524 int key_press
= key
& KEY_EV_PRESSED
;
526 if (key_val
>= GPI_PIN_BASE
&& key_val
<= GPI_PIN_END
) {
527 /* gpio line used as IRQ source */
528 adp5588_gpio_irq_handle(kpad
, key_val
, key_press
);
530 int row
= (key_val
- 1) / ADP5588_COLS_MAX
;
531 int col
= (key_val
- 1) % ADP5588_COLS_MAX
;
532 int code
= MATRIX_SCAN_CODE(row
, col
, kpad
->row_shift
);
534 dev_dbg_ratelimited(&kpad
->client
->dev
,
535 "report key(%d) r(%d) c(%d) code(%d)\n",
536 key_val
, row
, col
, kpad
->keycode
[code
]);
538 input_report_key(kpad
->input
,
539 kpad
->keycode
[code
], key_press
);
544 static irqreturn_t
adp5588_hard_irq(int irq
, void *handle
)
546 struct adp5588_kpad
*kpad
= handle
;
548 kpad
->irq_time
= ktime_get();
550 return IRQ_WAKE_THREAD
;
553 static irqreturn_t
adp5588_thread_irq(int irq
, void *handle
)
555 struct adp5588_kpad
*kpad
= handle
;
556 struct i2c_client
*client
= kpad
->client
;
557 ktime_t target_time
, now
;
562 * Readout needs to wait for at least 25ms after the notification
566 target_time
= ktime_add_ms(kpad
->irq_time
, kpad
->delay
);
568 if (ktime_before(now
, target_time
)) {
569 delay
= ktime_to_us(ktime_sub(target_time
, now
));
570 usleep_range(delay
, delay
+ 1000);
574 status
= adp5588_read(client
, INT_STAT
);
576 if (status
& ADP5588_OVR_FLOW_INT
) /* Unlikely and should never happen */
577 dev_err(&client
->dev
, "Event Overflow Error\n");
579 if (status
& ADP5588_KE_INT
) {
580 ev_cnt
= adp5588_read(client
, KEY_LCK_EC_STAT
) & ADP5588_KEC
;
582 adp5588_report_events(kpad
, ev_cnt
);
583 input_sync(kpad
->input
);
587 adp5588_write(client
, INT_STAT
, status
); /* Status is W1C */
592 static int adp5588_setup(struct adp5588_kpad
*kpad
)
594 struct i2c_client
*client
= kpad
->client
;
597 ret
= adp5588_write(client
, KP_GPIO1
, KP_SEL(kpad
->rows
));
601 ret
= adp5588_write(client
, KP_GPIO2
, KP_SEL(kpad
->cols
) & 0xFF);
605 ret
= adp5588_write(client
, KP_GPIO3
, KP_SEL(kpad
->cols
) >> 8);
609 for (i
= 0; i
< kpad
->nkeys_unlock
; i
++) {
610 ret
= adp5588_write(client
, UNLOCK1
+ i
, kpad
->unlock_keys
[i
]);
615 if (kpad
->nkeys_unlock
) {
616 ret
= adp5588_write(client
, KEY_LCK_EC_STAT
, ADP5588_K_LCK_EN
);
621 for (i
= 0; i
< KEYP_MAX_EVENT
; i
++) {
622 ret
= adp5588_read(client
, KEY_EVENTA
);
627 ret
= adp5588_write(client
, INT_STAT
,
628 ADP5588_CMP2_INT
| ADP5588_CMP1_INT
|
629 ADP5588_OVR_FLOW_INT
| ADP5588_K_LCK_INT
|
630 ADP5588_GPI_INT
| ADP5588_KE_INT
); /* Status is W1C */
634 return adp5588_write(client
, CFG
, ADP5588_INT_CFG
|
635 ADP5588_OVR_FLOW_IEN
| ADP5588_KE_IEN
);
638 static int adp5588_fw_parse(struct adp5588_kpad
*kpad
)
640 struct i2c_client
*client
= kpad
->client
;
644 * Check if the device is to be operated purely in GPIO mode. To do
645 * so, check that no keypad rows or columns have been specified,
646 * since all GPINS should be configured as GPIO.
648 if (!device_property_present(&client
->dev
, "keypad,num-rows") &&
649 !device_property_present(&client
->dev
, "keypad,num-columns")) {
650 /* If purely GPIO, skip keypad setup */
651 kpad
->gpio_only
= true;
655 ret
= matrix_keypad_parse_properties(&client
->dev
, &kpad
->rows
,
660 if (kpad
->rows
> ADP5588_ROWS_MAX
|| kpad
->cols
> ADP5588_COLS_MAX
) {
661 dev_err(&client
->dev
, "Invalid nr of rows(%u) or cols(%u)\n",
662 kpad
->rows
, kpad
->cols
);
666 ret
= matrix_keypad_build_keymap(NULL
, NULL
, kpad
->rows
, kpad
->cols
,
667 kpad
->keycode
, kpad
->input
);
671 kpad
->row_shift
= get_count_order(kpad
->cols
);
673 if (device_property_read_bool(&client
->dev
, "autorepeat"))
674 __set_bit(EV_REP
, kpad
->input
->evbit
);
676 kpad
->nkeys_unlock
= device_property_count_u32(&client
->dev
,
678 if (kpad
->nkeys_unlock
<= 0) {
679 /* so that we don't end up enabling key lock */
680 kpad
->nkeys_unlock
= 0;
684 if (kpad
->nkeys_unlock
> ARRAY_SIZE(kpad
->unlock_keys
)) {
685 dev_err(&client
->dev
, "number of unlock keys(%d) > (%zu)\n",
686 kpad
->nkeys_unlock
, ARRAY_SIZE(kpad
->unlock_keys
));
690 ret
= device_property_read_u32_array(&client
->dev
, "adi,unlock-keys",
696 for (i
= 0; i
< kpad
->nkeys_unlock
; i
++) {
698 * Even though it should be possible (as stated in the datasheet)
699 * to use GPIs (which are part of the keys event) as unlock keys,
700 * it was not working at all and was leading to overflow events
701 * at some point. Hence, for now, let's just allow keys which are
702 * part of keypad matrix to be used and if a reliable way of
703 * using GPIs is found, this condition can be removed/lightened.
705 if (kpad
->unlock_keys
[i
] >= kpad
->cols
* kpad
->rows
) {
706 dev_err(&client
->dev
, "Invalid unlock key(%d)\n",
707 kpad
->unlock_keys
[i
]);
712 * Firmware properties keys start from 0 but on the device they
715 kpad
->unlock_keys
[i
] += 1;
721 static int adp5588_probe(struct i2c_client
*client
)
723 struct adp5588_kpad
*kpad
;
724 struct input_dev
*input
;
725 struct gpio_desc
*gpio
;
730 if (!i2c_check_functionality(client
->adapter
,
731 I2C_FUNC_SMBUS_BYTE_DATA
)) {
732 dev_err(&client
->dev
, "SMBUS Byte Data not Supported\n");
736 kpad
= devm_kzalloc(&client
->dev
, sizeof(*kpad
), GFP_KERNEL
);
740 input
= devm_input_allocate_device(&client
->dev
);
744 kpad
->client
= client
;
747 error
= adp5588_fw_parse(kpad
);
751 error
= devm_regulator_get_enable(&client
->dev
, "vcc");
755 gpio
= devm_gpiod_get_optional(&client
->dev
, "reset", GPIOD_OUT_HIGH
);
757 return PTR_ERR(gpio
);
761 gpiod_set_value_cansleep(gpio
, 0);
765 ret
= adp5588_read(client
, DEV_ID
);
769 revid
= ret
& ADP5588_DEVICE_ID_MASK
;
770 if (WA_DELAYED_READOUT_REVID(revid
))
771 kpad
->delay
= msecs_to_jiffies(WA_DELAYED_READOUT_TIME
);
773 input
->name
= client
->name
;
774 input
->phys
= "adp5588-keys/input0";
776 input_set_drvdata(input
, kpad
);
778 input
->id
.bustype
= BUS_I2C
;
779 input
->id
.vendor
= 0x0001;
780 input
->id
.product
= 0x0001;
781 input
->id
.version
= revid
;
783 error
= input_register_device(input
);
785 dev_err(&client
->dev
, "unable to register input device: %d\n",
790 error
= adp5588_setup(kpad
);
794 error
= adp5588_gpio_add(kpad
);
799 error
= devm_request_threaded_irq(&client
->dev
, client
->irq
,
800 adp5588_hard_irq
, adp5588_thread_irq
,
801 IRQF_TRIGGER_FALLING
| IRQF_ONESHOT
,
802 client
->dev
.driver
->name
, kpad
);
804 dev_err(&client
->dev
, "failed to request irq %d: %d\n",
810 dev_info(&client
->dev
, "Rev.%d controller\n", revid
);
814 static void adp5588_remove(struct i2c_client
*client
)
816 adp5588_write(client
, CFG
, 0);
818 /* all resources will be freed by devm */
821 static int adp5588_suspend(struct device
*dev
)
823 struct i2c_client
*client
= to_i2c_client(dev
);
826 disable_irq(client
->irq
);
831 static int adp5588_resume(struct device
*dev
)
833 struct i2c_client
*client
= to_i2c_client(dev
);
836 enable_irq(client
->irq
);
841 static DEFINE_SIMPLE_DEV_PM_OPS(adp5588_dev_pm_ops
, adp5588_suspend
, adp5588_resume
);
843 static const struct i2c_device_id adp5588_id
[] = {
848 MODULE_DEVICE_TABLE(i2c
, adp5588_id
);
850 static const struct of_device_id adp5588_of_match
[] = {
851 { .compatible
= "adi,adp5588" },
852 { .compatible
= "adi,adp5587" },
855 MODULE_DEVICE_TABLE(of
, adp5588_of_match
);
857 static struct i2c_driver adp5588_driver
= {
859 .name
= KBUILD_MODNAME
,
860 .of_match_table
= adp5588_of_match
,
861 .pm
= pm_sleep_ptr(&adp5588_dev_pm_ops
),
863 .probe
= adp5588_probe
,
864 .remove
= adp5588_remove
,
865 .id_table
= adp5588_id
,
868 module_i2c_driver(adp5588_driver
);
870 MODULE_LICENSE("GPL");
871 MODULE_AUTHOR("Michael Hennerich <hennerich@blackfin.uclinux.org>");
872 MODULE_DESCRIPTION("ADP5588/87 Keypad driver");