7 #include <linux/kernel.h>
10 #include <linux/i2c.h>
12 #include <linux/input.h>
14 #include <linux/slab.h>
16 #include <linux/module.h>
18 #define PEN_DOWN_INTR 0
20 #define RESET_DELAY 30
21 #define PENUP_TIMEOUT (10)
23 #define MASK_BITS 0x03
26 #define LENGTH_OF_BUFFER 11
27 #define I2C_RETRY_COUNT 5
29 #define BU21013_SENSORS_BTN_0_7_REG 0x70
30 #define BU21013_SENSORS_BTN_8_15_REG 0x71
31 #define BU21013_SENSORS_BTN_16_23_REG 0x72
32 #define BU21013_X1_POS_MSB_REG 0x73
33 #define BU21013_X1_POS_LSB_REG 0x74
34 #define BU21013_Y1_POS_MSB_REG 0x75
35 #define BU21013_Y1_POS_LSB_REG 0x76
36 #define BU21013_X2_POS_MSB_REG 0x77
37 #define BU21013_X2_POS_LSB_REG 0x78
38 #define BU21013_Y2_POS_MSB_REG 0x79
39 #define BU21013_Y2_POS_LSB_REG 0x7A
40 #define BU21013_INT_CLR_REG 0xE8
41 #define BU21013_INT_MODE_REG 0xE9
42 #define BU21013_GAIN_REG 0xEA
43 #define BU21013_OFFSET_MODE_REG 0xEB
44 #define BU21013_XY_EDGE_REG 0xEC
45 #define BU21013_RESET_REG 0xED
46 #define BU21013_CALIB_REG 0xEE
47 #define BU21013_DONE_REG 0xEF
48 #define BU21013_SENSOR_0_7_REG 0xF0
49 #define BU21013_SENSOR_8_15_REG 0xF1
50 #define BU21013_SENSOR_16_23_REG 0xF2
51 #define BU21013_POS_MODE1_REG 0xF3
52 #define BU21013_POS_MODE2_REG 0xF4
53 #define BU21013_CLK_MODE_REG 0xF5
54 #define BU21013_IDLE_REG 0xFA
55 #define BU21013_FILTER_REG 0xFB
56 #define BU21013_TH_ON_REG 0xFC
57 #define BU21013_TH_OFF_REG 0xFD
60 #define BU21013_RESET_ENABLE 0x01
62 #define BU21013_SENSORS_EN_0_7 0x3F
63 #define BU21013_SENSORS_EN_8_15 0xFC
64 #define BU21013_SENSORS_EN_16_23 0x1F
66 #define BU21013_POS_MODE1_0 0x02
67 #define BU21013_POS_MODE1_1 0x04
68 #define BU21013_POS_MODE1_2 0x08
70 #define BU21013_POS_MODE2_ZERO 0x01
71 #define BU21013_POS_MODE2_AVG1 0x02
72 #define BU21013_POS_MODE2_AVG2 0x04
73 #define BU21013_POS_MODE2_EN_XY 0x08
74 #define BU21013_POS_MODE2_EN_RAW 0x10
75 #define BU21013_POS_MODE2_MULTI 0x80
77 #define BU21013_CLK_MODE_DIV 0x01
78 #define BU21013_CLK_MODE_EXT 0x02
79 #define BU21013_CLK_MODE_CALIB 0x80
81 #define BU21013_IDLET_0 0x01
82 #define BU21013_IDLET_1 0x02
83 #define BU21013_IDLET_2 0x04
84 #define BU21013_IDLET_3 0x08
85 #define BU21013_IDLE_INTERMIT_EN 0x10
87 #define BU21013_DELTA_0_6 0x7F
88 #define BU21013_FILTER_EN 0x80
90 #define BU21013_INT_MODE_LEVEL 0x00
91 #define BU21013_INT_MODE_EDGE 0x01
93 #define BU21013_GAIN_0 0x01
94 #define BU21013_GAIN_1 0x02
95 #define BU21013_GAIN_2 0x04
97 #define BU21013_OFFSET_MODE_DEFAULT 0x00
98 #define BU21013_OFFSET_MODE_MOVE 0x01
99 #define BU21013_OFFSET_MODE_DISABLE 0x02
101 #define BU21013_TH_ON_0 0x01
102 #define BU21013_TH_ON_1 0x02
103 #define BU21013_TH_ON_2 0x04
104 #define BU21013_TH_ON_3 0x08
105 #define BU21013_TH_ON_4 0x10
106 #define BU21013_TH_ON_5 0x20
107 #define BU21013_TH_ON_6 0x40
108 #define BU21013_TH_ON_7 0x80
109 #define BU21013_TH_ON_MAX 0xFF
111 #define BU21013_TH_OFF_0 0x01
112 #define BU21013_TH_OFF_1 0x02
113 #define BU21013_TH_OFF_2 0x04
114 #define BU21013_TH_OFF_3 0x08
115 #define BU21013_TH_OFF_4 0x10
116 #define BU21013_TH_OFF_5 0x20
117 #define BU21013_TH_OFF_6 0x40
118 #define BU21013_TH_OFF_7 0x80
119 #define BU21013_TH_OFF_MAX 0xFF
121 #define BU21013_X_EDGE_0 0x01
122 #define BU21013_X_EDGE_1 0x02
123 #define BU21013_X_EDGE_2 0x04
124 #define BU21013_X_EDGE_3 0x08
125 #define BU21013_Y_EDGE_0 0x10
126 #define BU21013_Y_EDGE_1 0x20
127 #define BU21013_Y_EDGE_2 0x40
128 #define BU21013_Y_EDGE_3 0x80
130 #define BU21013_DONE 0x01
131 #define BU21013_NUMBER_OF_X_SENSORS (6)
132 #define BU21013_NUMBER_OF_Y_SENSORS (11)
134 #define DRIVER_TP "bu21013_tp"
190 unsigned int pos_x[2], pos_y[2];
191 bool has_x_sensors, has_y_sensors;
192 int finger_down_count = 0;
198 if (bu21013_read_block_data(data, buf) < 0)
204 if (!has_x_sensors || !has_y_sensors)
208 const u8 *
p = &buf[4 * i + 3];
211 if (x == 0 || y == 0)
213 pos_x[finger_down_count] =
x;
214 pos_y[finger_down_count] =
y;
218 if (finger_down_count) {
219 if (finger_down_count == 2 &&
225 for (i = 0; i < finger_down_count; i++) {
226 if (data->
chip->x_flip)
227 pos_x[
i] = data->
chip->touch_x_max - pos_x[
i];
228 if (data->
chip->y_flip)
229 pos_y[
i] = data->
chip->touch_y_max - pos_y[
i];
231 input_report_abs(data->
in_dev,
233 input_report_abs(data->
in_dev,
235 input_mt_sync(data->
in_dev);
238 input_mt_sync(data->
in_dev);
252 static irqreturn_t bu21013_gpio_irq(
int irq,
void *device_data)
259 retval = bu21013_do_touch_report(data);
261 dev_err(&i2c->
dev,
"bu21013_do_touch_report failed\n");
289 dev_err(&i2c->
dev,
"BU21013_RESET reg write failed\n");
297 dev_err(&i2c->
dev,
"BU21013_SENSOR_0_7 reg write failed\n");
302 BU21013_SENSORS_EN_8_15);
304 dev_err(&i2c->
dev,
"BU21013_SENSOR_8_15 reg write failed\n");
311 dev_err(&i2c->
dev,
"BU21013_SENSOR_16_23 reg write failed\n");
318 dev_err(&i2c->
dev,
"BU21013_POS_MODE1 reg write failed\n");
327 dev_err(&i2c->
dev,
"BU21013_POS_MODE2 reg write failed\n");
331 if (data->
chip->ext_clk)
338 dev_err(&i2c->
dev,
"BU21013_CLK_MODE reg write failed\n");
345 dev_err(&i2c->
dev,
"BU21013_IDLE reg write failed\n");
352 dev_err(&i2c->
dev,
"BU21013_INT_MODE reg write failed\n");
360 dev_err(&i2c->
dev,
"BU21013_FILTER reg write failed\n");
367 dev_err(&i2c->
dev,
"BU21013_TH_ON reg write failed\n");
374 dev_err(&i2c->
dev,
"BU21013_TH_OFF reg write failed\n");
381 dev_err(&i2c->
dev,
"BU21013_GAIN reg write failed\n");
388 dev_err(&i2c->
dev,
"BU21013_OFFSET_MODE reg write failed\n");
396 dev_err(&i2c->
dev,
"BU21013_XY_EDGE reg write failed\n");
403 dev_err(&i2c->
dev,
"BU21013_REG_DONE reg write failed\n");
436 struct input_dev *in_dev;
438 client->
dev.platform_data;
441 if (!i2c_check_functionality(client->
adapter,
443 dev_err(&client->
dev,
"i2c smbus byte data not supported\n");
448 dev_err(&client->
dev,
"platform data not defined\n");
453 in_dev = input_allocate_device();
454 if (!bu21013_data || !in_dev) {
455 dev_err(&client->
dev,
"device memory alloc failed\n");
460 bu21013_data->
in_dev = in_dev;
466 dev_err(&client->
dev,
"regulator_get failed\n");
467 error = PTR_ERR(bu21013_data->
regulator);
473 dev_err(&client->
dev,
"regulator enable failed\n");
474 goto err_put_regulator;
485 goto err_disable_regulator;
490 error = bu21013_init_chip(bu21013_data);
492 dev_err(&client->
dev,
"error in bu21013 config\n");
499 in_dev->dev.parent = &client->
dev;
509 input_set_drvdata(in_dev, bu21013_data);
516 dev_err(&client->
dev,
"request irq %d failed\n", pdata->
irq);
520 error = input_register_device(in_dev);
522 dev_err(&client->
dev,
"failed to register input device\n");
527 i2c_set_clientdata(client, bu21013_data);
532 bu21013_free_irq(bu21013_data);
535 err_disable_regulator:
540 input_free_device(in_dev);
556 bu21013_free_irq(bu21013_data);
558 bu21013_data->
chip->cs_dis(bu21013_data->
chip->cs_pin);
560 input_unregister_device(bu21013_data->
in_dev);
580 static int bu21013_suspend(
struct device *
dev)
586 if (device_may_wakeup(&client->
dev))
587 enable_irq_wake(bu21013_data->
chip->irq);
603 static int bu21013_resume(
struct device *dev)
611 dev_err(&client->
dev,
"bu21013 regulator enable failed\n");
615 retval = bu21013_init_chip(bu21013_data);
617 dev_err(&client->
dev,
"bu21013 controller config failed\n");
623 if (device_may_wakeup(&client->
dev))
624 disable_irq_wake(bu21013_data->
chip->irq);
631 static const struct dev_pm_ops bu21013_dev_pm_ops = {
633 .resume = bu21013_resume,
648 .pm = &bu21013_dev_pm_ops,
651 .probe = bu21013_probe,
653 .id_table = bu21013_id,