1 /*
2  * MELFAS MIP4 Touchscreen
3  *
4  * Copyright (C) 2016 MELFAS Inc.
5  *
6  * Author : Sangwon Jee <jeesw@melfas.com>
7  *
8  * This program is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU General Public License
10  * as published by the Free Software Foundation; either version 2
11  * of the License, or (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16  * GNU General Public License for more details.
17  */
18 
19 #include <linux/acpi.h>
20 #include <linux/delay.h>
21 #include <linux/firmware.h>
22 #include <linux/gpio/consumer.h>
23 #include <linux/i2c.h>
24 #include <linux/input.h>
25 #include <linux/input/mt.h>
26 #include <linux/interrupt.h>
27 #include <linux/module.h>
28 #include <linux/of.h>
29 #include <linux/slab.h>
30 #include <asm/unaligned.h>
31 
32 #define MIP4_DEVICE_NAME	"mip4_ts"
33 
34 /*****************************************************************
35  * Protocol
36  * Version : MIP 4.0 Rev 5.4
37  *****************************************************************/
38 
39 /* Address */
40 #define MIP4_R0_BOOT				0x00
41 #define MIP4_R1_BOOT_MODE			0x01
42 #define MIP4_R1_BOOT_BUF_ADDR			0x10
43 #define MIP4_R1_BOOT_STATUS			0x20
44 #define MIP4_R1_BOOT_CMD			0x30
45 #define MIP4_R1_BOOT_TARGET_ADDR		0x40
46 #define MIP4_R1_BOOT_SIZE			0x44
47 
48 #define MIP4_R0_INFO				0x01
49 #define MIP4_R1_INFO_PRODUCT_NAME		0x00
50 #define MIP4_R1_INFO_RESOLUTION_X		0x10
51 #define MIP4_R1_INFO_RESOLUTION_Y		0x12
52 #define MIP4_R1_INFO_NODE_NUM_X			0x14
53 #define MIP4_R1_INFO_NODE_NUM_Y			0x15
54 #define MIP4_R1_INFO_KEY_NUM			0x16
55 #define MIP4_R1_INFO_PRESSURE_NUM		0x17
56 #define MIP4_R1_INFO_LENGTH_X			0x18
57 #define MIP4_R1_INFO_LENGTH_Y			0x1A
58 #define MIP4_R1_INFO_PPM_X			0x1C
59 #define MIP4_R1_INFO_PPM_Y			0x1D
60 #define MIP4_R1_INFO_VERSION_BOOT		0x20
61 #define MIP4_R1_INFO_VERSION_CORE		0x22
62 #define MIP4_R1_INFO_VERSION_APP		0x24
63 #define MIP4_R1_INFO_VERSION_PARAM		0x26
64 #define MIP4_R1_INFO_SECT_BOOT_START		0x30
65 #define MIP4_R1_INFO_SECT_BOOT_END		0x31
66 #define MIP4_R1_INFO_SECT_CORE_START		0x32
67 #define MIP4_R1_INFO_SECT_CORE_END		0x33
68 #define MIP4_R1_INFO_SECT_APP_START		0x34
69 #define MIP4_R1_INFO_SECT_APP_END		0x35
70 #define MIP4_R1_INFO_SECT_PARAM_START		0x36
71 #define MIP4_R1_INFO_SECT_PARAM_END		0x37
72 #define MIP4_R1_INFO_BUILD_DATE			0x40
73 #define MIP4_R1_INFO_BUILD_TIME			0x44
74 #define MIP4_R1_INFO_CHECKSUM_PRECALC		0x48
75 #define MIP4_R1_INFO_CHECKSUM_REALTIME		0x4A
76 #define MIP4_R1_INFO_PROTOCOL_NAME		0x50
77 #define MIP4_R1_INFO_PROTOCOL_VERSION		0x58
78 #define MIP4_R1_INFO_IC_ID			0x70
79 #define MIP4_R1_INFO_IC_NAME			0x71
80 #define MIP4_R1_INFO_IC_VENDOR_ID		0x75
81 #define MIP4_R1_INFO_IC_HW_CATEGORY		0x77
82 #define MIP4_R1_INFO_CONTACT_THD_SCR		0x78
83 #define MIP4_R1_INFO_CONTACT_THD_KEY		0x7A
84 #define MIP4_R1_INFO_PID				0x7C
85 #define MIP4_R1_INFO_VID				0x7E
86 #define MIP4_R1_INFO_SLAVE_ADDR			0x80
87 
88 #define MIP4_R0_EVENT				0x02
89 #define MIP4_R1_EVENT_SUPPORTED_FUNC		0x00
90 #define MIP4_R1_EVENT_FORMAT			0x04
91 #define MIP4_R1_EVENT_SIZE			0x06
92 #define MIP4_R1_EVENT_PACKET_INFO		0x10
93 #define MIP4_R1_EVENT_PACKET_DATA		0x11
94 
95 #define MIP4_R0_CTRL				0x06
96 #define MIP4_R1_CTRL_READY_STATUS		0x00
97 #define MIP4_R1_CTRL_EVENT_READY		0x01
98 #define MIP4_R1_CTRL_MODE			0x10
99 #define MIP4_R1_CTRL_EVENT_TRIGGER_TYPE		0x11
100 #define MIP4_R1_CTRL_RECALIBRATE		0x12
101 #define MIP4_R1_CTRL_POWER_STATE		0x13
102 #define MIP4_R1_CTRL_GESTURE_TYPE		0x14
103 #define MIP4_R1_CTRL_DISABLE_ESD_ALERT		0x18
104 #define MIP4_R1_CTRL_CHARGER_MODE		0x19
105 #define MIP4_R1_CTRL_HIGH_SENS_MODE		0x1A
106 #define MIP4_R1_CTRL_WINDOW_MODE		0x1B
107 #define MIP4_R1_CTRL_PALM_REJECTION		0x1C
108 #define MIP4_R1_CTRL_EDGE_CORRECTION		0x1D
109 #define MIP4_R1_CTRL_ENTER_GLOVE_MODE		0x1E
110 #define MIP4_R1_CTRL_I2C_ON_LPM			0x1F
111 #define MIP4_R1_CTRL_GESTURE_DEBUG		0x20
112 #define MIP4_R1_CTRL_PALM_EVENT			0x22
113 #define MIP4_R1_CTRL_PROXIMITY_SENSING		0x23
114 
115 /* Value */
116 #define MIP4_BOOT_MODE_BOOT			0x01
117 #define MIP4_BOOT_MODE_APP			0x02
118 
119 #define MIP4_BOOT_STATUS_BUSY			0x05
120 #define MIP4_BOOT_STATUS_ERROR			0x0E
121 #define MIP4_BOOT_STATUS_DONE			0xA0
122 
123 #define MIP4_BOOT_CMD_MASS_ERASE		0x15
124 #define MIP4_BOOT_CMD_PROGRAM			0x54
125 #define MIP4_BOOT_CMD_ERASE			0x8F
126 #define MIP4_BOOT_CMD_WRITE			0xA5
127 #define MIP4_BOOT_CMD_READ			0xC2
128 
129 #define MIP4_EVENT_INPUT_TYPE_KEY		0
130 #define MIP4_EVENT_INPUT_TYPE_SCREEN		1
131 #define MIP4_EVENT_INPUT_TYPE_PROXIMITY		2
132 
133 #define I2C_RETRY_COUNT				3	/* 2~ */
134 
135 #define MIP4_BUF_SIZE				128
136 #define MIP4_MAX_FINGERS			10
137 #define MIP4_MAX_KEYS				4
138 
139 #define MIP4_TOUCH_MAJOR_MIN			0
140 #define MIP4_TOUCH_MAJOR_MAX			255
141 #define MIP4_TOUCH_MINOR_MIN			0
142 #define MIP4_TOUCH_MINOR_MAX			255
143 #define MIP4_PRESSURE_MIN			0
144 #define MIP4_PRESSURE_MAX			255
145 
146 #define MIP4_FW_NAME			"melfas_mip4.fw"
147 #define MIP4_FW_UPDATE_DEBUG		0	/* 0 (default) or 1 */
148 
149 struct mip4_fw_version {
150 	u16 boot;
151 	u16 core;
152 	u16 app;
153 	u16 param;
154 };
155 
156 struct mip4_ts {
157 	struct i2c_client *client;
158 	struct input_dev *input;
159 	struct gpio_desc *gpio_ce;
160 
161 	char phys[32];
162 	char product_name[16];
163 	u16 product_id;
164 	char ic_name[4];
165 	char fw_name[32];
166 
167 	unsigned int max_x;
168 	unsigned int max_y;
169 	u8 node_x;
170 	u8 node_y;
171 	u8 node_key;
172 	unsigned int ppm_x;
173 	unsigned int ppm_y;
174 
175 	struct mip4_fw_version fw_version;
176 
177 	unsigned int event_size;
178 	unsigned int event_format;
179 
180 	unsigned int key_num;
181 	unsigned short key_code[MIP4_MAX_KEYS];
182 
183 	bool wake_irq_enabled;
184 
185 	u8 buf[MIP4_BUF_SIZE];
186 };
187 
mip4_i2c_xfer(struct mip4_ts * ts,char * write_buf,unsigned int write_len,char * read_buf,unsigned int read_len)188 static int mip4_i2c_xfer(struct mip4_ts *ts,
189 			 char *write_buf, unsigned int write_len,
190 			 char *read_buf, unsigned int read_len)
191 {
192 	struct i2c_msg msg[] = {
193 		{
194 			.addr = ts->client->addr,
195 			.flags = 0,
196 			.buf = write_buf,
197 			.len = write_len,
198 		}, {
199 			.addr = ts->client->addr,
200 			.flags = I2C_M_RD,
201 			.buf = read_buf,
202 			.len = read_len,
203 		},
204 	};
205 	int retry = I2C_RETRY_COUNT;
206 	int res;
207 	int error;
208 
209 	do {
210 		res = i2c_transfer(ts->client->adapter, msg, ARRAY_SIZE(msg));
211 		if (res == ARRAY_SIZE(msg))
212 			return 0;
213 
214 		error = res < 0 ? res : -EIO;
215 		dev_err(&ts->client->dev,
216 			"%s - i2c_transfer failed: %d (%d)\n",
217 			__func__, error, res);
218 	} while (--retry);
219 
220 	return error;
221 }
222 
mip4_parse_fw_version(const u8 * buf,struct mip4_fw_version * v)223 static void mip4_parse_fw_version(const u8 *buf, struct mip4_fw_version *v)
224 {
225 	v->boot  = get_unaligned_le16(buf + 0);
226 	v->core  = get_unaligned_le16(buf + 2);
227 	v->app   = get_unaligned_le16(buf + 4);
228 	v->param = get_unaligned_le16(buf + 6);
229 }
230 
231 /*
232  * Read chip firmware version
233  */
mip4_get_fw_version(struct mip4_ts * ts)234 static int mip4_get_fw_version(struct mip4_ts *ts)
235 {
236 	u8 cmd[] = { MIP4_R0_INFO, MIP4_R1_INFO_VERSION_BOOT };
237 	u8 buf[sizeof(ts->fw_version)];
238 	int error;
239 
240 	error = mip4_i2c_xfer(ts, cmd, sizeof(cmd), buf, sizeof(buf));
241 	if (error) {
242 		memset(&ts->fw_version, 0xff, sizeof(ts->fw_version));
243 		return error;
244 	}
245 
246 	mip4_parse_fw_version(buf, &ts->fw_version);
247 
248 	return 0;
249 }
250 
251 /*
252  * Fetch device characteristics
253  */
mip4_query_device(struct mip4_ts * ts)254 static int mip4_query_device(struct mip4_ts *ts)
255 {
256 	union i2c_smbus_data dummy;
257 	int error;
258 	u8 cmd[2];
259 	u8 buf[14];
260 
261 	/*
262 	 * Make sure there is something at this address as we do not
263 	 * consider subsequent failures as fatal.
264 	 */
265 	if (i2c_smbus_xfer(ts->client->adapter, ts->client->addr,
266 			   0, I2C_SMBUS_READ, 0, I2C_SMBUS_BYTE, &dummy) < 0) {
267 		dev_err(&ts->client->dev, "nothing at this address\n");
268 		return -ENXIO;
269 	}
270 
271 	/* Product name */
272 	cmd[0] = MIP4_R0_INFO;
273 	cmd[1] = MIP4_R1_INFO_PRODUCT_NAME;
274 	error = mip4_i2c_xfer(ts, cmd, sizeof(cmd),
275 			      ts->product_name, sizeof(ts->product_name));
276 	if (error)
277 		dev_warn(&ts->client->dev,
278 			 "Failed to retrieve product name: %d\n", error);
279 	else
280 		dev_dbg(&ts->client->dev, "product name: %.*s\n",
281 			(int)sizeof(ts->product_name), ts->product_name);
282 
283 	/* Product ID */
284 	cmd[0] = MIP4_R0_INFO;
285 	cmd[1] = MIP4_R1_INFO_PID;
286 	error = mip4_i2c_xfer(ts, cmd, sizeof(cmd), buf, 2);
287 	if (error) {
288 		dev_warn(&ts->client->dev,
289 			 "Failed to retrieve product id: %d\n", error);
290 	} else {
291 		ts->product_id = get_unaligned_le16(&buf[0]);
292 		dev_dbg(&ts->client->dev, "product id: %04X\n", ts->product_id);
293 	}
294 
295 	/* Firmware name */
296 	snprintf(ts->fw_name, sizeof(ts->fw_name),
297 		"melfas_mip4_%04X.fw", ts->product_id);
298 	dev_dbg(&ts->client->dev, "firmware name: %s\n", ts->fw_name);
299 
300 	/* IC name */
301 	cmd[0] = MIP4_R0_INFO;
302 	cmd[1] = MIP4_R1_INFO_IC_NAME;
303 	error = mip4_i2c_xfer(ts, cmd, sizeof(cmd),
304 			      ts->ic_name, sizeof(ts->ic_name));
305 	if (error)
306 		dev_warn(&ts->client->dev,
307 			 "Failed to retrieve IC name: %d\n", error);
308 	else
309 		dev_dbg(&ts->client->dev, "IC name: %.*s\n",
310 			(int)sizeof(ts->ic_name), ts->ic_name);
311 
312 	/* Firmware version */
313 	error = mip4_get_fw_version(ts);
314 	if (error)
315 		dev_warn(&ts->client->dev,
316 			"Failed to retrieve FW version: %d\n", error);
317 	else
318 		dev_dbg(&ts->client->dev, "F/W Version: %04X %04X %04X %04X\n",
319 			 ts->fw_version.boot, ts->fw_version.core,
320 			 ts->fw_version.app, ts->fw_version.param);
321 
322 	/* Resolution */
323 	cmd[0] = MIP4_R0_INFO;
324 	cmd[1] = MIP4_R1_INFO_RESOLUTION_X;
325 	error = mip4_i2c_xfer(ts, cmd, sizeof(cmd), buf, 14);
326 	if (error) {
327 		dev_warn(&ts->client->dev,
328 			 "Failed to retrieve touchscreen parameters: %d\n",
329 			 error);
330 	} else {
331 		ts->max_x = get_unaligned_le16(&buf[0]);
332 		ts->max_y = get_unaligned_le16(&buf[2]);
333 		dev_dbg(&ts->client->dev, "max_x: %d, max_y: %d\n",
334 			ts->max_x, ts->max_y);
335 
336 		ts->node_x = buf[4];
337 		ts->node_y = buf[5];
338 		ts->node_key = buf[6];
339 		dev_dbg(&ts->client->dev,
340 			"node_x: %d, node_y: %d, node_key: %d\n",
341 			ts->node_x, ts->node_y, ts->node_key);
342 
343 		ts->ppm_x = buf[12];
344 		ts->ppm_y = buf[13];
345 		dev_dbg(&ts->client->dev, "ppm_x: %d, ppm_y: %d\n",
346 			ts->ppm_x, ts->ppm_y);
347 
348 		/* Key ts */
349 		if (ts->node_key > 0)
350 			ts->key_num = ts->node_key;
351 	}
352 
353 	/* Protocol */
354 	cmd[0] = MIP4_R0_EVENT;
355 	cmd[1] = MIP4_R1_EVENT_SUPPORTED_FUNC;
356 	error = mip4_i2c_xfer(ts, cmd, sizeof(cmd), buf, 7);
357 	if (error) {
358 		dev_warn(&ts->client->dev,
359 			"Failed to retrieve device type: %d\n", error);
360 		ts->event_format = 0xff;
361 	} else {
362 		ts->event_format = get_unaligned_le16(&buf[4]);
363 		ts->event_size = buf[6];
364 		dev_dbg(&ts->client->dev, "event_format: %d, event_size: %d\n",
365 			ts->event_format, ts->event_size);
366 
367 		if (ts->event_format == 2 || ts->event_format > 3)
368 			dev_warn(&ts->client->dev,
369 				 "Unknown event format %d\n", ts->event_format);
370 	}
371 
372 	return 0;
373 }
374 
mip4_power_on(struct mip4_ts * ts)375 static int mip4_power_on(struct mip4_ts *ts)
376 {
377 	if (ts->gpio_ce) {
378 		gpiod_set_value_cansleep(ts->gpio_ce, 1);
379 
380 		/* Booting delay : 200~300ms */
381 		usleep_range(200 * 1000, 300 * 1000);
382 	}
383 
384 	return 0;
385 }
386 
mip4_power_off(struct mip4_ts * ts)387 static void mip4_power_off(struct mip4_ts *ts)
388 {
389 	if (ts->gpio_ce)
390 		gpiod_set_value_cansleep(ts->gpio_ce, 0);
391 }
392 
393 /*
394  * Clear touch input event status
395  */
mip4_clear_input(struct mip4_ts * ts)396 static void mip4_clear_input(struct mip4_ts *ts)
397 {
398 	int i;
399 
400 	/* Screen */
401 	for (i = 0; i < MIP4_MAX_FINGERS; i++) {
402 		input_mt_slot(ts->input, i);
403 		input_mt_report_slot_state(ts->input, MT_TOOL_FINGER, 0);
404 	}
405 
406 	/* Keys */
407 	for (i = 0; i < ts->key_num; i++)
408 		input_report_key(ts->input, ts->key_code[i], 0);
409 
410 	input_sync(ts->input);
411 }
412 
mip4_enable(struct mip4_ts * ts)413 static int mip4_enable(struct mip4_ts *ts)
414 {
415 	int error;
416 
417 	error = mip4_power_on(ts);
418 	if (error)
419 		return error;
420 
421 	enable_irq(ts->client->irq);
422 
423 	return 0;
424 }
425 
mip4_disable(struct mip4_ts * ts)426 static void mip4_disable(struct mip4_ts *ts)
427 {
428 	disable_irq(ts->client->irq);
429 
430 	mip4_power_off(ts);
431 
432 	mip4_clear_input(ts);
433 }
434 
435 /*****************************************************************
436  * Input handling
437  *****************************************************************/
438 
mip4_report_keys(struct mip4_ts * ts,u8 * packet)439 static void mip4_report_keys(struct mip4_ts *ts, u8 *packet)
440 {
441 	u8 key;
442 	bool down;
443 
444 	switch (ts->event_format) {
445 	case 0:
446 	case 1:
447 		key = packet[0] & 0x0F;
448 		down = packet[0] & 0x80;
449 		break;
450 
451 	case 3:
452 	default:
453 		key = packet[0] & 0x0F;
454 		down = packet[1] & 0x01;
455 		break;
456 	}
457 
458 	/* Report key event */
459 	if (key >= 1 && key <= ts->key_num) {
460 		unsigned short keycode = ts->key_code[key - 1];
461 
462 		dev_dbg(&ts->client->dev,
463 			"Key - ID: %d, keycode: %d, state: %d\n",
464 			key, keycode, down);
465 
466 		input_event(ts->input, EV_MSC, MSC_SCAN, keycode);
467 		input_report_key(ts->input, keycode, down);
468 
469 	} else {
470 		dev_err(&ts->client->dev, "Unknown key: %d\n", key);
471 	}
472 }
473 
mip4_report_touch(struct mip4_ts * ts,u8 * packet)474 static void mip4_report_touch(struct mip4_ts *ts, u8 *packet)
475 {
476 	int id;
477 	bool hover;
478 	bool palm;
479 	bool state;
480 	u16 x, y;
481 	u8 pressure_stage = 0;
482 	u8 pressure;
483 	u8 size;
484 	u8 touch_major;
485 	u8 touch_minor;
486 
487 	switch (ts->event_format) {
488 	case 0:
489 	case 1:
490 		/* Touch only */
491 		state = packet[0] & BIT(7);
492 		hover = packet[0] & BIT(5);
493 		palm = packet[0] & BIT(4);
494 		id = (packet[0] & 0x0F) - 1;
495 		x = ((packet[1] & 0x0F) << 8) | packet[2];
496 		y = (((packet[1] >> 4) & 0x0F) << 8) |
497 			packet[3];
498 		pressure = packet[4];
499 		size = packet[5];
500 		if (ts->event_format == 0) {
501 			touch_major = packet[5];
502 			touch_minor = packet[5];
503 		} else {
504 			touch_major = packet[6];
505 			touch_minor = packet[7];
506 		}
507 		break;
508 
509 	case 3:
510 	default:
511 		/* Touch + Force(Pressure) */
512 		id = (packet[0] & 0x0F) - 1;
513 		hover = packet[1] & BIT(2);
514 		palm = packet[1] & BIT(1);
515 		state = packet[1] & BIT(0);
516 		x = ((packet[2] & 0x0F) << 8) | packet[3];
517 		y = (((packet[2] >> 4) & 0x0F) << 8) |
518 			packet[4];
519 		size = packet[6];
520 		pressure_stage = (packet[7] & 0xF0) >> 4;
521 		pressure = ((packet[7] & 0x0F) << 8) |
522 			packet[8];
523 		touch_major = packet[9];
524 		touch_minor = packet[10];
525 		break;
526 	}
527 
528 	dev_dbg(&ts->client->dev,
529 		"Screen - Slot: %d State: %d X: %04d Y: %04d Z: %d\n",
530 		id, state, x, y, pressure);
531 
532 	if (unlikely(id < 0 || id >= MIP4_MAX_FINGERS)) {
533 		dev_err(&ts->client->dev, "Screen - invalid slot ID: %d\n", id);
534 	} else if (state) {
535 		/* Press or Move event */
536 		input_mt_slot(ts->input, id);
537 		input_mt_report_slot_state(ts->input, MT_TOOL_FINGER, true);
538 		input_report_abs(ts->input, ABS_MT_POSITION_X, x);
539 		input_report_abs(ts->input, ABS_MT_POSITION_Y, y);
540 		input_report_abs(ts->input, ABS_MT_PRESSURE, pressure);
541 		input_report_abs(ts->input, ABS_MT_TOUCH_MAJOR, touch_major);
542 		input_report_abs(ts->input, ABS_MT_TOUCH_MINOR, touch_minor);
543 	} else {
544 		/* Release event */
545 		input_mt_slot(ts->input, id);
546 		input_mt_report_slot_state(ts->input, MT_TOOL_FINGER, 0);
547 	}
548 
549 	input_mt_sync_frame(ts->input);
550 }
551 
mip4_handle_packet(struct mip4_ts * ts,u8 * packet)552 static int mip4_handle_packet(struct mip4_ts *ts, u8 *packet)
553 {
554 	u8 type;
555 
556 	switch (ts->event_format) {
557 	case 0:
558 	case 1:
559 		type = (packet[0] & 0x40) >> 6;
560 		break;
561 
562 	case 3:
563 		type = (packet[0] & 0xF0) >> 4;
564 		break;
565 
566 	default:
567 		/* Should not happen unless we have corrupted firmware */
568 		return -EINVAL;
569 	}
570 
571 	dev_dbg(&ts->client->dev, "Type: %d\n", type);
572 
573 	/* Report input event */
574 	switch (type) {
575 	case MIP4_EVENT_INPUT_TYPE_KEY:
576 		mip4_report_keys(ts, packet);
577 		break;
578 
579 	case MIP4_EVENT_INPUT_TYPE_SCREEN:
580 		mip4_report_touch(ts, packet);
581 		break;
582 
583 	default:
584 		dev_err(&ts->client->dev, "Unknown event type: %d\n", type);
585 		break;
586 	}
587 
588 	return 0;
589 }
590 
mip4_interrupt(int irq,void * dev_id)591 static irqreturn_t mip4_interrupt(int irq, void *dev_id)
592 {
593 	struct mip4_ts *ts = dev_id;
594 	struct i2c_client *client = ts->client;
595 	unsigned int i;
596 	int error;
597 	u8 cmd[2];
598 	u8 size;
599 	bool alert;
600 
601 	/* Read packet info */
602 	cmd[0] = MIP4_R0_EVENT;
603 	cmd[1] = MIP4_R1_EVENT_PACKET_INFO;
604 	error = mip4_i2c_xfer(ts, cmd, sizeof(cmd), ts->buf, 1);
605 	if (error) {
606 		dev_err(&client->dev,
607 			"Failed to read packet info: %d\n", error);
608 		goto out;
609 	}
610 
611 	size = ts->buf[0] & 0x7F;
612 	alert = ts->buf[0] & BIT(7);
613 	dev_dbg(&client->dev, "packet size: %d, alert: %d\n", size, alert);
614 
615 	/* Check size */
616 	if (!size) {
617 		dev_err(&client->dev, "Empty packet\n");
618 		goto out;
619 	}
620 
621 	/* Read packet data */
622 	cmd[0] = MIP4_R0_EVENT;
623 	cmd[1] = MIP4_R1_EVENT_PACKET_DATA;
624 	error = mip4_i2c_xfer(ts, cmd, sizeof(cmd), ts->buf, size);
625 	if (error) {
626 		dev_err(&client->dev,
627 			"Failed to read packet data: %d\n", error);
628 		goto out;
629 	}
630 
631 	if (alert) {
632 		dev_dbg(&client->dev, "Alert: %d\n", ts->buf[0]);
633 	} else {
634 		for (i = 0; i < size; i += ts->event_size) {
635 			error = mip4_handle_packet(ts, &ts->buf[i]);
636 			if (error)
637 				break;
638 		}
639 
640 		input_sync(ts->input);
641 	}
642 
643 out:
644 	return IRQ_HANDLED;
645 }
646 
mip4_input_open(struct input_dev * dev)647 static int mip4_input_open(struct input_dev *dev)
648 {
649 	struct mip4_ts *ts = input_get_drvdata(dev);
650 
651 	return mip4_enable(ts);
652 }
653 
mip4_input_close(struct input_dev * dev)654 static void mip4_input_close(struct input_dev *dev)
655 {
656 	struct mip4_ts *ts = input_get_drvdata(dev);
657 
658 	mip4_disable(ts);
659 }
660 
661 /*****************************************************************
662  * Firmware update
663  *****************************************************************/
664 
665 /* Firmware Info */
666 #define MIP4_BL_PAGE_SIZE		512	/* 512 */
667 #define MIP4_BL_PACKET_SIZE		512	/* 512, 256, 128, 64, ... */
668 
669 /*
670  * Firmware binary tail info
671  */
672 
673 struct mip4_bin_tail {
674 	u8 tail_mark[4];
675 	u8 chip_name[4];
676 
677 	__le32 bin_start_addr;
678 	__le32 bin_length;
679 
680 	__le16 ver_boot;
681 	__le16 ver_core;
682 	__le16 ver_app;
683 	__le16 ver_param;
684 
685 	u8 boot_start;
686 	u8 boot_end;
687 	u8 core_start;
688 	u8 core_end;
689 	u8 app_start;
690 	u8 app_end;
691 	u8 param_start;
692 	u8 param_end;
693 
694 	u8 checksum_type;
695 	u8 hw_category;
696 
697 	__le16 param_id;
698 	__le32 param_length;
699 	__le32 build_date;
700 	__le32 build_time;
701 
702 	__le32 reserved1;
703 	__le32 reserved2;
704 	__le16 reserved3;
705 	__le16 tail_size;
706 	__le32 crc;
707 } __packed;
708 
709 #define MIP4_BIN_TAIL_MARK	"MBT\001"
710 #define MIP4_BIN_TAIL_SIZE	(sizeof(struct mip4_bin_tail))
711 
712 /*
713 * Bootloader - Read status
714 */
mip4_bl_read_status(struct mip4_ts * ts)715 static int mip4_bl_read_status(struct mip4_ts *ts)
716 {
717 	u8 cmd[] = { MIP4_R0_BOOT, MIP4_R1_BOOT_STATUS };
718 	u8 result;
719 	struct i2c_msg msg[] = {
720 		{
721 			.addr = ts->client->addr,
722 			.flags = 0,
723 			.buf = cmd,
724 			.len = sizeof(cmd),
725 		}, {
726 			.addr = ts->client->addr,
727 			.flags = I2C_M_RD,
728 			.buf = &result,
729 			.len = sizeof(result),
730 		},
731 	};
732 	int ret;
733 	int error;
734 	int retry = 1000;
735 
736 	do {
737 		ret = i2c_transfer(ts->client->adapter, msg, ARRAY_SIZE(msg));
738 		if (ret != ARRAY_SIZE(msg)) {
739 			error = ret < 0 ? ret : -EIO;
740 			dev_err(&ts->client->dev,
741 				"Failed to read bootloader status: %d\n",
742 				error);
743 			return error;
744 		}
745 
746 		switch (result) {
747 		case MIP4_BOOT_STATUS_DONE:
748 			dev_dbg(&ts->client->dev, "%s - done\n", __func__);
749 			return 0;
750 
751 		case MIP4_BOOT_STATUS_ERROR:
752 			dev_err(&ts->client->dev, "Bootloader failure\n");
753 			return -EIO;
754 
755 		case MIP4_BOOT_STATUS_BUSY:
756 			dev_dbg(&ts->client->dev, "%s - Busy\n", __func__);
757 			error = -EBUSY;
758 			break;
759 
760 		default:
761 			dev_err(&ts->client->dev,
762 				"Unexpected bootloader status: %#02x\n",
763 				result);
764 			error = -EINVAL;
765 			break;
766 		}
767 
768 		usleep_range(1000, 2000);
769 	} while (--retry);
770 
771 	return error;
772 }
773 
774 /*
775 * Bootloader - Change mode
776 */
mip4_bl_change_mode(struct mip4_ts * ts,u8 mode)777 static int mip4_bl_change_mode(struct mip4_ts *ts, u8 mode)
778 {
779 	u8 mode_chg_cmd[] = { MIP4_R0_BOOT, MIP4_R1_BOOT_MODE, mode };
780 	u8 mode_read_cmd[] = { MIP4_R0_BOOT, MIP4_R1_BOOT_MODE };
781 	u8 result;
782 	struct i2c_msg msg[] = {
783 		{
784 			.addr = ts->client->addr,
785 			.flags = 0,
786 			.buf = mode_read_cmd,
787 			.len = sizeof(mode_read_cmd),
788 		}, {
789 			.addr = ts->client->addr,
790 			.flags = I2C_M_RD,
791 			.buf = &result,
792 			.len = sizeof(result),
793 		},
794 	};
795 	int retry = 10;
796 	int ret;
797 	int error;
798 
799 	do {
800 		/* Send mode change command */
801 		ret = i2c_master_send(ts->client,
802 				      mode_chg_cmd, sizeof(mode_chg_cmd));
803 		if (ret != sizeof(mode_chg_cmd)) {
804 			error = ret < 0 ? ret : -EIO;
805 			dev_err(&ts->client->dev,
806 				"Failed to send %d mode change: %d (%d)\n",
807 				mode, error, ret);
808 			return error;
809 		}
810 
811 		dev_dbg(&ts->client->dev,
812 			"Sent mode change request (mode: %d)\n", mode);
813 
814 		/* Wait */
815 		msleep(1000);
816 
817 		/* Verify target mode */
818 		ret = i2c_transfer(ts->client->adapter, msg, ARRAY_SIZE(msg));
819 		if (ret != ARRAY_SIZE(msg)) {
820 			error = ret < 0 ? ret : -EIO;
821 			dev_err(&ts->client->dev,
822 				"Failed to read device mode: %d\n", error);
823 			return error;
824 		}
825 
826 		dev_dbg(&ts->client->dev,
827 			"Current device mode: %d, want: %d\n", result, mode);
828 
829 		if (result == mode)
830 			return 0;
831 
832 	} while (--retry);
833 
834 	return -EIO;
835 }
836 
837 /*
838  * Bootloader - Start bootloader mode
839  */
mip4_bl_enter(struct mip4_ts * ts)840 static int mip4_bl_enter(struct mip4_ts *ts)
841 {
842 	return mip4_bl_change_mode(ts, MIP4_BOOT_MODE_BOOT);
843 }
844 
845 /*
846  * Bootloader - Exit bootloader mode
847  */
mip4_bl_exit(struct mip4_ts * ts)848 static int mip4_bl_exit(struct mip4_ts *ts)
849 {
850 	return mip4_bl_change_mode(ts, MIP4_BOOT_MODE_APP);
851 }
852 
mip4_bl_get_address(struct mip4_ts * ts,u16 * buf_addr)853 static int mip4_bl_get_address(struct mip4_ts *ts, u16 *buf_addr)
854 {
855 	u8 cmd[] = { MIP4_R0_BOOT, MIP4_R1_BOOT_BUF_ADDR };
856 	u8 result[sizeof(u16)];
857 	struct i2c_msg msg[] = {
858 		{
859 			.addr = ts->client->addr,
860 			.flags = 0,
861 			.buf = cmd,
862 			.len = sizeof(cmd),
863 		}, {
864 			.addr = ts->client->addr,
865 			.flags = I2C_M_RD,
866 			.buf = result,
867 			.len = sizeof(result),
868 		},
869 	};
870 	int ret;
871 	int error;
872 
873 	ret = i2c_transfer(ts->client->adapter, msg, ARRAY_SIZE(msg));
874 	if (ret != ARRAY_SIZE(msg)) {
875 		error = ret < 0 ? ret : -EIO;
876 		dev_err(&ts->client->dev,
877 			"Failed to retrieve bootloader buffer address: %d\n",
878 			error);
879 		return error;
880 	}
881 
882 	*buf_addr = get_unaligned_le16(result);
883 	dev_dbg(&ts->client->dev,
884 		"Bootloader buffer address %#04x\n", *buf_addr);
885 
886 	return 0;
887 }
888 
mip4_bl_program_page(struct mip4_ts * ts,int offset,const u8 * data,int length,u16 buf_addr)889 static int mip4_bl_program_page(struct mip4_ts *ts, int offset,
890 				const u8 *data, int length, u16 buf_addr)
891 {
892 	u8 cmd[6];
893 	u8 *data_buf;
894 	u16 buf_offset;
895 	int ret;
896 	int error;
897 
898 	dev_dbg(&ts->client->dev, "Writing page @%#06x (%d)\n",
899 		offset, length);
900 
901 	if (length > MIP4_BL_PAGE_SIZE || length % MIP4_BL_PACKET_SIZE) {
902 		dev_err(&ts->client->dev,
903 			"Invalid page length: %d\n", length);
904 		return -EINVAL;
905 	}
906 
907 	data_buf = kmalloc(2 + MIP4_BL_PACKET_SIZE, GFP_KERNEL);
908 	if (!data_buf)
909 		return -ENOMEM;
910 
911 	/* Addr */
912 	cmd[0] = MIP4_R0_BOOT;
913 	cmd[1] = MIP4_R1_BOOT_TARGET_ADDR;
914 	put_unaligned_le32(offset, &cmd[2]);
915 	ret = i2c_master_send(ts->client, cmd, 6);
916 	if (ret != 6) {
917 		error = ret < 0 ? ret : -EIO;
918 		dev_err(&ts->client->dev,
919 			"Failed to send write page address: %d\n", error);
920 		goto out;
921 	}
922 
923 	/* Size */
924 	cmd[0] = MIP4_R0_BOOT;
925 	cmd[1] = MIP4_R1_BOOT_SIZE;
926 	put_unaligned_le32(length, &cmd[2]);
927 	ret = i2c_master_send(ts->client, cmd, 6);
928 	if (ret != 6) {
929 		error = ret < 0 ? ret : -EIO;
930 		dev_err(&ts->client->dev,
931 			"Failed to send write page size: %d\n", error);
932 		goto out;
933 	}
934 
935 	/* Data */
936 	for (buf_offset = 0;
937 	     buf_offset < length;
938 	     buf_offset += MIP4_BL_PACKET_SIZE) {
939 		dev_dbg(&ts->client->dev,
940 			"writing chunk at %#04x (size %d)\n",
941 			buf_offset, MIP4_BL_PACKET_SIZE);
942 		put_unaligned_be16(buf_addr + buf_offset, data_buf);
943 		memcpy(&data_buf[2], &data[buf_offset], MIP4_BL_PACKET_SIZE);
944 		ret = i2c_master_send(ts->client,
945 				      data_buf, 2 + MIP4_BL_PACKET_SIZE);
946 		if (ret != 2 + MIP4_BL_PACKET_SIZE) {
947 			error = ret < 0 ? ret : -EIO;
948 			dev_err(&ts->client->dev,
949 				"Failed to read chunk at %#04x (size %d): %d\n",
950 				buf_offset, MIP4_BL_PACKET_SIZE, error);
951 			goto out;
952 		}
953 	}
954 
955 	/* Command */
956 	cmd[0] = MIP4_R0_BOOT;
957 	cmd[1] = MIP4_R1_BOOT_CMD;
958 	cmd[2] = MIP4_BOOT_CMD_PROGRAM;
959 	ret = i2c_master_send(ts->client, cmd, 3);
960 	if (ret != 3) {
961 		error = ret < 0 ? ret : -EIO;
962 		dev_err(&ts->client->dev,
963 			"Failed to send 'write' command: %d\n", error);
964 		goto out;
965 	}
966 
967 	/* Status */
968 	error = mip4_bl_read_status(ts);
969 
970 out:
971 	kfree(data_buf);
972 	return error ? error : 0;
973 }
974 
mip4_bl_verify_page(struct mip4_ts * ts,int offset,const u8 * data,int length,int buf_addr)975 static int mip4_bl_verify_page(struct mip4_ts *ts, int offset,
976 			       const u8 *data, int length, int buf_addr)
977 {
978 	u8 cmd[8];
979 	u8 *read_buf;
980 	int buf_offset;
981 	struct i2c_msg msg[] = {
982 		{
983 			.addr = ts->client->addr,
984 			.flags = 0,
985 			.buf = cmd,
986 			.len = 2,
987 		}, {
988 			.addr = ts->client->addr,
989 			.flags = I2C_M_RD,
990 			.len = MIP4_BL_PACKET_SIZE,
991 		},
992 	};
993 	int ret;
994 	int error;
995 
996 	dev_dbg(&ts->client->dev, "Validating page @%#06x (%d)\n",
997 		offset, length);
998 
999 	/* Addr */
1000 	cmd[0] = MIP4_R0_BOOT;
1001 	cmd[1] = MIP4_R1_BOOT_TARGET_ADDR;
1002 	put_unaligned_le32(offset, &cmd[2]);
1003 	ret = i2c_master_send(ts->client, cmd, 6);
1004 	if (ret != 6) {
1005 		error = ret < 0 ? ret : -EIO;
1006 		dev_err(&ts->client->dev,
1007 			"Failed to send read page address: %d\n", error);
1008 		return error;
1009 	}
1010 
1011 	/* Size */
1012 	cmd[0] = MIP4_R0_BOOT;
1013 	cmd[1] = MIP4_R1_BOOT_SIZE;
1014 	put_unaligned_le32(length, &cmd[2]);
1015 	ret = i2c_master_send(ts->client, cmd, 6);
1016 	if (ret != 6) {
1017 		error = ret < 0 ? ret : -EIO;
1018 		dev_err(&ts->client->dev,
1019 			"Failed to send read page size: %d\n", error);
1020 		return error;
1021 	}
1022 
1023 	/* Command */
1024 	cmd[0] = MIP4_R0_BOOT;
1025 	cmd[1] = MIP4_R1_BOOT_CMD;
1026 	cmd[2] = MIP4_BOOT_CMD_READ;
1027 	ret = i2c_master_send(ts->client, cmd, 3);
1028 	if (ret != 3) {
1029 		error = ret < 0 ? ret : -EIO;
1030 		dev_err(&ts->client->dev,
1031 			"Failed to send 'read' command: %d\n", error);
1032 		return error;
1033 	}
1034 
1035 	/* Status */
1036 	error = mip4_bl_read_status(ts);
1037 	if (error)
1038 		return error;
1039 
1040 	/* Read */
1041 	msg[1].buf = read_buf = kmalloc(MIP4_BL_PACKET_SIZE, GFP_KERNEL);
1042 	if (!read_buf)
1043 		return -ENOMEM;
1044 
1045 	for (buf_offset = 0;
1046 	     buf_offset < length;
1047 	     buf_offset += MIP4_BL_PACKET_SIZE) {
1048 		dev_dbg(&ts->client->dev,
1049 			"reading chunk at %#04x (size %d)\n",
1050 			buf_offset, MIP4_BL_PACKET_SIZE);
1051 		put_unaligned_be16(buf_addr + buf_offset, cmd);
1052 		ret = i2c_transfer(ts->client->adapter, msg, ARRAY_SIZE(msg));
1053 		if (ret != ARRAY_SIZE(msg)) {
1054 			error = ret < 0 ? ret : -EIO;
1055 			dev_err(&ts->client->dev,
1056 				"Failed to read chunk at %#04x (size %d): %d\n",
1057 				buf_offset, MIP4_BL_PACKET_SIZE, error);
1058 			break;
1059 		}
1060 
1061 		if (memcmp(&data[buf_offset], read_buf, MIP4_BL_PACKET_SIZE)) {
1062 			dev_err(&ts->client->dev,
1063 				"Failed to validate chunk at %#04x (size %d)\n",
1064 				buf_offset, MIP4_BL_PACKET_SIZE);
1065 #if MIP4_FW_UPDATE_DEBUG
1066 			print_hex_dump(KERN_DEBUG,
1067 				       MIP4_DEVICE_NAME " F/W File: ",
1068 				       DUMP_PREFIX_OFFSET, 16, 1,
1069 				       data + offset, MIP4_BL_PACKET_SIZE,
1070 				       false);
1071 			print_hex_dump(KERN_DEBUG,
1072 				       MIP4_DEVICE_NAME " F/W Chip: ",
1073 				       DUMP_PREFIX_OFFSET, 16, 1,
1074 				       read_buf, MIP4_BL_PAGE_SIZE, false);
1075 #endif
1076 			error = -EINVAL;
1077 			break;
1078 		}
1079 	}
1080 
1081 	kfree(read_buf);
1082 	return error ? error : 0;
1083 }
1084 
1085 /*
1086  * Flash chip firmware
1087  */
mip4_flash_fw(struct mip4_ts * ts,const u8 * fw_data,u32 fw_size,u32 fw_offset)1088 static int mip4_flash_fw(struct mip4_ts *ts,
1089 			 const u8 *fw_data, u32 fw_size, u32 fw_offset)
1090 {
1091 	struct i2c_client *client = ts->client;
1092 	int offset;
1093 	u16 buf_addr;
1094 	int error, error2;
1095 
1096 	/* Enter bootloader mode */
1097 	dev_dbg(&client->dev, "Entering bootloader mode\n");
1098 
1099 	error = mip4_bl_enter(ts);
1100 	if (error) {
1101 		dev_err(&client->dev,
1102 			"Failed to enter bootloader mode: %d\n",
1103 			error);
1104 		return error;
1105 	}
1106 
1107 	/* Read info */
1108 	error = mip4_bl_get_address(ts, &buf_addr);
1109 	if (error)
1110 		goto exit_bl;
1111 
1112 	/* Program & Verify */
1113 	dev_dbg(&client->dev,
1114 		"Program & Verify, page size: %d, packet size: %d\n",
1115 		MIP4_BL_PAGE_SIZE, MIP4_BL_PACKET_SIZE);
1116 
1117 	for (offset = fw_offset;
1118 	     offset < fw_offset + fw_size;
1119 	     offset += MIP4_BL_PAGE_SIZE) {
1120 		/* Program */
1121 		error = mip4_bl_program_page(ts, offset, fw_data + offset,
1122 					     MIP4_BL_PAGE_SIZE, buf_addr);
1123 		if (error)
1124 			break;
1125 
1126 		/* Verify */
1127 		error = mip4_bl_verify_page(ts, offset, fw_data + offset,
1128 					    MIP4_BL_PAGE_SIZE, buf_addr);
1129 		if (error)
1130 			break;
1131 	}
1132 
1133 exit_bl:
1134 	/* Exit bootloader mode */
1135 	dev_dbg(&client->dev, "Exiting bootloader mode\n");
1136 
1137 	error2 = mip4_bl_exit(ts);
1138 	if (error2) {
1139 		dev_err(&client->dev,
1140 			"Failed to exit bootloader mode: %d\n", error2);
1141 		if (!error)
1142 			error = error2;
1143 	}
1144 
1145 	/* Reset chip */
1146 	mip4_power_off(ts);
1147 	mip4_power_on(ts);
1148 
1149 	mip4_query_device(ts);
1150 
1151 	/* Refresh device parameters */
1152 	input_set_abs_params(ts->input, ABS_MT_POSITION_X, 0, ts->max_x, 0, 0);
1153 	input_set_abs_params(ts->input, ABS_MT_POSITION_Y, 0, ts->max_y, 0, 0);
1154 	input_set_abs_params(ts->input, ABS_X, 0, ts->max_x, 0, 0);
1155 	input_set_abs_params(ts->input, ABS_Y, 0, ts->max_y, 0, 0);
1156 	input_abs_set_res(ts->input, ABS_MT_POSITION_X, ts->ppm_x);
1157 	input_abs_set_res(ts->input, ABS_MT_POSITION_Y, ts->ppm_y);
1158 	input_abs_set_res(ts->input, ABS_X, ts->ppm_x);
1159 	input_abs_set_res(ts->input, ABS_Y, ts->ppm_y);
1160 
1161 	return error ? error : 0;
1162 }
1163 
mip4_parse_firmware(struct mip4_ts * ts,const struct firmware * fw,u32 * fw_offset_start,u32 * fw_size,const struct mip4_bin_tail ** pfw_info)1164 static int mip4_parse_firmware(struct mip4_ts *ts, const struct firmware *fw,
1165 			       u32 *fw_offset_start, u32 *fw_size,
1166 			       const struct mip4_bin_tail **pfw_info)
1167 {
1168 	const struct mip4_bin_tail *fw_info;
1169 	struct mip4_fw_version fw_version;
1170 	u16 tail_size;
1171 
1172 	if (fw->size < MIP4_BIN_TAIL_SIZE) {
1173 		dev_err(&ts->client->dev,
1174 			"Invalid firmware, size mismatch (tail %zd vs %zd)\n",
1175 			MIP4_BIN_TAIL_SIZE, fw->size);
1176 		return -EINVAL;
1177 	}
1178 
1179 	fw_info = (const void *)&fw->data[fw->size - MIP4_BIN_TAIL_SIZE];
1180 
1181 #if MIP4_FW_UPDATE_DEBUG
1182 	print_hex_dump(KERN_ERR, MIP4_DEVICE_NAME " Bin Info: ",
1183 		       DUMP_PREFIX_OFFSET, 16, 1, *fw_info, tail_size, false);
1184 #endif
1185 
1186 	tail_size = get_unaligned_le16(&fw_info->tail_size);
1187 	if (tail_size != MIP4_BIN_TAIL_SIZE) {
1188 		dev_err(&ts->client->dev,
1189 			"wrong tail size: %d (expected %zd)\n",
1190 			tail_size, MIP4_BIN_TAIL_SIZE);
1191 		return -EINVAL;
1192 	}
1193 
1194 	/* Check bin format */
1195 	if (memcmp(fw_info->tail_mark, MIP4_BIN_TAIL_MARK,
1196 		   sizeof(fw_info->tail_mark))) {
1197 		dev_err(&ts->client->dev,
1198 			"unable to locate tail marker (%*ph vs %*ph)\n",
1199 			(int)sizeof(fw_info->tail_mark), fw_info->tail_mark,
1200 			(int)sizeof(fw_info->tail_mark), MIP4_BIN_TAIL_MARK);
1201 		return -EINVAL;
1202 	}
1203 
1204 	*fw_offset_start = get_unaligned_le32(&fw_info->bin_start_addr);
1205 	*fw_size = get_unaligned_le32(&fw_info->bin_length);
1206 
1207 	dev_dbg(&ts->client->dev,
1208 		"F/W Data offset: %#08x, size: %d\n",
1209 		*fw_offset_start, *fw_size);
1210 
1211 	if (*fw_size % MIP4_BL_PAGE_SIZE) {
1212 		dev_err(&ts->client->dev,
1213 			"encoded fw length %d is not multiple of pages (%d)\n",
1214 			*fw_size, MIP4_BL_PAGE_SIZE);
1215 		return -EINVAL;
1216 	}
1217 
1218 	if (fw->size != *fw_offset_start + *fw_size) {
1219 		dev_err(&ts->client->dev,
1220 			"Wrong firmware size, expected %d bytes, got %zd\n",
1221 			*fw_offset_start + *fw_size, fw->size);
1222 		return -EINVAL;
1223 	}
1224 
1225 	mip4_parse_fw_version((const u8 *)&fw_info->ver_boot, &fw_version);
1226 
1227 	dev_dbg(&ts->client->dev,
1228 		"F/W file version %04X %04X %04X %04X\n",
1229 		fw_version.boot, fw_version.core,
1230 		fw_version.app, fw_version.param);
1231 
1232 	dev_dbg(&ts->client->dev, "F/W chip version: %04X %04X %04X %04X\n",
1233 		 ts->fw_version.boot, ts->fw_version.core,
1234 		 ts->fw_version.app, ts->fw_version.param);
1235 
1236 	/* Check F/W type */
1237 	if (fw_version.boot != 0xEEEE && fw_version.boot != 0xFFFF &&
1238 	    fw_version.core == 0xEEEE &&
1239 	    fw_version.app == 0xEEEE &&
1240 	    fw_version.param == 0xEEEE) {
1241 		dev_dbg(&ts->client->dev, "F/W type: Bootloader\n");
1242 	} else if (fw_version.boot == 0xEEEE &&
1243 		   fw_version.core != 0xEEEE && fw_version.core != 0xFFFF &&
1244 		   fw_version.app != 0xEEEE && fw_version.app != 0xFFFF &&
1245 		   fw_version.param != 0xEEEE && fw_version.param != 0xFFFF) {
1246 		dev_dbg(&ts->client->dev, "F/W type: Main\n");
1247 	} else {
1248 		dev_err(&ts->client->dev, "Wrong firmware type\n");
1249 		return -EINVAL;
1250 	}
1251 
1252 	return 0;
1253 }
1254 
mip4_execute_fw_update(struct mip4_ts * ts,const struct firmware * fw)1255 static int mip4_execute_fw_update(struct mip4_ts *ts, const struct firmware *fw)
1256 {
1257 	const struct mip4_bin_tail *fw_info;
1258 	u32 fw_start_offset;
1259 	u32 fw_size;
1260 	int retires = 3;
1261 	int error;
1262 
1263 	error = mip4_parse_firmware(ts, fw,
1264 				    &fw_start_offset, &fw_size, &fw_info);
1265 	if (error)
1266 		return error;
1267 
1268 	if (ts->input->users) {
1269 		disable_irq(ts->client->irq);
1270 	} else {
1271 		error = mip4_power_on(ts);
1272 		if (error)
1273 			return error;
1274 	}
1275 
1276 	/* Update firmware */
1277 	do {
1278 		error = mip4_flash_fw(ts, fw->data, fw_size, fw_start_offset);
1279 		if (!error)
1280 			break;
1281 	} while (--retires);
1282 
1283 	if (error)
1284 		dev_err(&ts->client->dev,
1285 			"Failed to flash firmware: %d\n", error);
1286 
1287 	/* Enable IRQ */
1288 	if (ts->input->users)
1289 		enable_irq(ts->client->irq);
1290 	else
1291 		mip4_power_off(ts);
1292 
1293 	return error ? error : 0;
1294 }
1295 
mip4_sysfs_fw_update(struct device * dev,struct device_attribute * attr,const char * buf,size_t count)1296 static ssize_t mip4_sysfs_fw_update(struct device *dev,
1297 				    struct device_attribute *attr,
1298 				    const char *buf, size_t count)
1299 {
1300 	struct i2c_client *client = to_i2c_client(dev);
1301 	struct mip4_ts *ts = i2c_get_clientdata(client);
1302 	const struct firmware *fw;
1303 	int error;
1304 
1305 	error = request_firmware(&fw, ts->fw_name, dev);
1306 	if (error) {
1307 		dev_err(&ts->client->dev,
1308 			"Failed to retrieve firmware %s: %d\n",
1309 			ts->fw_name, error);
1310 		return error;
1311 	}
1312 
1313 	/*
1314 	 * Take input mutex to prevent racing with itself and also with
1315 	 * userspace opening and closing the device and also suspend/resume
1316 	 * transitions.
1317 	 */
1318 	mutex_lock(&ts->input->mutex);
1319 
1320 	error = mip4_execute_fw_update(ts, fw);
1321 
1322 	mutex_unlock(&ts->input->mutex);
1323 
1324 	release_firmware(fw);
1325 
1326 	if (error) {
1327 		dev_err(&ts->client->dev,
1328 			"Firmware update failed: %d\n", error);
1329 		return error;
1330 	}
1331 
1332 	return count;
1333 }
1334 
1335 static DEVICE_ATTR(update_fw, S_IWUSR, NULL, mip4_sysfs_fw_update);
1336 
mip4_sysfs_read_fw_version(struct device * dev,struct device_attribute * attr,char * buf)1337 static ssize_t mip4_sysfs_read_fw_version(struct device *dev,
1338 					  struct device_attribute *attr,
1339 					  char *buf)
1340 {
1341 	struct i2c_client *client = to_i2c_client(dev);
1342 	struct mip4_ts *ts = i2c_get_clientdata(client);
1343 	size_t count;
1344 
1345 	/* Take lock to prevent racing with firmware update */
1346 	mutex_lock(&ts->input->mutex);
1347 
1348 	count = snprintf(buf, PAGE_SIZE, "%04X %04X %04X %04X\n",
1349 			 ts->fw_version.boot, ts->fw_version.core,
1350 			 ts->fw_version.app, ts->fw_version.param);
1351 
1352 	mutex_unlock(&ts->input->mutex);
1353 
1354 	return count;
1355 }
1356 
1357 static DEVICE_ATTR(fw_version, S_IRUGO, mip4_sysfs_read_fw_version, NULL);
1358 
mip4_sysfs_read_hw_version(struct device * dev,struct device_attribute * attr,char * buf)1359 static ssize_t mip4_sysfs_read_hw_version(struct device *dev,
1360 					  struct device_attribute *attr,
1361 					  char *buf)
1362 {
1363 	struct i2c_client *client = to_i2c_client(dev);
1364 	struct mip4_ts *ts = i2c_get_clientdata(client);
1365 	size_t count;
1366 
1367 	/* Take lock to prevent racing with firmware update */
1368 	mutex_lock(&ts->input->mutex);
1369 
1370 	/*
1371 	 * product_name shows the name or version of the hardware
1372 	 * paired with current firmware in the chip.
1373 	 */
1374 	count = snprintf(buf, PAGE_SIZE, "%.*s\n",
1375 			 (int)sizeof(ts->product_name), ts->product_name);
1376 
1377 	mutex_unlock(&ts->input->mutex);
1378 
1379 	return count;
1380 }
1381 
1382 static DEVICE_ATTR(hw_version, S_IRUGO, mip4_sysfs_read_hw_version, NULL);
1383 
mip4_sysfs_read_product_id(struct device * dev,struct device_attribute * attr,char * buf)1384 static ssize_t mip4_sysfs_read_product_id(struct device *dev,
1385 					  struct device_attribute *attr,
1386 					  char *buf)
1387 {
1388 	struct i2c_client *client = to_i2c_client(dev);
1389 	struct mip4_ts *ts = i2c_get_clientdata(client);
1390 	size_t count;
1391 
1392 	mutex_lock(&ts->input->mutex);
1393 
1394 	count = snprintf(buf, PAGE_SIZE, "%04X\n", ts->product_id);
1395 
1396 	mutex_unlock(&ts->input->mutex);
1397 
1398 	return count;
1399 }
1400 
1401 static DEVICE_ATTR(product_id, S_IRUGO, mip4_sysfs_read_product_id, NULL);
1402 
mip4_sysfs_read_ic_name(struct device * dev,struct device_attribute * attr,char * buf)1403 static ssize_t mip4_sysfs_read_ic_name(struct device *dev,
1404 					  struct device_attribute *attr,
1405 					  char *buf)
1406 {
1407 	struct i2c_client *client = to_i2c_client(dev);
1408 	struct mip4_ts *ts = i2c_get_clientdata(client);
1409 	size_t count;
1410 
1411 	mutex_lock(&ts->input->mutex);
1412 
1413 	count = snprintf(buf, PAGE_SIZE, "%.*s\n",
1414 			 (int)sizeof(ts->ic_name), ts->ic_name);
1415 
1416 	mutex_unlock(&ts->input->mutex);
1417 
1418 	return count;
1419 }
1420 
1421 static DEVICE_ATTR(ic_name, S_IRUGO, mip4_sysfs_read_ic_name, NULL);
1422 
1423 static struct attribute *mip4_attrs[] = {
1424 	&dev_attr_fw_version.attr,
1425 	&dev_attr_hw_version.attr,
1426 	&dev_attr_product_id.attr,
1427 	&dev_attr_ic_name.attr,
1428 	&dev_attr_update_fw.attr,
1429 	NULL,
1430 };
1431 
1432 static const struct attribute_group mip4_attr_group = {
1433 	.attrs = mip4_attrs,
1434 };
1435 
mip4_probe(struct i2c_client * client,const struct i2c_device_id * id)1436 static int mip4_probe(struct i2c_client *client, const struct i2c_device_id *id)
1437 {
1438 	struct mip4_ts *ts;
1439 	struct input_dev *input;
1440 	int error;
1441 
1442 	if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) {
1443 		dev_err(&client->dev, "Not supported I2C adapter\n");
1444 		return -ENXIO;
1445 	}
1446 
1447 	ts = devm_kzalloc(&client->dev, sizeof(*ts), GFP_KERNEL);
1448 	if (!ts)
1449 		return -ENOMEM;
1450 
1451 	input = devm_input_allocate_device(&client->dev);
1452 	if (!input)
1453 		return -ENOMEM;
1454 
1455 	ts->client = client;
1456 	ts->input = input;
1457 
1458 	snprintf(ts->phys, sizeof(ts->phys),
1459 		 "%s/input0", dev_name(&client->dev));
1460 
1461 	ts->gpio_ce = devm_gpiod_get_optional(&client->dev,
1462 					      "ce", GPIOD_OUT_LOW);
1463 	if (IS_ERR(ts->gpio_ce)) {
1464 		error = PTR_ERR(ts->gpio_ce);
1465 		if (error != EPROBE_DEFER)
1466 			dev_err(&client->dev,
1467 				"Failed to get gpio: %d\n", error);
1468 		return error;
1469 	}
1470 
1471 	error = mip4_power_on(ts);
1472 	if (error)
1473 		return error;
1474 	error = mip4_query_device(ts);
1475 	mip4_power_off(ts);
1476 	if (error)
1477 		return error;
1478 
1479 	input->name = "MELFAS MIP4 Touchscreen";
1480 	input->phys = ts->phys;
1481 
1482 	input->id.bustype = BUS_I2C;
1483 	input->id.vendor = 0x13c5;
1484 	input->id.product = ts->product_id;
1485 
1486 	input->open = mip4_input_open;
1487 	input->close = mip4_input_close;
1488 
1489 	input_set_drvdata(input, ts);
1490 
1491 	input->keycode = ts->key_code;
1492 	input->keycodesize = sizeof(*ts->key_code);
1493 	input->keycodemax = ts->key_num;
1494 
1495 	input_set_abs_params(input, ABS_MT_POSITION_X, 0, ts->max_x, 0, 0);
1496 	input_set_abs_params(input, ABS_MT_POSITION_Y, 0, ts->max_y, 0, 0);
1497 	input_set_abs_params(input, ABS_MT_PRESSURE,
1498 			     MIP4_PRESSURE_MIN, MIP4_PRESSURE_MAX, 0, 0);
1499 	input_set_abs_params(input, ABS_MT_TOUCH_MAJOR,
1500 			     MIP4_TOUCH_MAJOR_MIN, MIP4_TOUCH_MAJOR_MAX, 0, 0);
1501 	input_set_abs_params(input, ABS_MT_TOUCH_MINOR,
1502 			     MIP4_TOUCH_MINOR_MIN, MIP4_TOUCH_MINOR_MAX, 0, 0);
1503 	input_abs_set_res(ts->input, ABS_MT_POSITION_X, ts->ppm_x);
1504 	input_abs_set_res(ts->input, ABS_MT_POSITION_Y, ts->ppm_y);
1505 
1506 	error = input_mt_init_slots(input, MIP4_MAX_FINGERS, INPUT_MT_DIRECT);
1507 	if (error)
1508 		return error;
1509 
1510 	i2c_set_clientdata(client, ts);
1511 
1512 	error = devm_request_threaded_irq(&client->dev, client->irq,
1513 					  NULL, mip4_interrupt,
1514 					  IRQF_ONESHOT, MIP4_DEVICE_NAME, ts);
1515 	if (error) {
1516 		dev_err(&client->dev,
1517 			"Failed to request interrupt %d: %d\n",
1518 			client->irq, error);
1519 		return error;
1520 	}
1521 
1522 	disable_irq(client->irq);
1523 
1524 	error = input_register_device(input);
1525 	if (error) {
1526 		dev_err(&client->dev,
1527 			"Failed to register input device: %d\n", error);
1528 		return error;
1529 	}
1530 
1531 	error = devm_device_add_group(&client->dev, &mip4_attr_group);
1532 	if (error) {
1533 		dev_err(&client->dev,
1534 			"Failed to create sysfs attribute group: %d\n", error);
1535 		return error;
1536 	}
1537 
1538 	return 0;
1539 }
1540 
mip4_suspend(struct device * dev)1541 static int __maybe_unused mip4_suspend(struct device *dev)
1542 {
1543 	struct i2c_client *client = to_i2c_client(dev);
1544 	struct mip4_ts *ts = i2c_get_clientdata(client);
1545 	struct input_dev *input = ts->input;
1546 
1547 	mutex_lock(&input->mutex);
1548 
1549 	if (device_may_wakeup(dev))
1550 		ts->wake_irq_enabled = enable_irq_wake(client->irq) == 0;
1551 	else if (input->users)
1552 		mip4_disable(ts);
1553 
1554 	mutex_unlock(&input->mutex);
1555 
1556 	return 0;
1557 }
1558 
mip4_resume(struct device * dev)1559 static int __maybe_unused mip4_resume(struct device *dev)
1560 {
1561 	struct i2c_client *client = to_i2c_client(dev);
1562 	struct mip4_ts *ts = i2c_get_clientdata(client);
1563 	struct input_dev *input = ts->input;
1564 
1565 	mutex_lock(&input->mutex);
1566 
1567 	if (ts->wake_irq_enabled)
1568 		disable_irq_wake(client->irq);
1569 	else if (input->users)
1570 		mip4_enable(ts);
1571 
1572 	mutex_unlock(&input->mutex);
1573 
1574 	return 0;
1575 }
1576 
1577 static SIMPLE_DEV_PM_OPS(mip4_pm_ops, mip4_suspend, mip4_resume);
1578 
1579 #ifdef CONFIG_OF
1580 static const struct of_device_id mip4_of_match[] = {
1581 	{ .compatible = "melfas,"MIP4_DEVICE_NAME, },
1582 	{ },
1583 };
1584 MODULE_DEVICE_TABLE(of, mip4_of_match);
1585 #endif
1586 
1587 #ifdef CONFIG_ACPI
1588 static const struct acpi_device_id mip4_acpi_match[] = {
1589 	{ "MLFS0000", 0},
1590 	{ },
1591 };
1592 MODULE_DEVICE_TABLE(acpi, mip4_acpi_match);
1593 #endif
1594 
1595 static const struct i2c_device_id mip4_i2c_ids[] = {
1596 	{ MIP4_DEVICE_NAME, 0 },
1597 	{ },
1598 };
1599 MODULE_DEVICE_TABLE(i2c, mip4_i2c_ids);
1600 
1601 static struct i2c_driver mip4_driver = {
1602 	.id_table = mip4_i2c_ids,
1603 	.probe = mip4_probe,
1604 	.driver = {
1605 		.name = MIP4_DEVICE_NAME,
1606 		.of_match_table = of_match_ptr(mip4_of_match),
1607 		.acpi_match_table = ACPI_PTR(mip4_acpi_match),
1608 		.pm = &mip4_pm_ops,
1609 	},
1610 };
1611 module_i2c_driver(mip4_driver);
1612 
1613 MODULE_DESCRIPTION("MELFAS MIP4 Touchscreen");
1614 MODULE_AUTHOR("Sangwon Jee <jeesw@melfas.com>");
1615 MODULE_LICENSE("GPL");
1616