edt-ft5x06.c 40 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556
  1. // SPDX-License-Identifier: GPL-2.0
  2. /*
  3. * Copyright (C) 2012 Simon Budig, <simon.budig@kernelconcepts.de>
  4. * Daniel Wagener <daniel.wagener@kernelconcepts.de> (M09 firmware support)
  5. * Lothar Waßmann <LW@KARO-electronics.de> (DT support)
  6. * Dario Binacchi <dario.binacchi@amarulasolutions.com> (regmap support)
  7. */
  8. /*
  9. * This is a driver for the EDT "Polytouch" family of touch controllers
  10. * based on the FocalTech FT5x06 line of chips.
  11. *
  12. * Development of this driver has been sponsored by Glyn:
  13. * http://www.glyn.com/Products/Displays
  14. */
  15. #include <linux/debugfs.h>
  16. #include <linux/delay.h>
  17. #include <linux/gpio/consumer.h>
  18. #include <linux/i2c.h>
  19. #include <linux/interrupt.h>
  20. #include <linux/input.h>
  21. #include <linux/input/mt.h>
  22. #include <linux/input/touchscreen.h>
  23. #include <linux/irq.h>
  24. #include <linux/kernel.h>
  25. #include <linux/module.h>
  26. #include <linux/property.h>
  27. #include <linux/ratelimit.h>
  28. #include <linux/regmap.h>
  29. #include <linux/regulator/consumer.h>
  30. #include <linux/slab.h>
  31. #include <linux/uaccess.h>
  32. #include <linux/unaligned.h>
  33. #define WORK_REGISTER_THRESHOLD 0x00
  34. #define WORK_REGISTER_REPORT_RATE 0x08
  35. #define WORK_REGISTER_GAIN 0x30
  36. #define WORK_REGISTER_OFFSET 0x31
  37. #define WORK_REGISTER_NUM_X 0x33
  38. #define WORK_REGISTER_NUM_Y 0x34
  39. #define PMOD_REGISTER_ACTIVE 0x00
  40. #define PMOD_REGISTER_HIBERNATE 0x03
  41. #define M09_REGISTER_THRESHOLD 0x80
  42. #define M09_REGISTER_GAIN 0x92
  43. #define M09_REGISTER_OFFSET 0x93
  44. #define M09_REGISTER_NUM_X 0x94
  45. #define M09_REGISTER_NUM_Y 0x95
  46. #define M12_REGISTER_REPORT_RATE 0x88
  47. #define EV_REGISTER_THRESHOLD 0x40
  48. #define EV_REGISTER_GAIN 0x41
  49. #define EV_REGISTER_OFFSET_Y 0x45
  50. #define EV_REGISTER_OFFSET_X 0x46
  51. #define NO_REGISTER 0xff
  52. #define WORK_REGISTER_OPMODE 0x3c
  53. #define FACTORY_REGISTER_OPMODE 0x01
  54. #define PMOD_REGISTER_OPMODE 0xa5
  55. #define TOUCH_EVENT_DOWN 0x00
  56. #define TOUCH_EVENT_UP 0x01
  57. #define TOUCH_EVENT_ON 0x02
  58. #define TOUCH_EVENT_RESERVED 0x03
  59. #define EDT_NAME_LEN 23
  60. #define EDT_SWITCH_MODE_RETRIES 10
  61. #define EDT_SWITCH_MODE_DELAY 5 /* msec */
  62. #define EDT_RAW_DATA_RETRIES 100
  63. #define EDT_RAW_DATA_DELAY 1000 /* usec */
  64. #define EDT_DEFAULT_NUM_X 1024
  65. #define EDT_DEFAULT_NUM_Y 1024
  66. #define M06_REG_CMD(factory) ((factory) ? 0xf3 : 0xfc)
  67. #define M06_REG_ADDR(factory, addr) ((factory) ? (addr) & 0x7f : (addr) & 0x3f)
  68. enum edt_pmode {
  69. EDT_PMODE_NOT_SUPPORTED,
  70. EDT_PMODE_HIBERNATE,
  71. EDT_PMODE_POWEROFF,
  72. };
  73. enum edt_ver {
  74. EDT_M06,
  75. EDT_M09,
  76. EDT_M12,
  77. EV_FT,
  78. GENERIC_FT,
  79. };
  80. struct edt_reg_addr {
  81. int reg_threshold;
  82. int reg_report_rate;
  83. int reg_gain;
  84. int reg_offset;
  85. int reg_offset_x;
  86. int reg_offset_y;
  87. int reg_num_x;
  88. int reg_num_y;
  89. };
  90. struct edt_ft5x06_ts_data {
  91. struct i2c_client *client;
  92. struct input_dev *input;
  93. struct touchscreen_properties prop;
  94. u16 num_x;
  95. u16 num_y;
  96. struct regulator *vcc;
  97. struct regulator *iovcc;
  98. struct gpio_desc *reset_gpio;
  99. struct gpio_desc *wake_gpio;
  100. struct regmap *regmap;
  101. #if defined(CONFIG_DEBUG_FS)
  102. u8 *raw_buffer;
  103. size_t raw_bufsize;
  104. #endif
  105. struct mutex mutex;
  106. bool factory_mode;
  107. enum edt_pmode suspend_mode;
  108. int threshold;
  109. int gain;
  110. int offset;
  111. int offset_x;
  112. int offset_y;
  113. int report_rate;
  114. int max_support_points;
  115. int point_len;
  116. u8 tdata_cmd;
  117. int tdata_len;
  118. int tdata_offset;
  119. char name[EDT_NAME_LEN];
  120. char fw_version[EDT_NAME_LEN];
  121. struct edt_reg_addr reg_addr;
  122. enum edt_ver version;
  123. unsigned int crc_errors;
  124. unsigned int header_errors;
  125. };
  126. struct edt_i2c_chip_data {
  127. int max_support_points;
  128. };
  129. static const struct regmap_config edt_ft5x06_i2c_regmap_config = {
  130. .reg_bits = 8,
  131. .val_bits = 8,
  132. };
  133. static bool edt_ft5x06_ts_check_crc(struct edt_ft5x06_ts_data *tsdata,
  134. u8 *buf, int buflen)
  135. {
  136. int i;
  137. u8 crc = 0;
  138. for (i = 0; i < buflen - 1; i++)
  139. crc ^= buf[i];
  140. if (crc != buf[buflen - 1]) {
  141. tsdata->crc_errors++;
  142. dev_err_ratelimited(&tsdata->client->dev,
  143. "crc error: 0x%02x expected, got 0x%02x\n",
  144. crc, buf[buflen - 1]);
  145. return false;
  146. }
  147. return true;
  148. }
  149. static int edt_M06_i2c_read(void *context, const void *reg_buf, size_t reg_size,
  150. void *val_buf, size_t val_size)
  151. {
  152. struct device *dev = context;
  153. struct i2c_client *i2c = to_i2c_client(dev);
  154. struct edt_ft5x06_ts_data *tsdata = i2c_get_clientdata(i2c);
  155. struct i2c_msg xfer[2];
  156. bool reg_read = false;
  157. u8 addr;
  158. u8 wlen;
  159. u8 wbuf[4], rbuf[3];
  160. int ret;
  161. addr = *((u8 *)reg_buf);
  162. wbuf[0] = addr;
  163. switch (addr) {
  164. case 0xf5:
  165. wlen = 3;
  166. wbuf[0] = 0xf5;
  167. wbuf[1] = 0xe;
  168. wbuf[2] = *((u8 *)val_buf);
  169. break;
  170. case 0xf9:
  171. wlen = 1;
  172. break;
  173. default:
  174. wlen = 2;
  175. reg_read = true;
  176. wbuf[0] = M06_REG_CMD(tsdata->factory_mode);
  177. wbuf[1] = M06_REG_ADDR(tsdata->factory_mode, addr);
  178. wbuf[1] |= tsdata->factory_mode ? 0x80 : 0x40;
  179. }
  180. xfer[0].addr = i2c->addr;
  181. xfer[0].flags = 0;
  182. xfer[0].len = wlen;
  183. xfer[0].buf = wbuf;
  184. xfer[1].addr = i2c->addr;
  185. xfer[1].flags = I2C_M_RD;
  186. xfer[1].len = reg_read ? 2 : val_size;
  187. xfer[1].buf = reg_read ? rbuf : val_buf;
  188. ret = i2c_transfer(i2c->adapter, xfer, 2);
  189. if (ret != 2) {
  190. if (ret < 0)
  191. return ret;
  192. return -EIO;
  193. }
  194. if (addr == 0xf9) {
  195. u8 *buf = (u8 *)val_buf;
  196. if (buf[0] != 0xaa || buf[1] != 0xaa ||
  197. buf[2] != val_size) {
  198. tsdata->header_errors++;
  199. dev_err_ratelimited(dev,
  200. "Unexpected header: %02x%02x%02x\n",
  201. buf[0], buf[1], buf[2]);
  202. return -EIO;
  203. }
  204. if (!edt_ft5x06_ts_check_crc(tsdata, val_buf, val_size))
  205. return -EIO;
  206. } else if (reg_read) {
  207. wbuf[2] = rbuf[0];
  208. wbuf[3] = rbuf[1];
  209. if (!edt_ft5x06_ts_check_crc(tsdata, wbuf, 4))
  210. return -EIO;
  211. *((u8 *)val_buf) = rbuf[0];
  212. }
  213. return 0;
  214. }
  215. static int edt_M06_i2c_write(void *context, const void *data, size_t count)
  216. {
  217. struct device *dev = context;
  218. struct i2c_client *i2c = to_i2c_client(dev);
  219. struct edt_ft5x06_ts_data *tsdata = i2c_get_clientdata(i2c);
  220. u8 addr, val;
  221. u8 wbuf[4];
  222. struct i2c_msg xfer;
  223. int ret;
  224. addr = *((u8 *)data);
  225. val = *((u8 *)data + 1);
  226. wbuf[0] = M06_REG_CMD(tsdata->factory_mode);
  227. wbuf[1] = M06_REG_ADDR(tsdata->factory_mode, addr);
  228. wbuf[2] = val;
  229. wbuf[3] = wbuf[0] ^ wbuf[1] ^ wbuf[2];
  230. xfer.addr = i2c->addr;
  231. xfer.flags = 0;
  232. xfer.len = 4;
  233. xfer.buf = wbuf;
  234. ret = i2c_transfer(i2c->adapter, &xfer, 1);
  235. if (ret != 1) {
  236. if (ret < 0)
  237. return ret;
  238. return -EIO;
  239. }
  240. return 0;
  241. }
  242. static const struct regmap_config edt_M06_i2c_regmap_config = {
  243. .reg_bits = 8,
  244. .val_bits = 8,
  245. .read = edt_M06_i2c_read,
  246. .write = edt_M06_i2c_write,
  247. };
  248. static irqreturn_t edt_ft5x06_ts_isr(int irq, void *dev_id)
  249. {
  250. struct edt_ft5x06_ts_data *tsdata = dev_id;
  251. struct device *dev = &tsdata->client->dev;
  252. u8 rdbuf[63];
  253. int i, type, x, y, id;
  254. int error;
  255. memset(rdbuf, 0, sizeof(rdbuf));
  256. error = regmap_bulk_read(tsdata->regmap, tsdata->tdata_cmd, rdbuf,
  257. tsdata->tdata_len);
  258. if (error) {
  259. dev_err_ratelimited(dev, "Unable to fetch data, error: %d\n",
  260. error);
  261. goto out;
  262. }
  263. for (i = 0; i < tsdata->max_support_points; i++) {
  264. u8 *buf = &rdbuf[i * tsdata->point_len + tsdata->tdata_offset];
  265. type = buf[0] >> 6;
  266. /* ignore Reserved events */
  267. if (type == TOUCH_EVENT_RESERVED)
  268. continue;
  269. /* M06 sometimes sends bogus coordinates in TOUCH_DOWN */
  270. if (tsdata->version == EDT_M06 && type == TOUCH_EVENT_DOWN)
  271. continue;
  272. x = get_unaligned_be16(buf) & 0x0fff;
  273. y = get_unaligned_be16(buf + 2) & 0x0fff;
  274. /* The FT5x26 send the y coordinate first */
  275. if (tsdata->version == EV_FT)
  276. swap(x, y);
  277. id = (buf[2] >> 4) & 0x0f;
  278. input_mt_slot(tsdata->input, id);
  279. if (input_mt_report_slot_state(tsdata->input, MT_TOOL_FINGER,
  280. type != TOUCH_EVENT_UP))
  281. touchscreen_report_pos(tsdata->input, &tsdata->prop,
  282. x, y, true);
  283. }
  284. input_mt_report_pointer_emulation(tsdata->input, true);
  285. input_sync(tsdata->input);
  286. out:
  287. return IRQ_HANDLED;
  288. }
  289. struct edt_ft5x06_attribute {
  290. struct device_attribute dattr;
  291. size_t field_offset;
  292. u8 limit_low;
  293. u8 limit_high;
  294. u8 addr_m06;
  295. u8 addr_m09;
  296. u8 addr_ev;
  297. };
  298. #define EDT_ATTR(_field, _mode, _addr_m06, _addr_m09, _addr_ev, \
  299. _limit_low, _limit_high) \
  300. struct edt_ft5x06_attribute edt_ft5x06_attr_##_field = { \
  301. .dattr = __ATTR(_field, _mode, \
  302. edt_ft5x06_setting_show, \
  303. edt_ft5x06_setting_store), \
  304. .field_offset = offsetof(struct edt_ft5x06_ts_data, _field), \
  305. .addr_m06 = _addr_m06, \
  306. .addr_m09 = _addr_m09, \
  307. .addr_ev = _addr_ev, \
  308. .limit_low = _limit_low, \
  309. .limit_high = _limit_high, \
  310. }
  311. static ssize_t edt_ft5x06_setting_show(struct device *dev,
  312. struct device_attribute *dattr,
  313. char *buf)
  314. {
  315. struct i2c_client *client = to_i2c_client(dev);
  316. struct edt_ft5x06_ts_data *tsdata = i2c_get_clientdata(client);
  317. struct edt_ft5x06_attribute *attr =
  318. container_of(dattr, struct edt_ft5x06_attribute, dattr);
  319. u8 *field = (u8 *)tsdata + attr->field_offset;
  320. unsigned int val;
  321. size_t count = 0;
  322. int error = 0;
  323. u8 addr;
  324. mutex_lock(&tsdata->mutex);
  325. if (tsdata->factory_mode) {
  326. error = -EIO;
  327. goto out;
  328. }
  329. switch (tsdata->version) {
  330. case EDT_M06:
  331. addr = attr->addr_m06;
  332. break;
  333. case EDT_M09:
  334. case EDT_M12:
  335. case GENERIC_FT:
  336. addr = attr->addr_m09;
  337. break;
  338. case EV_FT:
  339. addr = attr->addr_ev;
  340. break;
  341. default:
  342. error = -ENODEV;
  343. goto out;
  344. }
  345. if (addr != NO_REGISTER) {
  346. error = regmap_read(tsdata->regmap, addr, &val);
  347. if (error) {
  348. dev_err(&tsdata->client->dev,
  349. "Failed to fetch attribute %s, error %d\n",
  350. dattr->attr.name, error);
  351. goto out;
  352. }
  353. } else {
  354. val = *field;
  355. }
  356. if (val != *field) {
  357. dev_warn(&tsdata->client->dev,
  358. "%s: read (%d) and stored value (%d) differ\n",
  359. dattr->attr.name, val, *field);
  360. *field = val;
  361. }
  362. count = sysfs_emit(buf, "%d\n", val);
  363. out:
  364. mutex_unlock(&tsdata->mutex);
  365. return error ?: count;
  366. }
  367. static ssize_t edt_ft5x06_setting_store(struct device *dev,
  368. struct device_attribute *dattr,
  369. const char *buf, size_t count)
  370. {
  371. struct i2c_client *client = to_i2c_client(dev);
  372. struct edt_ft5x06_ts_data *tsdata = i2c_get_clientdata(client);
  373. struct edt_ft5x06_attribute *attr =
  374. container_of(dattr, struct edt_ft5x06_attribute, dattr);
  375. u8 *field = (u8 *)tsdata + attr->field_offset;
  376. unsigned int val;
  377. int error;
  378. u8 addr;
  379. mutex_lock(&tsdata->mutex);
  380. if (tsdata->factory_mode) {
  381. error = -EIO;
  382. goto out;
  383. }
  384. error = kstrtouint(buf, 0, &val);
  385. if (error)
  386. goto out;
  387. if (val < attr->limit_low || val > attr->limit_high) {
  388. error = -ERANGE;
  389. goto out;
  390. }
  391. switch (tsdata->version) {
  392. case EDT_M06:
  393. addr = attr->addr_m06;
  394. break;
  395. case EDT_M09:
  396. case EDT_M12:
  397. case GENERIC_FT:
  398. addr = attr->addr_m09;
  399. break;
  400. case EV_FT:
  401. addr = attr->addr_ev;
  402. break;
  403. default:
  404. error = -ENODEV;
  405. goto out;
  406. }
  407. if (addr != NO_REGISTER) {
  408. error = regmap_write(tsdata->regmap, addr, val);
  409. if (error) {
  410. dev_err(&tsdata->client->dev,
  411. "Failed to update attribute %s, error: %d\n",
  412. dattr->attr.name, error);
  413. goto out;
  414. }
  415. }
  416. *field = val;
  417. out:
  418. mutex_unlock(&tsdata->mutex);
  419. return error ?: count;
  420. }
  421. /* m06, m09: range 0-31, m12: range 0-5 */
  422. static EDT_ATTR(gain, S_IWUSR | S_IRUGO, WORK_REGISTER_GAIN,
  423. M09_REGISTER_GAIN, EV_REGISTER_GAIN, 0, 31);
  424. /* m06, m09: range 0-31, m12: range 0-16 */
  425. static EDT_ATTR(offset, S_IWUSR | S_IRUGO, WORK_REGISTER_OFFSET,
  426. M09_REGISTER_OFFSET, NO_REGISTER, 0, 31);
  427. /* m06, m09, m12: no supported, ev_ft: range 0-80 */
  428. static EDT_ATTR(offset_x, S_IWUSR | S_IRUGO, NO_REGISTER, NO_REGISTER,
  429. EV_REGISTER_OFFSET_X, 0, 80);
  430. /* m06, m09, m12: no supported, ev_ft: range 0-80 */
  431. static EDT_ATTR(offset_y, S_IWUSR | S_IRUGO, NO_REGISTER, NO_REGISTER,
  432. EV_REGISTER_OFFSET_Y, 0, 80);
  433. /* m06: range 20 to 80, m09: range 0 to 30, m12: range 1 to 255... */
  434. static EDT_ATTR(threshold, S_IWUSR | S_IRUGO, WORK_REGISTER_THRESHOLD,
  435. M09_REGISTER_THRESHOLD, EV_REGISTER_THRESHOLD, 0, 255);
  436. /* m06: range 3 to 14, m12: range 1 to 255 */
  437. static EDT_ATTR(report_rate, S_IWUSR | S_IRUGO, WORK_REGISTER_REPORT_RATE,
  438. M12_REGISTER_REPORT_RATE, NO_REGISTER, 0, 255);
  439. static ssize_t model_show(struct device *dev, struct device_attribute *attr,
  440. char *buf)
  441. {
  442. struct i2c_client *client = to_i2c_client(dev);
  443. struct edt_ft5x06_ts_data *tsdata = i2c_get_clientdata(client);
  444. return sysfs_emit(buf, "%s\n", tsdata->name);
  445. }
  446. static DEVICE_ATTR_RO(model);
  447. static ssize_t fw_version_show(struct device *dev,
  448. struct device_attribute *attr, char *buf)
  449. {
  450. struct i2c_client *client = to_i2c_client(dev);
  451. struct edt_ft5x06_ts_data *tsdata = i2c_get_clientdata(client);
  452. return sysfs_emit(buf, "%s\n", tsdata->fw_version);
  453. }
  454. static DEVICE_ATTR_RO(fw_version);
  455. /* m06 only */
  456. static ssize_t header_errors_show(struct device *dev,
  457. struct device_attribute *attr, char *buf)
  458. {
  459. struct i2c_client *client = to_i2c_client(dev);
  460. struct edt_ft5x06_ts_data *tsdata = i2c_get_clientdata(client);
  461. return sysfs_emit(buf, "%d\n", tsdata->header_errors);
  462. }
  463. static DEVICE_ATTR_RO(header_errors);
  464. /* m06 only */
  465. static ssize_t crc_errors_show(struct device *dev,
  466. struct device_attribute *attr, char *buf)
  467. {
  468. struct i2c_client *client = to_i2c_client(dev);
  469. struct edt_ft5x06_ts_data *tsdata = i2c_get_clientdata(client);
  470. return sysfs_emit(buf, "%d\n", tsdata->crc_errors);
  471. }
  472. static DEVICE_ATTR_RO(crc_errors);
  473. static struct attribute *edt_ft5x06_attrs[] = {
  474. &edt_ft5x06_attr_gain.dattr.attr,
  475. &edt_ft5x06_attr_offset.dattr.attr,
  476. &edt_ft5x06_attr_offset_x.dattr.attr,
  477. &edt_ft5x06_attr_offset_y.dattr.attr,
  478. &edt_ft5x06_attr_threshold.dattr.attr,
  479. &edt_ft5x06_attr_report_rate.dattr.attr,
  480. &dev_attr_model.attr,
  481. &dev_attr_fw_version.attr,
  482. &dev_attr_header_errors.attr,
  483. &dev_attr_crc_errors.attr,
  484. NULL
  485. };
  486. ATTRIBUTE_GROUPS(edt_ft5x06);
  487. static void edt_ft5x06_restore_reg_parameters(struct edt_ft5x06_ts_data *tsdata)
  488. {
  489. struct edt_reg_addr *reg_addr = &tsdata->reg_addr;
  490. struct regmap *regmap = tsdata->regmap;
  491. regmap_write(regmap, reg_addr->reg_threshold, tsdata->threshold);
  492. regmap_write(regmap, reg_addr->reg_gain, tsdata->gain);
  493. if (reg_addr->reg_offset != NO_REGISTER)
  494. regmap_write(regmap, reg_addr->reg_offset, tsdata->offset);
  495. if (reg_addr->reg_offset_x != NO_REGISTER)
  496. regmap_write(regmap, reg_addr->reg_offset_x, tsdata->offset_x);
  497. if (reg_addr->reg_offset_y != NO_REGISTER)
  498. regmap_write(regmap, reg_addr->reg_offset_y, tsdata->offset_y);
  499. if (reg_addr->reg_report_rate != NO_REGISTER)
  500. regmap_write(regmap, reg_addr->reg_report_rate,
  501. tsdata->report_rate);
  502. }
  503. #ifdef CONFIG_DEBUG_FS
  504. static int edt_ft5x06_factory_mode(struct edt_ft5x06_ts_data *tsdata)
  505. {
  506. struct i2c_client *client = tsdata->client;
  507. int retries = EDT_SWITCH_MODE_RETRIES;
  508. unsigned int val;
  509. int error;
  510. if (tsdata->version != EDT_M06) {
  511. dev_err(&client->dev,
  512. "No factory mode support for non-M06 devices\n");
  513. return -EINVAL;
  514. }
  515. disable_irq(client->irq);
  516. if (!tsdata->raw_buffer) {
  517. tsdata->raw_bufsize = tsdata->num_x * tsdata->num_y *
  518. sizeof(u16);
  519. tsdata->raw_buffer = kzalloc(tsdata->raw_bufsize, GFP_KERNEL);
  520. if (!tsdata->raw_buffer) {
  521. error = -ENOMEM;
  522. goto err_out;
  523. }
  524. }
  525. /* mode register is 0x3c when in the work mode */
  526. error = regmap_write(tsdata->regmap, WORK_REGISTER_OPMODE, 0x03);
  527. if (error) {
  528. dev_err(&client->dev,
  529. "failed to switch to factory mode, error %d\n", error);
  530. goto err_out;
  531. }
  532. tsdata->factory_mode = true;
  533. do {
  534. mdelay(EDT_SWITCH_MODE_DELAY);
  535. /* mode register is 0x01 when in factory mode */
  536. error = regmap_read(tsdata->regmap, FACTORY_REGISTER_OPMODE,
  537. &val);
  538. if (!error && val == 0x03)
  539. break;
  540. } while (--retries > 0);
  541. if (retries == 0) {
  542. dev_err(&client->dev, "not in factory mode after %dms.\n",
  543. EDT_SWITCH_MODE_RETRIES * EDT_SWITCH_MODE_DELAY);
  544. error = -EIO;
  545. goto err_out;
  546. }
  547. return 0;
  548. err_out:
  549. kfree(tsdata->raw_buffer);
  550. tsdata->raw_buffer = NULL;
  551. tsdata->factory_mode = false;
  552. enable_irq(client->irq);
  553. return error;
  554. }
  555. static int edt_ft5x06_work_mode(struct edt_ft5x06_ts_data *tsdata)
  556. {
  557. struct i2c_client *client = tsdata->client;
  558. int retries = EDT_SWITCH_MODE_RETRIES;
  559. unsigned int val;
  560. int error;
  561. /* mode register is 0x01 when in the factory mode */
  562. error = regmap_write(tsdata->regmap, FACTORY_REGISTER_OPMODE, 0x1);
  563. if (error) {
  564. dev_err(&client->dev,
  565. "failed to switch to work mode, error: %d\n", error);
  566. return error;
  567. }
  568. tsdata->factory_mode = false;
  569. do {
  570. mdelay(EDT_SWITCH_MODE_DELAY);
  571. /* mode register is 0x01 when in factory mode */
  572. error = regmap_read(tsdata->regmap, WORK_REGISTER_OPMODE, &val);
  573. if (!error && val == 0x01)
  574. break;
  575. } while (--retries > 0);
  576. if (retries == 0) {
  577. dev_err(&client->dev, "not in work mode after %dms.\n",
  578. EDT_SWITCH_MODE_RETRIES * EDT_SWITCH_MODE_DELAY);
  579. tsdata->factory_mode = true;
  580. return -EIO;
  581. }
  582. kfree(tsdata->raw_buffer);
  583. tsdata->raw_buffer = NULL;
  584. edt_ft5x06_restore_reg_parameters(tsdata);
  585. enable_irq(client->irq);
  586. return 0;
  587. }
  588. static int edt_ft5x06_debugfs_mode_get(void *data, u64 *mode)
  589. {
  590. struct edt_ft5x06_ts_data *tsdata = data;
  591. *mode = tsdata->factory_mode;
  592. return 0;
  593. };
  594. static int edt_ft5x06_debugfs_mode_set(void *data, u64 mode)
  595. {
  596. struct edt_ft5x06_ts_data *tsdata = data;
  597. int retval = 0;
  598. if (mode > 1)
  599. return -ERANGE;
  600. mutex_lock(&tsdata->mutex);
  601. if (mode != tsdata->factory_mode) {
  602. retval = mode ? edt_ft5x06_factory_mode(tsdata) :
  603. edt_ft5x06_work_mode(tsdata);
  604. }
  605. mutex_unlock(&tsdata->mutex);
  606. return retval;
  607. };
  608. DEFINE_SIMPLE_ATTRIBUTE(debugfs_mode_fops, edt_ft5x06_debugfs_mode_get,
  609. edt_ft5x06_debugfs_mode_set, "%llu\n");
  610. static ssize_t edt_ft5x06_debugfs_raw_data_read(struct file *file,
  611. char __user *buf, size_t count,
  612. loff_t *off)
  613. {
  614. struct edt_ft5x06_ts_data *tsdata = file->private_data;
  615. struct i2c_client *client = tsdata->client;
  616. int retries = EDT_RAW_DATA_RETRIES;
  617. unsigned int val;
  618. int i, error;
  619. size_t read = 0;
  620. int colbytes;
  621. u8 *rdbuf;
  622. if (*off < 0 || *off >= tsdata->raw_bufsize)
  623. return 0;
  624. mutex_lock(&tsdata->mutex);
  625. if (!tsdata->factory_mode || !tsdata->raw_buffer) {
  626. error = -EIO;
  627. goto out;
  628. }
  629. error = regmap_write(tsdata->regmap, 0x08, 0x01);
  630. if (error) {
  631. dev_err(&client->dev,
  632. "failed to write 0x08 register, error %d\n", error);
  633. goto out;
  634. }
  635. do {
  636. usleep_range(EDT_RAW_DATA_DELAY, EDT_RAW_DATA_DELAY + 100);
  637. error = regmap_read(tsdata->regmap, 0x08, &val);
  638. if (error) {
  639. dev_err(&client->dev,
  640. "failed to read 0x08 register, error %d\n",
  641. error);
  642. goto out;
  643. }
  644. if (val == 1)
  645. break;
  646. } while (--retries > 0);
  647. if (retries == 0) {
  648. dev_err(&client->dev,
  649. "timed out waiting for register to settle\n");
  650. error = -ETIMEDOUT;
  651. goto out;
  652. }
  653. rdbuf = tsdata->raw_buffer;
  654. colbytes = tsdata->num_y * sizeof(u16);
  655. for (i = 0; i < tsdata->num_x; i++) {
  656. rdbuf[0] = i; /* column index */
  657. error = regmap_bulk_read(tsdata->regmap, 0xf5, rdbuf, colbytes);
  658. if (error)
  659. goto out;
  660. rdbuf += colbytes;
  661. }
  662. read = min_t(size_t, count, tsdata->raw_bufsize - *off);
  663. if (copy_to_user(buf, tsdata->raw_buffer + *off, read)) {
  664. error = -EFAULT;
  665. goto out;
  666. }
  667. *off += read;
  668. out:
  669. mutex_unlock(&tsdata->mutex);
  670. return error ?: read;
  671. };
  672. static const struct file_operations debugfs_raw_data_fops = {
  673. .open = simple_open,
  674. .read = edt_ft5x06_debugfs_raw_data_read,
  675. };
  676. static void edt_ft5x06_ts_prepare_debugfs(struct edt_ft5x06_ts_data *tsdata)
  677. {
  678. struct dentry *debug_dir = tsdata->client->debugfs;
  679. debugfs_create_u16("num_x", S_IRUSR, debug_dir, &tsdata->num_x);
  680. debugfs_create_u16("num_y", S_IRUSR, debug_dir, &tsdata->num_y);
  681. debugfs_create_file("mode", S_IRUSR | S_IWUSR,
  682. debug_dir, tsdata, &debugfs_mode_fops);
  683. debugfs_create_file("raw_data", S_IRUSR,
  684. debug_dir, tsdata, &debugfs_raw_data_fops);
  685. }
  686. static void edt_ft5x06_ts_teardown_debugfs(struct edt_ft5x06_ts_data *tsdata)
  687. {
  688. kfree(tsdata->raw_buffer);
  689. }
  690. #else
  691. static int edt_ft5x06_factory_mode(struct edt_ft5x06_ts_data *tsdata)
  692. {
  693. return -ENOSYS;
  694. }
  695. static void edt_ft5x06_ts_prepare_debugfs(struct edt_ft5x06_ts_data *tsdata)
  696. {
  697. }
  698. static void edt_ft5x06_ts_teardown_debugfs(struct edt_ft5x06_ts_data *tsdata)
  699. {
  700. }
  701. #endif /* CONFIG_DEBUGFS */
  702. static int edt_ft5x06_ts_identify(struct i2c_client *client,
  703. struct edt_ft5x06_ts_data *tsdata)
  704. {
  705. u8 rdbuf[EDT_NAME_LEN];
  706. char *p;
  707. int error;
  708. char *model_name = tsdata->name;
  709. char *fw_version = tsdata->fw_version;
  710. /* see what we find if we assume it is a M06 *
  711. * if we get less than EDT_NAME_LEN, we don't want
  712. * to have garbage in there
  713. */
  714. memset(rdbuf, 0, sizeof(rdbuf));
  715. error = regmap_bulk_read(tsdata->regmap, 0xBB, rdbuf, EDT_NAME_LEN - 1);
  716. if (error)
  717. return error;
  718. /* Probe content for something consistent.
  719. * M06 starts with a response byte, M12 gives the data directly.
  720. * M09/Generic does not provide model number information.
  721. */
  722. if (!strncasecmp(rdbuf + 1, "EP0", 3)) {
  723. tsdata->version = EDT_M06;
  724. /* remove last '$' end marker */
  725. rdbuf[EDT_NAME_LEN - 1] = '\0';
  726. if (rdbuf[EDT_NAME_LEN - 2] == '$')
  727. rdbuf[EDT_NAME_LEN - 2] = '\0';
  728. /* look for Model/Version separator */
  729. p = strchr(rdbuf, '*');
  730. if (p)
  731. *p++ = '\0';
  732. strscpy(model_name, rdbuf + 1, EDT_NAME_LEN);
  733. strscpy(fw_version, p ? p : "", EDT_NAME_LEN);
  734. regmap_exit(tsdata->regmap);
  735. tsdata->regmap = regmap_init_i2c(client,
  736. &edt_M06_i2c_regmap_config);
  737. if (IS_ERR(tsdata->regmap)) {
  738. dev_err(&client->dev, "regmap allocation failed\n");
  739. return PTR_ERR(tsdata->regmap);
  740. }
  741. } else if (!strncasecmp(rdbuf, "EP0", 3)) {
  742. tsdata->version = EDT_M12;
  743. /* remove last '$' end marker */
  744. rdbuf[EDT_NAME_LEN - 2] = '\0';
  745. if (rdbuf[EDT_NAME_LEN - 3] == '$')
  746. rdbuf[EDT_NAME_LEN - 3] = '\0';
  747. /* look for Model/Version separator */
  748. p = strchr(rdbuf, '*');
  749. if (p)
  750. *p++ = '\0';
  751. strscpy(model_name, rdbuf, EDT_NAME_LEN);
  752. strscpy(fw_version, p ? p : "", EDT_NAME_LEN);
  753. } else {
  754. /* If it is not an EDT M06/M12 touchscreen, then the model
  755. * detection is a bit hairy. The different ft5x06
  756. * firmwares around don't reliably implement the
  757. * identification registers. Well, we'll take a shot.
  758. *
  759. * The main difference between generic focaltec based
  760. * touches and EDT M09 is that we know how to retrieve
  761. * the max coordinates for the latter.
  762. */
  763. tsdata->version = GENERIC_FT;
  764. error = regmap_bulk_read(tsdata->regmap, 0xA6, rdbuf, 2);
  765. if (error)
  766. return error;
  767. strscpy(fw_version, rdbuf, 2);
  768. error = regmap_bulk_read(tsdata->regmap, 0xA8, rdbuf, 1);
  769. if (error)
  770. return error;
  771. /* This "model identification" is not exact. Unfortunately
  772. * not all firmwares for the ft5x06 put useful values in
  773. * the identification registers.
  774. */
  775. switch (rdbuf[0]) {
  776. case 0x11: /* EDT EP0110M09 */
  777. case 0x35: /* EDT EP0350M09 */
  778. case 0x43: /* EDT EP0430M09 */
  779. case 0x50: /* EDT EP0500M09 */
  780. case 0x57: /* EDT EP0570M09 */
  781. case 0x70: /* EDT EP0700M09 */
  782. tsdata->version = EDT_M09;
  783. snprintf(model_name, EDT_NAME_LEN, "EP0%i%i0M09",
  784. rdbuf[0] >> 4, rdbuf[0] & 0x0F);
  785. break;
  786. case 0xa1: /* EDT EP1010ML00 */
  787. tsdata->version = EDT_M09;
  788. snprintf(model_name, EDT_NAME_LEN, "EP%i%i0ML00",
  789. rdbuf[0] >> 4, rdbuf[0] & 0x0F);
  790. break;
  791. case 0x5a: /* Solomon Goldentek Display */
  792. snprintf(model_name, EDT_NAME_LEN, "GKTW50SCED1R0");
  793. break;
  794. case 0x59: /* Evervision Display with FT5xx6 TS */
  795. tsdata->version = EV_FT;
  796. error = regmap_bulk_read(tsdata->regmap, 0x53, rdbuf, 1);
  797. if (error)
  798. return error;
  799. strscpy(fw_version, rdbuf, 1);
  800. snprintf(model_name, EDT_NAME_LEN,
  801. "EVERVISION-FT5726NEi");
  802. break;
  803. default:
  804. snprintf(model_name, EDT_NAME_LEN,
  805. "generic ft5x06 (%02x)",
  806. rdbuf[0]);
  807. break;
  808. }
  809. }
  810. return 0;
  811. }
  812. static void edt_ft5x06_ts_get_defaults(struct device *dev,
  813. struct edt_ft5x06_ts_data *tsdata)
  814. {
  815. struct edt_reg_addr *reg_addr = &tsdata->reg_addr;
  816. struct regmap *regmap = tsdata->regmap;
  817. u32 val;
  818. int error;
  819. error = device_property_read_u32(dev, "threshold", &val);
  820. if (!error) {
  821. regmap_write(regmap, reg_addr->reg_threshold, val);
  822. tsdata->threshold = val;
  823. }
  824. error = device_property_read_u32(dev, "gain", &val);
  825. if (!error) {
  826. regmap_write(regmap, reg_addr->reg_gain, val);
  827. tsdata->gain = val;
  828. }
  829. error = device_property_read_u32(dev, "offset", &val);
  830. if (!error) {
  831. if (reg_addr->reg_offset != NO_REGISTER)
  832. regmap_write(regmap, reg_addr->reg_offset, val);
  833. tsdata->offset = val;
  834. }
  835. error = device_property_read_u32(dev, "offset-x", &val);
  836. if (!error) {
  837. if (reg_addr->reg_offset_x != NO_REGISTER)
  838. regmap_write(regmap, reg_addr->reg_offset_x, val);
  839. tsdata->offset_x = val;
  840. }
  841. error = device_property_read_u32(dev, "offset-y", &val);
  842. if (!error) {
  843. if (reg_addr->reg_offset_y != NO_REGISTER)
  844. regmap_write(regmap, reg_addr->reg_offset_y, val);
  845. tsdata->offset_y = val;
  846. }
  847. }
  848. static void edt_ft5x06_ts_get_parameters(struct edt_ft5x06_ts_data *tsdata)
  849. {
  850. struct edt_reg_addr *reg_addr = &tsdata->reg_addr;
  851. struct regmap *regmap = tsdata->regmap;
  852. unsigned int val;
  853. regmap_read(regmap, reg_addr->reg_threshold, &tsdata->threshold);
  854. regmap_read(regmap, reg_addr->reg_gain, &tsdata->gain);
  855. if (reg_addr->reg_offset != NO_REGISTER)
  856. regmap_read(regmap, reg_addr->reg_offset, &tsdata->offset);
  857. if (reg_addr->reg_offset_x != NO_REGISTER)
  858. regmap_read(regmap, reg_addr->reg_offset_x, &tsdata->offset_x);
  859. if (reg_addr->reg_offset_y != NO_REGISTER)
  860. regmap_read(regmap, reg_addr->reg_offset_y, &tsdata->offset_y);
  861. if (reg_addr->reg_report_rate != NO_REGISTER)
  862. regmap_read(regmap, reg_addr->reg_report_rate,
  863. &tsdata->report_rate);
  864. tsdata->num_x = EDT_DEFAULT_NUM_X;
  865. if (reg_addr->reg_num_x != NO_REGISTER) {
  866. if (!regmap_read(regmap, reg_addr->reg_num_x, &val))
  867. tsdata->num_x = val;
  868. }
  869. tsdata->num_y = EDT_DEFAULT_NUM_Y;
  870. if (reg_addr->reg_num_y != NO_REGISTER) {
  871. if (!regmap_read(regmap, reg_addr->reg_num_y, &val))
  872. tsdata->num_y = val;
  873. }
  874. }
  875. static void edt_ft5x06_ts_set_tdata_parameters(struct edt_ft5x06_ts_data *tsdata)
  876. {
  877. int crclen;
  878. if (tsdata->version == EDT_M06) {
  879. tsdata->tdata_cmd = 0xf9;
  880. tsdata->tdata_offset = 5;
  881. tsdata->point_len = 4;
  882. crclen = 1;
  883. } else {
  884. tsdata->tdata_cmd = 0x0;
  885. tsdata->tdata_offset = 3;
  886. tsdata->point_len = 6;
  887. crclen = 0;
  888. }
  889. tsdata->tdata_len = tsdata->point_len * tsdata->max_support_points +
  890. tsdata->tdata_offset + crclen;
  891. }
  892. static void edt_ft5x06_ts_set_regs(struct edt_ft5x06_ts_data *tsdata)
  893. {
  894. struct edt_reg_addr *reg_addr = &tsdata->reg_addr;
  895. switch (tsdata->version) {
  896. case EDT_M06:
  897. reg_addr->reg_threshold = WORK_REGISTER_THRESHOLD;
  898. reg_addr->reg_report_rate = WORK_REGISTER_REPORT_RATE;
  899. reg_addr->reg_gain = WORK_REGISTER_GAIN;
  900. reg_addr->reg_offset = WORK_REGISTER_OFFSET;
  901. reg_addr->reg_offset_x = NO_REGISTER;
  902. reg_addr->reg_offset_y = NO_REGISTER;
  903. reg_addr->reg_num_x = WORK_REGISTER_NUM_X;
  904. reg_addr->reg_num_y = WORK_REGISTER_NUM_Y;
  905. break;
  906. case EDT_M09:
  907. case EDT_M12:
  908. reg_addr->reg_threshold = M09_REGISTER_THRESHOLD;
  909. reg_addr->reg_report_rate = tsdata->version == EDT_M12 ?
  910. M12_REGISTER_REPORT_RATE : NO_REGISTER;
  911. reg_addr->reg_gain = M09_REGISTER_GAIN;
  912. reg_addr->reg_offset = M09_REGISTER_OFFSET;
  913. reg_addr->reg_offset_x = NO_REGISTER;
  914. reg_addr->reg_offset_y = NO_REGISTER;
  915. reg_addr->reg_num_x = M09_REGISTER_NUM_X;
  916. reg_addr->reg_num_y = M09_REGISTER_NUM_Y;
  917. break;
  918. case EV_FT:
  919. reg_addr->reg_threshold = EV_REGISTER_THRESHOLD;
  920. reg_addr->reg_report_rate = NO_REGISTER;
  921. reg_addr->reg_gain = EV_REGISTER_GAIN;
  922. reg_addr->reg_offset = NO_REGISTER;
  923. reg_addr->reg_offset_x = EV_REGISTER_OFFSET_X;
  924. reg_addr->reg_offset_y = EV_REGISTER_OFFSET_Y;
  925. reg_addr->reg_num_x = NO_REGISTER;
  926. reg_addr->reg_num_y = NO_REGISTER;
  927. break;
  928. case GENERIC_FT:
  929. /* this is a guesswork */
  930. reg_addr->reg_threshold = M09_REGISTER_THRESHOLD;
  931. reg_addr->reg_report_rate = NO_REGISTER;
  932. reg_addr->reg_gain = M09_REGISTER_GAIN;
  933. reg_addr->reg_offset = M09_REGISTER_OFFSET;
  934. reg_addr->reg_offset_x = NO_REGISTER;
  935. reg_addr->reg_offset_y = NO_REGISTER;
  936. reg_addr->reg_num_x = NO_REGISTER;
  937. reg_addr->reg_num_y = NO_REGISTER;
  938. break;
  939. }
  940. }
  941. static void edt_ft5x06_exit_regmap(void *arg)
  942. {
  943. struct edt_ft5x06_ts_data *data = arg;
  944. if (!IS_ERR_OR_NULL(data->regmap))
  945. regmap_exit(data->regmap);
  946. }
  947. static void edt_ft5x06_disable_regulators(void *arg)
  948. {
  949. struct edt_ft5x06_ts_data *data = arg;
  950. regulator_disable(data->vcc);
  951. regulator_disable(data->iovcc);
  952. }
  953. static int edt_ft5x06_ts_probe(struct i2c_client *client)
  954. {
  955. const struct i2c_device_id *id = i2c_client_get_device_id(client);
  956. const struct edt_i2c_chip_data *chip_data;
  957. struct edt_ft5x06_ts_data *tsdata;
  958. unsigned int val;
  959. struct input_dev *input;
  960. unsigned long irq_flags;
  961. int error;
  962. u32 report_rate;
  963. dev_dbg(&client->dev, "probing for EDT FT5x06 I2C\n");
  964. tsdata = devm_kzalloc(&client->dev, sizeof(*tsdata), GFP_KERNEL);
  965. if (!tsdata) {
  966. dev_err(&client->dev, "failed to allocate driver data.\n");
  967. return -ENOMEM;
  968. }
  969. tsdata->regmap = regmap_init_i2c(client, &edt_ft5x06_i2c_regmap_config);
  970. if (IS_ERR(tsdata->regmap)) {
  971. dev_err(&client->dev, "regmap allocation failed\n");
  972. return PTR_ERR(tsdata->regmap);
  973. }
  974. /*
  975. * We are not using devm_regmap_init_i2c() and instead install a
  976. * custom action because we may replace regmap with M06-specific one
  977. * and we need to make sure that it will not be released too early.
  978. */
  979. error = devm_add_action_or_reset(&client->dev, edt_ft5x06_exit_regmap,
  980. tsdata);
  981. if (error)
  982. return error;
  983. chip_data = device_get_match_data(&client->dev);
  984. if (!chip_data)
  985. chip_data = (const struct edt_i2c_chip_data *)id->driver_data;
  986. if (!chip_data || !chip_data->max_support_points) {
  987. dev_err(&client->dev, "invalid or missing chip data\n");
  988. return -EINVAL;
  989. }
  990. tsdata->max_support_points = chip_data->max_support_points;
  991. tsdata->vcc = devm_regulator_get(&client->dev, "vcc");
  992. if (IS_ERR(tsdata->vcc))
  993. return dev_err_probe(&client->dev, PTR_ERR(tsdata->vcc),
  994. "failed to request regulator\n");
  995. tsdata->iovcc = devm_regulator_get(&client->dev, "iovcc");
  996. if (IS_ERR(tsdata->iovcc)) {
  997. error = PTR_ERR(tsdata->iovcc);
  998. if (error != -EPROBE_DEFER)
  999. dev_err(&client->dev,
  1000. "failed to request iovcc regulator: %d\n", error);
  1001. return error;
  1002. }
  1003. error = regulator_enable(tsdata->iovcc);
  1004. if (error < 0) {
  1005. dev_err(&client->dev, "failed to enable iovcc: %d\n", error);
  1006. return error;
  1007. }
  1008. /* Delay enabling VCC for > 10us (T_ivd) after IOVCC */
  1009. usleep_range(10, 100);
  1010. error = regulator_enable(tsdata->vcc);
  1011. if (error < 0) {
  1012. dev_err(&client->dev, "failed to enable vcc: %d\n", error);
  1013. regulator_disable(tsdata->iovcc);
  1014. return error;
  1015. }
  1016. error = devm_add_action_or_reset(&client->dev,
  1017. edt_ft5x06_disable_regulators,
  1018. tsdata);
  1019. if (error)
  1020. return error;
  1021. tsdata->reset_gpio = devm_gpiod_get_optional(&client->dev,
  1022. "reset", GPIOD_OUT_HIGH);
  1023. if (IS_ERR(tsdata->reset_gpio)) {
  1024. error = PTR_ERR(tsdata->reset_gpio);
  1025. dev_err(&client->dev,
  1026. "Failed to request GPIO reset pin, error %d\n", error);
  1027. return error;
  1028. }
  1029. tsdata->wake_gpio = devm_gpiod_get_optional(&client->dev,
  1030. "wake", GPIOD_OUT_LOW);
  1031. if (IS_ERR(tsdata->wake_gpio)) {
  1032. error = PTR_ERR(tsdata->wake_gpio);
  1033. dev_err(&client->dev,
  1034. "Failed to request GPIO wake pin, error %d\n", error);
  1035. return error;
  1036. }
  1037. /*
  1038. * Check which sleep modes we can support. Power-off requires the
  1039. * reset-pin to ensure correct power-down/power-up behaviour. Start with
  1040. * the EDT_PMODE_POWEROFF test since this is the deepest possible sleep
  1041. * mode.
  1042. */
  1043. if (tsdata->reset_gpio)
  1044. tsdata->suspend_mode = EDT_PMODE_POWEROFF;
  1045. else if (tsdata->wake_gpio)
  1046. tsdata->suspend_mode = EDT_PMODE_HIBERNATE;
  1047. else
  1048. tsdata->suspend_mode = EDT_PMODE_NOT_SUPPORTED;
  1049. if (tsdata->wake_gpio) {
  1050. usleep_range(5000, 6000);
  1051. gpiod_set_value_cansleep(tsdata->wake_gpio, 1);
  1052. usleep_range(5000, 6000);
  1053. }
  1054. if (tsdata->reset_gpio) {
  1055. usleep_range(5000, 6000);
  1056. gpiod_set_value_cansleep(tsdata->reset_gpio, 0);
  1057. msleep(300);
  1058. }
  1059. input = devm_input_allocate_device(&client->dev);
  1060. if (!input) {
  1061. dev_err(&client->dev, "failed to allocate input device.\n");
  1062. return -ENOMEM;
  1063. }
  1064. mutex_init(&tsdata->mutex);
  1065. tsdata->client = client;
  1066. tsdata->input = input;
  1067. tsdata->factory_mode = false;
  1068. i2c_set_clientdata(client, tsdata);
  1069. error = edt_ft5x06_ts_identify(client, tsdata);
  1070. if (error) {
  1071. dev_err(&client->dev, "touchscreen probe failed\n");
  1072. return error;
  1073. }
  1074. /*
  1075. * Dummy read access. EP0700MLP1 returns bogus data on the first
  1076. * register read access and ignores writes.
  1077. */
  1078. regmap_read(tsdata->regmap, 0x00, &val);
  1079. edt_ft5x06_ts_set_tdata_parameters(tsdata);
  1080. edt_ft5x06_ts_set_regs(tsdata);
  1081. edt_ft5x06_ts_get_defaults(&client->dev, tsdata);
  1082. edt_ft5x06_ts_get_parameters(tsdata);
  1083. if (tsdata->reg_addr.reg_report_rate != NO_REGISTER &&
  1084. !device_property_read_u32(&client->dev,
  1085. "report-rate-hz", &report_rate)) {
  1086. if (tsdata->version == EDT_M06)
  1087. tsdata->report_rate = clamp_val(report_rate, 30, 140);
  1088. else
  1089. tsdata->report_rate = clamp_val(report_rate, 1, 255);
  1090. if (report_rate != tsdata->report_rate)
  1091. dev_warn(&client->dev,
  1092. "report-rate %dHz is unsupported, use %dHz\n",
  1093. report_rate, tsdata->report_rate);
  1094. if (tsdata->version == EDT_M06)
  1095. tsdata->report_rate /= 10;
  1096. regmap_write(tsdata->regmap, tsdata->reg_addr.reg_report_rate,
  1097. tsdata->report_rate);
  1098. }
  1099. dev_dbg(&client->dev,
  1100. "Model \"%s\", Rev. \"%s\", %dx%d sensors\n",
  1101. tsdata->name, tsdata->fw_version, tsdata->num_x, tsdata->num_y);
  1102. input->name = tsdata->name;
  1103. input->id.bustype = BUS_I2C;
  1104. input->dev.parent = &client->dev;
  1105. input_set_abs_params(input, ABS_MT_POSITION_X,
  1106. 0, tsdata->num_x * 64 - 1, 0, 0);
  1107. input_set_abs_params(input, ABS_MT_POSITION_Y,
  1108. 0, tsdata->num_y * 64 - 1, 0, 0);
  1109. touchscreen_parse_properties(input, true, &tsdata->prop);
  1110. error = input_mt_init_slots(input, tsdata->max_support_points,
  1111. INPUT_MT_DIRECT);
  1112. if (error) {
  1113. dev_err(&client->dev, "Unable to init MT slots.\n");
  1114. return error;
  1115. }
  1116. irq_flags = irq_get_trigger_type(client->irq);
  1117. if (irq_flags == IRQF_TRIGGER_NONE)
  1118. irq_flags = IRQF_TRIGGER_FALLING;
  1119. irq_flags |= IRQF_ONESHOT;
  1120. error = devm_request_threaded_irq(&client->dev, client->irq,
  1121. NULL, edt_ft5x06_ts_isr, irq_flags,
  1122. client->name, tsdata);
  1123. if (error) {
  1124. dev_err(&client->dev, "Unable to request touchscreen IRQ.\n");
  1125. return error;
  1126. }
  1127. error = input_register_device(input);
  1128. if (error)
  1129. return error;
  1130. edt_ft5x06_ts_prepare_debugfs(tsdata);
  1131. dev_dbg(&client->dev,
  1132. "EDT FT5x06 initialized: IRQ %d, WAKE pin %d, Reset pin %d.\n",
  1133. client->irq,
  1134. tsdata->wake_gpio ? desc_to_gpio(tsdata->wake_gpio) : -1,
  1135. tsdata->reset_gpio ? desc_to_gpio(tsdata->reset_gpio) : -1);
  1136. return 0;
  1137. }
  1138. static void edt_ft5x06_ts_remove(struct i2c_client *client)
  1139. {
  1140. struct edt_ft5x06_ts_data *tsdata = i2c_get_clientdata(client);
  1141. edt_ft5x06_ts_teardown_debugfs(tsdata);
  1142. }
  1143. static int edt_ft5x06_ts_suspend(struct device *dev)
  1144. {
  1145. struct i2c_client *client = to_i2c_client(dev);
  1146. struct edt_ft5x06_ts_data *tsdata = i2c_get_clientdata(client);
  1147. struct gpio_desc *reset_gpio = tsdata->reset_gpio;
  1148. int ret;
  1149. if (device_may_wakeup(dev))
  1150. return 0;
  1151. if (tsdata->suspend_mode == EDT_PMODE_NOT_SUPPORTED)
  1152. return 0;
  1153. /* Enter hibernate mode. */
  1154. ret = regmap_write(tsdata->regmap, PMOD_REGISTER_OPMODE,
  1155. PMOD_REGISTER_HIBERNATE);
  1156. if (ret)
  1157. dev_warn(dev, "Failed to set hibernate mode\n");
  1158. if (tsdata->suspend_mode == EDT_PMODE_HIBERNATE)
  1159. return 0;
  1160. /*
  1161. * Power-off according the datasheet. Cut the power may leaf the irq
  1162. * line in an undefined state depending on the host pull resistor
  1163. * settings. Disable the irq to avoid adjusting each host till the
  1164. * device is back in a full functional state.
  1165. */
  1166. disable_irq(tsdata->client->irq);
  1167. gpiod_set_value_cansleep(reset_gpio, 1);
  1168. usleep_range(1000, 2000);
  1169. ret = regulator_disable(tsdata->vcc);
  1170. if (ret)
  1171. dev_warn(dev, "Failed to disable vcc\n");
  1172. ret = regulator_disable(tsdata->iovcc);
  1173. if (ret)
  1174. dev_warn(dev, "Failed to disable iovcc\n");
  1175. return 0;
  1176. }
  1177. static int edt_ft5x06_ts_resume(struct device *dev)
  1178. {
  1179. struct i2c_client *client = to_i2c_client(dev);
  1180. struct edt_ft5x06_ts_data *tsdata = i2c_get_clientdata(client);
  1181. int ret = 0;
  1182. if (device_may_wakeup(dev))
  1183. return 0;
  1184. if (tsdata->suspend_mode == EDT_PMODE_NOT_SUPPORTED)
  1185. return 0;
  1186. if (tsdata->suspend_mode == EDT_PMODE_POWEROFF) {
  1187. struct gpio_desc *reset_gpio = tsdata->reset_gpio;
  1188. /*
  1189. * We can't check if the regulator is a dummy or a real
  1190. * regulator. So we need to specify the 5ms reset time (T_rst)
  1191. * here instead of the 100us T_rtp time. We also need to wait
  1192. * 300ms in case it was a real supply and the power was cutted
  1193. * of. Toggle the reset pin is also a way to exit the hibernate
  1194. * mode.
  1195. */
  1196. gpiod_set_value_cansleep(reset_gpio, 1);
  1197. usleep_range(5000, 6000);
  1198. ret = regulator_enable(tsdata->iovcc);
  1199. if (ret) {
  1200. dev_err(dev, "Failed to enable iovcc\n");
  1201. return ret;
  1202. }
  1203. /* Delay enabling VCC for > 10us (T_ivd) after IOVCC */
  1204. usleep_range(10, 100);
  1205. ret = regulator_enable(tsdata->vcc);
  1206. if (ret) {
  1207. dev_err(dev, "Failed to enable vcc\n");
  1208. regulator_disable(tsdata->iovcc);
  1209. return ret;
  1210. }
  1211. usleep_range(1000, 2000);
  1212. gpiod_set_value_cansleep(reset_gpio, 0);
  1213. msleep(300);
  1214. edt_ft5x06_restore_reg_parameters(tsdata);
  1215. enable_irq(tsdata->client->irq);
  1216. if (tsdata->factory_mode)
  1217. ret = edt_ft5x06_factory_mode(tsdata);
  1218. } else {
  1219. struct gpio_desc *wake_gpio = tsdata->wake_gpio;
  1220. gpiod_set_value_cansleep(wake_gpio, 0);
  1221. usleep_range(5000, 6000);
  1222. gpiod_set_value_cansleep(wake_gpio, 1);
  1223. }
  1224. return ret;
  1225. }
  1226. static DEFINE_SIMPLE_DEV_PM_OPS(edt_ft5x06_ts_pm_ops,
  1227. edt_ft5x06_ts_suspend, edt_ft5x06_ts_resume);
  1228. static const struct edt_i2c_chip_data edt_ft5x06_data = {
  1229. .max_support_points = 5,
  1230. };
  1231. static const struct edt_i2c_chip_data edt_ft3518_data = {
  1232. .max_support_points = 10,
  1233. };
  1234. static const struct edt_i2c_chip_data edt_ft5452_data = {
  1235. .max_support_points = 5,
  1236. };
  1237. static const struct edt_i2c_chip_data edt_ft5506_data = {
  1238. .max_support_points = 10,
  1239. };
  1240. static const struct edt_i2c_chip_data edt_ft6236_data = {
  1241. .max_support_points = 2,
  1242. };
  1243. static const struct edt_i2c_chip_data edt_ft8201_data = {
  1244. .max_support_points = 10,
  1245. };
  1246. static const struct edt_i2c_chip_data edt_ft8716_data = {
  1247. .max_support_points = 10,
  1248. };
  1249. static const struct edt_i2c_chip_data edt_ft8719_data = {
  1250. .max_support_points = 10,
  1251. };
  1252. static const struct i2c_device_id edt_ft5x06_ts_id[] = {
  1253. { .name = "edt-ft5x06", .driver_data = (long)&edt_ft5x06_data },
  1254. { .name = "edt-ft5506", .driver_data = (long)&edt_ft5506_data },
  1255. { .name = "ev-ft5726", .driver_data = (long)&edt_ft5506_data },
  1256. { .name = "ft3518", .driver_data = (long)&edt_ft3518_data },
  1257. { .name = "ft5452", .driver_data = (long)&edt_ft5452_data },
  1258. /* Note no edt- prefix for compatibility with the ft6236.c driver */
  1259. { .name = "ft6236", .driver_data = (long)&edt_ft6236_data },
  1260. { .name = "ft8201", .driver_data = (long)&edt_ft8201_data },
  1261. { .name = "ft8716", .driver_data = (long)&edt_ft8716_data },
  1262. { .name = "ft8719", .driver_data = (long)&edt_ft8719_data },
  1263. { /* sentinel */ }
  1264. };
  1265. MODULE_DEVICE_TABLE(i2c, edt_ft5x06_ts_id);
  1266. static const struct of_device_id edt_ft5x06_of_match[] = {
  1267. { .compatible = "edt,edt-ft5206", .data = &edt_ft5x06_data },
  1268. { .compatible = "edt,edt-ft5306", .data = &edt_ft5x06_data },
  1269. { .compatible = "edt,edt-ft5406", .data = &edt_ft5x06_data },
  1270. { .compatible = "edt,edt-ft5506", .data = &edt_ft5506_data },
  1271. { .compatible = "evervision,ev-ft5726", .data = &edt_ft5506_data },
  1272. { .compatible = "focaltech,ft3518", .data = &edt_ft3518_data },
  1273. { .compatible = "focaltech,ft5426", .data = &edt_ft5506_data },
  1274. { .compatible = "focaltech,ft5452", .data = &edt_ft5452_data },
  1275. /* Note focaltech vendor prefix for compatibility with ft6236.c */
  1276. { .compatible = "focaltech,ft6236", .data = &edt_ft6236_data },
  1277. { .compatible = "focaltech,ft8201", .data = &edt_ft8201_data },
  1278. { .compatible = "focaltech,ft8716", .data = &edt_ft8716_data },
  1279. { .compatible = "focaltech,ft8719", .data = &edt_ft8719_data },
  1280. { /* sentinel */ }
  1281. };
  1282. MODULE_DEVICE_TABLE(of, edt_ft5x06_of_match);
  1283. static struct i2c_driver edt_ft5x06_ts_driver = {
  1284. .driver = {
  1285. .name = "edt_ft5x06",
  1286. .dev_groups = edt_ft5x06_groups,
  1287. .of_match_table = edt_ft5x06_of_match,
  1288. .pm = pm_sleep_ptr(&edt_ft5x06_ts_pm_ops),
  1289. .probe_type = PROBE_PREFER_ASYNCHRONOUS,
  1290. },
  1291. .id_table = edt_ft5x06_ts_id,
  1292. .probe = edt_ft5x06_ts_probe,
  1293. .remove = edt_ft5x06_ts_remove,
  1294. };
  1295. module_i2c_driver(edt_ft5x06_ts_driver);
  1296. MODULE_AUTHOR("Simon Budig <simon.budig@kernelconcepts.de>");
  1297. MODULE_DESCRIPTION("EDT FT5x06 I2C Touchscreen Driver");
  1298. MODULE_LICENSE("GPL v2");