edt-ft5x06.c 29 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199
  1. /*
  2. * Copyright (C) 2012 Simon Budig, <simon.budig@kernelconcepts.de>
  3. * Daniel Wagener <daniel.wagener@kernelconcepts.de> (M09 firmware support)
  4. * Lothar Waßmann <LW@KARO-electronics.de> (DT support)
  5. *
  6. * This software is licensed under the terms of the GNU General Public
  7. * License version 2, as published by the Free Software Foundation, and
  8. * may be copied, distributed, and modified under those terms.
  9. *
  10. * This program is distributed in the hope that it will be useful,
  11. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13. * GNU General Public License for more details.
  14. *
  15. * You should have received a copy of the GNU General Public
  16. * License along with this library; if not, write to the Free Software
  17. * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  18. */
  19. /*
  20. * This is a driver for the EDT "Polytouch" family of touch controllers
  21. * based on the FocalTech FT5x06 line of chips.
  22. *
  23. * Development of this driver has been sponsored by Glyn:
  24. * http://www.glyn.com/Products/Displays
  25. */
  26. #include <linux/module.h>
  27. #include <linux/ratelimit.h>
  28. #include <linux/irq.h>
  29. #include <linux/interrupt.h>
  30. #include <linux/input.h>
  31. #include <linux/i2c.h>
  32. #include <linux/uaccess.h>
  33. #include <linux/delay.h>
  34. #include <linux/debugfs.h>
  35. #include <linux/slab.h>
  36. #include <linux/gpio/consumer.h>
  37. #include <linux/input/mt.h>
  38. #include <linux/input/touchscreen.h>
  39. #include <linux/of_device.h>
  40. #define WORK_REGISTER_THRESHOLD 0x00
  41. #define WORK_REGISTER_REPORT_RATE 0x08
  42. #define WORK_REGISTER_GAIN 0x30
  43. #define WORK_REGISTER_OFFSET 0x31
  44. #define WORK_REGISTER_NUM_X 0x33
  45. #define WORK_REGISTER_NUM_Y 0x34
  46. #define M09_REGISTER_THRESHOLD 0x80
  47. #define M09_REGISTER_GAIN 0x92
  48. #define M09_REGISTER_OFFSET 0x93
  49. #define M09_REGISTER_NUM_X 0x94
  50. #define M09_REGISTER_NUM_Y 0x95
  51. #define NO_REGISTER 0xff
  52. #define WORK_REGISTER_OPMODE 0x3c
  53. #define FACTORY_REGISTER_OPMODE 0x01
  54. #define TOUCH_EVENT_DOWN 0x00
  55. #define TOUCH_EVENT_UP 0x01
  56. #define TOUCH_EVENT_ON 0x02
  57. #define TOUCH_EVENT_RESERVED 0x03
  58. #define EDT_NAME_LEN 23
  59. #define EDT_SWITCH_MODE_RETRIES 10
  60. #define EDT_SWITCH_MODE_DELAY 5 /* msec */
  61. #define EDT_RAW_DATA_RETRIES 100
  62. #define EDT_RAW_DATA_DELAY 1000 /* usec */
  63. enum edt_ver {
  64. EDT_M06,
  65. EDT_M09,
  66. EDT_M12,
  67. GENERIC_FT,
  68. };
  69. struct edt_reg_addr {
  70. int reg_threshold;
  71. int reg_report_rate;
  72. int reg_gain;
  73. int reg_offset;
  74. int reg_num_x;
  75. int reg_num_y;
  76. };
  77. struct edt_ft5x06_ts_data {
  78. struct i2c_client *client;
  79. struct input_dev *input;
  80. struct touchscreen_properties prop;
  81. u16 num_x;
  82. u16 num_y;
  83. struct gpio_desc *reset_gpio;
  84. struct gpio_desc *wake_gpio;
  85. #if defined(CONFIG_DEBUG_FS)
  86. struct dentry *debug_dir;
  87. u8 *raw_buffer;
  88. size_t raw_bufsize;
  89. #endif
  90. struct mutex mutex;
  91. bool factory_mode;
  92. int threshold;
  93. int gain;
  94. int offset;
  95. int report_rate;
  96. int max_support_points;
  97. char name[EDT_NAME_LEN];
  98. struct edt_reg_addr reg_addr;
  99. enum edt_ver version;
  100. };
  101. struct edt_i2c_chip_data {
  102. int max_support_points;
  103. };
  104. static int edt_ft5x06_ts_readwrite(struct i2c_client *client,
  105. u16 wr_len, u8 *wr_buf,
  106. u16 rd_len, u8 *rd_buf)
  107. {
  108. struct i2c_msg wrmsg[2];
  109. int i = 0;
  110. int ret;
  111. if (wr_len) {
  112. wrmsg[i].addr = client->addr;
  113. wrmsg[i].flags = 0;
  114. wrmsg[i].len = wr_len;
  115. wrmsg[i].buf = wr_buf;
  116. i++;
  117. }
  118. if (rd_len) {
  119. wrmsg[i].addr = client->addr;
  120. wrmsg[i].flags = I2C_M_RD;
  121. wrmsg[i].len = rd_len;
  122. wrmsg[i].buf = rd_buf;
  123. i++;
  124. }
  125. ret = i2c_transfer(client->adapter, wrmsg, i);
  126. if (ret < 0)
  127. return ret;
  128. if (ret != i)
  129. return -EIO;
  130. return 0;
  131. }
  132. static bool edt_ft5x06_ts_check_crc(struct edt_ft5x06_ts_data *tsdata,
  133. u8 *buf, int buflen)
  134. {
  135. int i;
  136. u8 crc = 0;
  137. for (i = 0; i < buflen - 1; i++)
  138. crc ^= buf[i];
  139. if (crc != buf[buflen-1]) {
  140. dev_err_ratelimited(&tsdata->client->dev,
  141. "crc error: 0x%02x expected, got 0x%02x\n",
  142. crc, buf[buflen-1]);
  143. return false;
  144. }
  145. return true;
  146. }
  147. static irqreturn_t edt_ft5x06_ts_isr(int irq, void *dev_id)
  148. {
  149. struct edt_ft5x06_ts_data *tsdata = dev_id;
  150. struct device *dev = &tsdata->client->dev;
  151. u8 cmd;
  152. u8 rdbuf[63];
  153. int i, type, x, y, id;
  154. int offset, tplen, datalen, crclen;
  155. int error;
  156. switch (tsdata->version) {
  157. case EDT_M06:
  158. cmd = 0xf9; /* tell the controller to send touch data */
  159. offset = 5; /* where the actual touch data starts */
  160. tplen = 4; /* data comes in so called frames */
  161. crclen = 1; /* length of the crc data */
  162. break;
  163. case EDT_M09:
  164. case EDT_M12:
  165. case GENERIC_FT:
  166. cmd = 0x0;
  167. offset = 3;
  168. tplen = 6;
  169. crclen = 0;
  170. break;
  171. default:
  172. goto out;
  173. }
  174. memset(rdbuf, 0, sizeof(rdbuf));
  175. datalen = tplen * tsdata->max_support_points + offset + crclen;
  176. error = edt_ft5x06_ts_readwrite(tsdata->client,
  177. sizeof(cmd), &cmd,
  178. datalen, rdbuf);
  179. if (error) {
  180. dev_err_ratelimited(dev, "Unable to fetch data, error: %d\n",
  181. error);
  182. goto out;
  183. }
  184. /* M09/M12 does not send header or CRC */
  185. if (tsdata->version == EDT_M06) {
  186. if (rdbuf[0] != 0xaa || rdbuf[1] != 0xaa ||
  187. rdbuf[2] != datalen) {
  188. dev_err_ratelimited(dev,
  189. "Unexpected header: %02x%02x%02x!\n",
  190. rdbuf[0], rdbuf[1], rdbuf[2]);
  191. goto out;
  192. }
  193. if (!edt_ft5x06_ts_check_crc(tsdata, rdbuf, datalen))
  194. goto out;
  195. }
  196. for (i = 0; i < tsdata->max_support_points; i++) {
  197. u8 *buf = &rdbuf[i * tplen + offset];
  198. bool down;
  199. type = buf[0] >> 6;
  200. /* ignore Reserved events */
  201. if (type == TOUCH_EVENT_RESERVED)
  202. continue;
  203. /* M06 sometimes sends bogus coordinates in TOUCH_DOWN */
  204. if (tsdata->version == EDT_M06 && type == TOUCH_EVENT_DOWN)
  205. continue;
  206. x = ((buf[0] << 8) | buf[1]) & 0x0fff;
  207. y = ((buf[2] << 8) | buf[3]) & 0x0fff;
  208. id = (buf[2] >> 4) & 0x0f;
  209. down = type != TOUCH_EVENT_UP;
  210. input_mt_slot(tsdata->input, id);
  211. input_mt_report_slot_state(tsdata->input, MT_TOOL_FINGER, down);
  212. if (!down)
  213. continue;
  214. touchscreen_report_pos(tsdata->input, &tsdata->prop, x, y,
  215. true);
  216. }
  217. input_mt_report_pointer_emulation(tsdata->input, true);
  218. input_sync(tsdata->input);
  219. out:
  220. return IRQ_HANDLED;
  221. }
  222. static int edt_ft5x06_register_write(struct edt_ft5x06_ts_data *tsdata,
  223. u8 addr, u8 value)
  224. {
  225. u8 wrbuf[4];
  226. switch (tsdata->version) {
  227. case EDT_M06:
  228. wrbuf[0] = tsdata->factory_mode ? 0xf3 : 0xfc;
  229. wrbuf[1] = tsdata->factory_mode ? addr & 0x7f : addr & 0x3f;
  230. wrbuf[2] = value;
  231. wrbuf[3] = wrbuf[0] ^ wrbuf[1] ^ wrbuf[2];
  232. return edt_ft5x06_ts_readwrite(tsdata->client, 4,
  233. wrbuf, 0, NULL);
  234. case EDT_M09:
  235. case EDT_M12:
  236. case GENERIC_FT:
  237. wrbuf[0] = addr;
  238. wrbuf[1] = value;
  239. return edt_ft5x06_ts_readwrite(tsdata->client, 2,
  240. wrbuf, 0, NULL);
  241. default:
  242. return -EINVAL;
  243. }
  244. }
  245. static int edt_ft5x06_register_read(struct edt_ft5x06_ts_data *tsdata,
  246. u8 addr)
  247. {
  248. u8 wrbuf[2], rdbuf[2];
  249. int error;
  250. switch (tsdata->version) {
  251. case EDT_M06:
  252. wrbuf[0] = tsdata->factory_mode ? 0xf3 : 0xfc;
  253. wrbuf[1] = tsdata->factory_mode ? addr & 0x7f : addr & 0x3f;
  254. wrbuf[1] |= tsdata->factory_mode ? 0x80 : 0x40;
  255. error = edt_ft5x06_ts_readwrite(tsdata->client, 2, wrbuf, 2,
  256. rdbuf);
  257. if (error)
  258. return error;
  259. if ((wrbuf[0] ^ wrbuf[1] ^ rdbuf[0]) != rdbuf[1]) {
  260. dev_err(&tsdata->client->dev,
  261. "crc error: 0x%02x expected, got 0x%02x\n",
  262. wrbuf[0] ^ wrbuf[1] ^ rdbuf[0],
  263. rdbuf[1]);
  264. return -EIO;
  265. }
  266. break;
  267. case EDT_M09:
  268. case EDT_M12:
  269. case GENERIC_FT:
  270. wrbuf[0] = addr;
  271. error = edt_ft5x06_ts_readwrite(tsdata->client, 1,
  272. wrbuf, 1, rdbuf);
  273. if (error)
  274. return error;
  275. break;
  276. default:
  277. return -EINVAL;
  278. }
  279. return rdbuf[0];
  280. }
  281. struct edt_ft5x06_attribute {
  282. struct device_attribute dattr;
  283. size_t field_offset;
  284. u8 limit_low;
  285. u8 limit_high;
  286. u8 addr_m06;
  287. u8 addr_m09;
  288. };
  289. #define EDT_ATTR(_field, _mode, _addr_m06, _addr_m09, \
  290. _limit_low, _limit_high) \
  291. struct edt_ft5x06_attribute edt_ft5x06_attr_##_field = { \
  292. .dattr = __ATTR(_field, _mode, \
  293. edt_ft5x06_setting_show, \
  294. edt_ft5x06_setting_store), \
  295. .field_offset = offsetof(struct edt_ft5x06_ts_data, _field), \
  296. .addr_m06 = _addr_m06, \
  297. .addr_m09 = _addr_m09, \
  298. .limit_low = _limit_low, \
  299. .limit_high = _limit_high, \
  300. }
  301. static ssize_t edt_ft5x06_setting_show(struct device *dev,
  302. struct device_attribute *dattr,
  303. char *buf)
  304. {
  305. struct i2c_client *client = to_i2c_client(dev);
  306. struct edt_ft5x06_ts_data *tsdata = i2c_get_clientdata(client);
  307. struct edt_ft5x06_attribute *attr =
  308. container_of(dattr, struct edt_ft5x06_attribute, dattr);
  309. u8 *field = (u8 *)tsdata + attr->field_offset;
  310. int val;
  311. size_t count = 0;
  312. int error = 0;
  313. u8 addr;
  314. mutex_lock(&tsdata->mutex);
  315. if (tsdata->factory_mode) {
  316. error = -EIO;
  317. goto out;
  318. }
  319. switch (tsdata->version) {
  320. case EDT_M06:
  321. addr = attr->addr_m06;
  322. break;
  323. case EDT_M09:
  324. case EDT_M12:
  325. case GENERIC_FT:
  326. addr = attr->addr_m09;
  327. break;
  328. default:
  329. error = -ENODEV;
  330. goto out;
  331. }
  332. if (addr != NO_REGISTER) {
  333. val = edt_ft5x06_register_read(tsdata, addr);
  334. if (val < 0) {
  335. error = val;
  336. dev_err(&tsdata->client->dev,
  337. "Failed to fetch attribute %s, error %d\n",
  338. dattr->attr.name, error);
  339. goto out;
  340. }
  341. } else {
  342. val = *field;
  343. }
  344. if (val != *field) {
  345. dev_warn(&tsdata->client->dev,
  346. "%s: read (%d) and stored value (%d) differ\n",
  347. dattr->attr.name, val, *field);
  348. *field = val;
  349. }
  350. count = scnprintf(buf, PAGE_SIZE, "%d\n", val);
  351. out:
  352. mutex_unlock(&tsdata->mutex);
  353. return error ?: count;
  354. }
  355. static ssize_t edt_ft5x06_setting_store(struct device *dev,
  356. struct device_attribute *dattr,
  357. const char *buf, size_t count)
  358. {
  359. struct i2c_client *client = to_i2c_client(dev);
  360. struct edt_ft5x06_ts_data *tsdata = i2c_get_clientdata(client);
  361. struct edt_ft5x06_attribute *attr =
  362. container_of(dattr, struct edt_ft5x06_attribute, dattr);
  363. u8 *field = (u8 *)tsdata + attr->field_offset;
  364. unsigned int val;
  365. int error;
  366. u8 addr;
  367. mutex_lock(&tsdata->mutex);
  368. if (tsdata->factory_mode) {
  369. error = -EIO;
  370. goto out;
  371. }
  372. error = kstrtouint(buf, 0, &val);
  373. if (error)
  374. goto out;
  375. if (val < attr->limit_low || val > attr->limit_high) {
  376. error = -ERANGE;
  377. goto out;
  378. }
  379. switch (tsdata->version) {
  380. case EDT_M06:
  381. addr = attr->addr_m06;
  382. break;
  383. case EDT_M09:
  384. case EDT_M12:
  385. case GENERIC_FT:
  386. addr = attr->addr_m09;
  387. break;
  388. default:
  389. error = -ENODEV;
  390. goto out;
  391. }
  392. if (addr != NO_REGISTER) {
  393. error = edt_ft5x06_register_write(tsdata, addr, val);
  394. if (error) {
  395. dev_err(&tsdata->client->dev,
  396. "Failed to update attribute %s, error: %d\n",
  397. dattr->attr.name, error);
  398. goto out;
  399. }
  400. }
  401. *field = val;
  402. out:
  403. mutex_unlock(&tsdata->mutex);
  404. return error ?: count;
  405. }
  406. /* m06, m09: range 0-31, m12: range 0-5 */
  407. static EDT_ATTR(gain, S_IWUSR | S_IRUGO, WORK_REGISTER_GAIN,
  408. M09_REGISTER_GAIN, 0, 31);
  409. /* m06, m09: range 0-31, m12: range 0-16 */
  410. static EDT_ATTR(offset, S_IWUSR | S_IRUGO, WORK_REGISTER_OFFSET,
  411. M09_REGISTER_OFFSET, 0, 31);
  412. /* m06: range 20 to 80, m09: range 0 to 30, m12: range 1 to 255... */
  413. static EDT_ATTR(threshold, S_IWUSR | S_IRUGO, WORK_REGISTER_THRESHOLD,
  414. M09_REGISTER_THRESHOLD, 0, 255);
  415. /* m06: range 3 to 14, m12: (0x64: 100Hz) */
  416. static EDT_ATTR(report_rate, S_IWUSR | S_IRUGO, WORK_REGISTER_REPORT_RATE,
  417. NO_REGISTER, 0, 255);
  418. static struct attribute *edt_ft5x06_attrs[] = {
  419. &edt_ft5x06_attr_gain.dattr.attr,
  420. &edt_ft5x06_attr_offset.dattr.attr,
  421. &edt_ft5x06_attr_threshold.dattr.attr,
  422. &edt_ft5x06_attr_report_rate.dattr.attr,
  423. NULL
  424. };
  425. static const struct attribute_group edt_ft5x06_attr_group = {
  426. .attrs = edt_ft5x06_attrs,
  427. };
  428. #ifdef CONFIG_DEBUG_FS
  429. static int edt_ft5x06_factory_mode(struct edt_ft5x06_ts_data *tsdata)
  430. {
  431. struct i2c_client *client = tsdata->client;
  432. int retries = EDT_SWITCH_MODE_RETRIES;
  433. int ret;
  434. int error;
  435. if (tsdata->version != EDT_M06) {
  436. dev_err(&client->dev,
  437. "No factory mode support for non-M06 devices\n");
  438. return -EINVAL;
  439. }
  440. disable_irq(client->irq);
  441. if (!tsdata->raw_buffer) {
  442. tsdata->raw_bufsize = tsdata->num_x * tsdata->num_y *
  443. sizeof(u16);
  444. tsdata->raw_buffer = kzalloc(tsdata->raw_bufsize, GFP_KERNEL);
  445. if (!tsdata->raw_buffer) {
  446. error = -ENOMEM;
  447. goto err_out;
  448. }
  449. }
  450. /* mode register is 0x3c when in the work mode */
  451. error = edt_ft5x06_register_write(tsdata, WORK_REGISTER_OPMODE, 0x03);
  452. if (error) {
  453. dev_err(&client->dev,
  454. "failed to switch to factory mode, error %d\n", error);
  455. goto err_out;
  456. }
  457. tsdata->factory_mode = true;
  458. do {
  459. mdelay(EDT_SWITCH_MODE_DELAY);
  460. /* mode register is 0x01 when in factory mode */
  461. ret = edt_ft5x06_register_read(tsdata, FACTORY_REGISTER_OPMODE);
  462. if (ret == 0x03)
  463. break;
  464. } while (--retries > 0);
  465. if (retries == 0) {
  466. dev_err(&client->dev, "not in factory mode after %dms.\n",
  467. EDT_SWITCH_MODE_RETRIES * EDT_SWITCH_MODE_DELAY);
  468. error = -EIO;
  469. goto err_out;
  470. }
  471. return 0;
  472. err_out:
  473. kfree(tsdata->raw_buffer);
  474. tsdata->raw_buffer = NULL;
  475. tsdata->factory_mode = false;
  476. enable_irq(client->irq);
  477. return error;
  478. }
  479. static int edt_ft5x06_work_mode(struct edt_ft5x06_ts_data *tsdata)
  480. {
  481. struct i2c_client *client = tsdata->client;
  482. int retries = EDT_SWITCH_MODE_RETRIES;
  483. struct edt_reg_addr *reg_addr = &tsdata->reg_addr;
  484. int ret;
  485. int error;
  486. /* mode register is 0x01 when in the factory mode */
  487. error = edt_ft5x06_register_write(tsdata, FACTORY_REGISTER_OPMODE, 0x1);
  488. if (error) {
  489. dev_err(&client->dev,
  490. "failed to switch to work mode, error: %d\n", error);
  491. return error;
  492. }
  493. tsdata->factory_mode = false;
  494. do {
  495. mdelay(EDT_SWITCH_MODE_DELAY);
  496. /* mode register is 0x01 when in factory mode */
  497. ret = edt_ft5x06_register_read(tsdata, WORK_REGISTER_OPMODE);
  498. if (ret == 0x01)
  499. break;
  500. } while (--retries > 0);
  501. if (retries == 0) {
  502. dev_err(&client->dev, "not in work mode after %dms.\n",
  503. EDT_SWITCH_MODE_RETRIES * EDT_SWITCH_MODE_DELAY);
  504. tsdata->factory_mode = true;
  505. return -EIO;
  506. }
  507. kfree(tsdata->raw_buffer);
  508. tsdata->raw_buffer = NULL;
  509. /* restore parameters */
  510. edt_ft5x06_register_write(tsdata, reg_addr->reg_threshold,
  511. tsdata->threshold);
  512. edt_ft5x06_register_write(tsdata, reg_addr->reg_gain,
  513. tsdata->gain);
  514. edt_ft5x06_register_write(tsdata, reg_addr->reg_offset,
  515. tsdata->offset);
  516. if (reg_addr->reg_report_rate != NO_REGISTER)
  517. edt_ft5x06_register_write(tsdata, reg_addr->reg_report_rate,
  518. tsdata->report_rate);
  519. enable_irq(client->irq);
  520. return 0;
  521. }
  522. static int edt_ft5x06_debugfs_mode_get(void *data, u64 *mode)
  523. {
  524. struct edt_ft5x06_ts_data *tsdata = data;
  525. *mode = tsdata->factory_mode;
  526. return 0;
  527. };
  528. static int edt_ft5x06_debugfs_mode_set(void *data, u64 mode)
  529. {
  530. struct edt_ft5x06_ts_data *tsdata = data;
  531. int retval = 0;
  532. if (mode > 1)
  533. return -ERANGE;
  534. mutex_lock(&tsdata->mutex);
  535. if (mode != tsdata->factory_mode) {
  536. retval = mode ? edt_ft5x06_factory_mode(tsdata) :
  537. edt_ft5x06_work_mode(tsdata);
  538. }
  539. mutex_unlock(&tsdata->mutex);
  540. return retval;
  541. };
  542. DEFINE_SIMPLE_ATTRIBUTE(debugfs_mode_fops, edt_ft5x06_debugfs_mode_get,
  543. edt_ft5x06_debugfs_mode_set, "%llu\n");
  544. static ssize_t edt_ft5x06_debugfs_raw_data_read(struct file *file,
  545. char __user *buf, size_t count, loff_t *off)
  546. {
  547. struct edt_ft5x06_ts_data *tsdata = file->private_data;
  548. struct i2c_client *client = tsdata->client;
  549. int retries = EDT_RAW_DATA_RETRIES;
  550. int val, i, error;
  551. size_t read = 0;
  552. int colbytes;
  553. char wrbuf[3];
  554. u8 *rdbuf;
  555. if (*off < 0 || *off >= tsdata->raw_bufsize)
  556. return 0;
  557. mutex_lock(&tsdata->mutex);
  558. if (!tsdata->factory_mode || !tsdata->raw_buffer) {
  559. error = -EIO;
  560. goto out;
  561. }
  562. error = edt_ft5x06_register_write(tsdata, 0x08, 0x01);
  563. if (error) {
  564. dev_dbg(&client->dev,
  565. "failed to write 0x08 register, error %d\n", error);
  566. goto out;
  567. }
  568. do {
  569. usleep_range(EDT_RAW_DATA_DELAY, EDT_RAW_DATA_DELAY + 100);
  570. val = edt_ft5x06_register_read(tsdata, 0x08);
  571. if (val < 1)
  572. break;
  573. } while (--retries > 0);
  574. if (val < 0) {
  575. error = val;
  576. dev_dbg(&client->dev,
  577. "failed to read 0x08 register, error %d\n", error);
  578. goto out;
  579. }
  580. if (retries == 0) {
  581. dev_dbg(&client->dev,
  582. "timed out waiting for register to settle\n");
  583. error = -ETIMEDOUT;
  584. goto out;
  585. }
  586. rdbuf = tsdata->raw_buffer;
  587. colbytes = tsdata->num_y * sizeof(u16);
  588. wrbuf[0] = 0xf5;
  589. wrbuf[1] = 0x0e;
  590. for (i = 0; i < tsdata->num_x; i++) {
  591. wrbuf[2] = i; /* column index */
  592. error = edt_ft5x06_ts_readwrite(tsdata->client,
  593. sizeof(wrbuf), wrbuf,
  594. colbytes, rdbuf);
  595. if (error)
  596. goto out;
  597. rdbuf += colbytes;
  598. }
  599. read = min_t(size_t, count, tsdata->raw_bufsize - *off);
  600. if (copy_to_user(buf, tsdata->raw_buffer + *off, read)) {
  601. error = -EFAULT;
  602. goto out;
  603. }
  604. *off += read;
  605. out:
  606. mutex_unlock(&tsdata->mutex);
  607. return error ?: read;
  608. };
  609. static const struct file_operations debugfs_raw_data_fops = {
  610. .open = simple_open,
  611. .read = edt_ft5x06_debugfs_raw_data_read,
  612. };
  613. static void
  614. edt_ft5x06_ts_prepare_debugfs(struct edt_ft5x06_ts_data *tsdata,
  615. const char *debugfs_name)
  616. {
  617. tsdata->debug_dir = debugfs_create_dir(debugfs_name, NULL);
  618. if (!tsdata->debug_dir)
  619. return;
  620. debugfs_create_u16("num_x", S_IRUSR, tsdata->debug_dir, &tsdata->num_x);
  621. debugfs_create_u16("num_y", S_IRUSR, tsdata->debug_dir, &tsdata->num_y);
  622. debugfs_create_file("mode", S_IRUSR | S_IWUSR,
  623. tsdata->debug_dir, tsdata, &debugfs_mode_fops);
  624. debugfs_create_file("raw_data", S_IRUSR,
  625. tsdata->debug_dir, tsdata, &debugfs_raw_data_fops);
  626. }
  627. static void
  628. edt_ft5x06_ts_teardown_debugfs(struct edt_ft5x06_ts_data *tsdata)
  629. {
  630. debugfs_remove_recursive(tsdata->debug_dir);
  631. kfree(tsdata->raw_buffer);
  632. }
  633. #else
  634. static inline void
  635. edt_ft5x06_ts_prepare_debugfs(struct edt_ft5x06_ts_data *tsdata,
  636. const char *debugfs_name)
  637. {
  638. }
  639. static inline void
  640. edt_ft5x06_ts_teardown_debugfs(struct edt_ft5x06_ts_data *tsdata)
  641. {
  642. }
  643. #endif /* CONFIG_DEBUGFS */
  644. static int edt_ft5x06_ts_identify(struct i2c_client *client,
  645. struct edt_ft5x06_ts_data *tsdata,
  646. char *fw_version)
  647. {
  648. u8 rdbuf[EDT_NAME_LEN];
  649. char *p;
  650. int error;
  651. char *model_name = tsdata->name;
  652. /* see what we find if we assume it is a M06 *
  653. * if we get less than EDT_NAME_LEN, we don't want
  654. * to have garbage in there
  655. */
  656. memset(rdbuf, 0, sizeof(rdbuf));
  657. error = edt_ft5x06_ts_readwrite(client, 1, "\xBB",
  658. EDT_NAME_LEN - 1, rdbuf);
  659. if (error)
  660. return error;
  661. /* Probe content for something consistent.
  662. * M06 starts with a response byte, M12 gives the data directly.
  663. * M09/Generic does not provide model number information.
  664. */
  665. if (!strncasecmp(rdbuf + 1, "EP0", 3)) {
  666. tsdata->version = EDT_M06;
  667. /* remove last '$' end marker */
  668. rdbuf[EDT_NAME_LEN - 1] = '\0';
  669. if (rdbuf[EDT_NAME_LEN - 2] == '$')
  670. rdbuf[EDT_NAME_LEN - 2] = '\0';
  671. /* look for Model/Version separator */
  672. p = strchr(rdbuf, '*');
  673. if (p)
  674. *p++ = '\0';
  675. strlcpy(model_name, rdbuf + 1, EDT_NAME_LEN);
  676. strlcpy(fw_version, p ? p : "", EDT_NAME_LEN);
  677. } else if (!strncasecmp(rdbuf, "EP0", 3)) {
  678. tsdata->version = EDT_M12;
  679. /* remove last '$' end marker */
  680. rdbuf[EDT_NAME_LEN - 2] = '\0';
  681. if (rdbuf[EDT_NAME_LEN - 3] == '$')
  682. rdbuf[EDT_NAME_LEN - 3] = '\0';
  683. /* look for Model/Version separator */
  684. p = strchr(rdbuf, '*');
  685. if (p)
  686. *p++ = '\0';
  687. strlcpy(model_name, rdbuf, EDT_NAME_LEN);
  688. strlcpy(fw_version, p ? p : "", EDT_NAME_LEN);
  689. } else {
  690. /* If it is not an EDT M06/M12 touchscreen, then the model
  691. * detection is a bit hairy. The different ft5x06
  692. * firmares around don't reliably implement the
  693. * identification registers. Well, we'll take a shot.
  694. *
  695. * The main difference between generic focaltec based
  696. * touches and EDT M09 is that we know how to retrieve
  697. * the max coordinates for the latter.
  698. */
  699. tsdata->version = GENERIC_FT;
  700. error = edt_ft5x06_ts_readwrite(client, 1, "\xA6",
  701. 2, rdbuf);
  702. if (error)
  703. return error;
  704. strlcpy(fw_version, rdbuf, 2);
  705. error = edt_ft5x06_ts_readwrite(client, 1, "\xA8",
  706. 1, rdbuf);
  707. if (error)
  708. return error;
  709. /* This "model identification" is not exact. Unfortunately
  710. * not all firmwares for the ft5x06 put useful values in
  711. * the identification registers.
  712. */
  713. switch (rdbuf[0]) {
  714. case 0x35: /* EDT EP0350M09 */
  715. case 0x43: /* EDT EP0430M09 */
  716. case 0x50: /* EDT EP0500M09 */
  717. case 0x57: /* EDT EP0570M09 */
  718. case 0x70: /* EDT EP0700M09 */
  719. tsdata->version = EDT_M09;
  720. snprintf(model_name, EDT_NAME_LEN, "EP0%i%i0M09",
  721. rdbuf[0] >> 4, rdbuf[0] & 0x0F);
  722. break;
  723. case 0xa1: /* EDT EP1010ML00 */
  724. tsdata->version = EDT_M09;
  725. snprintf(model_name, EDT_NAME_LEN, "EP%i%i0ML00",
  726. rdbuf[0] >> 4, rdbuf[0] & 0x0F);
  727. break;
  728. case 0x5a: /* Solomon Goldentek Display */
  729. snprintf(model_name, EDT_NAME_LEN, "GKTW50SCED1R0");
  730. break;
  731. default:
  732. snprintf(model_name, EDT_NAME_LEN,
  733. "generic ft5x06 (%02x)",
  734. rdbuf[0]);
  735. break;
  736. }
  737. }
  738. return 0;
  739. }
  740. static void edt_ft5x06_ts_get_defaults(struct device *dev,
  741. struct edt_ft5x06_ts_data *tsdata)
  742. {
  743. struct edt_reg_addr *reg_addr = &tsdata->reg_addr;
  744. u32 val;
  745. int error;
  746. error = device_property_read_u32(dev, "threshold", &val);
  747. if (!error) {
  748. edt_ft5x06_register_write(tsdata, reg_addr->reg_threshold, val);
  749. tsdata->threshold = val;
  750. }
  751. error = device_property_read_u32(dev, "gain", &val);
  752. if (!error) {
  753. edt_ft5x06_register_write(tsdata, reg_addr->reg_gain, val);
  754. tsdata->gain = val;
  755. }
  756. error = device_property_read_u32(dev, "offset", &val);
  757. if (!error) {
  758. edt_ft5x06_register_write(tsdata, reg_addr->reg_offset, val);
  759. tsdata->offset = val;
  760. }
  761. }
  762. static void
  763. edt_ft5x06_ts_get_parameters(struct edt_ft5x06_ts_data *tsdata)
  764. {
  765. struct edt_reg_addr *reg_addr = &tsdata->reg_addr;
  766. tsdata->threshold = edt_ft5x06_register_read(tsdata,
  767. reg_addr->reg_threshold);
  768. tsdata->gain = edt_ft5x06_register_read(tsdata, reg_addr->reg_gain);
  769. tsdata->offset = edt_ft5x06_register_read(tsdata, reg_addr->reg_offset);
  770. if (reg_addr->reg_report_rate != NO_REGISTER)
  771. tsdata->report_rate = edt_ft5x06_register_read(tsdata,
  772. reg_addr->reg_report_rate);
  773. if (tsdata->version == EDT_M06 ||
  774. tsdata->version == EDT_M09 ||
  775. tsdata->version == EDT_M12) {
  776. tsdata->num_x = edt_ft5x06_register_read(tsdata,
  777. reg_addr->reg_num_x);
  778. tsdata->num_y = edt_ft5x06_register_read(tsdata,
  779. reg_addr->reg_num_y);
  780. } else {
  781. tsdata->num_x = -1;
  782. tsdata->num_y = -1;
  783. }
  784. }
  785. static void
  786. edt_ft5x06_ts_set_regs(struct edt_ft5x06_ts_data *tsdata)
  787. {
  788. struct edt_reg_addr *reg_addr = &tsdata->reg_addr;
  789. switch (tsdata->version) {
  790. case EDT_M06:
  791. reg_addr->reg_threshold = WORK_REGISTER_THRESHOLD;
  792. reg_addr->reg_report_rate = WORK_REGISTER_REPORT_RATE;
  793. reg_addr->reg_gain = WORK_REGISTER_GAIN;
  794. reg_addr->reg_offset = WORK_REGISTER_OFFSET;
  795. reg_addr->reg_num_x = WORK_REGISTER_NUM_X;
  796. reg_addr->reg_num_y = WORK_REGISTER_NUM_Y;
  797. break;
  798. case EDT_M09:
  799. case EDT_M12:
  800. reg_addr->reg_threshold = M09_REGISTER_THRESHOLD;
  801. reg_addr->reg_report_rate = NO_REGISTER;
  802. reg_addr->reg_gain = M09_REGISTER_GAIN;
  803. reg_addr->reg_offset = M09_REGISTER_OFFSET;
  804. reg_addr->reg_num_x = M09_REGISTER_NUM_X;
  805. reg_addr->reg_num_y = M09_REGISTER_NUM_Y;
  806. break;
  807. case GENERIC_FT:
  808. /* this is a guesswork */
  809. reg_addr->reg_threshold = M09_REGISTER_THRESHOLD;
  810. reg_addr->reg_gain = M09_REGISTER_GAIN;
  811. reg_addr->reg_offset = M09_REGISTER_OFFSET;
  812. break;
  813. }
  814. }
  815. static int edt_ft5x06_ts_probe(struct i2c_client *client,
  816. const struct i2c_device_id *id)
  817. {
  818. const struct edt_i2c_chip_data *chip_data;
  819. struct edt_ft5x06_ts_data *tsdata;
  820. u8 buf[2] = { 0xfc, 0x00 };
  821. struct input_dev *input;
  822. unsigned long irq_flags;
  823. int error;
  824. char fw_version[EDT_NAME_LEN];
  825. dev_dbg(&client->dev, "probing for EDT FT5x06 I2C\n");
  826. tsdata = devm_kzalloc(&client->dev, sizeof(*tsdata), GFP_KERNEL);
  827. if (!tsdata) {
  828. dev_err(&client->dev, "failed to allocate driver data.\n");
  829. return -ENOMEM;
  830. }
  831. chip_data = of_device_get_match_data(&client->dev);
  832. if (!chip_data)
  833. chip_data = (const struct edt_i2c_chip_data *)id->driver_data;
  834. if (!chip_data || !chip_data->max_support_points) {
  835. dev_err(&client->dev, "invalid or missing chip data\n");
  836. return -EINVAL;
  837. }
  838. tsdata->max_support_points = chip_data->max_support_points;
  839. tsdata->reset_gpio = devm_gpiod_get_optional(&client->dev,
  840. "reset", GPIOD_OUT_HIGH);
  841. if (IS_ERR(tsdata->reset_gpio)) {
  842. error = PTR_ERR(tsdata->reset_gpio);
  843. dev_err(&client->dev,
  844. "Failed to request GPIO reset pin, error %d\n", error);
  845. return error;
  846. }
  847. tsdata->wake_gpio = devm_gpiod_get_optional(&client->dev,
  848. "wake", GPIOD_OUT_LOW);
  849. if (IS_ERR(tsdata->wake_gpio)) {
  850. error = PTR_ERR(tsdata->wake_gpio);
  851. dev_err(&client->dev,
  852. "Failed to request GPIO wake pin, error %d\n", error);
  853. return error;
  854. }
  855. if (tsdata->wake_gpio) {
  856. usleep_range(5000, 6000);
  857. gpiod_set_value_cansleep(tsdata->wake_gpio, 1);
  858. }
  859. if (tsdata->reset_gpio) {
  860. usleep_range(5000, 6000);
  861. gpiod_set_value_cansleep(tsdata->reset_gpio, 0);
  862. msleep(300);
  863. }
  864. input = devm_input_allocate_device(&client->dev);
  865. if (!input) {
  866. dev_err(&client->dev, "failed to allocate input device.\n");
  867. return -ENOMEM;
  868. }
  869. mutex_init(&tsdata->mutex);
  870. tsdata->client = client;
  871. tsdata->input = input;
  872. tsdata->factory_mode = false;
  873. error = edt_ft5x06_ts_identify(client, tsdata, fw_version);
  874. if (error) {
  875. dev_err(&client->dev, "touchscreen probe failed\n");
  876. return error;
  877. }
  878. /*
  879. * Dummy read access. EP0700MLP1 returns bogus data on the first
  880. * register read access and ignores writes.
  881. */
  882. edt_ft5x06_ts_readwrite(tsdata->client, 2, buf, 2, buf);
  883. edt_ft5x06_ts_set_regs(tsdata);
  884. edt_ft5x06_ts_get_defaults(&client->dev, tsdata);
  885. edt_ft5x06_ts_get_parameters(tsdata);
  886. dev_dbg(&client->dev,
  887. "Model \"%s\", Rev. \"%s\", %dx%d sensors\n",
  888. tsdata->name, fw_version, tsdata->num_x, tsdata->num_y);
  889. input->name = tsdata->name;
  890. input->id.bustype = BUS_I2C;
  891. input->dev.parent = &client->dev;
  892. if (tsdata->version == EDT_M06 ||
  893. tsdata->version == EDT_M09 ||
  894. tsdata->version == EDT_M12) {
  895. input_set_abs_params(input, ABS_MT_POSITION_X,
  896. 0, tsdata->num_x * 64 - 1, 0, 0);
  897. input_set_abs_params(input, ABS_MT_POSITION_Y,
  898. 0, tsdata->num_y * 64 - 1, 0, 0);
  899. } else {
  900. /* Unknown maximum values. Specify via devicetree */
  901. input_set_abs_params(input, ABS_MT_POSITION_X,
  902. 0, 65535, 0, 0);
  903. input_set_abs_params(input, ABS_MT_POSITION_Y,
  904. 0, 65535, 0, 0);
  905. }
  906. touchscreen_parse_properties(input, true, &tsdata->prop);
  907. error = input_mt_init_slots(input, tsdata->max_support_points,
  908. INPUT_MT_DIRECT);
  909. if (error) {
  910. dev_err(&client->dev, "Unable to init MT slots.\n");
  911. return error;
  912. }
  913. i2c_set_clientdata(client, tsdata);
  914. irq_flags = irq_get_trigger_type(client->irq);
  915. if (irq_flags == IRQF_TRIGGER_NONE)
  916. irq_flags = IRQF_TRIGGER_FALLING;
  917. irq_flags |= IRQF_ONESHOT;
  918. error = devm_request_threaded_irq(&client->dev, client->irq,
  919. NULL, edt_ft5x06_ts_isr, irq_flags,
  920. client->name, tsdata);
  921. if (error) {
  922. dev_err(&client->dev, "Unable to request touchscreen IRQ.\n");
  923. return error;
  924. }
  925. error = devm_device_add_group(&client->dev, &edt_ft5x06_attr_group);
  926. if (error)
  927. return error;
  928. error = input_register_device(input);
  929. if (error)
  930. return error;
  931. edt_ft5x06_ts_prepare_debugfs(tsdata, dev_driver_string(&client->dev));
  932. device_init_wakeup(&client->dev, 1);
  933. dev_dbg(&client->dev,
  934. "EDT FT5x06 initialized: IRQ %d, WAKE pin %d, Reset pin %d.\n",
  935. client->irq,
  936. tsdata->wake_gpio ? desc_to_gpio(tsdata->wake_gpio) : -1,
  937. tsdata->reset_gpio ? desc_to_gpio(tsdata->reset_gpio) : -1);
  938. return 0;
  939. }
  940. static int edt_ft5x06_ts_remove(struct i2c_client *client)
  941. {
  942. struct edt_ft5x06_ts_data *tsdata = i2c_get_clientdata(client);
  943. edt_ft5x06_ts_teardown_debugfs(tsdata);
  944. return 0;
  945. }
  946. static int __maybe_unused edt_ft5x06_ts_suspend(struct device *dev)
  947. {
  948. struct i2c_client *client = to_i2c_client(dev);
  949. if (device_may_wakeup(dev))
  950. enable_irq_wake(client->irq);
  951. return 0;
  952. }
  953. static int __maybe_unused edt_ft5x06_ts_resume(struct device *dev)
  954. {
  955. struct i2c_client *client = to_i2c_client(dev);
  956. if (device_may_wakeup(dev))
  957. disable_irq_wake(client->irq);
  958. return 0;
  959. }
  960. static SIMPLE_DEV_PM_OPS(edt_ft5x06_ts_pm_ops,
  961. edt_ft5x06_ts_suspend, edt_ft5x06_ts_resume);
  962. static const struct edt_i2c_chip_data edt_ft5x06_data = {
  963. .max_support_points = 5,
  964. };
  965. static const struct edt_i2c_chip_data edt_ft5506_data = {
  966. .max_support_points = 10,
  967. };
  968. static const struct edt_i2c_chip_data edt_ft6236_data = {
  969. .max_support_points = 2,
  970. };
  971. static const struct i2c_device_id edt_ft5x06_ts_id[] = {
  972. { .name = "edt-ft5x06", .driver_data = (long)&edt_ft5x06_data },
  973. { .name = "edt-ft5506", .driver_data = (long)&edt_ft5506_data },
  974. /* Note no edt- prefix for compatibility with the ft6236.c driver */
  975. { .name = "ft6236", .driver_data = (long)&edt_ft6236_data },
  976. { /* sentinel */ }
  977. };
  978. MODULE_DEVICE_TABLE(i2c, edt_ft5x06_ts_id);
  979. #ifdef CONFIG_OF
  980. static const struct of_device_id edt_ft5x06_of_match[] = {
  981. { .compatible = "edt,edt-ft5206", .data = &edt_ft5x06_data },
  982. { .compatible = "edt,edt-ft5306", .data = &edt_ft5x06_data },
  983. { .compatible = "edt,edt-ft5406", .data = &edt_ft5x06_data },
  984. { .compatible = "edt,edt-ft5506", .data = &edt_ft5506_data },
  985. /* Note focaltech vendor prefix for compatibility with ft6236.c */
  986. { .compatible = "focaltech,ft6236", .data = &edt_ft6236_data },
  987. { /* sentinel */ }
  988. };
  989. MODULE_DEVICE_TABLE(of, edt_ft5x06_of_match);
  990. #endif
  991. static struct i2c_driver edt_ft5x06_ts_driver = {
  992. .driver = {
  993. .name = "edt_ft5x06",
  994. .of_match_table = of_match_ptr(edt_ft5x06_of_match),
  995. .pm = &edt_ft5x06_ts_pm_ops,
  996. },
  997. .id_table = edt_ft5x06_ts_id,
  998. .probe = edt_ft5x06_ts_probe,
  999. .remove = edt_ft5x06_ts_remove,
  1000. };
  1001. module_i2c_driver(edt_ft5x06_ts_driver);
  1002. MODULE_AUTHOR("Simon Budig <simon.budig@kernelconcepts.de>");
  1003. MODULE_DESCRIPTION("EDT FT5x06 I2C Touchscreen Driver");
  1004. MODULE_LICENSE("GPL");