1 // SPDX-License-Identifier: GPL-2.0
3 * ST1232 Touchscreen Controller Driver
5 * Copyright (C) 2010 Renesas Solutions Corp.
6 * Tony SIM <chinyeow.sim.xt@renesas.com>
9 * - android.git.kernel.org: projects/kernel/common.git: synaptics_i2c_rmi.c
10 * Copyright (C) 2007 Google, Inc.
13 #include <linux/delay.h>
14 #include <linux/gpio/consumer.h>
15 #include <linux/i2c.h>
16 #include <linux/input.h>
17 #include <linux/input/mt.h>
18 #include <linux/input/touchscreen.h>
19 #include <linux/interrupt.h>
20 #include <linux/module.h>
22 #include <linux/pm_qos.h>
23 #include <linux/slab.h>
24 #include <linux/types.h>
26 #define ST1232_TS_NAME "st1232-ts"
27 #define ST1633_TS_NAME "st1633-ts"
29 #define REG_STATUS 0x01 /* Device Status | Error Code */
31 #define STATUS_NORMAL 0x00
32 #define STATUS_INIT 0x01
33 #define STATUS_ERROR 0x02
34 #define STATUS_AUTO_TUNING 0x03
35 #define STATUS_IDLE 0x04
36 #define STATUS_POWER_DOWN 0x05
38 #define ERROR_NONE 0x00
39 #define ERROR_INVALID_ADDRESS 0x10
40 #define ERROR_INVALID_VALUE 0x20
41 #define ERROR_INVALID_PLATFORM 0x30
43 #define REG_XY_RESOLUTION 0x04
44 #define REG_XY_COORDINATES 0x12
45 #define ST_TS_MAX_FINGERS 10
53 struct st1232_ts_data
{
54 struct i2c_client
*client
;
55 struct input_dev
*input_dev
;
56 struct touchscreen_properties prop
;
57 struct dev_pm_qos_request low_latency_req
;
58 struct gpio_desc
*reset_gpio
;
59 const struct st_chip_info
*chip_info
;
64 static int st1232_ts_read_data(struct st1232_ts_data
*ts
, u8 reg
,
67 struct i2c_client
*client
= ts
->client
;
68 struct i2c_msg msg
[] = {
76 .flags
= I2C_M_RD
| I2C_M_DMA_SAFE
,
83 ret
= i2c_transfer(client
->adapter
, msg
, ARRAY_SIZE(msg
));
84 if (ret
!= ARRAY_SIZE(msg
))
85 return ret
< 0 ? ret
: -EIO
;
90 static int st1232_ts_wait_ready(struct st1232_ts_data
*ts
)
95 for (retries
= 100; retries
; retries
--) {
96 error
= st1232_ts_read_data(ts
, REG_STATUS
, 1);
98 switch (ts
->read_buf
[0]) {
99 case STATUS_NORMAL
| ERROR_NONE
:
100 case STATUS_IDLE
| ERROR_NONE
:
105 usleep_range(1000, 2000);
111 static int st1232_ts_read_resolution(struct st1232_ts_data
*ts
, u16
*max_x
,
117 /* select resolution register */
118 error
= st1232_ts_read_data(ts
, REG_XY_RESOLUTION
, 3);
124 *max_x
= (((buf
[0] & 0x0070) << 4) | buf
[1]) - 1;
125 *max_y
= (((buf
[0] & 0x0007) << 8) | buf
[2]) - 1;
130 static int st1232_ts_parse_and_report(struct st1232_ts_data
*ts
)
132 struct input_dev
*input
= ts
->input_dev
;
133 struct input_mt_pos pos
[ST_TS_MAX_FINGERS
];
134 u8 z
[ST_TS_MAX_FINGERS
];
135 int slots
[ST_TS_MAX_FINGERS
];
139 for (i
= 0; i
< ts
->chip_info
->max_fingers
; i
++) {
140 u8
*buf
= &ts
->read_buf
[i
* 4];
142 if (buf
[0] & BIT(7)) {
143 unsigned int x
= ((buf
[0] & 0x70) << 4) | buf
[1];
144 unsigned int y
= ((buf
[0] & 0x07) << 8) | buf
[2];
146 touchscreen_set_mt_pos(&pos
[n_contacts
],
149 /* st1232 includes a z-axis / touch strength */
150 if (ts
->chip_info
->have_z
)
151 z
[n_contacts
] = ts
->read_buf
[i
+ 6];
157 input_mt_assign_slots(input
, slots
, pos
, n_contacts
, 0);
158 for (i
= 0; i
< n_contacts
; i
++) {
159 input_mt_slot(input
, slots
[i
]);
160 input_mt_report_slot_state(input
, MT_TOOL_FINGER
, true);
161 input_report_abs(input
, ABS_MT_POSITION_X
, pos
[i
].x
);
162 input_report_abs(input
, ABS_MT_POSITION_Y
, pos
[i
].y
);
163 if (ts
->chip_info
->have_z
)
164 input_report_abs(input
, ABS_MT_TOUCH_MAJOR
, z
[i
]);
167 input_mt_sync_frame(input
);
173 static irqreturn_t
st1232_ts_irq_handler(int irq
, void *dev_id
)
175 struct st1232_ts_data
*ts
= dev_id
;
179 error
= st1232_ts_read_data(ts
, REG_XY_COORDINATES
, ts
->read_buf_len
);
183 count
= st1232_ts_parse_and_report(ts
);
185 if (ts
->low_latency_req
.dev
) {
186 dev_pm_qos_remove_request(&ts
->low_latency_req
);
187 ts
->low_latency_req
.dev
= NULL
;
189 } else if (!ts
->low_latency_req
.dev
) {
190 /* First contact, request 100 us latency. */
191 dev_pm_qos_add_ancestor_request(&ts
->client
->dev
,
192 &ts
->low_latency_req
,
193 DEV_PM_QOS_RESUME_LATENCY
, 100);
200 static void st1232_ts_power(struct st1232_ts_data
*ts
, bool poweron
)
203 gpiod_set_value_cansleep(ts
->reset_gpio
, !poweron
);
206 static void st1232_ts_power_off(void *data
)
208 st1232_ts_power(data
, false);
211 static const struct st_chip_info st1232_chip_info
= {
217 static const struct st_chip_info st1633_chip_info
= {
223 static int st1232_ts_probe(struct i2c_client
*client
)
225 const struct i2c_device_id
*id
= i2c_client_get_device_id(client
);
226 const struct st_chip_info
*match
;
227 struct st1232_ts_data
*ts
;
228 struct input_dev
*input_dev
;
232 match
= device_get_match_data(&client
->dev
);
234 match
= (const void *)id
->driver_data
;
236 dev_err(&client
->dev
, "unknown device model\n");
240 if (!i2c_check_functionality(client
->adapter
, I2C_FUNC_I2C
)) {
241 dev_err(&client
->dev
, "need I2C_FUNC_I2C\n");
246 dev_err(&client
->dev
, "no IRQ?\n");
250 ts
= devm_kzalloc(&client
->dev
, sizeof(*ts
), GFP_KERNEL
);
254 ts
->chip_info
= match
;
256 /* allocate a buffer according to the number of registers to read */
257 ts
->read_buf_len
= ts
->chip_info
->max_fingers
* 4;
258 ts
->read_buf
= devm_kzalloc(&client
->dev
, ts
->read_buf_len
, GFP_KERNEL
);
262 input_dev
= devm_input_allocate_device(&client
->dev
);
267 ts
->input_dev
= input_dev
;
269 ts
->reset_gpio
= devm_gpiod_get_optional(&client
->dev
, NULL
,
271 if (IS_ERR(ts
->reset_gpio
)) {
272 error
= PTR_ERR(ts
->reset_gpio
);
273 dev_err(&client
->dev
, "Unable to request GPIO pin: %d.\n",
278 st1232_ts_power(ts
, true);
280 error
= devm_add_action_or_reset(&client
->dev
, st1232_ts_power_off
, ts
);
282 dev_err(&client
->dev
,
283 "Failed to install power off action: %d\n", error
);
287 input_dev
->name
= "st1232-touchscreen";
288 input_dev
->id
.bustype
= BUS_I2C
;
290 /* Wait until device is ready */
291 error
= st1232_ts_wait_ready(ts
);
295 /* Read resolution from the chip */
296 error
= st1232_ts_read_resolution(ts
, &max_x
, &max_y
);
298 dev_err(&client
->dev
,
299 "Failed to read resolution: %d\n", error
);
303 if (ts
->chip_info
->have_z
)
304 input_set_abs_params(input_dev
, ABS_MT_TOUCH_MAJOR
, 0,
305 ts
->chip_info
->max_area
, 0, 0);
307 input_set_abs_params(input_dev
, ABS_MT_POSITION_X
,
309 input_set_abs_params(input_dev
, ABS_MT_POSITION_Y
,
312 touchscreen_parse_properties(input_dev
, true, &ts
->prop
);
314 error
= input_mt_init_slots(input_dev
, ts
->chip_info
->max_fingers
,
315 INPUT_MT_DIRECT
| INPUT_MT_TRACK
|
316 INPUT_MT_DROP_UNUSED
);
318 dev_err(&client
->dev
, "failed to initialize MT slots\n");
322 error
= devm_request_threaded_irq(&client
->dev
, client
->irq
,
323 NULL
, st1232_ts_irq_handler
,
327 dev_err(&client
->dev
, "Failed to register interrupt\n");
331 error
= input_register_device(ts
->input_dev
);
333 dev_err(&client
->dev
, "Unable to register %s input device\n",
338 i2c_set_clientdata(client
, ts
);
343 static int st1232_ts_suspend(struct device
*dev
)
345 struct i2c_client
*client
= to_i2c_client(dev
);
346 struct st1232_ts_data
*ts
= i2c_get_clientdata(client
);
348 disable_irq(client
->irq
);
350 if (!device_may_wakeup(&client
->dev
))
351 st1232_ts_power(ts
, false);
356 static int st1232_ts_resume(struct device
*dev
)
358 struct i2c_client
*client
= to_i2c_client(dev
);
359 struct st1232_ts_data
*ts
= i2c_get_clientdata(client
);
361 if (!device_may_wakeup(&client
->dev
))
362 st1232_ts_power(ts
, true);
364 enable_irq(client
->irq
);
369 static DEFINE_SIMPLE_DEV_PM_OPS(st1232_ts_pm_ops
,
370 st1232_ts_suspend
, st1232_ts_resume
);
372 static const struct i2c_device_id st1232_ts_id
[] = {
373 { ST1232_TS_NAME
, (unsigned long)&st1232_chip_info
},
374 { ST1633_TS_NAME
, (unsigned long)&st1633_chip_info
},
377 MODULE_DEVICE_TABLE(i2c
, st1232_ts_id
);
379 static const struct of_device_id st1232_ts_dt_ids
[] = {
380 { .compatible
= "sitronix,st1232", .data
= &st1232_chip_info
},
381 { .compatible
= "sitronix,st1633", .data
= &st1633_chip_info
},
384 MODULE_DEVICE_TABLE(of
, st1232_ts_dt_ids
);
386 static struct i2c_driver st1232_ts_driver
= {
387 .probe
= st1232_ts_probe
,
388 .id_table
= st1232_ts_id
,
390 .name
= ST1232_TS_NAME
,
391 .of_match_table
= st1232_ts_dt_ids
,
392 .probe_type
= PROBE_PREFER_ASYNCHRONOUS
,
393 .pm
= pm_sleep_ptr(&st1232_ts_pm_ops
),
397 module_i2c_driver(st1232_ts_driver
);
399 MODULE_AUTHOR("Tony SIM <chinyeow.sim.xt@renesas.com>");
400 MODULE_AUTHOR("Martin Kepplinger <martin.kepplinger@ginzinger.com>");
401 MODULE_DESCRIPTION("SITRONIX ST1232 Touchscreen Controller Driver");
402 MODULE_LICENSE("GPL v2");