atmel_mxt_ts.c 75 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274
  1. /*
  2. * Atmel maXTouch Touchscreen driver
  3. *
  4. * Copyright (C) 2010 Samsung Electronics Co.Ltd
  5. * Copyright (C) 2011-2014 Atmel Corporation
  6. * Copyright (C) 2012 Google, Inc.
  7. * Copyright (C) 2016 Zodiac Inflight Innovations
  8. *
  9. * Author: Joonyoung Shim <jy0922.shim@samsung.com>
  10. *
  11. * This program is free software; you can redistribute it and/or modify it
  12. * under the terms of the GNU General Public License as published by the
  13. * Free Software Foundation; either version 2 of the License, or (at your
  14. * option) any later version.
  15. *
  16. */
  17. #include <linux/acpi.h>
  18. #include <linux/dmi.h>
  19. #include <linux/module.h>
  20. #include <linux/init.h>
  21. #include <linux/completion.h>
  22. #include <linux/delay.h>
  23. #include <linux/firmware.h>
  24. #include <linux/i2c.h>
  25. #include <linux/platform_data/atmel_mxt_ts.h>
  26. #include <linux/input/mt.h>
  27. #include <linux/interrupt.h>
  28. #include <linux/of.h>
  29. #include <linux/slab.h>
  30. #include <asm/unaligned.h>
  31. #include <media/v4l2-device.h>
  32. #include <media/v4l2-ioctl.h>
  33. #include <media/videobuf2-v4l2.h>
  34. #include <media/videobuf2-vmalloc.h>
  35. /* Firmware files */
  36. #define MXT_FW_NAME "/*(DEBLOBBED)*/"
  37. #define MXT_CFG_NAME "maxtouch.cfg"
  38. #define MXT_CFG_MAGIC "OBP_RAW V1"
  39. /* Registers */
  40. #define MXT_OBJECT_START 0x07
  41. #define MXT_OBJECT_SIZE 6
  42. #define MXT_INFO_CHECKSUM_SIZE 3
  43. #define MXT_MAX_BLOCK_WRITE 256
  44. /* Object types */
  45. #define MXT_DEBUG_DIAGNOSTIC_T37 37
  46. #define MXT_GEN_MESSAGE_T5 5
  47. #define MXT_GEN_COMMAND_T6 6
  48. #define MXT_GEN_POWER_T7 7
  49. #define MXT_GEN_ACQUIRE_T8 8
  50. #define MXT_GEN_DATASOURCE_T53 53
  51. #define MXT_TOUCH_MULTI_T9 9
  52. #define MXT_TOUCH_KEYARRAY_T15 15
  53. #define MXT_TOUCH_PROXIMITY_T23 23
  54. #define MXT_TOUCH_PROXKEY_T52 52
  55. #define MXT_PROCI_GRIPFACE_T20 20
  56. #define MXT_PROCG_NOISE_T22 22
  57. #define MXT_PROCI_ONETOUCH_T24 24
  58. #define MXT_PROCI_TWOTOUCH_T27 27
  59. #define MXT_PROCI_GRIP_T40 40
  60. #define MXT_PROCI_PALM_T41 41
  61. #define MXT_PROCI_TOUCHSUPPRESSION_T42 42
  62. #define MXT_PROCI_STYLUS_T47 47
  63. #define MXT_PROCG_NOISESUPPRESSION_T48 48
  64. #define MXT_SPT_COMMSCONFIG_T18 18
  65. #define MXT_SPT_GPIOPWM_T19 19
  66. #define MXT_SPT_SELFTEST_T25 25
  67. #define MXT_SPT_CTECONFIG_T28 28
  68. #define MXT_SPT_USERDATA_T38 38
  69. #define MXT_SPT_DIGITIZER_T43 43
  70. #define MXT_SPT_MESSAGECOUNT_T44 44
  71. #define MXT_SPT_CTECONFIG_T46 46
  72. #define MXT_TOUCH_MULTITOUCHSCREEN_T100 100
  73. /* MXT_GEN_MESSAGE_T5 object */
  74. #define MXT_RPTID_NOMSG 0xff
  75. /* MXT_GEN_COMMAND_T6 field */
  76. #define MXT_COMMAND_RESET 0
  77. #define MXT_COMMAND_BACKUPNV 1
  78. #define MXT_COMMAND_CALIBRATE 2
  79. #define MXT_COMMAND_REPORTALL 3
  80. #define MXT_COMMAND_DIAGNOSTIC 5
  81. /* Define for T6 status byte */
  82. #define MXT_T6_STATUS_RESET (1 << 7)
  83. #define MXT_T6_STATUS_OFL (1 << 6)
  84. #define MXT_T6_STATUS_SIGERR (1 << 5)
  85. #define MXT_T6_STATUS_CAL (1 << 4)
  86. #define MXT_T6_STATUS_CFGERR (1 << 3)
  87. #define MXT_T6_STATUS_COMSERR (1 << 2)
  88. /* MXT_GEN_POWER_T7 field */
  89. struct t7_config {
  90. u8 idle;
  91. u8 active;
  92. } __packed;
  93. #define MXT_POWER_CFG_RUN 0
  94. #define MXT_POWER_CFG_DEEPSLEEP 1
  95. /* MXT_TOUCH_MULTI_T9 field */
  96. #define MXT_T9_CTRL 0
  97. #define MXT_T9_XSIZE 3
  98. #define MXT_T9_YSIZE 4
  99. #define MXT_T9_ORIENT 9
  100. #define MXT_T9_RANGE 18
  101. /* MXT_TOUCH_MULTI_T9 status */
  102. #define MXT_T9_UNGRIP (1 << 0)
  103. #define MXT_T9_SUPPRESS (1 << 1)
  104. #define MXT_T9_AMP (1 << 2)
  105. #define MXT_T9_VECTOR (1 << 3)
  106. #define MXT_T9_MOVE (1 << 4)
  107. #define MXT_T9_RELEASE (1 << 5)
  108. #define MXT_T9_PRESS (1 << 6)
  109. #define MXT_T9_DETECT (1 << 7)
  110. struct t9_range {
  111. __le16 x;
  112. __le16 y;
  113. } __packed;
  114. /* MXT_TOUCH_MULTI_T9 orient */
  115. #define MXT_T9_ORIENT_SWITCH (1 << 0)
  116. #define MXT_T9_ORIENT_INVERTX (1 << 1)
  117. #define MXT_T9_ORIENT_INVERTY (1 << 2)
  118. /* MXT_SPT_COMMSCONFIG_T18 */
  119. #define MXT_COMMS_CTRL 0
  120. #define MXT_COMMS_CMD 1
  121. /* MXT_DEBUG_DIAGNOSTIC_T37 */
  122. #define MXT_DIAGNOSTIC_PAGEUP 0x01
  123. #define MXT_DIAGNOSTIC_DELTAS 0x10
  124. #define MXT_DIAGNOSTIC_REFS 0x11
  125. #define MXT_DIAGNOSTIC_SIZE 128
  126. #define MXT_FAMILY_1386 160
  127. #define MXT1386_COLUMNS 3
  128. #define MXT1386_PAGES_PER_COLUMN 8
  129. struct t37_debug {
  130. #ifdef CONFIG_TOUCHSCREEN_ATMEL_MXT_T37
  131. u8 mode;
  132. u8 page;
  133. u8 data[MXT_DIAGNOSTIC_SIZE];
  134. #endif
  135. };
  136. /* Define for MXT_GEN_COMMAND_T6 */
  137. #define MXT_BOOT_VALUE 0xa5
  138. #define MXT_RESET_VALUE 0x01
  139. #define MXT_BACKUP_VALUE 0x55
  140. /* T100 Multiple Touch Touchscreen */
  141. #define MXT_T100_CTRL 0
  142. #define MXT_T100_CFG1 1
  143. #define MXT_T100_TCHAUX 3
  144. #define MXT_T100_XSIZE 9
  145. #define MXT_T100_XRANGE 13
  146. #define MXT_T100_YSIZE 20
  147. #define MXT_T100_YRANGE 24
  148. #define MXT_T100_CFG_SWITCHXY BIT(5)
  149. #define MXT_T100_CFG_INVERTY BIT(6)
  150. #define MXT_T100_CFG_INVERTX BIT(7)
  151. #define MXT_T100_TCHAUX_VECT BIT(0)
  152. #define MXT_T100_TCHAUX_AMPL BIT(1)
  153. #define MXT_T100_TCHAUX_AREA BIT(2)
  154. #define MXT_T100_DETECT BIT(7)
  155. #define MXT_T100_TYPE_MASK 0x70
  156. enum t100_type {
  157. MXT_T100_TYPE_FINGER = 1,
  158. MXT_T100_TYPE_PASSIVE_STYLUS = 2,
  159. MXT_T100_TYPE_HOVERING_FINGER = 4,
  160. MXT_T100_TYPE_GLOVE = 5,
  161. MXT_T100_TYPE_LARGE_TOUCH = 6,
  162. };
  163. #define MXT_DISTANCE_ACTIVE_TOUCH 0
  164. #define MXT_DISTANCE_HOVERING 1
  165. #define MXT_TOUCH_MAJOR_DEFAULT 1
  166. #define MXT_PRESSURE_DEFAULT 1
  167. /* Delay times */
  168. #define MXT_BACKUP_TIME 50 /* msec */
  169. #define MXT_RESET_TIME 200 /* msec */
  170. #define MXT_RESET_TIMEOUT 3000 /* msec */
  171. #define MXT_CRC_TIMEOUT 1000 /* msec */
  172. #define MXT_FW_RESET_TIME 3000 /* msec */
  173. #define MXT_FW_CHG_TIMEOUT 300 /* msec */
  174. /* Command to unlock bootloader */
  175. #define MXT_UNLOCK_CMD_MSB 0xaa
  176. #define MXT_UNLOCK_CMD_LSB 0xdc
  177. /* Bootloader mode status */
  178. #define MXT_WAITING_BOOTLOAD_CMD 0xc0 /* valid 7 6 bit only */
  179. #define MXT_WAITING_FRAME_DATA 0x80 /* valid 7 6 bit only */
  180. #define MXT_FRAME_CRC_CHECK 0x02
  181. #define MXT_FRAME_CRC_FAIL 0x03
  182. #define MXT_FRAME_CRC_PASS 0x04
  183. #define MXT_APP_CRC_FAIL 0x40 /* valid 7 8 bit only */
  184. #define MXT_BOOT_STATUS_MASK 0x3f
  185. #define MXT_BOOT_EXTENDED_ID (1 << 5)
  186. #define MXT_BOOT_ID_MASK 0x1f
  187. /* Touchscreen absolute values */
  188. #define MXT_MAX_AREA 0xff
  189. #define MXT_PIXELS_PER_MM 20
  190. struct mxt_info {
  191. u8 family_id;
  192. u8 variant_id;
  193. u8 version;
  194. u8 build;
  195. u8 matrix_xsize;
  196. u8 matrix_ysize;
  197. u8 object_num;
  198. };
  199. struct mxt_object {
  200. u8 type;
  201. u16 start_address;
  202. u8 size_minus_one;
  203. u8 instances_minus_one;
  204. u8 num_report_ids;
  205. } __packed;
  206. struct mxt_dbg {
  207. u16 t37_address;
  208. u16 diag_cmd_address;
  209. struct t37_debug *t37_buf;
  210. unsigned int t37_pages;
  211. unsigned int t37_nodes;
  212. struct v4l2_device v4l2;
  213. struct v4l2_pix_format format;
  214. struct video_device vdev;
  215. struct vb2_queue queue;
  216. struct mutex lock;
  217. int input;
  218. };
  219. enum v4l_dbg_inputs {
  220. MXT_V4L_INPUT_DELTAS,
  221. MXT_V4L_INPUT_REFS,
  222. MXT_V4L_INPUT_MAX,
  223. };
  224. static const struct v4l2_file_operations mxt_video_fops = {
  225. .owner = THIS_MODULE,
  226. .open = v4l2_fh_open,
  227. .release = vb2_fop_release,
  228. .unlocked_ioctl = video_ioctl2,
  229. .read = vb2_fop_read,
  230. .mmap = vb2_fop_mmap,
  231. .poll = vb2_fop_poll,
  232. };
  233. /* Each client has this additional data */
  234. struct mxt_data {
  235. struct i2c_client *client;
  236. struct input_dev *input_dev;
  237. char phys[64]; /* device physical location */
  238. const struct mxt_platform_data *pdata;
  239. struct mxt_object *object_table;
  240. struct mxt_info info;
  241. unsigned int irq;
  242. unsigned int max_x;
  243. unsigned int max_y;
  244. bool invertx;
  245. bool inverty;
  246. bool xy_switch;
  247. u8 xsize;
  248. u8 ysize;
  249. bool in_bootloader;
  250. u16 mem_size;
  251. u8 t100_aux_ampl;
  252. u8 t100_aux_area;
  253. u8 t100_aux_vect;
  254. u8 max_reportid;
  255. u32 config_crc;
  256. u32 info_crc;
  257. u8 bootloader_addr;
  258. u8 *msg_buf;
  259. u8 t6_status;
  260. bool update_input;
  261. u8 last_message_count;
  262. u8 num_touchids;
  263. u8 multitouch;
  264. struct t7_config t7_cfg;
  265. struct mxt_dbg dbg;
  266. /* Cached parameters from object table */
  267. u16 T5_address;
  268. u8 T5_msg_size;
  269. u8 T6_reportid;
  270. u16 T6_address;
  271. u16 T7_address;
  272. u8 T9_reportid_min;
  273. u8 T9_reportid_max;
  274. u8 T19_reportid;
  275. u16 T44_address;
  276. u8 T100_reportid_min;
  277. u8 T100_reportid_max;
  278. /* for fw update in bootloader */
  279. struct completion bl_completion;
  280. /* for reset handling */
  281. struct completion reset_completion;
  282. /* for config update handling */
  283. struct completion crc_completion;
  284. };
  285. struct mxt_vb2_buffer {
  286. struct vb2_buffer vb;
  287. struct list_head list;
  288. };
  289. static size_t mxt_obj_size(const struct mxt_object *obj)
  290. {
  291. return obj->size_minus_one + 1;
  292. }
  293. static size_t mxt_obj_instances(const struct mxt_object *obj)
  294. {
  295. return obj->instances_minus_one + 1;
  296. }
  297. static bool mxt_object_readable(unsigned int type)
  298. {
  299. switch (type) {
  300. case MXT_GEN_COMMAND_T6:
  301. case MXT_GEN_POWER_T7:
  302. case MXT_GEN_ACQUIRE_T8:
  303. case MXT_GEN_DATASOURCE_T53:
  304. case MXT_TOUCH_MULTI_T9:
  305. case MXT_TOUCH_KEYARRAY_T15:
  306. case MXT_TOUCH_PROXIMITY_T23:
  307. case MXT_TOUCH_PROXKEY_T52:
  308. case MXT_PROCI_GRIPFACE_T20:
  309. case MXT_PROCG_NOISE_T22:
  310. case MXT_PROCI_ONETOUCH_T24:
  311. case MXT_PROCI_TWOTOUCH_T27:
  312. case MXT_PROCI_GRIP_T40:
  313. case MXT_PROCI_PALM_T41:
  314. case MXT_PROCI_TOUCHSUPPRESSION_T42:
  315. case MXT_PROCI_STYLUS_T47:
  316. case MXT_PROCG_NOISESUPPRESSION_T48:
  317. case MXT_SPT_COMMSCONFIG_T18:
  318. case MXT_SPT_GPIOPWM_T19:
  319. case MXT_SPT_SELFTEST_T25:
  320. case MXT_SPT_CTECONFIG_T28:
  321. case MXT_SPT_USERDATA_T38:
  322. case MXT_SPT_DIGITIZER_T43:
  323. case MXT_SPT_CTECONFIG_T46:
  324. return true;
  325. default:
  326. return false;
  327. }
  328. }
  329. static void mxt_dump_message(struct mxt_data *data, u8 *message)
  330. {
  331. dev_dbg(&data->client->dev, "message: %*ph\n",
  332. data->T5_msg_size, message);
  333. }
  334. static int mxt_wait_for_completion(struct mxt_data *data,
  335. struct completion *comp,
  336. unsigned int timeout_ms)
  337. {
  338. struct device *dev = &data->client->dev;
  339. unsigned long timeout = msecs_to_jiffies(timeout_ms);
  340. long ret;
  341. ret = wait_for_completion_interruptible_timeout(comp, timeout);
  342. if (ret < 0) {
  343. return ret;
  344. } else if (ret == 0) {
  345. dev_err(dev, "Wait for completion timed out.\n");
  346. return -ETIMEDOUT;
  347. }
  348. return 0;
  349. }
  350. static int mxt_bootloader_read(struct mxt_data *data,
  351. u8 *val, unsigned int count)
  352. {
  353. int ret;
  354. struct i2c_msg msg;
  355. msg.addr = data->bootloader_addr;
  356. msg.flags = data->client->flags & I2C_M_TEN;
  357. msg.flags |= I2C_M_RD;
  358. msg.len = count;
  359. msg.buf = val;
  360. ret = i2c_transfer(data->client->adapter, &msg, 1);
  361. if (ret == 1) {
  362. ret = 0;
  363. } else {
  364. ret = ret < 0 ? ret : -EIO;
  365. dev_err(&data->client->dev, "%s: i2c recv failed (%d)\n",
  366. __func__, ret);
  367. }
  368. return ret;
  369. }
  370. static int mxt_bootloader_write(struct mxt_data *data,
  371. const u8 * const val, unsigned int count)
  372. {
  373. int ret;
  374. struct i2c_msg msg;
  375. msg.addr = data->bootloader_addr;
  376. msg.flags = data->client->flags & I2C_M_TEN;
  377. msg.len = count;
  378. msg.buf = (u8 *)val;
  379. ret = i2c_transfer(data->client->adapter, &msg, 1);
  380. if (ret == 1) {
  381. ret = 0;
  382. } else {
  383. ret = ret < 0 ? ret : -EIO;
  384. dev_err(&data->client->dev, "%s: i2c send failed (%d)\n",
  385. __func__, ret);
  386. }
  387. return ret;
  388. }
  389. static int mxt_lookup_bootloader_address(struct mxt_data *data, bool retry)
  390. {
  391. u8 appmode = data->client->addr;
  392. u8 bootloader;
  393. switch (appmode) {
  394. case 0x4a:
  395. case 0x4b:
  396. /* Chips after 1664S use different scheme */
  397. if (retry || data->info.family_id >= 0xa2) {
  398. bootloader = appmode - 0x24;
  399. break;
  400. }
  401. /* Fall through for normal case */
  402. case 0x4c:
  403. case 0x4d:
  404. case 0x5a:
  405. case 0x5b:
  406. bootloader = appmode - 0x26;
  407. break;
  408. default:
  409. dev_err(&data->client->dev,
  410. "Appmode i2c address 0x%02x not found\n",
  411. appmode);
  412. return -EINVAL;
  413. }
  414. data->bootloader_addr = bootloader;
  415. return 0;
  416. }
  417. static int mxt_probe_bootloader(struct mxt_data *data, bool alt_address)
  418. {
  419. struct device *dev = &data->client->dev;
  420. int error;
  421. u8 val;
  422. bool crc_failure;
  423. error = mxt_lookup_bootloader_address(data, alt_address);
  424. if (error)
  425. return error;
  426. error = mxt_bootloader_read(data, &val, 1);
  427. if (error)
  428. return error;
  429. /* Check app crc fail mode */
  430. crc_failure = (val & ~MXT_BOOT_STATUS_MASK) == MXT_APP_CRC_FAIL;
  431. dev_err(dev, "Detected bootloader, status:%02X%s\n",
  432. val, crc_failure ? ", APP_CRC_FAIL" : "");
  433. return 0;
  434. }
  435. static u8 mxt_get_bootloader_version(struct mxt_data *data, u8 val)
  436. {
  437. struct device *dev = &data->client->dev;
  438. u8 buf[3];
  439. if (val & MXT_BOOT_EXTENDED_ID) {
  440. if (mxt_bootloader_read(data, &buf[0], 3) != 0) {
  441. dev_err(dev, "%s: i2c failure\n", __func__);
  442. return val;
  443. }
  444. dev_dbg(dev, "Bootloader ID:%d Version:%d\n", buf[1], buf[2]);
  445. return buf[0];
  446. } else {
  447. dev_dbg(dev, "Bootloader ID:%d\n", val & MXT_BOOT_ID_MASK);
  448. return val;
  449. }
  450. }
  451. static int mxt_check_bootloader(struct mxt_data *data, unsigned int state,
  452. bool wait)
  453. {
  454. struct device *dev = &data->client->dev;
  455. u8 val;
  456. int ret;
  457. recheck:
  458. if (wait) {
  459. /*
  460. * In application update mode, the interrupt
  461. * line signals state transitions. We must wait for the
  462. * CHG assertion before reading the status byte.
  463. * Once the status byte has been read, the line is deasserted.
  464. */
  465. ret = mxt_wait_for_completion(data, &data->bl_completion,
  466. MXT_FW_CHG_TIMEOUT);
  467. if (ret) {
  468. /*
  469. * TODO: handle -ERESTARTSYS better by terminating
  470. * fw update process before returning to userspace
  471. * by writing length 0x000 to device (iff we are in
  472. * WAITING_FRAME_DATA state).
  473. */
  474. dev_err(dev, "Update wait error %d\n", ret);
  475. return ret;
  476. }
  477. }
  478. ret = mxt_bootloader_read(data, &val, 1);
  479. if (ret)
  480. return ret;
  481. if (state == MXT_WAITING_BOOTLOAD_CMD)
  482. val = mxt_get_bootloader_version(data, val);
  483. switch (state) {
  484. case MXT_WAITING_BOOTLOAD_CMD:
  485. case MXT_WAITING_FRAME_DATA:
  486. case MXT_APP_CRC_FAIL:
  487. val &= ~MXT_BOOT_STATUS_MASK;
  488. break;
  489. case MXT_FRAME_CRC_PASS:
  490. if (val == MXT_FRAME_CRC_CHECK) {
  491. goto recheck;
  492. } else if (val == MXT_FRAME_CRC_FAIL) {
  493. dev_err(dev, "Bootloader CRC fail\n");
  494. return -EINVAL;
  495. }
  496. break;
  497. default:
  498. return -EINVAL;
  499. }
  500. if (val != state) {
  501. dev_err(dev, "Invalid bootloader state %02X != %02X\n",
  502. val, state);
  503. return -EINVAL;
  504. }
  505. return 0;
  506. }
  507. static int mxt_send_bootloader_cmd(struct mxt_data *data, bool unlock)
  508. {
  509. int ret;
  510. u8 buf[2];
  511. if (unlock) {
  512. buf[0] = MXT_UNLOCK_CMD_LSB;
  513. buf[1] = MXT_UNLOCK_CMD_MSB;
  514. } else {
  515. buf[0] = 0x01;
  516. buf[1] = 0x01;
  517. }
  518. ret = mxt_bootloader_write(data, buf, 2);
  519. if (ret)
  520. return ret;
  521. return 0;
  522. }
  523. static int __mxt_read_reg(struct i2c_client *client,
  524. u16 reg, u16 len, void *val)
  525. {
  526. struct i2c_msg xfer[2];
  527. u8 buf[2];
  528. int ret;
  529. buf[0] = reg & 0xff;
  530. buf[1] = (reg >> 8) & 0xff;
  531. /* Write register */
  532. xfer[0].addr = client->addr;
  533. xfer[0].flags = 0;
  534. xfer[0].len = 2;
  535. xfer[0].buf = buf;
  536. /* Read data */
  537. xfer[1].addr = client->addr;
  538. xfer[1].flags = I2C_M_RD;
  539. xfer[1].len = len;
  540. xfer[1].buf = val;
  541. ret = i2c_transfer(client->adapter, xfer, 2);
  542. if (ret == 2) {
  543. ret = 0;
  544. } else {
  545. if (ret >= 0)
  546. ret = -EIO;
  547. dev_err(&client->dev, "%s: i2c transfer failed (%d)\n",
  548. __func__, ret);
  549. }
  550. return ret;
  551. }
  552. static int __mxt_write_reg(struct i2c_client *client, u16 reg, u16 len,
  553. const void *val)
  554. {
  555. u8 *buf;
  556. size_t count;
  557. int ret;
  558. count = len + 2;
  559. buf = kmalloc(count, GFP_KERNEL);
  560. if (!buf)
  561. return -ENOMEM;
  562. buf[0] = reg & 0xff;
  563. buf[1] = (reg >> 8) & 0xff;
  564. memcpy(&buf[2], val, len);
  565. ret = i2c_master_send(client, buf, count);
  566. if (ret == count) {
  567. ret = 0;
  568. } else {
  569. if (ret >= 0)
  570. ret = -EIO;
  571. dev_err(&client->dev, "%s: i2c send failed (%d)\n",
  572. __func__, ret);
  573. }
  574. kfree(buf);
  575. return ret;
  576. }
  577. static int mxt_write_reg(struct i2c_client *client, u16 reg, u8 val)
  578. {
  579. return __mxt_write_reg(client, reg, 1, &val);
  580. }
  581. static struct mxt_object *
  582. mxt_get_object(struct mxt_data *data, u8 type)
  583. {
  584. struct mxt_object *object;
  585. int i;
  586. for (i = 0; i < data->info.object_num; i++) {
  587. object = data->object_table + i;
  588. if (object->type == type)
  589. return object;
  590. }
  591. dev_warn(&data->client->dev, "Invalid object type T%u\n", type);
  592. return NULL;
  593. }
  594. static void mxt_proc_t6_messages(struct mxt_data *data, u8 *msg)
  595. {
  596. struct device *dev = &data->client->dev;
  597. u8 status = msg[1];
  598. u32 crc = msg[2] | (msg[3] << 8) | (msg[4] << 16);
  599. complete(&data->crc_completion);
  600. if (crc != data->config_crc) {
  601. data->config_crc = crc;
  602. dev_dbg(dev, "T6 Config Checksum: 0x%06X\n", crc);
  603. }
  604. /* Detect reset */
  605. if (status & MXT_T6_STATUS_RESET)
  606. complete(&data->reset_completion);
  607. /* Output debug if status has changed */
  608. if (status != data->t6_status)
  609. dev_dbg(dev, "T6 Status 0x%02X%s%s%s%s%s%s%s\n",
  610. status,
  611. status == 0 ? " OK" : "",
  612. status & MXT_T6_STATUS_RESET ? " RESET" : "",
  613. status & MXT_T6_STATUS_OFL ? " OFL" : "",
  614. status & MXT_T6_STATUS_SIGERR ? " SIGERR" : "",
  615. status & MXT_T6_STATUS_CAL ? " CAL" : "",
  616. status & MXT_T6_STATUS_CFGERR ? " CFGERR" : "",
  617. status & MXT_T6_STATUS_COMSERR ? " COMSERR" : "");
  618. /* Save current status */
  619. data->t6_status = status;
  620. }
  621. static int mxt_write_object(struct mxt_data *data,
  622. u8 type, u8 offset, u8 val)
  623. {
  624. struct mxt_object *object;
  625. u16 reg;
  626. object = mxt_get_object(data, type);
  627. if (!object || offset >= mxt_obj_size(object))
  628. return -EINVAL;
  629. reg = object->start_address;
  630. return mxt_write_reg(data->client, reg + offset, val);
  631. }
  632. static void mxt_input_button(struct mxt_data *data, u8 *message)
  633. {
  634. struct input_dev *input = data->input_dev;
  635. const struct mxt_platform_data *pdata = data->pdata;
  636. int i;
  637. for (i = 0; i < pdata->t19_num_keys; i++) {
  638. if (pdata->t19_keymap[i] == KEY_RESERVED)
  639. continue;
  640. /* Active-low switch */
  641. input_report_key(input, pdata->t19_keymap[i],
  642. !(message[1] & BIT(i)));
  643. }
  644. }
  645. static void mxt_input_sync(struct mxt_data *data)
  646. {
  647. input_mt_report_pointer_emulation(data->input_dev,
  648. data->pdata->t19_num_keys);
  649. input_sync(data->input_dev);
  650. }
  651. static void mxt_proc_t9_message(struct mxt_data *data, u8 *message)
  652. {
  653. struct device *dev = &data->client->dev;
  654. struct input_dev *input_dev = data->input_dev;
  655. int id;
  656. u8 status;
  657. int x;
  658. int y;
  659. int area;
  660. int amplitude;
  661. id = message[0] - data->T9_reportid_min;
  662. status = message[1];
  663. x = (message[2] << 4) | ((message[4] >> 4) & 0xf);
  664. y = (message[3] << 4) | ((message[4] & 0xf));
  665. /* Handle 10/12 bit switching */
  666. if (data->max_x < 1024)
  667. x >>= 2;
  668. if (data->max_y < 1024)
  669. y >>= 2;
  670. area = message[5];
  671. amplitude = message[6];
  672. dev_dbg(dev,
  673. "[%u] %c%c%c%c%c%c%c%c x: %5u y: %5u area: %3u amp: %3u\n",
  674. id,
  675. (status & MXT_T9_DETECT) ? 'D' : '.',
  676. (status & MXT_T9_PRESS) ? 'P' : '.',
  677. (status & MXT_T9_RELEASE) ? 'R' : '.',
  678. (status & MXT_T9_MOVE) ? 'M' : '.',
  679. (status & MXT_T9_VECTOR) ? 'V' : '.',
  680. (status & MXT_T9_AMP) ? 'A' : '.',
  681. (status & MXT_T9_SUPPRESS) ? 'S' : '.',
  682. (status & MXT_T9_UNGRIP) ? 'U' : '.',
  683. x, y, area, amplitude);
  684. input_mt_slot(input_dev, id);
  685. if (status & MXT_T9_DETECT) {
  686. /*
  687. * Multiple bits may be set if the host is slow to read
  688. * the status messages, indicating all the events that
  689. * have happened.
  690. */
  691. if (status & MXT_T9_RELEASE) {
  692. input_mt_report_slot_state(input_dev,
  693. MT_TOOL_FINGER, 0);
  694. mxt_input_sync(data);
  695. }
  696. /* Touch active */
  697. input_mt_report_slot_state(input_dev, MT_TOOL_FINGER, 1);
  698. input_report_abs(input_dev, ABS_MT_POSITION_X, x);
  699. input_report_abs(input_dev, ABS_MT_POSITION_Y, y);
  700. input_report_abs(input_dev, ABS_MT_PRESSURE, amplitude);
  701. input_report_abs(input_dev, ABS_MT_TOUCH_MAJOR, area);
  702. } else {
  703. /* Touch no longer active, close out slot */
  704. input_mt_report_slot_state(input_dev, MT_TOOL_FINGER, 0);
  705. }
  706. data->update_input = true;
  707. }
  708. static void mxt_proc_t100_message(struct mxt_data *data, u8 *message)
  709. {
  710. struct device *dev = &data->client->dev;
  711. struct input_dev *input_dev = data->input_dev;
  712. int id;
  713. u8 status;
  714. u8 type = 0;
  715. u16 x;
  716. u16 y;
  717. int distance = 0;
  718. int tool = 0;
  719. u8 major = 0;
  720. u8 pressure = 0;
  721. u8 orientation = 0;
  722. id = message[0] - data->T100_reportid_min - 2;
  723. /* ignore SCRSTATUS events */
  724. if (id < 0)
  725. return;
  726. status = message[1];
  727. x = get_unaligned_le16(&message[2]);
  728. y = get_unaligned_le16(&message[4]);
  729. if (status & MXT_T100_DETECT) {
  730. type = (status & MXT_T100_TYPE_MASK) >> 4;
  731. switch (type) {
  732. case MXT_T100_TYPE_HOVERING_FINGER:
  733. tool = MT_TOOL_FINGER;
  734. distance = MXT_DISTANCE_HOVERING;
  735. if (data->t100_aux_vect)
  736. orientation = message[data->t100_aux_vect];
  737. break;
  738. case MXT_T100_TYPE_FINGER:
  739. case MXT_T100_TYPE_GLOVE:
  740. tool = MT_TOOL_FINGER;
  741. distance = MXT_DISTANCE_ACTIVE_TOUCH;
  742. if (data->t100_aux_area)
  743. major = message[data->t100_aux_area];
  744. if (data->t100_aux_ampl)
  745. pressure = message[data->t100_aux_ampl];
  746. if (data->t100_aux_vect)
  747. orientation = message[data->t100_aux_vect];
  748. break;
  749. case MXT_T100_TYPE_PASSIVE_STYLUS:
  750. tool = MT_TOOL_PEN;
  751. /*
  752. * Passive stylus is reported with size zero so
  753. * hardcode.
  754. */
  755. major = MXT_TOUCH_MAJOR_DEFAULT;
  756. if (data->t100_aux_ampl)
  757. pressure = message[data->t100_aux_ampl];
  758. break;
  759. case MXT_T100_TYPE_LARGE_TOUCH:
  760. /* Ignore suppressed touch */
  761. break;
  762. default:
  763. dev_dbg(dev, "Unexpected T100 type\n");
  764. return;
  765. }
  766. }
  767. /*
  768. * Values reported should be non-zero if tool is touching the
  769. * device
  770. */
  771. if (!pressure && type != MXT_T100_TYPE_HOVERING_FINGER)
  772. pressure = MXT_PRESSURE_DEFAULT;
  773. input_mt_slot(input_dev, id);
  774. if (status & MXT_T100_DETECT) {
  775. dev_dbg(dev, "[%u] type:%u x:%u y:%u a:%02X p:%02X v:%02X\n",
  776. id, type, x, y, major, pressure, orientation);
  777. input_mt_report_slot_state(input_dev, tool, 1);
  778. input_report_abs(input_dev, ABS_MT_POSITION_X, x);
  779. input_report_abs(input_dev, ABS_MT_POSITION_Y, y);
  780. input_report_abs(input_dev, ABS_MT_TOUCH_MAJOR, major);
  781. input_report_abs(input_dev, ABS_MT_PRESSURE, pressure);
  782. input_report_abs(input_dev, ABS_MT_DISTANCE, distance);
  783. input_report_abs(input_dev, ABS_MT_ORIENTATION, orientation);
  784. } else {
  785. dev_dbg(dev, "[%u] release\n", id);
  786. /* close out slot */
  787. input_mt_report_slot_state(input_dev, 0, 0);
  788. }
  789. data->update_input = true;
  790. }
  791. static int mxt_proc_message(struct mxt_data *data, u8 *message)
  792. {
  793. u8 report_id = message[0];
  794. if (report_id == MXT_RPTID_NOMSG)
  795. return 0;
  796. if (report_id == data->T6_reportid) {
  797. mxt_proc_t6_messages(data, message);
  798. } else if (!data->input_dev) {
  799. /*
  800. * Do not report events if input device
  801. * is not yet registered.
  802. */
  803. mxt_dump_message(data, message);
  804. } else if (report_id >= data->T9_reportid_min &&
  805. report_id <= data->T9_reportid_max) {
  806. mxt_proc_t9_message(data, message);
  807. } else if (report_id >= data->T100_reportid_min &&
  808. report_id <= data->T100_reportid_max) {
  809. mxt_proc_t100_message(data, message);
  810. } else if (report_id == data->T19_reportid) {
  811. mxt_input_button(data, message);
  812. data->update_input = true;
  813. } else {
  814. mxt_dump_message(data, message);
  815. }
  816. return 1;
  817. }
  818. static int mxt_read_and_process_messages(struct mxt_data *data, u8 count)
  819. {
  820. struct device *dev = &data->client->dev;
  821. int ret;
  822. int i;
  823. u8 num_valid = 0;
  824. /* Safety check for msg_buf */
  825. if (count > data->max_reportid)
  826. return -EINVAL;
  827. /* Process remaining messages if necessary */
  828. ret = __mxt_read_reg(data->client, data->T5_address,
  829. data->T5_msg_size * count, data->msg_buf);
  830. if (ret) {
  831. dev_err(dev, "Failed to read %u messages (%d)\n", count, ret);
  832. return ret;
  833. }
  834. for (i = 0; i < count; i++) {
  835. ret = mxt_proc_message(data,
  836. data->msg_buf + data->T5_msg_size * i);
  837. if (ret == 1)
  838. num_valid++;
  839. }
  840. /* return number of messages read */
  841. return num_valid;
  842. }
  843. static irqreturn_t mxt_process_messages_t44(struct mxt_data *data)
  844. {
  845. struct device *dev = &data->client->dev;
  846. int ret;
  847. u8 count, num_left;
  848. /* Read T44 and T5 together */
  849. ret = __mxt_read_reg(data->client, data->T44_address,
  850. data->T5_msg_size + 1, data->msg_buf);
  851. if (ret) {
  852. dev_err(dev, "Failed to read T44 and T5 (%d)\n", ret);
  853. return IRQ_NONE;
  854. }
  855. count = data->msg_buf[0];
  856. /*
  857. * This condition may be caused by the CHG line being configured in
  858. * Mode 0. It results in unnecessary I2C operations but it is benign.
  859. */
  860. if (count == 0)
  861. return IRQ_NONE;
  862. if (count > data->max_reportid) {
  863. dev_warn(dev, "T44 count %d exceeded max report id\n", count);
  864. count = data->max_reportid;
  865. }
  866. /* Process first message */
  867. ret = mxt_proc_message(data, data->msg_buf + 1);
  868. if (ret < 0) {
  869. dev_warn(dev, "Unexpected invalid message\n");
  870. return IRQ_NONE;
  871. }
  872. num_left = count - 1;
  873. /* Process remaining messages if necessary */
  874. if (num_left) {
  875. ret = mxt_read_and_process_messages(data, num_left);
  876. if (ret < 0)
  877. goto end;
  878. else if (ret != num_left)
  879. dev_warn(dev, "Unexpected invalid message\n");
  880. }
  881. end:
  882. if (data->update_input) {
  883. mxt_input_sync(data);
  884. data->update_input = false;
  885. }
  886. return IRQ_HANDLED;
  887. }
  888. static int mxt_process_messages_until_invalid(struct mxt_data *data)
  889. {
  890. struct device *dev = &data->client->dev;
  891. int count, read;
  892. u8 tries = 2;
  893. count = data->max_reportid;
  894. /* Read messages until we force an invalid */
  895. do {
  896. read = mxt_read_and_process_messages(data, count);
  897. if (read < count)
  898. return 0;
  899. } while (--tries);
  900. if (data->update_input) {
  901. mxt_input_sync(data);
  902. data->update_input = false;
  903. }
  904. dev_err(dev, "CHG pin isn't cleared\n");
  905. return -EBUSY;
  906. }
  907. static irqreturn_t mxt_process_messages(struct mxt_data *data)
  908. {
  909. int total_handled, num_handled;
  910. u8 count = data->last_message_count;
  911. if (count < 1 || count > data->max_reportid)
  912. count = 1;
  913. /* include final invalid message */
  914. total_handled = mxt_read_and_process_messages(data, count + 1);
  915. if (total_handled < 0)
  916. return IRQ_NONE;
  917. /* if there were invalid messages, then we are done */
  918. else if (total_handled <= count)
  919. goto update_count;
  920. /* keep reading two msgs until one is invalid or reportid limit */
  921. do {
  922. num_handled = mxt_read_and_process_messages(data, 2);
  923. if (num_handled < 0)
  924. return IRQ_NONE;
  925. total_handled += num_handled;
  926. if (num_handled < 2)
  927. break;
  928. } while (total_handled < data->num_touchids);
  929. update_count:
  930. data->last_message_count = total_handled;
  931. if (data->update_input) {
  932. mxt_input_sync(data);
  933. data->update_input = false;
  934. }
  935. return IRQ_HANDLED;
  936. }
  937. static irqreturn_t mxt_interrupt(int irq, void *dev_id)
  938. {
  939. struct mxt_data *data = dev_id;
  940. if (data->in_bootloader) {
  941. /* bootloader state transition completion */
  942. complete(&data->bl_completion);
  943. return IRQ_HANDLED;
  944. }
  945. if (!data->object_table)
  946. return IRQ_HANDLED;
  947. if (data->T44_address) {
  948. return mxt_process_messages_t44(data);
  949. } else {
  950. return mxt_process_messages(data);
  951. }
  952. }
  953. static int mxt_t6_command(struct mxt_data *data, u16 cmd_offset,
  954. u8 value, bool wait)
  955. {
  956. u16 reg;
  957. u8 command_register;
  958. int timeout_counter = 0;
  959. int ret;
  960. reg = data->T6_address + cmd_offset;
  961. ret = mxt_write_reg(data->client, reg, value);
  962. if (ret)
  963. return ret;
  964. if (!wait)
  965. return 0;
  966. do {
  967. msleep(20);
  968. ret = __mxt_read_reg(data->client, reg, 1, &command_register);
  969. if (ret)
  970. return ret;
  971. } while (command_register != 0 && timeout_counter++ <= 100);
  972. if (timeout_counter > 100) {
  973. dev_err(&data->client->dev, "Command failed!\n");
  974. return -EIO;
  975. }
  976. return 0;
  977. }
  978. static int mxt_acquire_irq(struct mxt_data *data)
  979. {
  980. int error;
  981. enable_irq(data->irq);
  982. error = mxt_process_messages_until_invalid(data);
  983. if (error)
  984. return error;
  985. return 0;
  986. }
  987. static int mxt_soft_reset(struct mxt_data *data)
  988. {
  989. struct device *dev = &data->client->dev;
  990. int ret = 0;
  991. dev_info(dev, "Resetting device\n");
  992. disable_irq(data->irq);
  993. reinit_completion(&data->reset_completion);
  994. ret = mxt_t6_command(data, MXT_COMMAND_RESET, MXT_RESET_VALUE, false);
  995. if (ret)
  996. return ret;
  997. /* Ignore CHG line for 100ms after reset */
  998. msleep(100);
  999. mxt_acquire_irq(data);
  1000. ret = mxt_wait_for_completion(data, &data->reset_completion,
  1001. MXT_RESET_TIMEOUT);
  1002. if (ret)
  1003. return ret;
  1004. return 0;
  1005. }
  1006. static void mxt_update_crc(struct mxt_data *data, u8 cmd, u8 value)
  1007. {
  1008. /*
  1009. * On failure, CRC is set to 0 and config will always be
  1010. * downloaded.
  1011. */
  1012. data->config_crc = 0;
  1013. reinit_completion(&data->crc_completion);
  1014. mxt_t6_command(data, cmd, value, true);
  1015. /*
  1016. * Wait for crc message. On failure, CRC is set to 0 and config will
  1017. * always be downloaded.
  1018. */
  1019. mxt_wait_for_completion(data, &data->crc_completion, MXT_CRC_TIMEOUT);
  1020. }
  1021. static void mxt_calc_crc24(u32 *crc, u8 firstbyte, u8 secondbyte)
  1022. {
  1023. static const unsigned int crcpoly = 0x80001B;
  1024. u32 result;
  1025. u32 data_word;
  1026. data_word = (secondbyte << 8) | firstbyte;
  1027. result = ((*crc << 1) ^ data_word);
  1028. if (result & 0x1000000)
  1029. result ^= crcpoly;
  1030. *crc = result;
  1031. }
  1032. static u32 mxt_calculate_crc(u8 *base, off_t start_off, off_t end_off)
  1033. {
  1034. u32 crc = 0;
  1035. u8 *ptr = base + start_off;
  1036. u8 *last_val = base + end_off - 1;
  1037. if (end_off < start_off)
  1038. return -EINVAL;
  1039. while (ptr < last_val) {
  1040. mxt_calc_crc24(&crc, *ptr, *(ptr + 1));
  1041. ptr += 2;
  1042. }
  1043. /* if len is odd, fill the last byte with 0 */
  1044. if (ptr == last_val)
  1045. mxt_calc_crc24(&crc, *ptr, 0);
  1046. /* Mask to 24-bit */
  1047. crc &= 0x00FFFFFF;
  1048. return crc;
  1049. }
  1050. static int mxt_prepare_cfg_mem(struct mxt_data *data,
  1051. const struct firmware *cfg,
  1052. unsigned int data_pos,
  1053. unsigned int cfg_start_ofs,
  1054. u8 *config_mem,
  1055. size_t config_mem_size)
  1056. {
  1057. struct device *dev = &data->client->dev;
  1058. struct mxt_object *object;
  1059. unsigned int type, instance, size, byte_offset;
  1060. int offset;
  1061. int ret;
  1062. int i;
  1063. u16 reg;
  1064. u8 val;
  1065. while (data_pos < cfg->size) {
  1066. /* Read type, instance, length */
  1067. ret = sscanf(cfg->data + data_pos, "%x %x %x%n",
  1068. &type, &instance, &size, &offset);
  1069. if (ret == 0) {
  1070. /* EOF */
  1071. break;
  1072. } else if (ret != 3) {
  1073. dev_err(dev, "Bad format: failed to parse object\n");
  1074. return -EINVAL;
  1075. }
  1076. data_pos += offset;
  1077. object = mxt_get_object(data, type);
  1078. if (!object) {
  1079. /* Skip object */
  1080. for (i = 0; i < size; i++) {
  1081. ret = sscanf(cfg->data + data_pos, "%hhx%n",
  1082. &val, &offset);
  1083. if (ret != 1) {
  1084. dev_err(dev, "Bad format in T%d at %d\n",
  1085. type, i);
  1086. return -EINVAL;
  1087. }
  1088. data_pos += offset;
  1089. }
  1090. continue;
  1091. }
  1092. if (size > mxt_obj_size(object)) {
  1093. /*
  1094. * Either we are in fallback mode due to wrong
  1095. * config or config from a later fw version,
  1096. * or the file is corrupt or hand-edited.
  1097. */
  1098. dev_warn(dev, "Discarding %zu byte(s) in T%u\n",
  1099. size - mxt_obj_size(object), type);
  1100. } else if (mxt_obj_size(object) > size) {
  1101. /*
  1102. * If firmware is upgraded, new bytes may be added to
  1103. * end of objects. It is generally forward compatible
  1104. * to zero these bytes - previous behaviour will be
  1105. * retained. However this does invalidate the CRC and
  1106. * will force fallback mode until the configuration is
  1107. * updated. We warn here but do nothing else - the
  1108. * malloc has zeroed the entire configuration.
  1109. */
  1110. dev_warn(dev, "Zeroing %zu byte(s) in T%d\n",
  1111. mxt_obj_size(object) - size, type);
  1112. }
  1113. if (instance >= mxt_obj_instances(object)) {
  1114. dev_err(dev, "Object instances exceeded!\n");
  1115. return -EINVAL;
  1116. }
  1117. reg = object->start_address + mxt_obj_size(object) * instance;
  1118. for (i = 0; i < size; i++) {
  1119. ret = sscanf(cfg->data + data_pos, "%hhx%n",
  1120. &val,
  1121. &offset);
  1122. if (ret != 1) {
  1123. dev_err(dev, "Bad format in T%d at %d\n",
  1124. type, i);
  1125. return -EINVAL;
  1126. }
  1127. data_pos += offset;
  1128. if (i > mxt_obj_size(object))
  1129. continue;
  1130. byte_offset = reg + i - cfg_start_ofs;
  1131. if (byte_offset >= 0 && byte_offset < config_mem_size) {
  1132. *(config_mem + byte_offset) = val;
  1133. } else {
  1134. dev_err(dev, "Bad object: reg:%d, T%d, ofs=%d\n",
  1135. reg, object->type, byte_offset);
  1136. return -EINVAL;
  1137. }
  1138. }
  1139. }
  1140. return 0;
  1141. }
  1142. static int mxt_upload_cfg_mem(struct mxt_data *data, unsigned int cfg_start,
  1143. u8 *config_mem, size_t config_mem_size)
  1144. {
  1145. unsigned int byte_offset = 0;
  1146. int error;
  1147. /* Write configuration as blocks */
  1148. while (byte_offset < config_mem_size) {
  1149. unsigned int size = config_mem_size - byte_offset;
  1150. if (size > MXT_MAX_BLOCK_WRITE)
  1151. size = MXT_MAX_BLOCK_WRITE;
  1152. error = __mxt_write_reg(data->client,
  1153. cfg_start + byte_offset,
  1154. size, config_mem + byte_offset);
  1155. if (error) {
  1156. dev_err(&data->client->dev,
  1157. "Config write error, ret=%d\n", error);
  1158. return error;
  1159. }
  1160. byte_offset += size;
  1161. }
  1162. return 0;
  1163. }
  1164. static int mxt_init_t7_power_cfg(struct mxt_data *data);
  1165. /*
  1166. * mxt_update_cfg - download configuration to chip
  1167. *
  1168. * Atmel Raw Config File Format
  1169. *
  1170. * The first four lines of the raw config file contain:
  1171. * 1) Version
  1172. * 2) Chip ID Information (first 7 bytes of device memory)
  1173. * 3) Chip Information Block 24-bit CRC Checksum
  1174. * 4) Chip Configuration 24-bit CRC Checksum
  1175. *
  1176. * The rest of the file consists of one line per object instance:
  1177. * <TYPE> <INSTANCE> <SIZE> <CONTENTS>
  1178. *
  1179. * <TYPE> - 2-byte object type as hex
  1180. * <INSTANCE> - 2-byte object instance number as hex
  1181. * <SIZE> - 2-byte object size as hex
  1182. * <CONTENTS> - array of <SIZE> 1-byte hex values
  1183. */
  1184. static int mxt_update_cfg(struct mxt_data *data, const struct firmware *cfg)
  1185. {
  1186. struct device *dev = &data->client->dev;
  1187. struct mxt_info cfg_info;
  1188. int ret;
  1189. int offset;
  1190. int data_pos;
  1191. int i;
  1192. int cfg_start_ofs;
  1193. u32 info_crc, config_crc, calculated_crc;
  1194. u8 *config_mem;
  1195. size_t config_mem_size;
  1196. mxt_update_crc(data, MXT_COMMAND_REPORTALL, 1);
  1197. if (strncmp(cfg->data, MXT_CFG_MAGIC, strlen(MXT_CFG_MAGIC))) {
  1198. dev_err(dev, "Unrecognised config file\n");
  1199. return -EINVAL;
  1200. }
  1201. data_pos = strlen(MXT_CFG_MAGIC);
  1202. /* Load information block and check */
  1203. for (i = 0; i < sizeof(struct mxt_info); i++) {
  1204. ret = sscanf(cfg->data + data_pos, "%hhx%n",
  1205. (unsigned char *)&cfg_info + i,
  1206. &offset);
  1207. if (ret != 1) {
  1208. dev_err(dev, "Bad format\n");
  1209. return -EINVAL;
  1210. }
  1211. data_pos += offset;
  1212. }
  1213. if (cfg_info.family_id != data->info.family_id) {
  1214. dev_err(dev, "Family ID mismatch!\n");
  1215. return -EINVAL;
  1216. }
  1217. if (cfg_info.variant_id != data->info.variant_id) {
  1218. dev_err(dev, "Variant ID mismatch!\n");
  1219. return -EINVAL;
  1220. }
  1221. /* Read CRCs */
  1222. ret = sscanf(cfg->data + data_pos, "%x%n", &info_crc, &offset);
  1223. if (ret != 1) {
  1224. dev_err(dev, "Bad format: failed to parse Info CRC\n");
  1225. return -EINVAL;
  1226. }
  1227. data_pos += offset;
  1228. ret = sscanf(cfg->data + data_pos, "%x%n", &config_crc, &offset);
  1229. if (ret != 1) {
  1230. dev_err(dev, "Bad format: failed to parse Config CRC\n");
  1231. return -EINVAL;
  1232. }
  1233. data_pos += offset;
  1234. /*
  1235. * The Info Block CRC is calculated over mxt_info and the object
  1236. * table. If it does not match then we are trying to load the
  1237. * configuration from a different chip or firmware version, so
  1238. * the configuration CRC is invalid anyway.
  1239. */
  1240. if (info_crc == data->info_crc) {
  1241. if (config_crc == 0 || data->config_crc == 0) {
  1242. dev_info(dev, "CRC zero, attempting to apply config\n");
  1243. } else if (config_crc == data->config_crc) {
  1244. dev_dbg(dev, "Config CRC 0x%06X: OK\n",
  1245. data->config_crc);
  1246. return 0;
  1247. } else {
  1248. dev_info(dev, "Config CRC 0x%06X: does not match file 0x%06X\n",
  1249. data->config_crc, config_crc);
  1250. }
  1251. } else {
  1252. dev_warn(dev,
  1253. "Warning: Info CRC error - device=0x%06X file=0x%06X\n",
  1254. data->info_crc, info_crc);
  1255. }
  1256. /* Malloc memory to store configuration */
  1257. cfg_start_ofs = MXT_OBJECT_START +
  1258. data->info.object_num * sizeof(struct mxt_object) +
  1259. MXT_INFO_CHECKSUM_SIZE;
  1260. config_mem_size = data->mem_size - cfg_start_ofs;
  1261. config_mem = kzalloc(config_mem_size, GFP_KERNEL);
  1262. if (!config_mem) {
  1263. dev_err(dev, "Failed to allocate memory\n");
  1264. return -ENOMEM;
  1265. }
  1266. ret = mxt_prepare_cfg_mem(data, cfg, data_pos, cfg_start_ofs,
  1267. config_mem, config_mem_size);
  1268. if (ret)
  1269. goto release_mem;
  1270. /* Calculate crc of the received configs (not the raw config file) */
  1271. if (data->T7_address < cfg_start_ofs) {
  1272. dev_err(dev, "Bad T7 address, T7addr = %x, config offset %x\n",
  1273. data->T7_address, cfg_start_ofs);
  1274. ret = 0;
  1275. goto release_mem;
  1276. }
  1277. calculated_crc = mxt_calculate_crc(config_mem,
  1278. data->T7_address - cfg_start_ofs,
  1279. config_mem_size);
  1280. if (config_crc > 0 && config_crc != calculated_crc)
  1281. dev_warn(dev, "Config CRC error, calculated=%06X, file=%06X\n",
  1282. calculated_crc, config_crc);
  1283. ret = mxt_upload_cfg_mem(data, cfg_start_ofs,
  1284. config_mem, config_mem_size);
  1285. if (ret)
  1286. goto release_mem;
  1287. mxt_update_crc(data, MXT_COMMAND_BACKUPNV, MXT_BACKUP_VALUE);
  1288. ret = mxt_soft_reset(data);
  1289. if (ret)
  1290. goto release_mem;
  1291. dev_info(dev, "Config successfully updated\n");
  1292. /* T7 config may have changed */
  1293. mxt_init_t7_power_cfg(data);
  1294. release_mem:
  1295. kfree(config_mem);
  1296. return ret;
  1297. }
  1298. static int mxt_get_info(struct mxt_data *data)
  1299. {
  1300. struct i2c_client *client = data->client;
  1301. struct mxt_info *info = &data->info;
  1302. int error;
  1303. /* Read 7-byte info block starting at address 0 */
  1304. error = __mxt_read_reg(client, 0, sizeof(*info), info);
  1305. if (error)
  1306. return error;
  1307. return 0;
  1308. }
  1309. static void mxt_free_input_device(struct mxt_data *data)
  1310. {
  1311. if (data->input_dev) {
  1312. input_unregister_device(data->input_dev);
  1313. data->input_dev = NULL;
  1314. }
  1315. }
  1316. static void mxt_free_object_table(struct mxt_data *data)
  1317. {
  1318. #ifdef CONFIG_TOUCHSCREEN_ATMEL_MXT_T37
  1319. video_unregister_device(&data->dbg.vdev);
  1320. v4l2_device_unregister(&data->dbg.v4l2);
  1321. #endif
  1322. kfree(data->object_table);
  1323. data->object_table = NULL;
  1324. kfree(data->msg_buf);
  1325. data->msg_buf = NULL;
  1326. data->T5_address = 0;
  1327. data->T5_msg_size = 0;
  1328. data->T6_reportid = 0;
  1329. data->T7_address = 0;
  1330. data->T9_reportid_min = 0;
  1331. data->T9_reportid_max = 0;
  1332. data->T19_reportid = 0;
  1333. data->T44_address = 0;
  1334. data->T100_reportid_min = 0;
  1335. data->T100_reportid_max = 0;
  1336. data->max_reportid = 0;
  1337. }
  1338. static int mxt_get_object_table(struct mxt_data *data)
  1339. {
  1340. struct i2c_client *client = data->client;
  1341. size_t table_size;
  1342. struct mxt_object *object_table;
  1343. int error;
  1344. int i;
  1345. u8 reportid;
  1346. u16 end_address;
  1347. table_size = data->info.object_num * sizeof(struct mxt_object);
  1348. object_table = kzalloc(table_size, GFP_KERNEL);
  1349. if (!object_table) {
  1350. dev_err(&data->client->dev, "Failed to allocate memory\n");
  1351. return -ENOMEM;
  1352. }
  1353. error = __mxt_read_reg(client, MXT_OBJECT_START, table_size,
  1354. object_table);
  1355. if (error) {
  1356. kfree(object_table);
  1357. return error;
  1358. }
  1359. /* Valid Report IDs start counting from 1 */
  1360. reportid = 1;
  1361. data->mem_size = 0;
  1362. for (i = 0; i < data->info.object_num; i++) {
  1363. struct mxt_object *object = object_table + i;
  1364. u8 min_id, max_id;
  1365. le16_to_cpus(&object->start_address);
  1366. if (object->num_report_ids) {
  1367. min_id = reportid;
  1368. reportid += object->num_report_ids *
  1369. mxt_obj_instances(object);
  1370. max_id = reportid - 1;
  1371. } else {
  1372. min_id = 0;
  1373. max_id = 0;
  1374. }
  1375. dev_dbg(&data->client->dev,
  1376. "T%u Start:%u Size:%zu Instances:%zu Report IDs:%u-%u\n",
  1377. object->type, object->start_address,
  1378. mxt_obj_size(object), mxt_obj_instances(object),
  1379. min_id, max_id);
  1380. switch (object->type) {
  1381. case MXT_GEN_MESSAGE_T5:
  1382. if (data->info.family_id == 0x80 &&
  1383. data->info.version < 0x20) {
  1384. /*
  1385. * On mXT224 firmware versions prior to V2.0
  1386. * read and discard unused CRC byte otherwise
  1387. * DMA reads are misaligned.
  1388. */
  1389. data->T5_msg_size = mxt_obj_size(object);
  1390. } else {
  1391. /* CRC not enabled, so skip last byte */
  1392. data->T5_msg_size = mxt_obj_size(object) - 1;
  1393. }
  1394. data->T5_address = object->start_address;
  1395. break;
  1396. case MXT_GEN_COMMAND_T6:
  1397. data->T6_reportid = min_id;
  1398. data->T6_address = object->start_address;
  1399. break;
  1400. case MXT_GEN_POWER_T7:
  1401. data->T7_address = object->start_address;
  1402. break;
  1403. case MXT_TOUCH_MULTI_T9:
  1404. data->multitouch = MXT_TOUCH_MULTI_T9;
  1405. data->T9_reportid_min = min_id;
  1406. data->T9_reportid_max = max_id;
  1407. data->num_touchids = object->num_report_ids
  1408. * mxt_obj_instances(object);
  1409. break;
  1410. case MXT_SPT_MESSAGECOUNT_T44:
  1411. data->T44_address = object->start_address;
  1412. break;
  1413. case MXT_SPT_GPIOPWM_T19:
  1414. data->T19_reportid = min_id;
  1415. break;
  1416. case MXT_TOUCH_MULTITOUCHSCREEN_T100:
  1417. data->multitouch = MXT_TOUCH_MULTITOUCHSCREEN_T100;
  1418. data->T100_reportid_min = min_id;
  1419. data->T100_reportid_max = max_id;
  1420. /* first two report IDs reserved */
  1421. data->num_touchids = object->num_report_ids - 2;
  1422. break;
  1423. }
  1424. end_address = object->start_address
  1425. + mxt_obj_size(object) * mxt_obj_instances(object) - 1;
  1426. if (end_address >= data->mem_size)
  1427. data->mem_size = end_address + 1;
  1428. }
  1429. /* Store maximum reportid */
  1430. data->max_reportid = reportid;
  1431. /* If T44 exists, T5 position has to be directly after */
  1432. if (data->T44_address && (data->T5_address != data->T44_address + 1)) {
  1433. dev_err(&client->dev, "Invalid T44 position\n");
  1434. error = -EINVAL;
  1435. goto free_object_table;
  1436. }
  1437. data->msg_buf = kcalloc(data->max_reportid,
  1438. data->T5_msg_size, GFP_KERNEL);
  1439. if (!data->msg_buf) {
  1440. dev_err(&client->dev, "Failed to allocate message buffer\n");
  1441. error = -ENOMEM;
  1442. goto free_object_table;
  1443. }
  1444. data->object_table = object_table;
  1445. return 0;
  1446. free_object_table:
  1447. mxt_free_object_table(data);
  1448. return error;
  1449. }
  1450. static int mxt_read_t9_resolution(struct mxt_data *data)
  1451. {
  1452. struct i2c_client *client = data->client;
  1453. int error;
  1454. struct t9_range range;
  1455. unsigned char orient;
  1456. struct mxt_object *object;
  1457. object = mxt_get_object(data, MXT_TOUCH_MULTI_T9);
  1458. if (!object)
  1459. return -EINVAL;
  1460. error = __mxt_read_reg(client,
  1461. object->start_address + MXT_T9_XSIZE,
  1462. sizeof(data->xsize), &data->xsize);
  1463. if (error)
  1464. return error;
  1465. error = __mxt_read_reg(client,
  1466. object->start_address + MXT_T9_YSIZE,
  1467. sizeof(data->ysize), &data->ysize);
  1468. if (error)
  1469. return error;
  1470. error = __mxt_read_reg(client,
  1471. object->start_address + MXT_T9_RANGE,
  1472. sizeof(range), &range);
  1473. if (error)
  1474. return error;
  1475. data->max_x = get_unaligned_le16(&range.x);
  1476. data->max_y = get_unaligned_le16(&range.y);
  1477. error = __mxt_read_reg(client,
  1478. object->start_address + MXT_T9_ORIENT,
  1479. 1, &orient);
  1480. if (error)
  1481. return error;
  1482. data->xy_switch = orient & MXT_T9_ORIENT_SWITCH;
  1483. data->invertx = orient & MXT_T9_ORIENT_INVERTX;
  1484. data->inverty = orient & MXT_T9_ORIENT_INVERTY;
  1485. return 0;
  1486. }
  1487. static int mxt_read_t100_config(struct mxt_data *data)
  1488. {
  1489. struct i2c_client *client = data->client;
  1490. int error;
  1491. struct mxt_object *object;
  1492. u16 range_x, range_y;
  1493. u8 cfg, tchaux;
  1494. u8 aux;
  1495. object = mxt_get_object(data, MXT_TOUCH_MULTITOUCHSCREEN_T100);
  1496. if (!object)
  1497. return -EINVAL;
  1498. /* read touchscreen dimensions */
  1499. error = __mxt_read_reg(client,
  1500. object->start_address + MXT_T100_XRANGE,
  1501. sizeof(range_x), &range_x);
  1502. if (error)
  1503. return error;
  1504. data->max_x = get_unaligned_le16(&range_x);
  1505. error = __mxt_read_reg(client,
  1506. object->start_address + MXT_T100_YRANGE,
  1507. sizeof(range_y), &range_y);
  1508. if (error)
  1509. return error;
  1510. data->max_y = get_unaligned_le16(&range_y);
  1511. error = __mxt_read_reg(client,
  1512. object->start_address + MXT_T100_XSIZE,
  1513. sizeof(data->xsize), &data->xsize);
  1514. if (error)
  1515. return error;
  1516. error = __mxt_read_reg(client,
  1517. object->start_address + MXT_T100_YSIZE,
  1518. sizeof(data->ysize), &data->ysize);
  1519. if (error)
  1520. return error;
  1521. /* read orientation config */
  1522. error = __mxt_read_reg(client,
  1523. object->start_address + MXT_T100_CFG1,
  1524. 1, &cfg);
  1525. if (error)
  1526. return error;
  1527. data->xy_switch = cfg & MXT_T100_CFG_SWITCHXY;
  1528. data->invertx = cfg & MXT_T100_CFG_INVERTX;
  1529. data->inverty = cfg & MXT_T100_CFG_INVERTY;
  1530. /* allocate aux bytes */
  1531. error = __mxt_read_reg(client,
  1532. object->start_address + MXT_T100_TCHAUX,
  1533. 1, &tchaux);
  1534. if (error)
  1535. return error;
  1536. aux = 6;
  1537. if (tchaux & MXT_T100_TCHAUX_VECT)
  1538. data->t100_aux_vect = aux++;
  1539. if (tchaux & MXT_T100_TCHAUX_AMPL)
  1540. data->t100_aux_ampl = aux++;
  1541. if (tchaux & MXT_T100_TCHAUX_AREA)
  1542. data->t100_aux_area = aux++;
  1543. dev_dbg(&client->dev,
  1544. "T100 aux mappings vect:%u ampl:%u area:%u\n",
  1545. data->t100_aux_vect, data->t100_aux_ampl, data->t100_aux_area);
  1546. return 0;
  1547. }
  1548. static int mxt_input_open(struct input_dev *dev);
  1549. static void mxt_input_close(struct input_dev *dev);
  1550. static void mxt_set_up_as_touchpad(struct input_dev *input_dev,
  1551. struct mxt_data *data)
  1552. {
  1553. const struct mxt_platform_data *pdata = data->pdata;
  1554. int i;
  1555. input_dev->name = "Atmel maXTouch Touchpad";
  1556. __set_bit(INPUT_PROP_BUTTONPAD, input_dev->propbit);
  1557. input_abs_set_res(input_dev, ABS_X, MXT_PIXELS_PER_MM);
  1558. input_abs_set_res(input_dev, ABS_Y, MXT_PIXELS_PER_MM);
  1559. input_abs_set_res(input_dev, ABS_MT_POSITION_X,
  1560. MXT_PIXELS_PER_MM);
  1561. input_abs_set_res(input_dev, ABS_MT_POSITION_Y,
  1562. MXT_PIXELS_PER_MM);
  1563. for (i = 0; i < pdata->t19_num_keys; i++)
  1564. if (pdata->t19_keymap[i] != KEY_RESERVED)
  1565. input_set_capability(input_dev, EV_KEY,
  1566. pdata->t19_keymap[i]);
  1567. }
  1568. static int mxt_initialize_input_device(struct mxt_data *data)
  1569. {
  1570. const struct mxt_platform_data *pdata = data->pdata;
  1571. struct device *dev = &data->client->dev;
  1572. struct input_dev *input_dev;
  1573. int error;
  1574. unsigned int num_mt_slots;
  1575. unsigned int mt_flags = 0;
  1576. switch (data->multitouch) {
  1577. case MXT_TOUCH_MULTI_T9:
  1578. num_mt_slots = data->T9_reportid_max - data->T9_reportid_min + 1;
  1579. error = mxt_read_t9_resolution(data);
  1580. if (error)
  1581. dev_warn(dev, "Failed to initialize T9 resolution\n");
  1582. break;
  1583. case MXT_TOUCH_MULTITOUCHSCREEN_T100:
  1584. num_mt_slots = data->num_touchids;
  1585. error = mxt_read_t100_config(data);
  1586. if (error)
  1587. dev_warn(dev, "Failed to read T100 config\n");
  1588. break;
  1589. default:
  1590. dev_err(dev, "Invalid multitouch object\n");
  1591. return -EINVAL;
  1592. }
  1593. /* Handle default values and orientation switch */
  1594. if (data->max_x == 0)
  1595. data->max_x = 1023;
  1596. if (data->max_y == 0)
  1597. data->max_y = 1023;
  1598. if (data->xy_switch)
  1599. swap(data->max_x, data->max_y);
  1600. dev_info(dev, "Touchscreen size X%uY%u\n", data->max_x, data->max_y);
  1601. /* Register input device */
  1602. input_dev = input_allocate_device();
  1603. if (!input_dev) {
  1604. dev_err(dev, "Failed to allocate memory\n");
  1605. return -ENOMEM;
  1606. }
  1607. input_dev->name = "Atmel maXTouch Touchscreen";
  1608. input_dev->phys = data->phys;
  1609. input_dev->id.bustype = BUS_I2C;
  1610. input_dev->dev.parent = dev;
  1611. input_dev->open = mxt_input_open;
  1612. input_dev->close = mxt_input_close;
  1613. input_set_capability(input_dev, EV_KEY, BTN_TOUCH);
  1614. /* For single touch */
  1615. input_set_abs_params(input_dev, ABS_X, 0, data->max_x, 0, 0);
  1616. input_set_abs_params(input_dev, ABS_Y, 0, data->max_y, 0, 0);
  1617. if (data->multitouch == MXT_TOUCH_MULTI_T9 ||
  1618. (data->multitouch == MXT_TOUCH_MULTITOUCHSCREEN_T100 &&
  1619. data->t100_aux_ampl)) {
  1620. input_set_abs_params(input_dev, ABS_PRESSURE, 0, 255, 0, 0);
  1621. }
  1622. /* If device has buttons we assume it is a touchpad */
  1623. if (pdata->t19_num_keys) {
  1624. mxt_set_up_as_touchpad(input_dev, data);
  1625. mt_flags |= INPUT_MT_POINTER;
  1626. } else {
  1627. mt_flags |= INPUT_MT_DIRECT;
  1628. }
  1629. /* For multi touch */
  1630. error = input_mt_init_slots(input_dev, num_mt_slots, mt_flags);
  1631. if (error) {
  1632. dev_err(dev, "Error %d initialising slots\n", error);
  1633. goto err_free_mem;
  1634. }
  1635. if (data->multitouch == MXT_TOUCH_MULTITOUCHSCREEN_T100) {
  1636. input_set_abs_params(input_dev, ABS_MT_TOOL_TYPE,
  1637. 0, MT_TOOL_MAX, 0, 0);
  1638. input_set_abs_params(input_dev, ABS_MT_DISTANCE,
  1639. MXT_DISTANCE_ACTIVE_TOUCH,
  1640. MXT_DISTANCE_HOVERING,
  1641. 0, 0);
  1642. }
  1643. input_set_abs_params(input_dev, ABS_MT_POSITION_X,
  1644. 0, data->max_x, 0, 0);
  1645. input_set_abs_params(input_dev, ABS_MT_POSITION_Y,
  1646. 0, data->max_y, 0, 0);
  1647. if (data->multitouch == MXT_TOUCH_MULTI_T9 ||
  1648. (data->multitouch == MXT_TOUCH_MULTITOUCHSCREEN_T100 &&
  1649. data->t100_aux_area)) {
  1650. input_set_abs_params(input_dev, ABS_MT_TOUCH_MAJOR,
  1651. 0, MXT_MAX_AREA, 0, 0);
  1652. }
  1653. if (data->multitouch == MXT_TOUCH_MULTI_T9 ||
  1654. (data->multitouch == MXT_TOUCH_MULTITOUCHSCREEN_T100 &&
  1655. data->t100_aux_ampl)) {
  1656. input_set_abs_params(input_dev, ABS_MT_PRESSURE,
  1657. 0, 255, 0, 0);
  1658. }
  1659. if (data->multitouch == MXT_TOUCH_MULTITOUCHSCREEN_T100 &&
  1660. data->t100_aux_vect) {
  1661. input_set_abs_params(input_dev, ABS_MT_ORIENTATION,
  1662. 0, 255, 0, 0);
  1663. }
  1664. if (data->multitouch == MXT_TOUCH_MULTITOUCHSCREEN_T100 &&
  1665. data->t100_aux_ampl) {
  1666. input_set_abs_params(input_dev, ABS_MT_PRESSURE,
  1667. 0, 255, 0, 0);
  1668. }
  1669. if (data->multitouch == MXT_TOUCH_MULTITOUCHSCREEN_T100 &&
  1670. data->t100_aux_vect) {
  1671. input_set_abs_params(input_dev, ABS_MT_ORIENTATION,
  1672. 0, 255, 0, 0);
  1673. }
  1674. input_set_drvdata(input_dev, data);
  1675. error = input_register_device(input_dev);
  1676. if (error) {
  1677. dev_err(dev, "Error %d registering input device\n", error);
  1678. goto err_free_mem;
  1679. }
  1680. data->input_dev = input_dev;
  1681. return 0;
  1682. err_free_mem:
  1683. input_free_device(input_dev);
  1684. return error;
  1685. }
  1686. static int mxt_configure_objects(struct mxt_data *data,
  1687. const struct firmware *cfg);
  1688. static void mxt_config_cb(const struct firmware *cfg, void *ctx)
  1689. {
  1690. mxt_configure_objects(ctx, cfg);
  1691. release_firmware(cfg);
  1692. }
  1693. static int mxt_initialize(struct mxt_data *data)
  1694. {
  1695. struct i2c_client *client = data->client;
  1696. int recovery_attempts = 0;
  1697. int error;
  1698. while (1) {
  1699. error = mxt_get_info(data);
  1700. if (!error)
  1701. break;
  1702. /* Check bootloader state */
  1703. error = mxt_probe_bootloader(data, false);
  1704. if (error) {
  1705. dev_info(&client->dev, "Trying alternate bootloader address\n");
  1706. error = mxt_probe_bootloader(data, true);
  1707. if (error) {
  1708. /* Chip is not in appmode or bootloader mode */
  1709. return error;
  1710. }
  1711. }
  1712. /* OK, we are in bootloader, see if we can recover */
  1713. if (++recovery_attempts > 1) {
  1714. dev_err(&client->dev, "Could not recover from bootloader mode\n");
  1715. /*
  1716. * We can reflash from this state, so do not
  1717. * abort initialization.
  1718. */
  1719. data->in_bootloader = true;
  1720. return 0;
  1721. }
  1722. /* Attempt to exit bootloader into app mode */
  1723. mxt_send_bootloader_cmd(data, false);
  1724. msleep(MXT_FW_RESET_TIME);
  1725. }
  1726. /* Get object table information */
  1727. error = mxt_get_object_table(data);
  1728. if (error) {
  1729. dev_err(&client->dev, "Error %d reading object table\n", error);
  1730. return error;
  1731. }
  1732. error = mxt_acquire_irq(data);
  1733. if (error)
  1734. goto err_free_object_table;
  1735. error = reject_firmware_nowait(THIS_MODULE, true, MXT_CFG_NAME,
  1736. &client->dev, GFP_KERNEL, data,
  1737. mxt_config_cb);
  1738. if (error) {
  1739. dev_err(&client->dev, "Failed to invoke firmware loader: %d\n",
  1740. error);
  1741. goto err_free_object_table;
  1742. }
  1743. return 0;
  1744. err_free_object_table:
  1745. mxt_free_object_table(data);
  1746. return error;
  1747. }
  1748. static int mxt_set_t7_power_cfg(struct mxt_data *data, u8 sleep)
  1749. {
  1750. struct device *dev = &data->client->dev;
  1751. int error;
  1752. struct t7_config *new_config;
  1753. struct t7_config deepsleep = { .active = 0, .idle = 0 };
  1754. if (sleep == MXT_POWER_CFG_DEEPSLEEP)
  1755. new_config = &deepsleep;
  1756. else
  1757. new_config = &data->t7_cfg;
  1758. error = __mxt_write_reg(data->client, data->T7_address,
  1759. sizeof(data->t7_cfg), new_config);
  1760. if (error)
  1761. return error;
  1762. dev_dbg(dev, "Set T7 ACTV:%d IDLE:%d\n",
  1763. new_config->active, new_config->idle);
  1764. return 0;
  1765. }
  1766. static int mxt_init_t7_power_cfg(struct mxt_data *data)
  1767. {
  1768. struct device *dev = &data->client->dev;
  1769. int error;
  1770. bool retry = false;
  1771. recheck:
  1772. error = __mxt_read_reg(data->client, data->T7_address,
  1773. sizeof(data->t7_cfg), &data->t7_cfg);
  1774. if (error)
  1775. return error;
  1776. if (data->t7_cfg.active == 0 || data->t7_cfg.idle == 0) {
  1777. if (!retry) {
  1778. dev_dbg(dev, "T7 cfg zero, resetting\n");
  1779. mxt_soft_reset(data);
  1780. retry = true;
  1781. goto recheck;
  1782. } else {
  1783. dev_dbg(dev, "T7 cfg zero after reset, overriding\n");
  1784. data->t7_cfg.active = 20;
  1785. data->t7_cfg.idle = 100;
  1786. return mxt_set_t7_power_cfg(data, MXT_POWER_CFG_RUN);
  1787. }
  1788. }
  1789. dev_dbg(dev, "Initialized power cfg: ACTV %d, IDLE %d\n",
  1790. data->t7_cfg.active, data->t7_cfg.idle);
  1791. return 0;
  1792. }
  1793. #ifdef CONFIG_TOUCHSCREEN_ATMEL_MXT_T37
  1794. static u16 mxt_get_debug_value(struct mxt_data *data, unsigned int x,
  1795. unsigned int y)
  1796. {
  1797. struct mxt_info *info = &data->info;
  1798. struct mxt_dbg *dbg = &data->dbg;
  1799. unsigned int ofs, page;
  1800. unsigned int col = 0;
  1801. unsigned int col_width;
  1802. if (info->family_id == MXT_FAMILY_1386) {
  1803. col_width = info->matrix_ysize / MXT1386_COLUMNS;
  1804. col = y / col_width;
  1805. y = y % col_width;
  1806. } else {
  1807. col_width = info->matrix_ysize;
  1808. }
  1809. ofs = (y + (x * col_width)) * sizeof(u16);
  1810. page = ofs / MXT_DIAGNOSTIC_SIZE;
  1811. ofs %= MXT_DIAGNOSTIC_SIZE;
  1812. if (info->family_id == MXT_FAMILY_1386)
  1813. page += col * MXT1386_PAGES_PER_COLUMN;
  1814. return get_unaligned_le16(&dbg->t37_buf[page].data[ofs]);
  1815. }
  1816. static int mxt_convert_debug_pages(struct mxt_data *data, u16 *outbuf)
  1817. {
  1818. struct mxt_dbg *dbg = &data->dbg;
  1819. unsigned int x = 0;
  1820. unsigned int y = 0;
  1821. unsigned int i, rx, ry;
  1822. for (i = 0; i < dbg->t37_nodes; i++) {
  1823. /* Handle orientation */
  1824. rx = data->xy_switch ? y : x;
  1825. ry = data->xy_switch ? x : y;
  1826. rx = data->invertx ? (data->xsize - 1 - rx) : rx;
  1827. ry = data->inverty ? (data->ysize - 1 - ry) : ry;
  1828. outbuf[i] = mxt_get_debug_value(data, rx, ry);
  1829. /* Next value */
  1830. if (++x >= (data->xy_switch ? data->ysize : data->xsize)) {
  1831. x = 0;
  1832. y++;
  1833. }
  1834. }
  1835. return 0;
  1836. }
  1837. static int mxt_read_diagnostic_debug(struct mxt_data *data, u8 mode,
  1838. u16 *outbuf)
  1839. {
  1840. struct mxt_dbg *dbg = &data->dbg;
  1841. int retries = 0;
  1842. int page;
  1843. int ret;
  1844. u8 cmd = mode;
  1845. struct t37_debug *p;
  1846. u8 cmd_poll;
  1847. for (page = 0; page < dbg->t37_pages; page++) {
  1848. p = dbg->t37_buf + page;
  1849. ret = mxt_write_reg(data->client, dbg->diag_cmd_address,
  1850. cmd);
  1851. if (ret)
  1852. return ret;
  1853. retries = 0;
  1854. msleep(20);
  1855. wait_cmd:
  1856. /* Read back command byte */
  1857. ret = __mxt_read_reg(data->client, dbg->diag_cmd_address,
  1858. sizeof(cmd_poll), &cmd_poll);
  1859. if (ret)
  1860. return ret;
  1861. /* Field is cleared once the command has been processed */
  1862. if (cmd_poll) {
  1863. if (retries++ > 100)
  1864. return -EINVAL;
  1865. msleep(20);
  1866. goto wait_cmd;
  1867. }
  1868. /* Read T37 page */
  1869. ret = __mxt_read_reg(data->client, dbg->t37_address,
  1870. sizeof(struct t37_debug), p);
  1871. if (ret)
  1872. return ret;
  1873. if (p->mode != mode || p->page != page) {
  1874. dev_err(&data->client->dev, "T37 page mismatch\n");
  1875. return -EINVAL;
  1876. }
  1877. dev_dbg(&data->client->dev, "%s page:%d retries:%d\n",
  1878. __func__, page, retries);
  1879. /* For remaining pages, write PAGEUP rather than mode */
  1880. cmd = MXT_DIAGNOSTIC_PAGEUP;
  1881. }
  1882. return mxt_convert_debug_pages(data, outbuf);
  1883. }
  1884. static int mxt_queue_setup(struct vb2_queue *q,
  1885. unsigned int *nbuffers, unsigned int *nplanes,
  1886. unsigned int sizes[], struct device *alloc_devs[])
  1887. {
  1888. struct mxt_data *data = q->drv_priv;
  1889. size_t size = data->dbg.t37_nodes * sizeof(u16);
  1890. if (*nplanes)
  1891. return sizes[0] < size ? -EINVAL : 0;
  1892. *nplanes = 1;
  1893. sizes[0] = size;
  1894. return 0;
  1895. }
  1896. static void mxt_buffer_queue(struct vb2_buffer *vb)
  1897. {
  1898. struct mxt_data *data = vb2_get_drv_priv(vb->vb2_queue);
  1899. u16 *ptr;
  1900. int ret;
  1901. u8 mode;
  1902. ptr = vb2_plane_vaddr(vb, 0);
  1903. if (!ptr) {
  1904. dev_err(&data->client->dev, "Error acquiring frame ptr\n");
  1905. goto fault;
  1906. }
  1907. switch (data->dbg.input) {
  1908. case MXT_V4L_INPUT_DELTAS:
  1909. default:
  1910. mode = MXT_DIAGNOSTIC_DELTAS;
  1911. break;
  1912. case MXT_V4L_INPUT_REFS:
  1913. mode = MXT_DIAGNOSTIC_REFS;
  1914. break;
  1915. }
  1916. ret = mxt_read_diagnostic_debug(data, mode, ptr);
  1917. if (ret)
  1918. goto fault;
  1919. vb2_set_plane_payload(vb, 0, data->dbg.t37_nodes * sizeof(u16));
  1920. vb2_buffer_done(vb, VB2_BUF_STATE_DONE);
  1921. return;
  1922. fault:
  1923. vb2_buffer_done(vb, VB2_BUF_STATE_ERROR);
  1924. }
  1925. /* V4L2 structures */
  1926. static const struct vb2_ops mxt_queue_ops = {
  1927. .queue_setup = mxt_queue_setup,
  1928. .buf_queue = mxt_buffer_queue,
  1929. .wait_prepare = vb2_ops_wait_prepare,
  1930. .wait_finish = vb2_ops_wait_finish,
  1931. };
  1932. static const struct vb2_queue mxt_queue = {
  1933. .type = V4L2_BUF_TYPE_VIDEO_CAPTURE,
  1934. .io_modes = VB2_MMAP | VB2_USERPTR | VB2_DMABUF | VB2_READ,
  1935. .buf_struct_size = sizeof(struct mxt_vb2_buffer),
  1936. .ops = &mxt_queue_ops,
  1937. .mem_ops = &vb2_vmalloc_memops,
  1938. .timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC,
  1939. .min_buffers_needed = 1,
  1940. };
  1941. static int mxt_vidioc_querycap(struct file *file, void *priv,
  1942. struct v4l2_capability *cap)
  1943. {
  1944. struct mxt_data *data = video_drvdata(file);
  1945. strlcpy(cap->driver, "atmel_mxt_ts", sizeof(cap->driver));
  1946. strlcpy(cap->card, "atmel_mxt_ts touch", sizeof(cap->card));
  1947. snprintf(cap->bus_info, sizeof(cap->bus_info),
  1948. "I2C:%s", dev_name(&data->client->dev));
  1949. return 0;
  1950. }
  1951. static int mxt_vidioc_enum_input(struct file *file, void *priv,
  1952. struct v4l2_input *i)
  1953. {
  1954. if (i->index >= MXT_V4L_INPUT_MAX)
  1955. return -EINVAL;
  1956. i->type = V4L2_INPUT_TYPE_TOUCH;
  1957. switch (i->index) {
  1958. case MXT_V4L_INPUT_REFS:
  1959. strlcpy(i->name, "Mutual Capacitance References",
  1960. sizeof(i->name));
  1961. break;
  1962. case MXT_V4L_INPUT_DELTAS:
  1963. strlcpy(i->name, "Mutual Capacitance Deltas", sizeof(i->name));
  1964. break;
  1965. }
  1966. return 0;
  1967. }
  1968. static int mxt_set_input(struct mxt_data *data, unsigned int i)
  1969. {
  1970. struct v4l2_pix_format *f = &data->dbg.format;
  1971. if (i >= MXT_V4L_INPUT_MAX)
  1972. return -EINVAL;
  1973. if (i == MXT_V4L_INPUT_DELTAS)
  1974. f->pixelformat = V4L2_TCH_FMT_DELTA_TD16;
  1975. else
  1976. f->pixelformat = V4L2_TCH_FMT_TU16;
  1977. f->width = data->xy_switch ? data->ysize : data->xsize;
  1978. f->height = data->xy_switch ? data->xsize : data->ysize;
  1979. f->field = V4L2_FIELD_NONE;
  1980. f->colorspace = V4L2_COLORSPACE_RAW;
  1981. f->bytesperline = f->width * sizeof(u16);
  1982. f->sizeimage = f->width * f->height * sizeof(u16);
  1983. data->dbg.input = i;
  1984. return 0;
  1985. }
  1986. static int mxt_vidioc_s_input(struct file *file, void *priv, unsigned int i)
  1987. {
  1988. return mxt_set_input(video_drvdata(file), i);
  1989. }
  1990. static int mxt_vidioc_g_input(struct file *file, void *priv, unsigned int *i)
  1991. {
  1992. struct mxt_data *data = video_drvdata(file);
  1993. *i = data->dbg.input;
  1994. return 0;
  1995. }
  1996. static int mxt_vidioc_fmt(struct file *file, void *priv, struct v4l2_format *f)
  1997. {
  1998. struct mxt_data *data = video_drvdata(file);
  1999. f->type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
  2000. f->fmt.pix = data->dbg.format;
  2001. return 0;
  2002. }
  2003. static int mxt_vidioc_enum_fmt(struct file *file, void *priv,
  2004. struct v4l2_fmtdesc *fmt)
  2005. {
  2006. if (fmt->type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
  2007. return -EINVAL;
  2008. switch (fmt->index) {
  2009. case 0:
  2010. fmt->pixelformat = V4L2_TCH_FMT_TU16;
  2011. break;
  2012. case 1:
  2013. fmt->pixelformat = V4L2_TCH_FMT_DELTA_TD16;
  2014. break;
  2015. default:
  2016. return -EINVAL;
  2017. }
  2018. return 0;
  2019. }
  2020. static int mxt_vidioc_g_parm(struct file *file, void *fh,
  2021. struct v4l2_streamparm *a)
  2022. {
  2023. if (a->type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
  2024. return -EINVAL;
  2025. a->parm.capture.readbuffers = 1;
  2026. a->parm.capture.timeperframe.numerator = 1;
  2027. a->parm.capture.timeperframe.denominator = 10;
  2028. return 0;
  2029. }
  2030. static const struct v4l2_ioctl_ops mxt_video_ioctl_ops = {
  2031. .vidioc_querycap = mxt_vidioc_querycap,
  2032. .vidioc_enum_fmt_vid_cap = mxt_vidioc_enum_fmt,
  2033. .vidioc_s_fmt_vid_cap = mxt_vidioc_fmt,
  2034. .vidioc_g_fmt_vid_cap = mxt_vidioc_fmt,
  2035. .vidioc_try_fmt_vid_cap = mxt_vidioc_fmt,
  2036. .vidioc_g_parm = mxt_vidioc_g_parm,
  2037. .vidioc_enum_input = mxt_vidioc_enum_input,
  2038. .vidioc_g_input = mxt_vidioc_g_input,
  2039. .vidioc_s_input = mxt_vidioc_s_input,
  2040. .vidioc_reqbufs = vb2_ioctl_reqbufs,
  2041. .vidioc_create_bufs = vb2_ioctl_create_bufs,
  2042. .vidioc_querybuf = vb2_ioctl_querybuf,
  2043. .vidioc_qbuf = vb2_ioctl_qbuf,
  2044. .vidioc_dqbuf = vb2_ioctl_dqbuf,
  2045. .vidioc_expbuf = vb2_ioctl_expbuf,
  2046. .vidioc_streamon = vb2_ioctl_streamon,
  2047. .vidioc_streamoff = vb2_ioctl_streamoff,
  2048. };
  2049. static const struct video_device mxt_video_device = {
  2050. .name = "Atmel maxTouch",
  2051. .fops = &mxt_video_fops,
  2052. .ioctl_ops = &mxt_video_ioctl_ops,
  2053. .release = video_device_release_empty,
  2054. .device_caps = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_TOUCH |
  2055. V4L2_CAP_READWRITE | V4L2_CAP_STREAMING,
  2056. };
  2057. static void mxt_debug_init(struct mxt_data *data)
  2058. {
  2059. struct mxt_info *info = &data->info;
  2060. struct mxt_dbg *dbg = &data->dbg;
  2061. struct mxt_object *object;
  2062. int error;
  2063. object = mxt_get_object(data, MXT_GEN_COMMAND_T6);
  2064. if (!object)
  2065. goto error;
  2066. dbg->diag_cmd_address = object->start_address + MXT_COMMAND_DIAGNOSTIC;
  2067. object = mxt_get_object(data, MXT_DEBUG_DIAGNOSTIC_T37);
  2068. if (!object)
  2069. goto error;
  2070. if (mxt_obj_size(object) != sizeof(struct t37_debug)) {
  2071. dev_warn(&data->client->dev, "Bad T37 size");
  2072. goto error;
  2073. }
  2074. dbg->t37_address = object->start_address;
  2075. /* Calculate size of data and allocate buffer */
  2076. dbg->t37_nodes = data->xsize * data->ysize;
  2077. if (info->family_id == MXT_FAMILY_1386)
  2078. dbg->t37_pages = MXT1386_COLUMNS * MXT1386_PAGES_PER_COLUMN;
  2079. else
  2080. dbg->t37_pages = DIV_ROUND_UP(data->xsize *
  2081. data->info.matrix_ysize *
  2082. sizeof(u16),
  2083. sizeof(dbg->t37_buf->data));
  2084. dbg->t37_buf = devm_kmalloc_array(&data->client->dev, dbg->t37_pages,
  2085. sizeof(struct t37_debug), GFP_KERNEL);
  2086. if (!dbg->t37_buf)
  2087. goto error;
  2088. /* init channel to zero */
  2089. mxt_set_input(data, 0);
  2090. /* register video device */
  2091. snprintf(dbg->v4l2.name, sizeof(dbg->v4l2.name), "%s", "atmel_mxt_ts");
  2092. error = v4l2_device_register(&data->client->dev, &dbg->v4l2);
  2093. if (error)
  2094. goto error;
  2095. /* initialize the queue */
  2096. mutex_init(&dbg->lock);
  2097. dbg->queue = mxt_queue;
  2098. dbg->queue.drv_priv = data;
  2099. dbg->queue.lock = &dbg->lock;
  2100. dbg->queue.dev = &data->client->dev;
  2101. error = vb2_queue_init(&dbg->queue);
  2102. if (error)
  2103. goto error_unreg_v4l2;
  2104. dbg->vdev = mxt_video_device;
  2105. dbg->vdev.v4l2_dev = &dbg->v4l2;
  2106. dbg->vdev.lock = &dbg->lock;
  2107. dbg->vdev.vfl_dir = VFL_DIR_RX;
  2108. dbg->vdev.queue = &dbg->queue;
  2109. video_set_drvdata(&dbg->vdev, data);
  2110. error = video_register_device(&dbg->vdev, VFL_TYPE_TOUCH, -1);
  2111. if (error)
  2112. goto error_unreg_v4l2;
  2113. return;
  2114. error_unreg_v4l2:
  2115. v4l2_device_unregister(&dbg->v4l2);
  2116. error:
  2117. dev_warn(&data->client->dev, "Error initializing T37\n");
  2118. }
  2119. #else
  2120. static void mxt_debug_init(struct mxt_data *data)
  2121. {
  2122. }
  2123. #endif
  2124. static int mxt_configure_objects(struct mxt_data *data,
  2125. const struct firmware *cfg)
  2126. {
  2127. struct device *dev = &data->client->dev;
  2128. struct mxt_info *info = &data->info;
  2129. int error;
  2130. error = mxt_init_t7_power_cfg(data);
  2131. if (error) {
  2132. dev_err(dev, "Failed to initialize power cfg\n");
  2133. return error;
  2134. }
  2135. if (cfg) {
  2136. error = mxt_update_cfg(data, cfg);
  2137. if (error)
  2138. dev_warn(dev, "Error %d updating config\n", error);
  2139. }
  2140. if (data->multitouch) {
  2141. error = mxt_initialize_input_device(data);
  2142. if (error)
  2143. return error;
  2144. } else {
  2145. dev_warn(dev, "No touch object detected\n");
  2146. }
  2147. mxt_debug_init(data);
  2148. dev_info(dev,
  2149. "Family: %u Variant: %u Firmware V%u.%u.%02X Objects: %u\n",
  2150. info->family_id, info->variant_id, info->version >> 4,
  2151. info->version & 0xf, info->build, info->object_num);
  2152. return 0;
  2153. }
  2154. /* Firmware Version is returned as Major.Minor.Build */
  2155. static ssize_t mxt_fw_version_show(struct device *dev,
  2156. struct device_attribute *attr, char *buf)
  2157. {
  2158. struct mxt_data *data = dev_get_drvdata(dev);
  2159. struct mxt_info *info = &data->info;
  2160. return scnprintf(buf, PAGE_SIZE, "%u.%u.%02X\n",
  2161. info->version >> 4, info->version & 0xf, info->build);
  2162. }
  2163. /* Hardware Version is returned as FamilyID.VariantID */
  2164. static ssize_t mxt_hw_version_show(struct device *dev,
  2165. struct device_attribute *attr, char *buf)
  2166. {
  2167. struct mxt_data *data = dev_get_drvdata(dev);
  2168. struct mxt_info *info = &data->info;
  2169. return scnprintf(buf, PAGE_SIZE, "%u.%u\n",
  2170. info->family_id, info->variant_id);
  2171. }
  2172. static ssize_t mxt_show_instance(char *buf, int count,
  2173. struct mxt_object *object, int instance,
  2174. const u8 *val)
  2175. {
  2176. int i;
  2177. if (mxt_obj_instances(object) > 1)
  2178. count += scnprintf(buf + count, PAGE_SIZE - count,
  2179. "Instance %u\n", instance);
  2180. for (i = 0; i < mxt_obj_size(object); i++)
  2181. count += scnprintf(buf + count, PAGE_SIZE - count,
  2182. "\t[%2u]: %02x (%d)\n", i, val[i], val[i]);
  2183. count += scnprintf(buf + count, PAGE_SIZE - count, "\n");
  2184. return count;
  2185. }
  2186. static ssize_t mxt_object_show(struct device *dev,
  2187. struct device_attribute *attr, char *buf)
  2188. {
  2189. struct mxt_data *data = dev_get_drvdata(dev);
  2190. struct mxt_object *object;
  2191. int count = 0;
  2192. int i, j;
  2193. int error;
  2194. u8 *obuf;
  2195. /* Pre-allocate buffer large enough to hold max sized object. */
  2196. obuf = kmalloc(256, GFP_KERNEL);
  2197. if (!obuf)
  2198. return -ENOMEM;
  2199. error = 0;
  2200. for (i = 0; i < data->info.object_num; i++) {
  2201. object = data->object_table + i;
  2202. if (!mxt_object_readable(object->type))
  2203. continue;
  2204. count += scnprintf(buf + count, PAGE_SIZE - count,
  2205. "T%u:\n", object->type);
  2206. for (j = 0; j < mxt_obj_instances(object); j++) {
  2207. u16 size = mxt_obj_size(object);
  2208. u16 addr = object->start_address + j * size;
  2209. error = __mxt_read_reg(data->client, addr, size, obuf);
  2210. if (error)
  2211. goto done;
  2212. count = mxt_show_instance(buf, count, object, j, obuf);
  2213. }
  2214. }
  2215. done:
  2216. kfree(obuf);
  2217. return error ?: count;
  2218. }
  2219. static int mxt_check_firmware_format(struct device *dev,
  2220. const struct firmware *fw)
  2221. {
  2222. unsigned int pos = 0;
  2223. char c;
  2224. while (pos < fw->size) {
  2225. c = *(fw->data + pos);
  2226. if (c < '0' || (c > '9' && c < 'A') || c > 'F')
  2227. return 0;
  2228. pos++;
  2229. }
  2230. /*
  2231. * To convert file try:
  2232. /*(DEBLOBBED)*/
  2233. dev_err(dev, "Aborting: firmware file must be in binary format\n");
  2234. return -EINVAL;
  2235. }
  2236. static int mxt_load_fw(struct device *dev, const char *fn)
  2237. {
  2238. struct mxt_data *data = dev_get_drvdata(dev);
  2239. const struct firmware *fw = NULL;
  2240. unsigned int frame_size;
  2241. unsigned int pos = 0;
  2242. unsigned int retry = 0;
  2243. unsigned int frame = 0;
  2244. int ret;
  2245. ret = reject_firmware(&fw, fn, dev);
  2246. if (ret) {
  2247. dev_err(dev, "Unable to open firmware %s\n", fn);
  2248. return ret;
  2249. }
  2250. /* Check for incorrect enc file */
  2251. ret = mxt_check_firmware_format(dev, fw);
  2252. if (ret)
  2253. goto release_firmware;
  2254. if (!data->in_bootloader) {
  2255. /* Change to the bootloader mode */
  2256. data->in_bootloader = true;
  2257. ret = mxt_t6_command(data, MXT_COMMAND_RESET,
  2258. MXT_BOOT_VALUE, false);
  2259. if (ret)
  2260. goto release_firmware;
  2261. msleep(MXT_RESET_TIME);
  2262. /* Do not need to scan since we know family ID */
  2263. ret = mxt_lookup_bootloader_address(data, 0);
  2264. if (ret)
  2265. goto release_firmware;
  2266. mxt_free_input_device(data);
  2267. mxt_free_object_table(data);
  2268. } else {
  2269. enable_irq(data->irq);
  2270. }
  2271. reinit_completion(&data->bl_completion);
  2272. ret = mxt_check_bootloader(data, MXT_WAITING_BOOTLOAD_CMD, false);
  2273. if (ret) {
  2274. /* Bootloader may still be unlocked from previous attempt */
  2275. ret = mxt_check_bootloader(data, MXT_WAITING_FRAME_DATA, false);
  2276. if (ret)
  2277. goto disable_irq;
  2278. } else {
  2279. dev_info(dev, "Unlocking bootloader\n");
  2280. /* Unlock bootloader */
  2281. ret = mxt_send_bootloader_cmd(data, true);
  2282. if (ret)
  2283. goto disable_irq;
  2284. }
  2285. while (pos < fw->size) {
  2286. ret = mxt_check_bootloader(data, MXT_WAITING_FRAME_DATA, true);
  2287. if (ret)
  2288. goto disable_irq;
  2289. frame_size = ((*(fw->data + pos) << 8) | *(fw->data + pos + 1));
  2290. /* Take account of CRC bytes */
  2291. frame_size += 2;
  2292. /* Write one frame to device */
  2293. ret = mxt_bootloader_write(data, fw->data + pos, frame_size);
  2294. if (ret)
  2295. goto disable_irq;
  2296. ret = mxt_check_bootloader(data, MXT_FRAME_CRC_PASS, true);
  2297. if (ret) {
  2298. retry++;
  2299. /* Back off by 20ms per retry */
  2300. msleep(retry * 20);
  2301. if (retry > 20) {
  2302. dev_err(dev, "Retry count exceeded\n");
  2303. goto disable_irq;
  2304. }
  2305. } else {
  2306. retry = 0;
  2307. pos += frame_size;
  2308. frame++;
  2309. }
  2310. if (frame % 50 == 0)
  2311. dev_dbg(dev, "Sent %d frames, %d/%zd bytes\n",
  2312. frame, pos, fw->size);
  2313. }
  2314. /* Wait for flash. */
  2315. ret = mxt_wait_for_completion(data, &data->bl_completion,
  2316. MXT_FW_RESET_TIME);
  2317. if (ret)
  2318. goto disable_irq;
  2319. dev_dbg(dev, "Sent %d frames, %d bytes\n", frame, pos);
  2320. /*
  2321. * Wait for device to reset. Some bootloader versions do not assert
  2322. * the CHG line after bootloading has finished, so ignore potential
  2323. * errors.
  2324. */
  2325. mxt_wait_for_completion(data, &data->bl_completion, MXT_FW_RESET_TIME);
  2326. data->in_bootloader = false;
  2327. disable_irq:
  2328. disable_irq(data->irq);
  2329. release_firmware:
  2330. release_firmware(fw);
  2331. return ret;
  2332. }
  2333. static ssize_t mxt_update_fw_store(struct device *dev,
  2334. struct device_attribute *attr,
  2335. const char *buf, size_t count)
  2336. {
  2337. struct mxt_data *data = dev_get_drvdata(dev);
  2338. int error;
  2339. error = mxt_load_fw(dev, MXT_FW_NAME);
  2340. if (error) {
  2341. dev_err(dev, "The firmware update failed(%d)\n", error);
  2342. count = error;
  2343. } else {
  2344. dev_info(dev, "The firmware update succeeded\n");
  2345. error = mxt_initialize(data);
  2346. if (error)
  2347. return error;
  2348. }
  2349. return count;
  2350. }
  2351. static DEVICE_ATTR(fw_version, S_IRUGO, mxt_fw_version_show, NULL);
  2352. static DEVICE_ATTR(hw_version, S_IRUGO, mxt_hw_version_show, NULL);
  2353. static DEVICE_ATTR(object, S_IRUGO, mxt_object_show, NULL);
  2354. static DEVICE_ATTR(update_fw, S_IWUSR, NULL, mxt_update_fw_store);
  2355. static struct attribute *mxt_attrs[] = {
  2356. &dev_attr_fw_version.attr,
  2357. &dev_attr_hw_version.attr,
  2358. &dev_attr_object.attr,
  2359. &dev_attr_update_fw.attr,
  2360. NULL
  2361. };
  2362. static const struct attribute_group mxt_attr_group = {
  2363. .attrs = mxt_attrs,
  2364. };
  2365. static void mxt_start(struct mxt_data *data)
  2366. {
  2367. switch (data->pdata->suspend_mode) {
  2368. case MXT_SUSPEND_T9_CTRL:
  2369. mxt_soft_reset(data);
  2370. /* Touch enable */
  2371. /* 0x83 = SCANEN | RPTEN | ENABLE */
  2372. mxt_write_object(data,
  2373. MXT_TOUCH_MULTI_T9, MXT_T9_CTRL, 0x83);
  2374. break;
  2375. case MXT_SUSPEND_DEEP_SLEEP:
  2376. default:
  2377. mxt_set_t7_power_cfg(data, MXT_POWER_CFG_RUN);
  2378. /* Recalibrate since chip has been in deep sleep */
  2379. mxt_t6_command(data, MXT_COMMAND_CALIBRATE, 1, false);
  2380. break;
  2381. }
  2382. }
  2383. static void mxt_stop(struct mxt_data *data)
  2384. {
  2385. switch (data->pdata->suspend_mode) {
  2386. case MXT_SUSPEND_T9_CTRL:
  2387. /* Touch disable */
  2388. mxt_write_object(data,
  2389. MXT_TOUCH_MULTI_T9, MXT_T9_CTRL, 0);
  2390. break;
  2391. case MXT_SUSPEND_DEEP_SLEEP:
  2392. default:
  2393. mxt_set_t7_power_cfg(data, MXT_POWER_CFG_DEEPSLEEP);
  2394. break;
  2395. }
  2396. }
  2397. static int mxt_input_open(struct input_dev *dev)
  2398. {
  2399. struct mxt_data *data = input_get_drvdata(dev);
  2400. mxt_start(data);
  2401. return 0;
  2402. }
  2403. static void mxt_input_close(struct input_dev *dev)
  2404. {
  2405. struct mxt_data *data = input_get_drvdata(dev);
  2406. mxt_stop(data);
  2407. }
  2408. #ifdef CONFIG_OF
  2409. static const struct mxt_platform_data *mxt_parse_dt(struct i2c_client *client)
  2410. {
  2411. struct mxt_platform_data *pdata;
  2412. struct device_node *np = client->dev.of_node;
  2413. u32 *keymap;
  2414. int proplen, ret;
  2415. if (!np)
  2416. return ERR_PTR(-ENOENT);
  2417. pdata = devm_kzalloc(&client->dev, sizeof(*pdata), GFP_KERNEL);
  2418. if (!pdata)
  2419. return ERR_PTR(-ENOMEM);
  2420. if (of_find_property(np, "linux,gpio-keymap", &proplen)) {
  2421. pdata->t19_num_keys = proplen / sizeof(u32);
  2422. keymap = devm_kzalloc(&client->dev,
  2423. pdata->t19_num_keys * sizeof(keymap[0]),
  2424. GFP_KERNEL);
  2425. if (!keymap)
  2426. return ERR_PTR(-ENOMEM);
  2427. ret = of_property_read_u32_array(np, "linux,gpio-keymap",
  2428. keymap, pdata->t19_num_keys);
  2429. if (ret)
  2430. dev_warn(&client->dev,
  2431. "Couldn't read linux,gpio-keymap: %d\n", ret);
  2432. pdata->t19_keymap = keymap;
  2433. }
  2434. pdata->suspend_mode = MXT_SUSPEND_DEEP_SLEEP;
  2435. return pdata;
  2436. }
  2437. #else
  2438. static const struct mxt_platform_data *mxt_parse_dt(struct i2c_client *client)
  2439. {
  2440. return ERR_PTR(-ENOENT);
  2441. }
  2442. #endif
  2443. #ifdef CONFIG_ACPI
  2444. struct mxt_acpi_platform_data {
  2445. const char *hid;
  2446. struct mxt_platform_data pdata;
  2447. };
  2448. static unsigned int samus_touchpad_buttons[] = {
  2449. KEY_RESERVED,
  2450. KEY_RESERVED,
  2451. KEY_RESERVED,
  2452. BTN_LEFT
  2453. };
  2454. static struct mxt_acpi_platform_data samus_platform_data[] = {
  2455. {
  2456. /* Touchpad */
  2457. .hid = "ATML0000",
  2458. .pdata = {
  2459. .t19_num_keys = ARRAY_SIZE(samus_touchpad_buttons),
  2460. .t19_keymap = samus_touchpad_buttons,
  2461. },
  2462. },
  2463. {
  2464. /* Touchscreen */
  2465. .hid = "ATML0001",
  2466. },
  2467. { }
  2468. };
  2469. static unsigned int chromebook_tp_buttons[] = {
  2470. KEY_RESERVED,
  2471. KEY_RESERVED,
  2472. KEY_RESERVED,
  2473. KEY_RESERVED,
  2474. KEY_RESERVED,
  2475. BTN_LEFT
  2476. };
  2477. static struct mxt_acpi_platform_data chromebook_platform_data[] = {
  2478. {
  2479. /* Touchpad */
  2480. .hid = "ATML0000",
  2481. .pdata = {
  2482. .t19_num_keys = ARRAY_SIZE(chromebook_tp_buttons),
  2483. .t19_keymap = chromebook_tp_buttons,
  2484. },
  2485. },
  2486. {
  2487. /* Touchscreen */
  2488. .hid = "ATML0001",
  2489. },
  2490. { }
  2491. };
  2492. static const struct dmi_system_id mxt_dmi_table[] = {
  2493. {
  2494. /* 2015 Google Pixel */
  2495. .ident = "Chromebook Pixel 2",
  2496. .matches = {
  2497. DMI_MATCH(DMI_SYS_VENDOR, "GOOGLE"),
  2498. DMI_MATCH(DMI_PRODUCT_NAME, "Samus"),
  2499. },
  2500. .driver_data = samus_platform_data,
  2501. },
  2502. {
  2503. /* Samsung Chromebook Pro */
  2504. .ident = "Samsung Chromebook Pro",
  2505. .matches = {
  2506. DMI_MATCH(DMI_SYS_VENDOR, "Google"),
  2507. DMI_MATCH(DMI_PRODUCT_NAME, "Caroline"),
  2508. },
  2509. .driver_data = samus_platform_data,
  2510. },
  2511. {
  2512. /* Other Google Chromebooks */
  2513. .ident = "Chromebook",
  2514. .matches = {
  2515. DMI_MATCH(DMI_SYS_VENDOR, "GOOGLE"),
  2516. },
  2517. .driver_data = chromebook_platform_data,
  2518. },
  2519. { }
  2520. };
  2521. static const struct mxt_platform_data *mxt_parse_acpi(struct i2c_client *client)
  2522. {
  2523. struct acpi_device *adev;
  2524. const struct dmi_system_id *system_id;
  2525. const struct mxt_acpi_platform_data *acpi_pdata;
  2526. /*
  2527. * Ignore ACPI devices representing bootloader mode.
  2528. *
  2529. * This is a bit of a hack: Google Chromebook BIOS creates ACPI
  2530. * devices for both application and bootloader modes, but we are
  2531. * interested in application mode only (if device is in bootloader
  2532. * mode we'll end up switching into application anyway). So far
  2533. * application mode addresses were all above 0x40, so we'll use it
  2534. * as a threshold.
  2535. */
  2536. if (client->addr < 0x40)
  2537. return ERR_PTR(-ENXIO);
  2538. adev = ACPI_COMPANION(&client->dev);
  2539. if (!adev)
  2540. return ERR_PTR(-ENOENT);
  2541. system_id = dmi_first_match(mxt_dmi_table);
  2542. if (!system_id)
  2543. return ERR_PTR(-ENOENT);
  2544. acpi_pdata = system_id->driver_data;
  2545. if (!acpi_pdata)
  2546. return ERR_PTR(-ENOENT);
  2547. while (acpi_pdata->hid) {
  2548. if (!strcmp(acpi_device_hid(adev), acpi_pdata->hid))
  2549. return &acpi_pdata->pdata;
  2550. acpi_pdata++;
  2551. }
  2552. return ERR_PTR(-ENOENT);
  2553. }
  2554. #else
  2555. static const struct mxt_platform_data *mxt_parse_acpi(struct i2c_client *client)
  2556. {
  2557. return ERR_PTR(-ENOENT);
  2558. }
  2559. #endif
  2560. static const struct mxt_platform_data *
  2561. mxt_get_platform_data(struct i2c_client *client)
  2562. {
  2563. const struct mxt_platform_data *pdata;
  2564. pdata = dev_get_platdata(&client->dev);
  2565. if (pdata)
  2566. return pdata;
  2567. pdata = mxt_parse_dt(client);
  2568. if (!IS_ERR(pdata) || PTR_ERR(pdata) != -ENOENT)
  2569. return pdata;
  2570. pdata = mxt_parse_acpi(client);
  2571. if (!IS_ERR(pdata) || PTR_ERR(pdata) != -ENOENT)
  2572. return pdata;
  2573. dev_err(&client->dev, "No platform data specified\n");
  2574. return ERR_PTR(-EINVAL);
  2575. }
  2576. static int mxt_probe(struct i2c_client *client, const struct i2c_device_id *id)
  2577. {
  2578. struct mxt_data *data;
  2579. const struct mxt_platform_data *pdata;
  2580. int error;
  2581. pdata = mxt_get_platform_data(client);
  2582. if (IS_ERR(pdata))
  2583. return PTR_ERR(pdata);
  2584. data = kzalloc(sizeof(struct mxt_data), GFP_KERNEL);
  2585. if (!data) {
  2586. dev_err(&client->dev, "Failed to allocate memory\n");
  2587. return -ENOMEM;
  2588. }
  2589. snprintf(data->phys, sizeof(data->phys), "i2c-%u-%04x/input0",
  2590. client->adapter->nr, client->addr);
  2591. data->client = client;
  2592. data->pdata = pdata;
  2593. data->irq = client->irq;
  2594. i2c_set_clientdata(client, data);
  2595. init_completion(&data->bl_completion);
  2596. init_completion(&data->reset_completion);
  2597. init_completion(&data->crc_completion);
  2598. error = request_threaded_irq(client->irq, NULL, mxt_interrupt,
  2599. pdata->irqflags | IRQF_ONESHOT,
  2600. client->name, data);
  2601. if (error) {
  2602. dev_err(&client->dev, "Failed to register interrupt\n");
  2603. goto err_free_mem;
  2604. }
  2605. disable_irq(client->irq);
  2606. error = mxt_initialize(data);
  2607. if (error)
  2608. goto err_free_irq;
  2609. error = sysfs_create_group(&client->dev.kobj, &mxt_attr_group);
  2610. if (error) {
  2611. dev_err(&client->dev, "Failure %d creating sysfs group\n",
  2612. error);
  2613. goto err_free_object;
  2614. }
  2615. return 0;
  2616. err_free_object:
  2617. mxt_free_input_device(data);
  2618. mxt_free_object_table(data);
  2619. err_free_irq:
  2620. free_irq(client->irq, data);
  2621. err_free_mem:
  2622. kfree(data);
  2623. return error;
  2624. }
  2625. static int mxt_remove(struct i2c_client *client)
  2626. {
  2627. struct mxt_data *data = i2c_get_clientdata(client);
  2628. sysfs_remove_group(&client->dev.kobj, &mxt_attr_group);
  2629. free_irq(data->irq, data);
  2630. mxt_free_input_device(data);
  2631. mxt_free_object_table(data);
  2632. kfree(data);
  2633. return 0;
  2634. }
  2635. static int __maybe_unused mxt_suspend(struct device *dev)
  2636. {
  2637. struct i2c_client *client = to_i2c_client(dev);
  2638. struct mxt_data *data = i2c_get_clientdata(client);
  2639. struct input_dev *input_dev = data->input_dev;
  2640. if (!input_dev)
  2641. return 0;
  2642. mutex_lock(&input_dev->mutex);
  2643. if (input_dev->users)
  2644. mxt_stop(data);
  2645. mutex_unlock(&input_dev->mutex);
  2646. return 0;
  2647. }
  2648. static int __maybe_unused mxt_resume(struct device *dev)
  2649. {
  2650. struct i2c_client *client = to_i2c_client(dev);
  2651. struct mxt_data *data = i2c_get_clientdata(client);
  2652. struct input_dev *input_dev = data->input_dev;
  2653. if (!input_dev)
  2654. return 0;
  2655. mutex_lock(&input_dev->mutex);
  2656. if (input_dev->users)
  2657. mxt_start(data);
  2658. mutex_unlock(&input_dev->mutex);
  2659. return 0;
  2660. }
  2661. static SIMPLE_DEV_PM_OPS(mxt_pm_ops, mxt_suspend, mxt_resume);
  2662. static const struct of_device_id mxt_of_match[] = {
  2663. { .compatible = "atmel,maxtouch", },
  2664. {},
  2665. };
  2666. MODULE_DEVICE_TABLE(of, mxt_of_match);
  2667. #ifdef CONFIG_ACPI
  2668. static const struct acpi_device_id mxt_acpi_id[] = {
  2669. { "ATML0000", 0 }, /* Touchpad */
  2670. { "ATML0001", 0 }, /* Touchscreen */
  2671. { }
  2672. };
  2673. MODULE_DEVICE_TABLE(acpi, mxt_acpi_id);
  2674. #endif
  2675. static const struct i2c_device_id mxt_id[] = {
  2676. { "qt602240_ts", 0 },
  2677. { "atmel_mxt_ts", 0 },
  2678. { "atmel_mxt_tp", 0 },
  2679. { "maxtouch", 0 },
  2680. { "mXT224", 0 },
  2681. { }
  2682. };
  2683. MODULE_DEVICE_TABLE(i2c, mxt_id);
  2684. static struct i2c_driver mxt_driver = {
  2685. .driver = {
  2686. .name = "atmel_mxt_ts",
  2687. .of_match_table = of_match_ptr(mxt_of_match),
  2688. .acpi_match_table = ACPI_PTR(mxt_acpi_id),
  2689. .pm = &mxt_pm_ops,
  2690. },
  2691. .probe = mxt_probe,
  2692. .remove = mxt_remove,
  2693. .id_table = mxt_id,
  2694. };
  2695. module_i2c_driver(mxt_driver);
  2696. /* Module information */
  2697. MODULE_AUTHOR("Joonyoung Shim <jy0922.shim@samsung.com>");
  2698. MODULE_DESCRIPTION("Atmel maXTouch Touchscreen driver");
  2699. MODULE_LICENSE("GPL");