10 #include <linux/module.h>
15 #include <linux/errno.h>
18 #include <linux/input.h>
19 #include <linux/i2c.h>
21 #include <linux/slab.h>
26 #define ADP5589_5_ID 0x00
27 #define ADP5589_5_INT_STATUS 0x01
28 #define ADP5589_5_STATUS 0x02
29 #define ADP5589_5_FIFO_1 0x03
30 #define ADP5589_5_FIFO_2 0x04
31 #define ADP5589_5_FIFO_3 0x05
32 #define ADP5589_5_FIFO_4 0x06
33 #define ADP5589_5_FIFO_5 0x07
34 #define ADP5589_5_FIFO_6 0x08
35 #define ADP5589_5_FIFO_7 0x09
36 #define ADP5589_5_FIFO_8 0x0A
37 #define ADP5589_5_FIFO_9 0x0B
38 #define ADP5589_5_FIFO_10 0x0C
39 #define ADP5589_5_FIFO_11 0x0D
40 #define ADP5589_5_FIFO_12 0x0E
41 #define ADP5589_5_FIFO_13 0x0F
42 #define ADP5589_5_FIFO_14 0x10
43 #define ADP5589_5_FIFO_15 0x11
44 #define ADP5589_5_FIFO_16 0x12
45 #define ADP5589_5_GPI_INT_STAT_A 0x13
46 #define ADP5589_5_GPI_INT_STAT_B 0x14
49 #define ADP5589_GPI_INT_STAT_C 0x15
50 #define ADP5589_GPI_STATUS_A 0x16
51 #define ADP5589_GPI_STATUS_B 0x17
52 #define ADP5589_GPI_STATUS_C 0x18
53 #define ADP5589_RPULL_CONFIG_A 0x19
54 #define ADP5589_RPULL_CONFIG_B 0x1A
55 #define ADP5589_RPULL_CONFIG_C 0x1B
56 #define ADP5589_RPULL_CONFIG_D 0x1C
57 #define ADP5589_RPULL_CONFIG_E 0x1D
58 #define ADP5589_GPI_INT_LEVEL_A 0x1E
59 #define ADP5589_GPI_INT_LEVEL_B 0x1F
60 #define ADP5589_GPI_INT_LEVEL_C 0x20
61 #define ADP5589_GPI_EVENT_EN_A 0x21
62 #define ADP5589_GPI_EVENT_EN_B 0x22
63 #define ADP5589_GPI_EVENT_EN_C 0x23
64 #define ADP5589_GPI_INTERRUPT_EN_A 0x24
65 #define ADP5589_GPI_INTERRUPT_EN_B 0x25
66 #define ADP5589_GPI_INTERRUPT_EN_C 0x26
67 #define ADP5589_DEBOUNCE_DIS_A 0x27
68 #define ADP5589_DEBOUNCE_DIS_B 0x28
69 #define ADP5589_DEBOUNCE_DIS_C 0x29
70 #define ADP5589_GPO_DATA_OUT_A 0x2A
71 #define ADP5589_GPO_DATA_OUT_B 0x2B
72 #define ADP5589_GPO_DATA_OUT_C 0x2C
73 #define ADP5589_GPO_OUT_MODE_A 0x2D
74 #define ADP5589_GPO_OUT_MODE_B 0x2E
75 #define ADP5589_GPO_OUT_MODE_C 0x2F
76 #define ADP5589_GPIO_DIRECTION_A 0x30
77 #define ADP5589_GPIO_DIRECTION_B 0x31
78 #define ADP5589_GPIO_DIRECTION_C 0x32
79 #define ADP5589_UNLOCK1 0x33
80 #define ADP5589_UNLOCK2 0x34
81 #define ADP5589_EXT_LOCK_EVENT 0x35
82 #define ADP5589_UNLOCK_TIMERS 0x36
83 #define ADP5589_LOCK_CFG 0x37
84 #define ADP5589_RESET1_EVENT_A 0x38
85 #define ADP5589_RESET1_EVENT_B 0x39
86 #define ADP5589_RESET1_EVENT_C 0x3A
87 #define ADP5589_RESET2_EVENT_A 0x3B
88 #define ADP5589_RESET2_EVENT_B 0x3C
89 #define ADP5589_RESET_CFG 0x3D
90 #define ADP5589_PWM_OFFT_LOW 0x3E
91 #define ADP5589_PWM_OFFT_HIGH 0x3F
92 #define ADP5589_PWM_ONT_LOW 0x40
93 #define ADP5589_PWM_ONT_HIGH 0x41
94 #define ADP5589_PWM_CFG 0x42
95 #define ADP5589_CLOCK_DIV_CFG 0x43
96 #define ADP5589_LOGIC_1_CFG 0x44
97 #define ADP5589_LOGIC_2_CFG 0x45
98 #define ADP5589_LOGIC_FF_CFG 0x46
99 #define ADP5589_LOGIC_INT_EVENT_EN 0x47
100 #define ADP5589_POLL_PTIME_CFG 0x48
101 #define ADP5589_PIN_CONFIG_A 0x49
102 #define ADP5589_PIN_CONFIG_B 0x4A
103 #define ADP5589_PIN_CONFIG_C 0x4B
104 #define ADP5589_PIN_CONFIG_D 0x4C
105 #define ADP5589_GENERAL_CFG 0x4D
106 #define ADP5589_INT_EN 0x4E
109 #define ADP5585_GPI_STATUS_A 0x15
110 #define ADP5585_GPI_STATUS_B 0x16
111 #define ADP5585_RPULL_CONFIG_A 0x17
112 #define ADP5585_RPULL_CONFIG_B 0x18
113 #define ADP5585_RPULL_CONFIG_C 0x19
114 #define ADP5585_RPULL_CONFIG_D 0x1A
115 #define ADP5585_GPI_INT_LEVEL_A 0x1B
116 #define ADP5585_GPI_INT_LEVEL_B 0x1C
117 #define ADP5585_GPI_EVENT_EN_A 0x1D
118 #define ADP5585_GPI_EVENT_EN_B 0x1E
119 #define ADP5585_GPI_INTERRUPT_EN_A 0x1F
120 #define ADP5585_GPI_INTERRUPT_EN_B 0x20
121 #define ADP5585_DEBOUNCE_DIS_A 0x21
122 #define ADP5585_DEBOUNCE_DIS_B 0x22
123 #define ADP5585_GPO_DATA_OUT_A 0x23
124 #define ADP5585_GPO_DATA_OUT_B 0x24
125 #define ADP5585_GPO_OUT_MODE_A 0x25
126 #define ADP5585_GPO_OUT_MODE_B 0x26
127 #define ADP5585_GPIO_DIRECTION_A 0x27
128 #define ADP5585_GPIO_DIRECTION_B 0x28
129 #define ADP5585_RESET1_EVENT_A 0x29
130 #define ADP5585_RESET1_EVENT_B 0x2A
131 #define ADP5585_RESET1_EVENT_C 0x2B
132 #define ADP5585_RESET2_EVENT_A 0x2C
133 #define ADP5585_RESET2_EVENT_B 0x2D
134 #define ADP5585_RESET_CFG 0x2E
135 #define ADP5585_PWM_OFFT_LOW 0x2F
136 #define ADP5585_PWM_OFFT_HIGH 0x30
137 #define ADP5585_PWM_ONT_LOW 0x31
138 #define ADP5585_PWM_ONT_HIGH 0x32
139 #define ADP5585_PWM_CFG 0x33
140 #define ADP5585_LOGIC_CFG 0x34
141 #define ADP5585_LOGIC_FF_CFG 0x35
142 #define ADP5585_LOGIC_INT_EVENT_EN 0x36
143 #define ADP5585_POLL_PTIME_CFG 0x37
144 #define ADP5585_PIN_CONFIG_A 0x38
145 #define ADP5585_PIN_CONFIG_B 0x39
146 #define ADP5585_PIN_CONFIG_D 0x3A
147 #define ADP5585_GENERAL_CFG 0x3B
148 #define ADP5585_INT_EN 0x3C
151 #define ADP5589_5_DEVICE_ID_MASK 0xF
152 #define ADP5589_5_MAN_ID_MASK 0xF
153 #define ADP5589_5_MAN_ID_SHIFT 4
154 #define ADP5589_5_MAN_ID 0x02
157 #define OSC_EN (1 << 7)
158 #define CORE_CLK(x) (((x) & 0x3) << 5)
159 #define LCK_TRK_LOGIC (1 << 4)
160 #define LCK_TRK_GPI (1 << 3)
161 #define INT_CFG (1 << 1)
162 #define RST_CFG (1 << 0)
165 #define LOGIC2_IEN (1 << 5)
166 #define LOGIC1_IEN (1 << 4)
167 #define LOCK_IEN (1 << 3)
168 #define OVRFLOW_IEN (1 << 2)
169 #define GPI_IEN (1 << 1)
170 #define EVENT_IEN (1 << 0)
173 #define LOGIC2_INT (1 << 5)
174 #define LOGIC1_INT (1 << 4)
175 #define LOCK_INT (1 << 3)
176 #define OVRFLOW_INT (1 << 2)
177 #define GPI_INT (1 << 1)
178 #define EVENT_INT (1 << 0)
181 #define LOGIC2_STAT (1 << 7)
182 #define LOGIC1_STAT (1 << 6)
183 #define LOCK_STAT (1 << 5)
187 #define C4_EXTEND_CFG (1 << 6)
188 #define R4_EXTEND_CFG (1 << 5)
191 #define LOCK_EN (1 << 0)
193 #define PTIME_MASK 0x3
194 #define LTIME_MASK 0x3
197 #define KEY_EV_PRESSED (1 << 7)
198 #define KEY_EV_MASK (0x7F)
200 #define KEYP_MAX_EVENT 16
201 #define ADP5589_MAXGPIO 19
202 #define ADP5585_MAXGPIO 11
240 #ifdef CONFIG_GPIOLIB
244 struct mutex gpio_lock;
257 static unsigned char adp5589_bank(
unsigned char offset)
262 static unsigned char adp5589_bit(
unsigned char offset)
264 return 1
u << (offset & 0x7);
267 static unsigned char adp5589_reg(
unsigned char reg)
287 .bank = adp5589_bank,
294 static unsigned char adp5585_bank(
unsigned char offset)
299 static unsigned char adp5585_bit(
unsigned char offset)
305 static const unsigned char adp5585_reg_lut[] = {
348 static unsigned char adp5585_reg(
unsigned char reg)
350 return adp5585_reg_lut[
reg];
368 .bank = adp5585_bank,
388 #ifdef CONFIG_GPIOLIB
389 static int adp5589_gpio_get_value(
struct gpio_chip *
chip,
unsigned off)
392 unsigned int bank = kpad->
var->bank(kpad->gpiomap[off]);
393 unsigned int bit = kpad->
var->bit(kpad->gpiomap[off]);
395 return !!(adp5589_read(kpad->
client,
400 static void adp5589_gpio_set_value(
struct gpio_chip *chip,
401 unsigned off,
int val)
404 unsigned int bank = kpad->
var->bank(kpad->gpiomap[off]);
405 unsigned int bit = kpad->
var->bit(kpad->gpiomap[off]);
410 kpad->dat_out[bank] |=
bit;
412 kpad->dat_out[bank] &= ~bit;
415 bank, kpad->dat_out[bank]);
420 static int adp5589_gpio_direction_input(
struct gpio_chip *chip,
unsigned off)
423 unsigned int bank = kpad->
var->bank(kpad->gpiomap[off]);
424 unsigned int bit = kpad->
var->bit(kpad->gpiomap[off]);
429 kpad->dir[bank] &= ~bit;
430 ret = adp5589_write(kpad->
client,
439 static int adp5589_gpio_direction_output(
struct gpio_chip *chip,
440 unsigned off,
int val)
443 unsigned int bank = kpad->
var->bank(kpad->gpiomap[off]);
444 unsigned int bit = kpad->
var->bit(kpad->gpiomap[off]);
449 kpad->dir[bank] |=
bit;
452 kpad->dat_out[bank] |=
bit;
454 kpad->dat_out[bank] &= ~bit;
457 + bank, kpad->dat_out[bank]);
458 ret |= adp5589_write(kpad->
client,
474 memset(pin_used,
false,
sizeof(pin_used));
476 for (i = 0; i < kpad->
var->maxgpio; i++)
481 pin_used[kpad->
gpimap[i].pin - kpad->
var->gpi_pin_base] =
true;
487 pin_used[kpad->
var->c4_extend_cfg] =
true;
492 for (i = 0; i < kpad->
var->maxgpio; i++)
494 kpad->gpiomap[n_unused++] =
i;
509 kpad->gc.ngpio = adp5589_build_gpiomap(kpad, pdata);
510 if (kpad->gc.ngpio == 0) {
511 dev_info(dev,
"No unused gpios left to export\n");
515 kpad->export_gpio =
true;
517 kpad->gc.direction_input = adp5589_gpio_direction_input;
518 kpad->gc.direction_output = adp5589_gpio_direction_output;
519 kpad->gc.get = adp5589_gpio_get_value;
520 kpad->gc.set = adp5589_gpio_set_value;
521 kpad->gc.can_sleep = 1;
524 kpad->gc.label = kpad->
client->name;
531 dev_err(dev,
"gpiochip_add failed, err: %d\n", error);
535 for (i = 0; i <= kpad->
var->bank(kpad->
var->maxgpio); i++) {
536 kpad->dat_out[
i] = adp5589_read(kpad->
client, kpad->
var->reg(
538 kpad->dir[
i] = adp5589_read(kpad->
client, kpad->
var->reg(
542 if (gpio_data->
setup) {
544 kpad->gc.base, kpad->gc.ngpio,
547 dev_warn(dev,
"setup failed, %d\n", error);
560 if (!kpad->export_gpio)
565 kpad->gc.base, kpad->gc.ngpio,
568 dev_warn(dev,
"teardown failed %d\n", error);
573 dev_warn(dev,
"gpiochip_remove failed %d\n", error);
576 static inline int adp5589_gpio_add(
struct adp5589_kpad *kpad)
581 static inline void adp5589_gpio_remove(
struct adp5589_kpad *kpad)
586 static void adp5589_report_switches(
struct adp5589_kpad *kpad,
587 int key,
int key_val)
592 if (key_val == kpad->
gpimap[i].pin) {
593 input_report_switch(kpad->
input,
601 static void adp5589_report_events(
struct adp5589_kpad *kpad,
int ev_cnt)
605 for (i = 0; i < ev_cnt; i++) {
609 if (key_val >= kpad->
var->gpi_pin_base &&
610 key_val <= kpad->var->gpi_pin_end) {
611 adp5589_report_switches(kpad, key, key_val);
613 input_report_key(kpad->
input,
629 dev_err(&client->
dev,
"Event Overflow Error\n");
634 adp5589_report_events(kpad, ev_cnt);
635 input_sync(kpad->
input);
649 for (i = 0; i < kpad->
var->keymapsize; i++)
653 dev_err(&kpad->
client->dev,
"RESET/UNLOCK key not in keycode map\n");
662 client->
dev.platform_data;
663 u8 (*reg) (
u8) = kpad->
var->reg;
664 unsigned char evt_mode1 = 0, evt_mode2 = 0, evt_mode3 = 0;
665 unsigned char pull_mask = 0;
672 kpad->
var->col_mask);
694 if (pin <= kpad->var->gpi_pin_row_end) {
695 evt_mode1 |= (1 << (pin - kpad->
var->gpi_pin_row_base));
698 ((1 << (pin - kpad->
var->gpi_pin_col_base)) & 0xFF);
700 evt_mode3 |= ((1 << (pin -
701 kpad->
var->gpi_pin_col_base)) >> 8);
711 ret |= adp5589_write(client,
718 dev_warn(&client->
dev,
"Conflicting pull resistor config\n");
720 for (i = 0; i <= kpad->
var->max_row_num; i++) {
721 unsigned val = 0, bit = (1 <<
i);
731 pull_mask |= val << (2 * (i & 0x3));
733 if (i == 3 || i == kpad->
var->max_row_num) {
735 + (i >> 2), pull_mask);
740 for (i = 0; i <= kpad->
var->max_col_num; i++) {
741 unsigned val = 0, bit = 1 << (i + kpad->
var->col_shift);
751 pull_mask |= val << (2 * (i & 0x3));
753 if (i == 3 || i == kpad->
var->max_col_num) {
754 ret |= adp5589_write(client,
756 (i >> 2), pull_mask);
763 adp5589_get_evcode(kpad,
766 adp5589_get_evcode(kpad,
769 adp5589_get_evcode(kpad,
776 adp5589_get_evcode(kpad,
779 adp5589_get_evcode(kpad,
796 & kpad->
var->col_mask);
825 int gpi_stat_tmp, pin_loc;
827 int gpi_stat1 = adp5589_read(kpad->
client,
829 int gpi_stat2 = adp5589_read(kpad->
client,
835 unsigned short pin = kpad->
gpimap[
i].pin;
837 if (pin <= kpad->var->gpi_pin_row_end) {
838 gpi_stat_tmp = gpi_stat1;
839 pin_loc = pin - kpad->
var->gpi_pin_row_base;
840 }
else if ((pin - kpad->
var->gpi_pin_col_base) < 8) {
841 gpi_stat_tmp = gpi_stat2;
842 pin_loc = pin - kpad->
var->gpi_pin_col_base;
844 gpi_stat_tmp = gpi_stat3;
845 pin_loc = pin - kpad->
var->gpi_pin_col_base - 8;
848 if (gpi_stat_tmp < 0) {
850 "Can't read GPIO_DAT_STAT switch %d, default to OFF\n",
855 input_report_switch(kpad->
input,
857 !(gpi_stat_tmp & (1 << pin_loc)));
860 input_sync(kpad->
input);
868 client->
dev.platform_data;
869 struct input_dev *
input;
874 if (!i2c_check_functionality(client->
adapter,
876 dev_err(&client->
dev,
"SMBUS Byte Data not Supported\n");
889 switch (id->driver_data) {
894 kpad->
var = &const_adp5585;
897 kpad->
var = &const_adp5589;
904 dev_err(&client->
dev,
"no rows, cols or keymap from pdata\n");
910 dev_err(&client->
dev,
"invalid keymapsize\n");
916 dev_err(&client->
dev,
"invalid gpimap from pdata\n");
922 dev_err(&client->
dev,
"invalid gpimapsize\n");
928 unsigned short pin = pdata->
gpimap[
i].pin;
930 if (pin < kpad->var->gpi_pin_base ||
931 pin > kpad->
var->gpi_pin_end) {
932 dev_err(&client->
dev,
"invalid gpi pin data\n");
937 if ((1 << (pin - kpad->
var->gpi_pin_row_base)) &
939 dev_err(&client->
dev,
"invalid gpi row/col data\n");
951 input = input_allocate_device();
968 input->name = client->
name;
969 input->phys =
"adp5589-keys/input0";
970 input->dev.parent = &client->
dev;
972 input_set_drvdata(input, kpad);
975 input->id.vendor = 0x0001;
976 input->id.product = 0x0001;
977 input->id.version = revid;
979 input->keycodesize =
sizeof(kpad->
keycode[0]);
981 input->keycode = kpad->
keycode;
995 for (i = 0; i < input->keycodemax; i++)
1004 error = input_register_device(input);
1006 dev_err(&client->
dev,
"unable to register input device\n");
1007 goto err_free_input;
1012 client->
dev.driver->name, kpad);
1018 error = adp5589_setup(kpad);
1023 adp5589_report_switch_state(kpad);
1025 error = adp5589_gpio_add(kpad);
1030 i2c_set_clientdata(client, kpad);
1032 dev_info(&client->
dev,
"Rev.%d keypad, irq %d\n", revid, client->
irq);
1038 input_unregister_device(input);
1041 input_free_device(input);
1050 struct adp5589_kpad *kpad = i2c_get_clientdata(client);
1054 input_unregister_device(kpad->
input);
1055 adp5589_gpio_remove(kpad);
1061 #ifdef CONFIG_PM_SLEEP
1062 static int adp5589_suspend(
struct device *dev)
1069 if (device_may_wakeup(&client->
dev))
1070 enable_irq_wake(client->
irq);
1075 static int adp5589_resume(
struct device *dev)
1080 if (device_may_wakeup(&client->
dev))
1081 disable_irq_wake(client->
irq);
1102 .name = KBUILD_MODNAME,
1104 .pm = &adp5589_dev_pm_ops,
1106 .probe = adp5589_probe,
1108 .id_table = adp5589_id,