2 * Input driver for Microchip CAP11xx based capacitive touch sensors
4 * (c) 2014 Daniel Mack <linux@zonque.org>
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation.
11 #include <linux/kernel.h>
12 #include <linux/module.h>
13 #include <linux/interrupt.h>
14 #include <linux/input.h>
15 #include <linux/leds.h>
16 #include <linux/of_irq.h>
17 #include <linux/regmap.h>
18 #include <linux/i2c.h>
19 #include <linux/gpio/consumer.h>
21 #define CAP11XX_REG_MAIN_CONTROL 0x00
22 #define CAP11XX_REG_MAIN_CONTROL_GAIN_SHIFT (6)
23 #define CAP11XX_REG_MAIN_CONTROL_GAIN_MASK (0xc0)
24 #define CAP11XX_REG_MAIN_CONTROL_DLSEEP BIT(4)
25 #define CAP11XX_REG_GENERAL_STATUS 0x02
26 #define CAP11XX_REG_SENSOR_INPUT 0x03
27 #define CAP11XX_REG_NOISE_FLAG_STATUS 0x0a
28 #define CAP11XX_REG_SENOR_DELTA(X) (0x10 + (X))
29 #define CAP11XX_REG_SENSITIVITY_CONTROL 0x1f
30 #define CAP11XX_REG_CONFIG 0x20
31 #define CAP11XX_REG_SENSOR_ENABLE 0x21
32 #define CAP11XX_REG_SENSOR_CONFIG 0x22
33 #define CAP11XX_REG_SENSOR_CONFIG2 0x23
34 #define CAP11XX_REG_SAMPLING_CONFIG 0x24
35 #define CAP11XX_REG_CALIBRATION 0x26
36 #define CAP11XX_REG_INT_ENABLE 0x27
37 #define CAP11XX_REG_REPEAT_RATE 0x28
38 #define CAP11XX_REG_MT_CONFIG 0x2a
39 #define CAP11XX_REG_MT_PATTERN_CONFIG 0x2b
40 #define CAP11XX_REG_MT_PATTERN 0x2d
41 #define CAP11XX_REG_RECALIB_CONFIG 0x2f
42 #define CAP11XX_REG_SENSOR_THRESH(X) (0x30 + (X))
43 #define CAP11XX_REG_SENSOR_NOISE_THRESH 0x38
44 #define CAP11XX_REG_STANDBY_CHANNEL 0x40
45 #define CAP11XX_REG_STANDBY_CONFIG 0x41
46 #define CAP11XX_REG_STANDBY_SENSITIVITY 0x42
47 #define CAP11XX_REG_STANDBY_THRESH 0x43
48 #define CAP11XX_REG_CONFIG2 0x44
49 #define CAP11XX_REG_CONFIG2_ALT_POL BIT(6)
50 #define CAP11XX_REG_SENSOR_BASE_CNT(X) (0x50 + (X))
51 #define CAP11XX_REG_LED_POLARITY 0x73
52 #define CAP11XX_REG_LED_OUTPUT_CONTROL 0x74
54 #define CAP11XX_REG_LED_DUTY_CYCLE_1 0x90
55 #define CAP11XX_REG_LED_DUTY_CYCLE_2 0x91
56 #define CAP11XX_REG_LED_DUTY_CYCLE_3 0x92
57 #define CAP11XX_REG_LED_DUTY_CYCLE_4 0x93
59 #define CAP11XX_REG_LED_DUTY_MIN_MASK (0x0f)
60 #define CAP11XX_REG_LED_DUTY_MIN_MASK_SHIFT (0)
61 #define CAP11XX_REG_LED_DUTY_MAX_MASK (0xf0)
62 #define CAP11XX_REG_LED_DUTY_MAX_MASK_SHIFT (4)
63 #define CAP11XX_REG_LED_DUTY_MAX_VALUE (15)
65 #define CAP11XX_REG_SENSOR_CALIB (0xb1 + (X))
66 #define CAP11XX_REG_SENSOR_CALIB_LSB1 0xb9
67 #define CAP11XX_REG_SENSOR_CALIB_LSB2 0xba
68 #define CAP11XX_REG_PRODUCT_ID 0xfd
69 #define CAP11XX_REG_MANUFACTURER_ID 0xfe
70 #define CAP11XX_REG_REVISION 0xff
72 #define CAP11XX_MANUFACTURER_ID 0x5d
74 #ifdef CONFIG_LEDS_CLASS
76 struct cap11xx_priv
*priv
;
77 struct led_classdev cdev
;
78 struct work_struct work
;
80 enum led_brightness new_brightness
;
85 struct regmap
*regmap
;
86 struct input_dev
*idev
;
88 struct cap11xx_led
*leds
;
95 struct cap11xx_hw_model
{
97 unsigned int num_channels
;
98 unsigned int num_leds
;
107 static const struct cap11xx_hw_model cap11xx_devices
[] = {
108 [CAP1106
] = { .product_id
= 0x55, .num_channels
= 6, .num_leds
= 0 },
109 [CAP1126
] = { .product_id
= 0x53, .num_channels
= 6, .num_leds
= 2 },
110 [CAP1188
] = { .product_id
= 0x50, .num_channels
= 8, .num_leds
= 8 },
113 static const struct reg_default cap11xx_reg_defaults
[] = {
114 { CAP11XX_REG_MAIN_CONTROL
, 0x00 },
115 { CAP11XX_REG_GENERAL_STATUS
, 0x00 },
116 { CAP11XX_REG_SENSOR_INPUT
, 0x00 },
117 { CAP11XX_REG_NOISE_FLAG_STATUS
, 0x00 },
118 { CAP11XX_REG_SENSITIVITY_CONTROL
, 0x2f },
119 { CAP11XX_REG_CONFIG
, 0x20 },
120 { CAP11XX_REG_SENSOR_ENABLE
, 0x3f },
121 { CAP11XX_REG_SENSOR_CONFIG
, 0xa4 },
122 { CAP11XX_REG_SENSOR_CONFIG2
, 0x07 },
123 { CAP11XX_REG_SAMPLING_CONFIG
, 0x39 },
124 { CAP11XX_REG_CALIBRATION
, 0x00 },
125 { CAP11XX_REG_INT_ENABLE
, 0x3f },
126 { CAP11XX_REG_REPEAT_RATE
, 0x3f },
127 { CAP11XX_REG_MT_CONFIG
, 0x80 },
128 { CAP11XX_REG_MT_PATTERN_CONFIG
, 0x00 },
129 { CAP11XX_REG_MT_PATTERN
, 0x3f },
130 { CAP11XX_REG_RECALIB_CONFIG
, 0x8a },
131 { CAP11XX_REG_SENSOR_THRESH(0), 0x40 },
132 { CAP11XX_REG_SENSOR_THRESH(1), 0x40 },
133 { CAP11XX_REG_SENSOR_THRESH(2), 0x40 },
134 { CAP11XX_REG_SENSOR_THRESH(3), 0x40 },
135 { CAP11XX_REG_SENSOR_THRESH(4), 0x40 },
136 { CAP11XX_REG_SENSOR_THRESH(5), 0x40 },
137 { CAP11XX_REG_SENSOR_NOISE_THRESH
, 0x01 },
138 { CAP11XX_REG_STANDBY_CHANNEL
, 0x00 },
139 { CAP11XX_REG_STANDBY_CONFIG
, 0x39 },
140 { CAP11XX_REG_STANDBY_SENSITIVITY
, 0x02 },
141 { CAP11XX_REG_STANDBY_THRESH
, 0x40 },
142 { CAP11XX_REG_CONFIG2
, 0x40 },
143 { CAP11XX_REG_LED_POLARITY
, 0x00 },
144 { CAP11XX_REG_SENSOR_CALIB_LSB1
, 0x00 },
145 { CAP11XX_REG_SENSOR_CALIB_LSB2
, 0x00 },
148 static bool cap11xx_volatile_reg(struct device
*dev
, unsigned int reg
)
151 case CAP11XX_REG_MAIN_CONTROL
:
152 case CAP11XX_REG_SENSOR_INPUT
:
153 case CAP11XX_REG_SENOR_DELTA(0):
154 case CAP11XX_REG_SENOR_DELTA(1):
155 case CAP11XX_REG_SENOR_DELTA(2):
156 case CAP11XX_REG_SENOR_DELTA(3):
157 case CAP11XX_REG_SENOR_DELTA(4):
158 case CAP11XX_REG_SENOR_DELTA(5):
159 case CAP11XX_REG_PRODUCT_ID
:
160 case CAP11XX_REG_MANUFACTURER_ID
:
161 case CAP11XX_REG_REVISION
:
168 static const struct regmap_config cap11xx_regmap_config
= {
172 .max_register
= CAP11XX_REG_REVISION
,
173 .reg_defaults
= cap11xx_reg_defaults
,
175 .num_reg_defaults
= ARRAY_SIZE(cap11xx_reg_defaults
),
176 .cache_type
= REGCACHE_RBTREE
,
177 .volatile_reg
= cap11xx_volatile_reg
,
180 static irqreturn_t
cap11xx_thread_func(int irq_num
, void *data
)
182 struct cap11xx_priv
*priv
= data
;
187 * Deassert interrupt. This needs to be done before reading the status
188 * registers, which will not carry valid values otherwise.
190 ret
= regmap_update_bits(priv
->regmap
, CAP11XX_REG_MAIN_CONTROL
, 1, 0);
194 ret
= regmap_read(priv
->regmap
, CAP11XX_REG_SENSOR_INPUT
, &status
);
198 for (i
= 0; i
< priv
->idev
->keycodemax
; i
++)
199 input_report_key(priv
->idev
, priv
->keycodes
[i
],
202 input_sync(priv
->idev
);
208 static int cap11xx_set_sleep(struct cap11xx_priv
*priv
, bool sleep
)
211 * DLSEEP mode will turn off all LEDS, prevent this
213 if (IS_ENABLED(CONFIG_LEDS_CLASS
) && priv
->num_leds
)
216 return regmap_update_bits(priv
->regmap
, CAP11XX_REG_MAIN_CONTROL
,
217 CAP11XX_REG_MAIN_CONTROL_DLSEEP
,
218 sleep
? CAP11XX_REG_MAIN_CONTROL_DLSEEP
: 0);
221 static int cap11xx_input_open(struct input_dev
*idev
)
223 struct cap11xx_priv
*priv
= input_get_drvdata(idev
);
225 return cap11xx_set_sleep(priv
, false);
228 static void cap11xx_input_close(struct input_dev
*idev
)
230 struct cap11xx_priv
*priv
= input_get_drvdata(idev
);
232 cap11xx_set_sleep(priv
, true);
235 #ifdef CONFIG_LEDS_CLASS
236 static void cap11xx_led_work(struct work_struct
*work
)
238 struct cap11xx_led
*led
= container_of(work
, struct cap11xx_led
, work
);
239 struct cap11xx_priv
*priv
= led
->priv
;
240 int value
= led
->new_brightness
;
243 * All LEDs share the same duty cycle as this is a HW limitation.
244 * Brightness levels per LED are either 0 (OFF) and 1 (ON).
246 regmap_update_bits(priv
->regmap
, CAP11XX_REG_LED_OUTPUT_CONTROL
,
247 BIT(led
->reg
), value
? BIT(led
->reg
) : 0);
250 static void cap11xx_led_set(struct led_classdev
*cdev
,
251 enum led_brightness value
)
253 struct cap11xx_led
*led
= container_of(cdev
, struct cap11xx_led
, cdev
);
255 if (led
->new_brightness
== value
)
258 led
->new_brightness
= value
;
259 schedule_work(&led
->work
);
262 static int cap11xx_init_leds(struct device
*dev
,
263 struct cap11xx_priv
*priv
, int num_leds
)
265 struct device_node
*node
= dev
->of_node
, *child
;
266 struct cap11xx_led
*led
;
267 int cnt
= of_get_child_count(node
);
270 if (!num_leds
|| !cnt
)
276 led
= devm_kcalloc(dev
, cnt
, sizeof(struct cap11xx_led
), GFP_KERNEL
);
282 error
= regmap_update_bits(priv
->regmap
,
283 CAP11XX_REG_LED_OUTPUT_CONTROL
, 0xff, 0);
287 error
= regmap_update_bits(priv
->regmap
, CAP11XX_REG_LED_DUTY_CYCLE_4
,
288 CAP11XX_REG_LED_DUTY_MAX_MASK
,
289 CAP11XX_REG_LED_DUTY_MAX_VALUE
<<
290 CAP11XX_REG_LED_DUTY_MAX_MASK_SHIFT
);
294 for_each_child_of_node(node
, child
) {
298 of_get_property(child
, "label", NULL
) ? : child
->name
;
299 led
->cdev
.default_trigger
=
300 of_get_property(child
, "linux,default-trigger", NULL
);
302 led
->cdev
.brightness_set
= cap11xx_led_set
;
303 led
->cdev
.max_brightness
= 1;
304 led
->cdev
.brightness
= LED_OFF
;
306 error
= of_property_read_u32(child
, "reg", ®
);
307 if (error
!= 0 || reg
>= num_leds
) {
315 INIT_WORK(&led
->work
, cap11xx_led_work
);
317 error
= devm_led_classdev_register(dev
, &led
->cdev
);
330 static int cap11xx_init_leds(struct device
*dev
,
331 struct cap11xx_priv
*priv
, int num_leds
)
337 static int cap11xx_i2c_probe(struct i2c_client
*i2c_client
,
338 const struct i2c_device_id
*id
)
340 struct device
*dev
= &i2c_client
->dev
;
341 struct cap11xx_priv
*priv
;
342 struct device_node
*node
;
343 const struct cap11xx_hw_model
*cap
;
344 int i
, error
, irq
, gain
= 0;
345 unsigned int val
, rev
;
348 if (id
->driver_data
>= ARRAY_SIZE(cap11xx_devices
)) {
349 dev_err(dev
, "Invalid device ID %lu\n", id
->driver_data
);
353 cap
= &cap11xx_devices
[id
->driver_data
];
354 if (!cap
|| !cap
->num_channels
) {
355 dev_err(dev
, "Invalid device configuration\n");
359 priv
= devm_kzalloc(dev
,
361 cap
->num_channels
* sizeof(priv
->keycodes
[0]),
366 priv
->regmap
= devm_regmap_init_i2c(i2c_client
, &cap11xx_regmap_config
);
367 if (IS_ERR(priv
->regmap
))
368 return PTR_ERR(priv
->regmap
);
370 error
= regmap_read(priv
->regmap
, CAP11XX_REG_PRODUCT_ID
, &val
);
374 if (val
!= cap
->product_id
) {
375 dev_err(dev
, "Product ID: Got 0x%02x, expected 0x%02x\n",
376 val
, cap
->product_id
);
380 error
= regmap_read(priv
->regmap
, CAP11XX_REG_MANUFACTURER_ID
, &val
);
384 if (val
!= CAP11XX_MANUFACTURER_ID
) {
385 dev_err(dev
, "Manufacturer ID: Got 0x%02x, expected 0x%02x\n",
386 val
, CAP11XX_MANUFACTURER_ID
);
390 error
= regmap_read(priv
->regmap
, CAP11XX_REG_REVISION
, &rev
);
394 dev_info(dev
, "CAP11XX detected, revision 0x%02x\n", rev
);
395 i2c_set_clientdata(i2c_client
, priv
);
398 if (!of_property_read_u32(node
, "microchip,sensor-gain", &gain32
)) {
399 if (is_power_of_2(gain32
) && gain32
<= 8)
400 gain
= ilog2(gain32
);
402 dev_err(dev
, "Invalid sensor-gain value %d\n", gain32
);
405 if (of_property_read_bool(node
, "microchip,irq-active-high")) {
406 error
= regmap_update_bits(priv
->regmap
, CAP11XX_REG_CONFIG2
,
407 CAP11XX_REG_CONFIG2_ALT_POL
, 0);
412 /* Provide some useful defaults */
413 for (i
= 0; i
< cap
->num_channels
; i
++)
414 priv
->keycodes
[i
] = KEY_A
+ i
;
416 of_property_read_u32_array(node
, "linux,keycodes",
417 priv
->keycodes
, cap
->num_channels
);
419 error
= regmap_update_bits(priv
->regmap
, CAP11XX_REG_MAIN_CONTROL
,
420 CAP11XX_REG_MAIN_CONTROL_GAIN_MASK
,
421 gain
<< CAP11XX_REG_MAIN_CONTROL_GAIN_SHIFT
);
425 /* Disable autorepeat. The Linux input system has its own handling. */
426 error
= regmap_write(priv
->regmap
, CAP11XX_REG_REPEAT_RATE
, 0);
430 priv
->idev
= devm_input_allocate_device(dev
);
434 priv
->idev
->name
= "CAP11XX capacitive touch sensor";
435 priv
->idev
->id
.bustype
= BUS_I2C
;
436 priv
->idev
->evbit
[0] = BIT_MASK(EV_KEY
);
438 if (of_property_read_bool(node
, "autorepeat"))
439 __set_bit(EV_REP
, priv
->idev
->evbit
);
441 for (i
= 0; i
< cap
->num_channels
; i
++)
442 __set_bit(priv
->keycodes
[i
], priv
->idev
->keybit
);
444 __clear_bit(KEY_RESERVED
, priv
->idev
->keybit
);
446 priv
->idev
->keycode
= priv
->keycodes
;
447 priv
->idev
->keycodesize
= sizeof(priv
->keycodes
[0]);
448 priv
->idev
->keycodemax
= cap
->num_channels
;
450 priv
->idev
->id
.vendor
= CAP11XX_MANUFACTURER_ID
;
451 priv
->idev
->id
.product
= cap
->product_id
;
452 priv
->idev
->id
.version
= rev
;
454 priv
->idev
->open
= cap11xx_input_open
;
455 priv
->idev
->close
= cap11xx_input_close
;
457 error
= cap11xx_init_leds(dev
, priv
, cap
->num_leds
);
461 input_set_drvdata(priv
->idev
, priv
);
464 * Put the device in deep sleep mode for now.
465 * ->open() will bring it back once the it is actually needed.
467 cap11xx_set_sleep(priv
, true);
469 error
= input_register_device(priv
->idev
);
473 irq
= irq_of_parse_and_map(node
, 0);
475 dev_err(dev
, "Unable to parse or map IRQ\n");
479 error
= devm_request_threaded_irq(dev
, irq
, NULL
, cap11xx_thread_func
,
480 IRQF_ONESHOT
, dev_name(dev
), priv
);
487 static const struct of_device_id cap11xx_dt_ids
[] = {
488 { .compatible
= "microchip,cap1106", },
489 { .compatible
= "microchip,cap1126", },
490 { .compatible
= "microchip,cap1188", },
493 MODULE_DEVICE_TABLE(of
, cap11xx_dt_ids
);
495 static const struct i2c_device_id cap11xx_i2c_ids
[] = {
496 { "cap1106", CAP1106
},
497 { "cap1126", CAP1126
},
498 { "cap1188", CAP1188
},
501 MODULE_DEVICE_TABLE(i2c
, cap11xx_i2c_ids
);
503 static struct i2c_driver cap11xx_i2c_driver
= {
506 .of_match_table
= cap11xx_dt_ids
,
508 .id_table
= cap11xx_i2c_ids
,
509 .probe
= cap11xx_i2c_probe
,
512 module_i2c_driver(cap11xx_i2c_driver
);
514 MODULE_DESCRIPTION("Microchip CAP11XX driver");
515 MODULE_AUTHOR("Daniel Mack <linux@zonque.org>");
516 MODULE_LICENSE("GPL v2");