atmel_mxt_ts.c 76 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207
  1. /*
  2. * Atmel maXTouch Touchscreen driver
  3. *
  4. * Copyright (C) 2010 Samsung Electronics Co.Ltd
  5. * Author: Joonyoung Shim <jy0922.shim@samsung.com>
  6. * Copyright (c) 2011-2014, The Linux Foundation. All rights reserved.
  7. *
  8. * This program is free software; you can redistribute it and/or modify it
  9. * under the terms of the GNU General Public License as published by the
  10. * Free Software Foundation; either version 2 of the License, or (at your
  11. * option) any later version.
  12. *
  13. */
  14. #include <linux/module.h>
  15. #include <linux/init.h>
  16. #include <linux/delay.h>
  17. #include <linux/firmware.h>
  18. #include <linux/i2c.h>
  19. #include <linux/i2c/atmel_mxt_ts.h>
  20. #include <linux/input/mt.h>
  21. #include <linux/interrupt.h>
  22. #include <linux/slab.h>
  23. #include <linux/gpio.h>
  24. #include <linux/debugfs.h>
  25. #include <linux/seq_file.h>
  26. #include <linux/regulator/consumer.h>
  27. #include <linux/string.h>
  28. #include <linux/of_gpio.h>
  29. #if defined(CONFIG_FB)
  30. #include <linux/notifier.h>
  31. #include <linux/fb.h>
  32. #elif defined(CONFIG_HAS_EARLYSUSPEND)
  33. #include <linux/earlysuspend.h>
  34. /* Early-suspend level */
  35. #define MXT_SUSPEND_LEVEL 1
  36. #endif
  37. #if defined(CONFIG_SECURE_TOUCH)
  38. #include <linux/completion.h>
  39. #include <linux/pm_runtime.h>
  40. #include <linux/errno.h>
  41. #include <asm/system.h>
  42. #include <linux/atomic.h>
  43. #endif
  44. /* Family ID */
  45. #define MXT224_ID 0x80
  46. #define MXT224E_ID 0x81
  47. #define MXT336S_ID 0x82
  48. #define MXT1386_ID 0xA0
  49. #define MXT1664S_ID 0xA2
  50. /* Version */
  51. #define MXT_VER_20 20
  52. #define MXT_VER_21 21
  53. #define MXT_VER_22 22
  54. /* I2C slave address pairs */
  55. struct mxt_address_pair {
  56. int bootloader;
  57. int application;
  58. };
  59. static const struct mxt_address_pair mxt_slave_addresses[] = {
  60. { 0x24, 0x4a },
  61. { 0x25, 0x4b },
  62. { 0x25, 0x4b },
  63. { 0x26, 0x4c },
  64. { 0x27, 0x4d },
  65. { 0x34, 0x5a },
  66. { 0x35, 0x5b },
  67. { 0 },
  68. };
  69. enum mxt_device_state { INIT, APPMODE, BOOTLOADER };
  70. /* Firmware */
  71. #define MXT_FW_NAME "maxtouch.fw"
  72. /* Firmware frame size including frame data and CRC */
  73. #define MXT_SINGLE_FW_MAX_FRAME_SIZE 278
  74. #define MXT_CHIPSET_FW_MAX_FRAME_SIZE 534
  75. /* Registers */
  76. #define MXT_FAMILY_ID 0x00
  77. #define MXT_VARIANT_ID 0x01
  78. #define MXT_VERSION 0x02
  79. #define MXT_BUILD 0x03
  80. #define MXT_MATRIX_X_SIZE 0x04
  81. #define MXT_MATRIX_Y_SIZE 0x05
  82. #define MXT_OBJECT_NUM 0x06
  83. #define MXT_OBJECT_START 0x07
  84. #define MXT_OBJECT_SIZE 6
  85. /* Object types */
  86. #define MXT_DEBUG_DIAGNOSTIC_T37 37
  87. #define MXT_GEN_MESSAGE_T5 5
  88. #define MXT_GEN_COMMAND_T6 6
  89. #define MXT_GEN_POWER_T7 7
  90. #define MXT_GEN_ACQUIRE_T8 8
  91. #define MXT_GEN_DATASOURCE_T53 53
  92. #define MXT_TOUCH_MULTI_T9 9
  93. #define MXT_TOUCH_KEYARRAY_T15 15
  94. #define MXT_TOUCH_PROXIMITY_T23 23
  95. #define MXT_TOUCH_PROXKEY_T52 52
  96. #define MXT_PROCI_GRIPFACE_T20 20
  97. #define MXT_PROCG_NOISE_T22 22
  98. #define MXT_PROCG_NOISE_T62 62
  99. #define MXT_PROCI_ONETOUCH_T24 24
  100. #define MXT_PROCI_TWOTOUCH_T27 27
  101. #define MXT_PROCI_GRIP_T40 40
  102. #define MXT_PROCI_PALM_T41 41
  103. #define MXT_PROCI_TOUCHSUPPRESSION_T42 42
  104. #define MXT_PROCI_STYLUS_T47 47
  105. #define MXT_PROCI_ADAPTIVETHRESHOLD_T55 55
  106. #define MXT_PROCI_SHIELDLESS_T56 56
  107. #define MXT_PROCI_EXTRATSDATA_T57 57
  108. #define MXT_PROCG_NOISESUPPRESSION_T48 48
  109. #define MXT_SPT_COMMSCONFIG_T18 18
  110. #define MXT_SPT_GPIOPWM_T19 19
  111. #define MXT_SPT_SELFTEST_T25 25
  112. #define MXT_SPT_CTECONFIG_T28 28
  113. #define MXT_SPT_USERDATA_T38 38
  114. #define MXT_SPT_DIGITIZER_T43 43
  115. #define MXT_SPT_MESSAGECOUNT_T44 44
  116. #define MXT_SPT_CTECONFIG_T46 46
  117. #define MXT_SPT_EXTRANOISESUPCTRLS_T58 58
  118. #define MXT_SPT_TIMER_T61 61
  119. /* MXT_GEN_COMMAND_T6 field */
  120. #define MXT_COMMAND_RESET 0
  121. #define MXT_COMMAND_BACKUPNV 1
  122. #define MXT_COMMAND_CALIBRATE 2
  123. #define MXT_COMMAND_REPORTALL 3
  124. #define MXT_COMMAND_DIAGNOSTIC 5
  125. /* MXT_GEN_POWER_T7 field */
  126. #define MXT_POWER_IDLEACQINT 0
  127. #define MXT_POWER_ACTVACQINT 1
  128. #define MXT_POWER_ACTV2IDLETO 2
  129. /* MXT_GEN_ACQUIRE_T8 field */
  130. #define MXT_ACQUIRE_CHRGTIME 0
  131. #define MXT_ACQUIRE_TCHDRIFT 2
  132. #define MXT_ACQUIRE_DRIFTST 3
  133. #define MXT_ACQUIRE_TCHAUTOCAL 4
  134. #define MXT_ACQUIRE_SYNC 5
  135. #define MXT_ACQUIRE_ATCHCALST 6
  136. #define MXT_ACQUIRE_ATCHCALSTHR 7
  137. /* MXT_TOUCH_MULT_T9 field */
  138. #define MXT_TOUCH_CTRL 0
  139. #define MXT_TOUCH_XORIGIN 1
  140. #define MXT_TOUCH_YORIGIN 2
  141. #define MXT_TOUCH_XSIZE 3
  142. #define MXT_TOUCH_YSIZE 4
  143. #define MXT_TOUCH_BLEN 6
  144. #define MXT_TOUCH_TCHTHR 7
  145. #define MXT_TOUCH_TCHDI 8
  146. #define MXT_TOUCH_ORIENT 9
  147. #define MXT_TOUCH_MOVHYSTI 11
  148. #define MXT_TOUCH_MOVHYSTN 12
  149. #define MXT_TOUCH_NUMTOUCH 14
  150. #define MXT_TOUCH_MRGHYST 15
  151. #define MXT_TOUCH_MRGTHR 16
  152. #define MXT_TOUCH_AMPHYST 17
  153. #define MXT_TOUCH_XRANGE_LSB 18
  154. #define MXT_TOUCH_XRANGE_MSB 19
  155. #define MXT_TOUCH_YRANGE_LSB 20
  156. #define MXT_TOUCH_YRANGE_MSB 21
  157. #define MXT_TOUCH_XLOCLIP 22
  158. #define MXT_TOUCH_XHICLIP 23
  159. #define MXT_TOUCH_YLOCLIP 24
  160. #define MXT_TOUCH_YHICLIP 25
  161. #define MXT_TOUCH_XEDGECTRL 26
  162. #define MXT_TOUCH_XEDGEDIST 27
  163. #define MXT_TOUCH_YEDGECTRL 28
  164. #define MXT_TOUCH_YEDGEDIST 29
  165. #define MXT_TOUCH_JUMPLIMIT 30
  166. /* MXT_PROCI_GRIPFACE_T20 field */
  167. #define MXT_GRIPFACE_CTRL 0
  168. #define MXT_GRIPFACE_XLOGRIP 1
  169. #define MXT_GRIPFACE_XHIGRIP 2
  170. #define MXT_GRIPFACE_YLOGRIP 3
  171. #define MXT_GRIPFACE_YHIGRIP 4
  172. #define MXT_GRIPFACE_MAXTCHS 5
  173. #define MXT_GRIPFACE_SZTHR1 7
  174. #define MXT_GRIPFACE_SZTHR2 8
  175. #define MXT_GRIPFACE_SHPTHR1 9
  176. #define MXT_GRIPFACE_SHPTHR2 10
  177. #define MXT_GRIPFACE_SUPEXTTO 11
  178. /* MXT_PROCI_NOISE field */
  179. #define MXT_NOISE_CTRL 0
  180. #define MXT_NOISE_OUTFLEN 1
  181. #define MXT_NOISE_GCAFUL_LSB 3
  182. #define MXT_NOISE_GCAFUL_MSB 4
  183. #define MXT_NOISE_GCAFLL_LSB 5
  184. #define MXT_NOISE_GCAFLL_MSB 6
  185. #define MXT_NOISE_ACTVGCAFVALID 7
  186. #define MXT_NOISE_NOISETHR 8
  187. #define MXT_NOISE_FREQHOPSCALE 10
  188. #define MXT_NOISE_FREQ0 11
  189. #define MXT_NOISE_FREQ1 12
  190. #define MXT_NOISE_FREQ2 13
  191. #define MXT_NOISE_FREQ3 14
  192. #define MXT_NOISE_FREQ4 15
  193. #define MXT_NOISE_IDLEGCAFVALID 16
  194. /* MXT_SPT_COMMSCONFIG_T18 */
  195. #define MXT_COMMS_CTRL 0
  196. #define MXT_COMMS_CMD 1
  197. /* MXT_SPT_CTECONFIG_T28 field */
  198. #define MXT_CTE_CTRL 0
  199. #define MXT_CTE_CMD 1
  200. #define MXT_CTE_MODE 2
  201. #define MXT_CTE_IDLEGCAFDEPTH 3
  202. #define MXT_CTE_ACTVGCAFDEPTH 4
  203. #define MXT_CTE_VOLTAGE 5
  204. #define MXT_VOLTAGE_DEFAULT 2700000
  205. #define MXT_VOLTAGE_STEP 10000
  206. /* Analog voltage @2.7 V */
  207. #define MXT_VTG_MIN_UV 2700000
  208. #define MXT_VTG_MAX_UV 3300000
  209. #define MXT_ACTIVE_LOAD_UA 15000
  210. #define MXT_LPM_LOAD_UA 10
  211. /* Digital voltage @1.8 V */
  212. #define MXT_VTG_DIG_MIN_UV 1800000
  213. #define MXT_VTG_DIG_MAX_UV 1800000
  214. #define MXT_ACTIVE_LOAD_DIG_UA 10000
  215. #define MXT_LPM_LOAD_DIG_UA 10
  216. #define MXT_I2C_VTG_MIN_UV 1800000
  217. #define MXT_I2C_VTG_MAX_UV 1800000
  218. #define MXT_I2C_LOAD_UA 10000
  219. #define MXT_I2C_LPM_LOAD_UA 10
  220. /* Define for MXT_GEN_COMMAND_T6 */
  221. #define MXT_BOOT_VALUE 0xa5
  222. #define MXT_BACKUP_VALUE 0x55
  223. #define MXT_BACKUP_TIME 25 /* msec */
  224. /* Software reset delay */
  225. #define MXT224_RESET_TIME 64 /* msec */
  226. #define MXT224E_RESET_TIME 21 /* msec */
  227. #define MXT336S_RESET_TIME 25 /* msec */
  228. #define MXT1386_RESET_TIME 250 /* msec */
  229. #define MXT1386E_RESET_TIME 229 /* msec */
  230. #define MXT1664S_RESET_TIME 280 /* msec */
  231. #define MXT_RESET_TIME 250 /* msec */
  232. #define MXT_RESET_NOCHGREAD 400 /* msec */
  233. /* Power on delay */
  234. #define MXT224_POWER_ON_TIME 40 /* msec */
  235. #define MXT224E_POWER_ON_TIME 21 /* msec */
  236. #define MXT336S_POWER_ON_TIME 25 /* msec */
  237. #define MXT1386_POWER_ON_TIME 90 /* msec */
  238. #define MXT1386E_POWER_ON_TIME 81 /* msec */
  239. #define MXT1664S_POWER_ON_TIME 65 /* msec */
  240. #define MXT_POWER_ON_TIME 100 /* msec */
  241. #define MXT_FWRESET_TIME 1000 /* msec */
  242. #define MXT_WAKE_TIME 25
  243. /* Command to unlock bootloader */
  244. #define MXT_UNLOCK_CMD_MSB 0xaa
  245. #define MXT_UNLOCK_CMD_LSB 0xdc
  246. /* Bootloader mode status */
  247. #define MXT_WAITING_BOOTLOAD_CMD 0xc0 /* valid 7 6 bit only */
  248. #define MXT_WAITING_FRAME_DATA 0x80 /* valid 7 6 bit only */
  249. #define MXT_FRAME_CRC_CHECK 0x02
  250. #define MXT_FRAME_CRC_FAIL 0x03
  251. #define MXT_FRAME_CRC_PASS 0x04
  252. #define MXT_APP_CRC_FAIL 0x40 /* valid 7 8 bit only */
  253. #define MXT_BOOT_STATUS_MASK 0x3f
  254. #define MXT_BOOT_EXTENDED_ID (1 << 5)
  255. #define MXT_BOOT_ID_MASK 0x1f
  256. /* Touch status */
  257. #define MXT_SUPPRESS (1 << 1)
  258. #define MXT_AMP (1 << 2)
  259. #define MXT_VECTOR (1 << 3)
  260. #define MXT_MOVE (1 << 4)
  261. #define MXT_RELEASE (1 << 5)
  262. #define MXT_PRESS (1 << 6)
  263. #define MXT_DETECT (1 << 7)
  264. /* Touch orient bits */
  265. #define MXT_XY_SWITCH (1 << 0)
  266. #define MXT_X_INVERT (1 << 1)
  267. #define MXT_Y_INVERT (1 << 2)
  268. /* Touch suppression */
  269. #define MXT_TCHSUP_ACTIVE (1 << 0)
  270. /* Touchscreen absolute values */
  271. #define MXT_MAX_AREA 0xff
  272. #define MXT_MAX_FINGER 10
  273. #define T7_DATA_SIZE 3
  274. #define MXT_MAX_RW_TRIES 3
  275. #define MXT_BLOCK_SIZE 256
  276. #define MXT_CFG_VERSION_LEN 3
  277. #define MXT_CFG_VERSION_EQUAL 0
  278. #define MXT_CFG_VERSION_LESS 1
  279. #define MXT_CFG_VERSION_GREATER 2
  280. #define MXT_COORDS_ARR_SIZE 4
  281. #define MXT_DEBUGFS_DIR "atmel_mxt_ts"
  282. #define MXT_DEBUGFS_FILE "object"
  283. struct mxt_info {
  284. u8 family_id;
  285. u8 variant_id;
  286. u8 version;
  287. u8 build;
  288. u8 matrix_xsize;
  289. u8 matrix_ysize;
  290. u8 object_num;
  291. };
  292. struct mxt_object {
  293. u8 type;
  294. u16 start_address;
  295. u8 size;
  296. u8 instances;
  297. u8 num_report_ids;
  298. /* to map object and message */
  299. u8 max_reportid;
  300. };
  301. struct mxt_message {
  302. u8 reportid;
  303. u8 message[7];
  304. u8 checksum;
  305. };
  306. struct mxt_finger {
  307. int status;
  308. int x;
  309. int y;
  310. int area;
  311. int pressure;
  312. };
  313. /* Each client has this additional data */
  314. struct mxt_data {
  315. struct i2c_client *client;
  316. struct input_dev *input_dev;
  317. const struct mxt_platform_data *pdata;
  318. const struct mxt_config_info *config_info;
  319. enum mxt_device_state state;
  320. struct mxt_object *object_table;
  321. struct mxt_info info;
  322. struct mxt_finger finger[MXT_MAX_FINGER];
  323. unsigned int irq;
  324. struct regulator *vcc_ana;
  325. struct regulator *vcc_dig;
  326. struct regulator *vcc_i2c;
  327. struct mxt_address_pair addr_pair;
  328. #if defined(CONFIG_FB)
  329. struct notifier_block fb_notif;
  330. #elif defined(CONFIG_HAS_EARLYSUSPEND)
  331. struct early_suspend early_suspend;
  332. #endif
  333. u8 t7_data[T7_DATA_SIZE];
  334. u16 t7_start_addr;
  335. u32 keyarray_old;
  336. u32 keyarray_new;
  337. u8 t9_max_reportid;
  338. u8 t9_min_reportid;
  339. u8 t15_max_reportid;
  340. u8 t15_min_reportid;
  341. u8 t42_max_reportid;
  342. u8 t42_min_reportid;
  343. u8 cfg_version[MXT_CFG_VERSION_LEN];
  344. int cfg_version_idx;
  345. int t38_start_addr;
  346. bool update_cfg;
  347. const char *fw_name;
  348. bool no_force_update;
  349. bool lpm_support;
  350. bool dev_sleep;
  351. #if defined(CONFIG_SECURE_TOUCH)
  352. atomic_t st_enabled;
  353. atomic_t st_pending_irqs;
  354. struct completion st_powerdown;
  355. #endif
  356. };
  357. static struct dentry *debug_base;
  358. static bool mxt_object_readable(unsigned int type)
  359. {
  360. switch (type) {
  361. case MXT_GEN_MESSAGE_T5:
  362. case MXT_GEN_COMMAND_T6:
  363. case MXT_GEN_POWER_T7:
  364. case MXT_GEN_ACQUIRE_T8:
  365. case MXT_GEN_DATASOURCE_T53:
  366. case MXT_TOUCH_MULTI_T9:
  367. case MXT_TOUCH_KEYARRAY_T15:
  368. case MXT_TOUCH_PROXIMITY_T23:
  369. case MXT_TOUCH_PROXKEY_T52:
  370. case MXT_PROCI_GRIPFACE_T20:
  371. case MXT_PROCG_NOISE_T22:
  372. case MXT_PROCG_NOISE_T62:
  373. case MXT_PROCI_ONETOUCH_T24:
  374. case MXT_PROCI_TWOTOUCH_T27:
  375. case MXT_PROCI_GRIP_T40:
  376. case MXT_PROCI_PALM_T41:
  377. case MXT_PROCI_TOUCHSUPPRESSION_T42:
  378. case MXT_PROCI_STYLUS_T47:
  379. case MXT_PROCI_SHIELDLESS_T56:
  380. case MXT_PROCI_EXTRATSDATA_T57:
  381. case MXT_PROCG_NOISESUPPRESSION_T48:
  382. case MXT_SPT_COMMSCONFIG_T18:
  383. case MXT_SPT_GPIOPWM_T19:
  384. case MXT_SPT_SELFTEST_T25:
  385. case MXT_SPT_CTECONFIG_T28:
  386. case MXT_SPT_USERDATA_T38:
  387. case MXT_SPT_DIGITIZER_T43:
  388. case MXT_SPT_CTECONFIG_T46:
  389. case MXT_SPT_EXTRANOISESUPCTRLS_T58:
  390. case MXT_SPT_TIMER_T61:
  391. case MXT_PROCI_ADAPTIVETHRESHOLD_T55:
  392. return true;
  393. default:
  394. return false;
  395. }
  396. }
  397. static bool mxt_object_writable(unsigned int type)
  398. {
  399. switch (type) {
  400. case MXT_GEN_COMMAND_T6:
  401. case MXT_GEN_POWER_T7:
  402. case MXT_GEN_ACQUIRE_T8:
  403. case MXT_TOUCH_MULTI_T9:
  404. case MXT_TOUCH_KEYARRAY_T15:
  405. case MXT_TOUCH_PROXIMITY_T23:
  406. case MXT_TOUCH_PROXKEY_T52:
  407. case MXT_PROCI_GRIPFACE_T20:
  408. case MXT_PROCG_NOISE_T22:
  409. case MXT_PROCG_NOISE_T62:
  410. case MXT_PROCI_ONETOUCH_T24:
  411. case MXT_PROCI_TWOTOUCH_T27:
  412. case MXT_PROCI_GRIP_T40:
  413. case MXT_PROCI_PALM_T41:
  414. case MXT_PROCI_TOUCHSUPPRESSION_T42:
  415. case MXT_PROCI_STYLUS_T47:
  416. case MXT_PROCI_SHIELDLESS_T56:
  417. case MXT_PROCI_EXTRATSDATA_T57:
  418. case MXT_PROCG_NOISESUPPRESSION_T48:
  419. case MXT_SPT_COMMSCONFIG_T18:
  420. case MXT_SPT_GPIOPWM_T19:
  421. case MXT_SPT_SELFTEST_T25:
  422. case MXT_SPT_CTECONFIG_T28:
  423. case MXT_SPT_USERDATA_T38:
  424. case MXT_SPT_DIGITIZER_T43:
  425. case MXT_SPT_CTECONFIG_T46:
  426. case MXT_SPT_EXTRANOISESUPCTRLS_T58:
  427. case MXT_SPT_TIMER_T61:
  428. case MXT_PROCI_ADAPTIVETHRESHOLD_T55:
  429. return true;
  430. default:
  431. return false;
  432. }
  433. }
  434. static void mxt_dump_message(struct device *dev,
  435. struct mxt_message *message)
  436. {
  437. dev_dbg(dev, "reportid:\t0x%x\n", message->reportid);
  438. dev_dbg(dev, "message1:\t0x%x\n", message->message[0]);
  439. dev_dbg(dev, "message2:\t0x%x\n", message->message[1]);
  440. dev_dbg(dev, "message3:\t0x%x\n", message->message[2]);
  441. dev_dbg(dev, "message4:\t0x%x\n", message->message[3]);
  442. dev_dbg(dev, "message5:\t0x%x\n", message->message[4]);
  443. dev_dbg(dev, "message6:\t0x%x\n", message->message[5]);
  444. dev_dbg(dev, "message7:\t0x%x\n", message->message[6]);
  445. dev_dbg(dev, "checksum:\t0x%x\n", message->checksum);
  446. }
  447. static int mxt_lookup_bootloader_address(struct mxt_data *data)
  448. {
  449. int i;
  450. for (i = 0; mxt_slave_addresses[i].application != 0; i++) {
  451. if (mxt_slave_addresses[i].application ==
  452. data->client->addr) {
  453. data->addr_pair.bootloader =
  454. mxt_slave_addresses[i].bootloader;
  455. return 0;
  456. }
  457. }
  458. dev_err(&data->client->dev, "Address 0x%02x not found in address table",
  459. data->client->addr);
  460. return -EINVAL;
  461. };
  462. static int mxt_switch_to_bootloader_address(struct mxt_data *data)
  463. {
  464. struct i2c_client *client = data->client;
  465. if (data->state == BOOTLOADER) {
  466. dev_err(&client->dev, "Already in BOOTLOADER state\n");
  467. return -EINVAL;
  468. }
  469. dev_info(&client->dev, "Changing to bootloader address: 0x%02x -> 0x%02x",
  470. client->addr, data->addr_pair.bootloader);
  471. client->addr = data->addr_pair.bootloader;
  472. data->state = BOOTLOADER;
  473. return 0;
  474. }
  475. static int mxt_switch_to_appmode_address(struct mxt_data *data)
  476. {
  477. struct i2c_client *client = data->client;
  478. if (data->state == APPMODE) {
  479. dev_err(&client->dev, "Already in APPMODE state\n");
  480. return -EINVAL;
  481. }
  482. dev_info(&client->dev, "Changing to application mode address: " \
  483. "0x%02x -> 0x%02x", client->addr,
  484. data->addr_pair.application);
  485. client->addr = data->addr_pair.application;
  486. data->state = APPMODE;
  487. return 0;
  488. }
  489. static int mxt_get_bootloader_version(struct i2c_client *client, u8 val)
  490. {
  491. u8 buf[3];
  492. if (val | MXT_BOOT_EXTENDED_ID) {
  493. dev_dbg(&client->dev,
  494. "Retrieving extended mode ID information");
  495. if (i2c_master_recv(client, &buf[0], 3) != 3) {
  496. dev_err(&client->dev, "%s: i2c recv failed\n",
  497. __func__);
  498. return -EIO;
  499. }
  500. dev_info(&client->dev, "Bootloader ID:%d Version:%d",
  501. buf[1], buf[2]);
  502. return buf[0];
  503. } else {
  504. dev_info(&client->dev, "Bootloader ID:%d",
  505. val & MXT_BOOT_ID_MASK);
  506. return val;
  507. }
  508. }
  509. static int mxt_get_bootloader_id(struct i2c_client *client)
  510. {
  511. u8 val;
  512. u8 buf[3];
  513. if (i2c_master_recv(client, &val, 1) != 1) {
  514. dev_err(&client->dev, "%s: i2c recv failed\n", __func__);
  515. return -EIO;
  516. }
  517. if (val | MXT_BOOT_EXTENDED_ID) {
  518. if (i2c_master_recv(client, &buf[0], 3) != 3) {
  519. dev_err(&client->dev, "%s: i2c recv failed\n",
  520. __func__);
  521. return -EIO;
  522. }
  523. return buf[1];
  524. } else {
  525. dev_info(&client->dev, "Bootloader ID:%d",
  526. val & MXT_BOOT_ID_MASK);
  527. return val & MXT_BOOT_ID_MASK;
  528. }
  529. }
  530. static int mxt_check_bootloader(struct i2c_client *client,
  531. unsigned int state)
  532. {
  533. u8 val;
  534. recheck:
  535. if (i2c_master_recv(client, &val, 1) != 1) {
  536. dev_err(&client->dev, "%s: i2c recv failed\n", __func__);
  537. return -EIO;
  538. }
  539. switch (state) {
  540. case MXT_WAITING_BOOTLOAD_CMD:
  541. val = mxt_get_bootloader_version(client, val);
  542. val &= ~MXT_BOOT_STATUS_MASK;
  543. break;
  544. case MXT_WAITING_FRAME_DATA:
  545. case MXT_APP_CRC_FAIL:
  546. val &= ~MXT_BOOT_STATUS_MASK;
  547. break;
  548. case MXT_FRAME_CRC_PASS:
  549. if (val == MXT_FRAME_CRC_CHECK)
  550. goto recheck;
  551. if (val == MXT_FRAME_CRC_FAIL) {
  552. dev_err(&client->dev, "Bootloader CRC fail\n");
  553. return -EINVAL;
  554. }
  555. break;
  556. default:
  557. return -EINVAL;
  558. }
  559. if (val != state) {
  560. dev_err(&client->dev, "Invalid bootloader mode state %X\n",
  561. val);
  562. return -EINVAL;
  563. }
  564. return 0;
  565. }
  566. static int mxt_unlock_bootloader(struct i2c_client *client)
  567. {
  568. u8 buf[2];
  569. buf[0] = MXT_UNLOCK_CMD_LSB;
  570. buf[1] = MXT_UNLOCK_CMD_MSB;
  571. if (i2c_master_send(client, buf, 2) != 2) {
  572. dev_err(&client->dev, "%s: i2c send failed\n", __func__);
  573. return -EIO;
  574. }
  575. return 0;
  576. }
  577. static int mxt_fw_write(struct i2c_client *client,
  578. const u8 *data, unsigned int frame_size)
  579. {
  580. if (i2c_master_send(client, data, frame_size) != frame_size) {
  581. dev_err(&client->dev, "%s: i2c send failed\n", __func__);
  582. return -EIO;
  583. }
  584. return 0;
  585. }
  586. static int __mxt_read_reg(struct i2c_client *client,
  587. u16 reg, u16 len, void *val)
  588. {
  589. struct i2c_msg xfer[2];
  590. u8 buf[2];
  591. int i = 0;
  592. buf[0] = reg & 0xff;
  593. buf[1] = (reg >> 8) & 0xff;
  594. /* Write register */
  595. xfer[0].addr = client->addr;
  596. xfer[0].flags = 0;
  597. xfer[0].len = 2;
  598. xfer[0].buf = buf;
  599. /* Read data */
  600. xfer[1].addr = client->addr;
  601. xfer[1].flags = I2C_M_RD;
  602. xfer[1].len = len;
  603. xfer[1].buf = val;
  604. do {
  605. if (i2c_transfer(client->adapter, xfer, 2) == 2)
  606. return 0;
  607. msleep(MXT_WAKE_TIME);
  608. } while (++i < MXT_MAX_RW_TRIES);
  609. dev_err(&client->dev, "%s: i2c transfer failed\n", __func__);
  610. return -EIO;
  611. }
  612. static int mxt_read_reg(struct i2c_client *client, u16 reg, u8 *val)
  613. {
  614. return __mxt_read_reg(client, reg, 1, val);
  615. }
  616. static int __mxt_write_reg(struct i2c_client *client,
  617. u16 addr, u16 length, u8 *value)
  618. {
  619. u8 buf[MXT_BLOCK_SIZE + 2];
  620. int i, tries = 0;
  621. if (length > MXT_BLOCK_SIZE)
  622. return -EINVAL;
  623. buf[0] = addr & 0xff;
  624. buf[1] = (addr >> 8) & 0xff;
  625. for (i = 0; i < length; i++)
  626. buf[i + 2] = *value++;
  627. do {
  628. if (i2c_master_send(client, buf, length + 2) == (length + 2))
  629. return 0;
  630. msleep(MXT_WAKE_TIME);
  631. } while (++tries < MXT_MAX_RW_TRIES);
  632. dev_err(&client->dev, "%s: i2c send failed\n", __func__);
  633. return -EIO;
  634. }
  635. static int mxt_write_reg(struct i2c_client *client, u16 reg, u8 val)
  636. {
  637. return __mxt_write_reg(client, reg, 1, &val);
  638. }
  639. static int mxt_read_object_table(struct i2c_client *client,
  640. u16 reg, u8 *object_buf)
  641. {
  642. return __mxt_read_reg(client, reg, MXT_OBJECT_SIZE,
  643. object_buf);
  644. }
  645. static struct mxt_object *
  646. mxt_get_object(struct mxt_data *data, u8 type)
  647. {
  648. struct mxt_object *object;
  649. int i;
  650. for (i = 0; i < data->info.object_num; i++) {
  651. object = data->object_table + i;
  652. if (object->type == type)
  653. return object;
  654. }
  655. dev_err(&data->client->dev, "Invalid object type\n");
  656. return NULL;
  657. }
  658. static int mxt_read_message(struct mxt_data *data,
  659. struct mxt_message *message)
  660. {
  661. struct mxt_object *object;
  662. u16 reg;
  663. object = mxt_get_object(data, MXT_GEN_MESSAGE_T5);
  664. if (!object)
  665. return -EINVAL;
  666. reg = object->start_address;
  667. return __mxt_read_reg(data->client, reg,
  668. sizeof(struct mxt_message), message);
  669. }
  670. static int mxt_read_object(struct mxt_data *data,
  671. u8 type, u8 offset, u8 *val)
  672. {
  673. struct mxt_object *object;
  674. u16 reg;
  675. object = mxt_get_object(data, type);
  676. if (!object)
  677. return -EINVAL;
  678. reg = object->start_address;
  679. return __mxt_read_reg(data->client, reg + offset, 1, val);
  680. }
  681. static int mxt_get_object_address(struct device *dev, u8 type)
  682. {
  683. struct mxt_data *data = dev_get_drvdata(dev);
  684. u8 obj_num, obj_buf[MXT_OBJECT_SIZE];
  685. u16 reg;
  686. int i, error;
  687. error = mxt_read_reg(data->client, MXT_OBJECT_NUM, &obj_num);
  688. if (error) {
  689. dev_err(dev, "reading number of objects failed\n");
  690. return -EINVAL;
  691. }
  692. for (i = 0; i < obj_num; i++) {
  693. reg = MXT_OBJECT_START + MXT_OBJECT_SIZE * i;
  694. error = mxt_read_object_table(data->client,
  695. reg, obj_buf);
  696. if (error)
  697. return error;
  698. if (obj_buf[0] == type)
  699. return obj_buf[2] << 8 | obj_buf[1];
  700. }
  701. /* If control reaches here, i = obj_num and object not found */
  702. dev_err(dev, "Requested object %d not found.\n", type);
  703. return -EINVAL;
  704. }
  705. static int mxt_write_object(struct mxt_data *data,
  706. u8 type, u8 offset, u8 val)
  707. {
  708. struct mxt_object *object;
  709. u16 reg;
  710. object = mxt_get_object(data, type);
  711. if (!object)
  712. return -EINVAL;
  713. reg = object->start_address;
  714. return mxt_write_reg(data->client, reg + offset, val);
  715. }
  716. static void mxt_input_report(struct mxt_data *data, int single_id)
  717. {
  718. struct mxt_finger *finger = data->finger;
  719. struct input_dev *input_dev = data->input_dev;
  720. int status = finger[single_id].status;
  721. int finger_num = 0;
  722. int id;
  723. for (id = 0; id < MXT_MAX_FINGER; id++) {
  724. if (!finger[id].status)
  725. continue;
  726. input_mt_slot(input_dev, id);
  727. /* Firmware reports min/max values when the touch is
  728. * outside screen area. Send a release event in
  729. * such cases to avoid unwanted touches.
  730. */
  731. if (finger[id].x <= data->pdata->panel_minx ||
  732. finger[id].x >= data->pdata->panel_maxx ||
  733. finger[id].y <= data->pdata->panel_miny ||
  734. finger[id].y >= data->pdata->panel_maxy) {
  735. finger[id].status = MXT_RELEASE;
  736. }
  737. input_mt_report_slot_state(input_dev, MT_TOOL_FINGER,
  738. finger[id].status != MXT_RELEASE);
  739. if (finger[id].status != MXT_RELEASE) {
  740. finger_num++;
  741. input_report_abs(input_dev, ABS_MT_TOUCH_MAJOR,
  742. finger[id].area);
  743. input_report_abs(input_dev, ABS_MT_POSITION_X,
  744. finger[id].x);
  745. input_report_abs(input_dev, ABS_MT_POSITION_Y,
  746. finger[id].y);
  747. input_report_abs(input_dev, ABS_MT_PRESSURE,
  748. finger[id].pressure);
  749. } else {
  750. finger[id].status = 0;
  751. }
  752. }
  753. input_report_key(input_dev, BTN_TOUCH, finger_num > 0);
  754. if (finger[single_id].x <= data->pdata->panel_minx ||
  755. finger[single_id].x >= data->pdata->panel_maxx ||
  756. finger[single_id].y <= data->pdata->panel_miny ||
  757. finger[single_id].y >= data->pdata->panel_maxy) {
  758. status = MXT_RELEASE;
  759. }
  760. if ((status != MXT_RELEASE) && status) {
  761. input_report_abs(input_dev, ABS_X, finger[single_id].x);
  762. input_report_abs(input_dev, ABS_Y, finger[single_id].y);
  763. input_report_abs(input_dev,
  764. ABS_PRESSURE, finger[single_id].pressure);
  765. }
  766. input_sync(input_dev);
  767. }
  768. static void mxt_release_all(struct mxt_data *data)
  769. {
  770. int id;
  771. for (id = 0; id < MXT_MAX_FINGER; id++)
  772. if (data->finger[id].status)
  773. data->finger[id].status = MXT_RELEASE;
  774. mxt_input_report(data, 0);
  775. }
  776. static void mxt_input_touchevent(struct mxt_data *data,
  777. struct mxt_message *message, int id)
  778. {
  779. struct mxt_finger *finger = data->finger;
  780. struct device *dev = &data->client->dev;
  781. u8 status = message->message[0];
  782. int x;
  783. int y;
  784. int area;
  785. int pressure;
  786. if (status & MXT_SUPPRESS) {
  787. mxt_release_all(data);
  788. return;
  789. }
  790. /* Check the touch is present on the screen */
  791. if (!(status & MXT_DETECT)) {
  792. if (status & MXT_RELEASE) {
  793. dev_dbg(dev, "[%d] released\n", id);
  794. finger[id].status = MXT_RELEASE;
  795. mxt_input_report(data, id);
  796. }
  797. return;
  798. }
  799. /* Check only AMP detection */
  800. if (!(status & (MXT_PRESS | MXT_MOVE)))
  801. return;
  802. x = (message->message[1] << 4) | ((message->message[3] >> 4) & 0xf);
  803. y = (message->message[2] << 4) | ((message->message[3] & 0xf));
  804. if (data->pdata->panel_maxx < 1024)
  805. x = x >> 2;
  806. if (data->pdata->panel_maxy < 1024)
  807. y = y >> 2;
  808. area = message->message[4];
  809. pressure = message->message[5];
  810. dev_dbg(dev, "[%d] %s x: %d, y: %d, area: %d\n", id,
  811. status & MXT_MOVE ? "moved" : "pressed",
  812. x, y, area);
  813. finger[id].status = status & MXT_MOVE ?
  814. MXT_MOVE : MXT_PRESS;
  815. finger[id].x = x;
  816. finger[id].y = y;
  817. finger[id].area = area;
  818. finger[id].pressure = pressure;
  819. mxt_input_report(data, id);
  820. }
  821. static void mxt_handle_key_array(struct mxt_data *data,
  822. struct mxt_message *message)
  823. {
  824. u32 keys_changed;
  825. int i;
  826. if (!data->pdata->key_codes) {
  827. dev_err(&data->client->dev, "keyarray is not supported\n");
  828. return;
  829. }
  830. data->keyarray_new = message->message[1] |
  831. (message->message[2] << 8) |
  832. (message->message[3] << 16) |
  833. (message->message[4] << 24);
  834. keys_changed = data->keyarray_old ^ data->keyarray_new;
  835. if (!keys_changed) {
  836. dev_dbg(&data->client->dev, "no keys changed\n");
  837. return;
  838. }
  839. for (i = 0; i < MXT_KEYARRAY_MAX_KEYS; i++) {
  840. if (!(keys_changed & (1 << i)))
  841. continue;
  842. input_report_key(data->input_dev, data->pdata->key_codes[i],
  843. (data->keyarray_new & (1 << i)));
  844. input_sync(data->input_dev);
  845. }
  846. data->keyarray_old = data->keyarray_new;
  847. }
  848. static void mxt_handle_touch_suppression(struct mxt_data *data, u8 status)
  849. {
  850. dev_dbg(&data->client->dev, "touch suppression\n");
  851. /* release all touches */
  852. if (status & MXT_TCHSUP_ACTIVE)
  853. mxt_release_all(data);
  854. }
  855. #if defined(CONFIG_SECURE_TOUCH)
  856. static void mxt_secure_touch_notify(struct mxt_data *data)
  857. {
  858. sysfs_notify(&data->client->dev.kobj, NULL, "secure_touch");
  859. }
  860. static irqreturn_t mxt_filter_interrupt(struct mxt_data *data)
  861. {
  862. if (atomic_read(&data->st_enabled)) {
  863. if (atomic_cmpxchg(&data->st_pending_irqs, 0, 1) == 0)
  864. mxt_secure_touch_notify(data);
  865. return IRQ_HANDLED;
  866. }
  867. return IRQ_NONE;
  868. }
  869. #else
  870. static irqreturn_t mxt_filter_interrupt(struct mxt_data *data)
  871. {
  872. return IRQ_NONE;
  873. }
  874. #endif
  875. static irqreturn_t mxt_interrupt(int irq, void *dev_id)
  876. {
  877. struct mxt_data *data = dev_id;
  878. struct mxt_message message;
  879. struct device *dev = &data->client->dev;
  880. int id;
  881. u8 reportid;
  882. if (data->state != APPMODE) {
  883. dev_err(dev, "Ignoring IRQ - not in APPMODE state\n");
  884. return IRQ_HANDLED;
  885. }
  886. if (IRQ_HANDLED == mxt_filter_interrupt(data))
  887. goto end;
  888. do {
  889. if (mxt_read_message(data, &message)) {
  890. dev_err(dev, "Failed to read message\n");
  891. goto end;
  892. }
  893. reportid = message.reportid;
  894. if (!reportid) {
  895. dev_dbg(dev, "Report id 0 is reserved\n");
  896. continue;
  897. }
  898. id = reportid - data->t9_min_reportid;
  899. /* check whether report id is part of T9, T15 or T42 */
  900. if (reportid >= data->t9_min_reportid &&
  901. reportid <= data->t9_max_reportid)
  902. mxt_input_touchevent(data, &message, id);
  903. else if (reportid >= data->t15_min_reportid &&
  904. reportid <= data->t15_max_reportid)
  905. mxt_handle_key_array(data, &message);
  906. else if (reportid >= data->t42_min_reportid &&
  907. reportid <= data->t42_max_reportid)
  908. mxt_handle_touch_suppression(data,
  909. message.message[0]);
  910. else
  911. mxt_dump_message(dev, &message);
  912. } while (reportid != 0xff);
  913. end:
  914. return IRQ_HANDLED;
  915. }
  916. static int mxt_check_reg_init(struct mxt_data *data)
  917. {
  918. const struct mxt_config_info *config_info = data->config_info;
  919. struct mxt_object *object;
  920. struct device *dev = &data->client->dev;
  921. int index = 0;
  922. int i, j, config_offset;
  923. if (!config_info) {
  924. dev_dbg(dev, "No cfg data defined, skipping reg init\n");
  925. return 0;
  926. }
  927. for (i = 0; i < data->info.object_num; i++) {
  928. object = data->object_table + i;
  929. if (!mxt_object_writable(object->type))
  930. continue;
  931. for (j = 0; j < object->size + 1; j++) {
  932. config_offset = index + j;
  933. if (config_offset > config_info->config_length) {
  934. dev_err(dev, "Not enough config data!\n");
  935. return -EINVAL;
  936. }
  937. mxt_write_object(data, object->type, j,
  938. config_info->config[config_offset]);
  939. }
  940. index += object->size + 1;
  941. }
  942. return 0;
  943. }
  944. static int mxt_make_highchg(struct mxt_data *data)
  945. {
  946. struct device *dev = &data->client->dev;
  947. struct mxt_message message;
  948. int count = 10;
  949. int error;
  950. /* Read dummy message to make high CHG pin */
  951. do {
  952. error = mxt_read_message(data, &message);
  953. if (error)
  954. return error;
  955. } while (message.reportid != 0xff && --count);
  956. if (!count) {
  957. dev_err(dev, "CHG pin isn't cleared\n");
  958. return -EBUSY;
  959. }
  960. return 0;
  961. }
  962. static int mxt_get_info(struct mxt_data *data)
  963. {
  964. struct i2c_client *client = data->client;
  965. struct mxt_info *info = &data->info;
  966. int error;
  967. u8 val;
  968. error = mxt_read_reg(client, MXT_FAMILY_ID, &val);
  969. if (error)
  970. return error;
  971. info->family_id = val;
  972. error = mxt_read_reg(client, MXT_VARIANT_ID, &val);
  973. if (error)
  974. return error;
  975. info->variant_id = val;
  976. error = mxt_read_reg(client, MXT_VERSION, &val);
  977. if (error)
  978. return error;
  979. info->version = val;
  980. error = mxt_read_reg(client, MXT_BUILD, &val);
  981. if (error)
  982. return error;
  983. info->build = val;
  984. error = mxt_read_reg(client, MXT_OBJECT_NUM, &val);
  985. if (error)
  986. return error;
  987. info->object_num = val;
  988. return 0;
  989. }
  990. static int mxt_get_object_table(struct mxt_data *data)
  991. {
  992. int error;
  993. int i;
  994. u16 reg;
  995. u8 reportid = 0;
  996. u8 buf[MXT_OBJECT_SIZE];
  997. bool found_t38 = false;
  998. for (i = 0; i < data->info.object_num; i++) {
  999. struct mxt_object *object = data->object_table + i;
  1000. reg = MXT_OBJECT_START + MXT_OBJECT_SIZE * i;
  1001. error = mxt_read_object_table(data->client, reg, buf);
  1002. if (error)
  1003. return error;
  1004. object->type = buf[0];
  1005. object->start_address = (buf[2] << 8) | buf[1];
  1006. object->size = buf[3];
  1007. object->instances = buf[4];
  1008. object->num_report_ids = buf[5];
  1009. if (object->num_report_ids) {
  1010. reportid += object->num_report_ids *
  1011. (object->instances + 1);
  1012. object->max_reportid = reportid;
  1013. }
  1014. /* Calculate index for config major version in config array.
  1015. * Major version is the first byte in object T38.
  1016. */
  1017. if (object->type == MXT_SPT_USERDATA_T38) {
  1018. data->t38_start_addr = object->start_address;
  1019. found_t38 = true;
  1020. }
  1021. if (!found_t38 && mxt_object_writable(object->type))
  1022. data->cfg_version_idx += object->size + 1;
  1023. }
  1024. return 0;
  1025. }
  1026. static int compare_versions(const u8 *v1, const u8 *v2)
  1027. {
  1028. int i;
  1029. if (!v1 || !v2)
  1030. return -EINVAL;
  1031. /* The major version number stays the same across different versions for
  1032. * a particular controller on a target. The minor and sub-minor version
  1033. * numbers indicate which version is newer.
  1034. */
  1035. if (v1[0] != v2[0])
  1036. return -EINVAL;
  1037. for (i = 1; i < MXT_CFG_VERSION_LEN; i++) {
  1038. if (v1[i] > v2[i])
  1039. return MXT_CFG_VERSION_LESS; /* v2 is older */
  1040. if (v1[i] < v2[i])
  1041. return MXT_CFG_VERSION_GREATER; /* v2 is newer */
  1042. }
  1043. return MXT_CFG_VERSION_EQUAL; /* v1 and v2 are equal */
  1044. }
  1045. static void mxt_check_config_version(struct mxt_data *data,
  1046. const struct mxt_config_info *cfg_info,
  1047. bool match_major,
  1048. const u8 **cfg_version_found,
  1049. bool *found_cfg_major_match)
  1050. {
  1051. const u8 *cfg_version;
  1052. int result = -EINVAL;
  1053. cfg_version = cfg_info->config + data->cfg_version_idx;
  1054. if (*cfg_version_found)
  1055. result = compare_versions(*cfg_version_found, cfg_version);
  1056. if (match_major) {
  1057. if (result >= MXT_CFG_VERSION_EQUAL)
  1058. *found_cfg_major_match = true;
  1059. if (result == MXT_CFG_VERSION_EQUAL ||
  1060. result == MXT_CFG_VERSION_GREATER) {
  1061. data->config_info = cfg_info;
  1062. data->fw_name = cfg_info->fw_name;
  1063. *cfg_version_found = cfg_version;
  1064. }
  1065. if (result == MXT_CFG_VERSION_GREATER)
  1066. data->update_cfg = true;
  1067. } else if (!*cfg_version_found || result == MXT_CFG_VERSION_GREATER) {
  1068. data->config_info = cfg_info;
  1069. data->fw_name = cfg_info->fw_name;
  1070. data->update_cfg = true;
  1071. *cfg_version_found = cfg_version;
  1072. }
  1073. }
  1074. /* If the controller's config version has a non-zero major number, call this
  1075. * function with match_major = true to look for the latest config present in
  1076. * the pdata based on matching family id, variant id, f/w version, build, and
  1077. * config major number. If the controller is programmed with wrong config data
  1078. * previously, call this function with match_major = false to look for latest
  1079. * config based on based on matching family id, variant id, f/w version and
  1080. * build only.
  1081. */
  1082. static int mxt_search_config_array(struct mxt_data *data, bool match_major)
  1083. {
  1084. const struct mxt_platform_data *pdata = data->pdata;
  1085. const struct mxt_config_info *cfg_info;
  1086. const struct mxt_info *info = &data->info;
  1087. const u8 *cfg_version_found;
  1088. bool found_cfg_major_match = false;
  1089. int i;
  1090. cfg_version_found = match_major ? data->cfg_version : NULL;
  1091. for (i = 0; i < pdata->config_array_size; i++) {
  1092. cfg_info = &pdata->config_array[i];
  1093. if (!cfg_info->config || !cfg_info->config_length)
  1094. continue;
  1095. if (info->family_id == cfg_info->family_id &&
  1096. info->variant_id == cfg_info->variant_id &&
  1097. info->version == cfg_info->version &&
  1098. info->build == cfg_info->build) {
  1099. mxt_check_config_version(data, cfg_info, match_major,
  1100. &cfg_version_found, &found_cfg_major_match);
  1101. }
  1102. }
  1103. if (data->config_info || found_cfg_major_match)
  1104. return 0;
  1105. data->config_info = NULL;
  1106. data->fw_name = NULL;
  1107. return -EINVAL;
  1108. }
  1109. static int mxt_get_config(struct mxt_data *data)
  1110. {
  1111. const struct mxt_platform_data *pdata = data->pdata;
  1112. struct device *dev = &data->client->dev;
  1113. struct mxt_object *object;
  1114. int error;
  1115. if (!pdata->config_array || !pdata->config_array_size) {
  1116. dev_dbg(dev, "No cfg data provided by platform data\n");
  1117. return 0;
  1118. }
  1119. /* Get current config version */
  1120. object = mxt_get_object(data, MXT_SPT_USERDATA_T38);
  1121. if (!object) {
  1122. dev_err(dev, "Unable to obtain USERDATA object\n");
  1123. return -EINVAL;
  1124. }
  1125. error = __mxt_read_reg(data->client, object->start_address,
  1126. sizeof(data->cfg_version), data->cfg_version);
  1127. if (error) {
  1128. dev_err(dev, "Unable to read config version\n");
  1129. return error;
  1130. }
  1131. dev_info(dev, "Current config version on the controller is %d.%d.%d\n",
  1132. data->cfg_version[0], data->cfg_version[1],
  1133. data->cfg_version[2]);
  1134. /* configuration update requires major match */
  1135. error = mxt_search_config_array(data, true);
  1136. /* if no_force_update is false , try again with false
  1137. as the second parameter to mxt_search_config_array */
  1138. if (error && (data->no_force_update == false))
  1139. error = mxt_search_config_array(data, false);
  1140. if (error) {
  1141. dev_err(dev,
  1142. "Unable to find matching config in pdata\n");
  1143. return error;
  1144. }
  1145. return 0;
  1146. }
  1147. static void mxt_power_on_delay(struct mxt_data *data)
  1148. {
  1149. const struct mxt_platform_data *pdata = data->pdata;
  1150. const struct mxt_config_info *cfg_info;
  1151. u32 delay = 0;
  1152. int i;
  1153. for (i = 0; i < pdata->config_array_size; i++) {
  1154. cfg_info = &pdata->config_array[i];
  1155. switch (cfg_info->family_id) {
  1156. case MXT224_ID:
  1157. delay = max_t(u32, delay, MXT224_POWER_ON_TIME);
  1158. break;
  1159. case MXT224E_ID:
  1160. delay = max_t(u32, delay, MXT224E_POWER_ON_TIME);
  1161. break;
  1162. case MXT336S_ID:
  1163. delay = max_t(u32, delay, MXT336S_POWER_ON_TIME);
  1164. break;
  1165. case MXT1386_ID:
  1166. delay = max_t(u32, delay,
  1167. max_t(u32, MXT1386_POWER_ON_TIME,
  1168. MXT1386E_POWER_ON_TIME));
  1169. break;
  1170. case MXT1664S_ID:
  1171. delay = max_t(u32, delay, MXT1664S_POWER_ON_TIME);
  1172. break;
  1173. default:
  1174. delay = max_t(u32, delay, MXT_POWER_ON_TIME);
  1175. }
  1176. }
  1177. msleep(delay);
  1178. }
  1179. static void mxt_reset_delay(struct mxt_data *data)
  1180. {
  1181. struct mxt_info *info = &data->info;
  1182. switch (info->family_id) {
  1183. case MXT224_ID:
  1184. msleep(MXT224_RESET_TIME);
  1185. break;
  1186. case MXT224E_ID:
  1187. msleep(MXT224E_RESET_TIME);
  1188. break;
  1189. case MXT336S_ID:
  1190. msleep(MXT336S_RESET_TIME);
  1191. break;
  1192. case MXT1386_ID:
  1193. msleep(max_t(u32, MXT1386_RESET_TIME, MXT1386E_RESET_TIME));
  1194. break;
  1195. case MXT1664S_ID:
  1196. msleep(MXT1664S_RESET_TIME);
  1197. break;
  1198. default:
  1199. msleep(MXT_RESET_TIME);
  1200. }
  1201. }
  1202. static int mxt_backup_nv(struct mxt_data *data)
  1203. {
  1204. int error;
  1205. u8 command_register;
  1206. int timeout_counter = 0;
  1207. /* Backup to memory */
  1208. mxt_write_object(data, MXT_GEN_COMMAND_T6,
  1209. MXT_COMMAND_BACKUPNV,
  1210. MXT_BACKUP_VALUE);
  1211. msleep(MXT_BACKUP_TIME);
  1212. do {
  1213. error = mxt_read_object(data, MXT_GEN_COMMAND_T6,
  1214. MXT_COMMAND_BACKUPNV,
  1215. &command_register);
  1216. if (error)
  1217. return error;
  1218. usleep_range(1000, 2000);
  1219. } while ((command_register != 0) && (++timeout_counter <= 100));
  1220. if (timeout_counter > 100) {
  1221. dev_err(&data->client->dev, "No response after backup!\n");
  1222. return -EIO;
  1223. }
  1224. /* Soft reset */
  1225. mxt_write_object(data, MXT_GEN_COMMAND_T6, MXT_COMMAND_RESET, 1);
  1226. mxt_reset_delay(data);
  1227. return 0;
  1228. }
  1229. static int mxt_save_objects(struct mxt_data *data)
  1230. {
  1231. struct i2c_client *client = data->client;
  1232. struct mxt_object *t7_object;
  1233. struct mxt_object *t9_object;
  1234. struct mxt_object *t15_object;
  1235. struct mxt_object *t42_object;
  1236. int error;
  1237. /* Store T7 and T9 locally, used in suspend/resume operations */
  1238. t7_object = mxt_get_object(data, MXT_GEN_POWER_T7);
  1239. if (!t7_object) {
  1240. dev_err(&client->dev, "Failed to get T7 object\n");
  1241. return -EINVAL;
  1242. }
  1243. data->t7_start_addr = t7_object->start_address;
  1244. error = __mxt_read_reg(client, data->t7_start_addr,
  1245. T7_DATA_SIZE, data->t7_data);
  1246. if (error < 0) {
  1247. dev_err(&client->dev,
  1248. "Failed to save current power state\n");
  1249. return error;
  1250. }
  1251. /* Store T9, T15's min and max report ids */
  1252. t9_object = mxt_get_object(data, MXT_TOUCH_MULTI_T9);
  1253. if (!t9_object) {
  1254. dev_err(&client->dev, "Failed to get T9 object\n");
  1255. return -EINVAL;
  1256. }
  1257. data->t9_max_reportid = t9_object->max_reportid;
  1258. data->t9_min_reportid = t9_object->max_reportid -
  1259. (t9_object->num_report_ids *
  1260. (t9_object->instances + 1)) + 1;
  1261. if (data->pdata->key_codes) {
  1262. t15_object = mxt_get_object(data, MXT_TOUCH_KEYARRAY_T15);
  1263. if (!t15_object)
  1264. dev_dbg(&client->dev, "T15 object is not available\n");
  1265. else {
  1266. data->t15_max_reportid = t15_object->max_reportid;
  1267. data->t15_min_reportid = t15_object->max_reportid -
  1268. (t15_object->num_report_ids *
  1269. (t15_object->instances + 1)) + 1;
  1270. }
  1271. }
  1272. /* Store T42 min and max report ids */
  1273. t42_object = mxt_get_object(data, MXT_PROCI_TOUCHSUPPRESSION_T42);
  1274. if (!t42_object)
  1275. dev_dbg(&client->dev, "T42 object is not available\n");
  1276. else {
  1277. data->t42_max_reportid = t42_object->max_reportid;
  1278. data->t42_min_reportid = t42_object->max_reportid -
  1279. (t42_object->num_report_ids *
  1280. (t42_object->instances + 1)) + 1;
  1281. }
  1282. return 0;
  1283. }
  1284. static int mxt_update_cfg(struct mxt_data *data)
  1285. {
  1286. int error;
  1287. const u8 *cfg_ver;
  1288. /* Get config data from platform data */
  1289. error = mxt_get_config(data);
  1290. if (error)
  1291. dev_dbg(&data->client->dev, "Config info not found.\n");
  1292. /* Check register init values */
  1293. if (data->config_info && data->config_info->config) {
  1294. if (data->update_cfg) {
  1295. error = mxt_check_reg_init(data);
  1296. if (error) {
  1297. dev_err(&data->client->dev,
  1298. "Failed to check reg init value\n");
  1299. return error;
  1300. }
  1301. error = mxt_backup_nv(data);
  1302. if (error) {
  1303. dev_err(&data->client->dev, "Failed to back up NV\n");
  1304. return error;
  1305. }
  1306. cfg_ver = data->config_info->config +
  1307. data->cfg_version_idx;
  1308. dev_info(&data->client->dev,
  1309. "Config updated from %d.%d.%d to %d.%d.%d\n",
  1310. data->cfg_version[0], data->cfg_version[1],
  1311. data->cfg_version[2],
  1312. cfg_ver[0], cfg_ver[1], cfg_ver[2]);
  1313. memcpy(data->cfg_version, cfg_ver, MXT_CFG_VERSION_LEN);
  1314. }
  1315. } else {
  1316. dev_info(&data->client->dev,
  1317. "No cfg data defined, skipping check reg init\n");
  1318. }
  1319. error = mxt_save_objects(data);
  1320. if (error)
  1321. return error;
  1322. return 0;
  1323. }
  1324. static int mxt_initialize(struct mxt_data *data)
  1325. {
  1326. struct i2c_client *client = data->client;
  1327. struct mxt_info *info = &data->info;
  1328. int error;
  1329. u8 val;
  1330. error = mxt_get_info(data);
  1331. if (error) {
  1332. /* Try bootloader mode */
  1333. error = mxt_switch_to_bootloader_address(data);
  1334. if (error)
  1335. return error;
  1336. error = mxt_check_bootloader(client, MXT_APP_CRC_FAIL);
  1337. if (error)
  1338. return error;
  1339. dev_err(&client->dev, "Application CRC failure\n");
  1340. data->state = BOOTLOADER;
  1341. return 0;
  1342. }
  1343. dev_info(&client->dev,
  1344. "Family ID: %d Variant ID: %d Version: %d.%d "
  1345. "Build: 0x%02X Object Num: %d\n",
  1346. info->family_id, info->variant_id,
  1347. info->version >> 4, info->version & 0xf,
  1348. info->build, info->object_num);
  1349. data->state = APPMODE;
  1350. data->object_table = kcalloc(info->object_num,
  1351. sizeof(struct mxt_object),
  1352. GFP_KERNEL);
  1353. if (!data->object_table) {
  1354. dev_err(&client->dev, "Failed to allocate memory\n");
  1355. return -ENOMEM;
  1356. }
  1357. /* Get object table information */
  1358. error = mxt_get_object_table(data);
  1359. if (error)
  1360. goto free_object_table;
  1361. error = mxt_update_cfg(data);
  1362. if (error)
  1363. goto free_object_table;
  1364. /* Update matrix size at info struct */
  1365. error = mxt_read_reg(client, MXT_MATRIX_X_SIZE, &val);
  1366. if (error)
  1367. goto free_object_table;
  1368. info->matrix_xsize = val;
  1369. error = mxt_read_reg(client, MXT_MATRIX_Y_SIZE, &val);
  1370. if (error)
  1371. goto free_object_table;
  1372. info->matrix_ysize = val;
  1373. dev_info(&client->dev,
  1374. "Matrix X Size: %d Matrix Y Size: %d\n",
  1375. info->matrix_xsize, info->matrix_ysize);
  1376. return 0;
  1377. free_object_table:
  1378. kfree(data->object_table);
  1379. return error;
  1380. }
  1381. static ssize_t mxt_object_show(struct device *dev,
  1382. struct device_attribute *attr, char *buf)
  1383. {
  1384. struct mxt_data *data = dev_get_drvdata(dev);
  1385. struct mxt_object *object;
  1386. int count = 0;
  1387. int i, j;
  1388. int error;
  1389. u8 val;
  1390. for (i = 0; i < data->info.object_num; i++) {
  1391. object = data->object_table + i;
  1392. count += snprintf(buf + count, PAGE_SIZE - count,
  1393. "Object[%d] (Type %d)\n",
  1394. i + 1, object->type);
  1395. if (count >= PAGE_SIZE)
  1396. return PAGE_SIZE - 1;
  1397. if (!mxt_object_readable(object->type)) {
  1398. count += snprintf(buf + count, PAGE_SIZE - count,
  1399. "\n");
  1400. if (count >= PAGE_SIZE)
  1401. return PAGE_SIZE - 1;
  1402. continue;
  1403. }
  1404. for (j = 0; j < object->size + 1; j++) {
  1405. error = mxt_read_object(data,
  1406. object->type, j, &val);
  1407. if (error)
  1408. return error;
  1409. count += snprintf(buf + count, PAGE_SIZE - count,
  1410. "\t[%2d]: %02x (%d)\n", j, val, val);
  1411. if (count >= PAGE_SIZE)
  1412. return PAGE_SIZE - 1;
  1413. }
  1414. count += snprintf(buf + count, PAGE_SIZE - count, "\n");
  1415. if (count >= PAGE_SIZE)
  1416. return PAGE_SIZE - 1;
  1417. }
  1418. return count;
  1419. }
  1420. static int strtobyte(const char *data, u8 *value)
  1421. {
  1422. char str[3];
  1423. str[0] = data[0];
  1424. str[1] = data[1];
  1425. str[2] = '\0';
  1426. return kstrtou8(str, 16, value);
  1427. }
  1428. static int mxt_load_fw(struct device *dev, const char *fn)
  1429. {
  1430. struct mxt_data *data = dev_get_drvdata(dev);
  1431. struct i2c_client *client = data->client;
  1432. const struct firmware *fw = NULL;
  1433. unsigned int frame_size;
  1434. unsigned int retry = 0;
  1435. unsigned int pos = 0;
  1436. int ret, i, max_frame_size;
  1437. u8 *frame;
  1438. switch (data->info.family_id) {
  1439. case MXT224_ID:
  1440. case MXT224E_ID:
  1441. case MXT336S_ID:
  1442. max_frame_size = MXT_SINGLE_FW_MAX_FRAME_SIZE;
  1443. break;
  1444. case MXT1386_ID:
  1445. case MXT1664S_ID:
  1446. max_frame_size = MXT_CHIPSET_FW_MAX_FRAME_SIZE;
  1447. break;
  1448. default:
  1449. return -EINVAL;
  1450. }
  1451. frame = kmalloc(max_frame_size, GFP_KERNEL);
  1452. if (!frame) {
  1453. dev_err(dev, "Unable to allocate memory for frame data\n");
  1454. return -ENOMEM;
  1455. }
  1456. ret = request_firmware(&fw, fn, dev);
  1457. if (ret < 0 || !fw) {
  1458. dev_err(dev, "Unable to open firmware %s\n", fn);
  1459. goto free_frame;
  1460. }
  1461. if (data->state != BOOTLOADER) {
  1462. /* Change to the bootloader mode */
  1463. mxt_write_object(data, MXT_GEN_COMMAND_T6,
  1464. MXT_COMMAND_RESET, MXT_BOOT_VALUE);
  1465. mxt_reset_delay(data);
  1466. ret = mxt_switch_to_bootloader_address(data);
  1467. if (ret)
  1468. goto release_firmware;
  1469. }
  1470. ret = mxt_check_bootloader(client, MXT_WAITING_BOOTLOAD_CMD);
  1471. if (ret) {
  1472. /* Bootloader may still be unlocked from previous update
  1473. * attempt */
  1474. ret = mxt_check_bootloader(client,
  1475. MXT_WAITING_FRAME_DATA);
  1476. if (ret)
  1477. goto return_to_app_mode;
  1478. } else {
  1479. dev_info(dev, "Unlocking bootloader\n");
  1480. /* Unlock bootloader */
  1481. mxt_unlock_bootloader(client);
  1482. }
  1483. while (pos < fw->size) {
  1484. ret = mxt_check_bootloader(client,
  1485. MXT_WAITING_FRAME_DATA);
  1486. if (ret)
  1487. goto release_firmware;
  1488. /* Get frame length MSB */
  1489. ret = strtobyte(fw->data + pos, frame);
  1490. if (ret)
  1491. goto release_firmware;
  1492. /* Get frame length LSB */
  1493. ret = strtobyte(fw->data + pos + 2, frame + 1);
  1494. if (ret)
  1495. goto release_firmware;
  1496. frame_size = ((*frame << 8) | *(frame + 1));
  1497. /* We should add 2 at frame size as the the firmware data is not
  1498. * included the CRC bytes.
  1499. */
  1500. frame_size += 2;
  1501. if (frame_size > max_frame_size) {
  1502. dev_err(dev, "Invalid frame size - %d\n", frame_size);
  1503. ret = -EINVAL;
  1504. goto release_firmware;
  1505. }
  1506. /* Convert frame data and CRC from hex to binary */
  1507. for (i = 2; i < frame_size; i++) {
  1508. ret = strtobyte(fw->data + pos + i * 2, frame + i);
  1509. if (ret)
  1510. goto release_firmware;
  1511. }
  1512. /* Write one frame to device */
  1513. mxt_fw_write(client, frame, frame_size);
  1514. ret = mxt_check_bootloader(client,
  1515. MXT_FRAME_CRC_PASS);
  1516. if (ret) {
  1517. retry++;
  1518. /* Back off by 20ms per retry */
  1519. msleep(retry * 20);
  1520. if (retry > 20)
  1521. goto release_firmware;
  1522. } else {
  1523. retry = 0;
  1524. pos += frame_size * 2;
  1525. dev_dbg(dev, "Updated %d/%zd bytes\n", pos, fw->size);
  1526. }
  1527. }
  1528. return_to_app_mode:
  1529. mxt_switch_to_appmode_address(data);
  1530. release_firmware:
  1531. release_firmware(fw);
  1532. free_frame:
  1533. kfree(frame);
  1534. return ret;
  1535. }
  1536. static const char *
  1537. mxt_search_fw_name(struct mxt_data *data, u8 bootldr_id)
  1538. {
  1539. const struct mxt_platform_data *pdata = data->pdata;
  1540. const struct mxt_config_info *cfg_info;
  1541. const char *fw_name = NULL;
  1542. int i;
  1543. for (i = 0; i < pdata->config_array_size; i++) {
  1544. cfg_info = &pdata->config_array[i];
  1545. if (bootldr_id == cfg_info->bootldr_id && cfg_info->fw_name) {
  1546. data->config_info = cfg_info;
  1547. data->info.family_id = cfg_info->family_id;
  1548. fw_name = cfg_info->fw_name;
  1549. }
  1550. }
  1551. return fw_name;
  1552. }
  1553. static ssize_t mxt_force_cfg_update_store(struct device *dev,
  1554. struct device_attribute *attr,
  1555. const char *buf, size_t count)
  1556. {
  1557. struct mxt_data *data = dev_get_drvdata(dev);
  1558. int flag = buf[0]-'0';
  1559. int error;
  1560. data->no_force_update = !flag;
  1561. if (data->state == APPMODE) {
  1562. disable_irq(data->irq);
  1563. error = mxt_update_cfg(data);
  1564. enable_irq(data->irq);
  1565. if (error)
  1566. return error;
  1567. } else {
  1568. dev_err(dev,
  1569. "Not in APPMODE, Unable to force cfg update\n");
  1570. return -EINVAL;
  1571. }
  1572. return count;
  1573. }
  1574. static ssize_t mxt_update_fw_store(struct device *dev,
  1575. struct device_attribute *attr,
  1576. const char *buf, size_t count)
  1577. {
  1578. struct mxt_data *data = dev_get_drvdata(dev);
  1579. int error, address;
  1580. const char *fw_name;
  1581. u8 bootldr_id;
  1582. u8 cfg_version[MXT_CFG_VERSION_LEN] = {0};
  1583. data->no_force_update = false;
  1584. /* If fw_name is set, then the existing firmware has an upgrade */
  1585. if (!data->fw_name) {
  1586. /*
  1587. * If the device boots up in the bootloader mode, check if
  1588. * there is a firmware to upgrade.
  1589. */
  1590. if (data->state == BOOTLOADER) {
  1591. bootldr_id = mxt_get_bootloader_id(data->client);
  1592. if (bootldr_id <= 0) {
  1593. dev_err(dev,
  1594. "Unable to retrieve bootloader id\n");
  1595. return -EINVAL;
  1596. }
  1597. fw_name = mxt_search_fw_name(data, bootldr_id);
  1598. if (fw_name == NULL) {
  1599. dev_err(dev,
  1600. "Unable to find fw from bootloader id\n");
  1601. return -EINVAL;
  1602. }
  1603. } else {
  1604. /* In APPMODE, if the f/w name does not exist, quit */
  1605. dev_err(dev,
  1606. "Firmware name not specified in platform data\n");
  1607. return -EINVAL;
  1608. }
  1609. } else {
  1610. fw_name = data->fw_name;
  1611. }
  1612. dev_info(dev, "Upgrading the firmware file to %s\n", fw_name);
  1613. disable_irq(data->irq);
  1614. error = mxt_load_fw(dev, fw_name);
  1615. if (error) {
  1616. dev_err(dev, "The firmware update failed(%d)\n", error);
  1617. count = error;
  1618. } else {
  1619. dev_info(dev, "The firmware update succeeded\n");
  1620. /* Wait for reset */
  1621. msleep(MXT_FWRESET_TIME);
  1622. data->state = INIT;
  1623. kfree(data->object_table);
  1624. data->object_table = NULL;
  1625. data->cfg_version_idx = 0;
  1626. data->config_info = NULL;
  1627. data->update_cfg = false;
  1628. /* T38 object address might have changed, read it from
  1629. touch controller */
  1630. address = mxt_get_object_address(dev, MXT_SPT_USERDATA_T38);
  1631. if (address < 0) {
  1632. dev_err(dev, "T38 required for touch operation\n");
  1633. return -EINVAL;
  1634. }
  1635. data->t38_start_addr = address;
  1636. error = __mxt_write_reg(data->client, data->t38_start_addr,
  1637. sizeof(cfg_version), cfg_version);
  1638. if (error)
  1639. dev_err(dev,
  1640. "Unable to zero out config version after fw upgrade\n");
  1641. mxt_initialize(data);
  1642. }
  1643. if (data->state == APPMODE) {
  1644. enable_irq(data->irq);
  1645. error = mxt_make_highchg(data);
  1646. if (error)
  1647. return error;
  1648. }
  1649. return count;
  1650. }
  1651. #if defined(CONFIG_SECURE_TOUCH)
  1652. static ssize_t mxt_secure_touch_enable_show(struct device *dev,
  1653. struct device_attribute *attr, char *buf)
  1654. {
  1655. struct mxt_data *data = dev_get_drvdata(dev);
  1656. return scnprintf(buf, PAGE_SIZE, "%d", atomic_read(&data->st_enabled));
  1657. }
  1658. /*
  1659. * Accept only "0" and "1" valid values.
  1660. * "0" will reset the st_enabled flag, then wake up the reading process.
  1661. * The bus driver is notified via pm_runtime that it is not required to stay
  1662. * awake anymore.
  1663. * It will also make sure the queue of events is emptied in the controller,
  1664. * in case a touch happened in between the secure touch being disabled and
  1665. * the local ISR being ungated.
  1666. * "1" will set the st_enabled flag and clear the st_pending_irqs flag.
  1667. * The bus driver is requested via pm_runtime to stay awake.
  1668. */
  1669. static ssize_t mxt_secure_touch_enable_store(struct device *dev,
  1670. struct device_attribute *attr,
  1671. const char *buf, size_t count)
  1672. {
  1673. struct mxt_data *data = dev_get_drvdata(dev);
  1674. struct device *adapter = data->client->adapter->dev.parent;
  1675. unsigned long value;
  1676. int err = 0;
  1677. if (count > 2)
  1678. return -EINVAL;
  1679. err = kstrtoul(buf, 10, &value);
  1680. if (err != 0)
  1681. return err;
  1682. err = count;
  1683. switch (value) {
  1684. case 0:
  1685. if (atomic_read(&data->st_enabled) == 0)
  1686. break;
  1687. pm_runtime_put(adapter);
  1688. atomic_set(&data->st_enabled, 0);
  1689. mxt_secure_touch_notify(data);
  1690. mxt_interrupt(data->client->irq, data);
  1691. complete(&data->st_powerdown);
  1692. break;
  1693. case 1:
  1694. if (atomic_read(&data->st_enabled)) {
  1695. err = -EBUSY;
  1696. break;
  1697. }
  1698. if (pm_runtime_get_sync(adapter) < 0) {
  1699. dev_err(&data->client->dev, "pm_runtime_get failed\n");
  1700. err = -EIO;
  1701. break;
  1702. }
  1703. INIT_COMPLETION(data->st_powerdown);
  1704. atomic_set(&data->st_enabled, 1);
  1705. synchronize_irq(data->client->irq);
  1706. atomic_set(&data->st_pending_irqs, 0);
  1707. break;
  1708. default:
  1709. dev_err(&data->client->dev, "unsupported value: %lu\n", value);
  1710. err = -EINVAL;
  1711. break;
  1712. }
  1713. return err;
  1714. }
  1715. static ssize_t mxt_secure_touch_show(struct device *dev,
  1716. struct device_attribute *attr, char *buf)
  1717. {
  1718. struct mxt_data *data = dev_get_drvdata(dev);
  1719. int val = 0;
  1720. if (atomic_read(&data->st_enabled) == 0)
  1721. return -EBADF;
  1722. if (atomic_cmpxchg(&data->st_pending_irqs, -1, 0) == -1)
  1723. return -EINVAL;
  1724. if (atomic_cmpxchg(&data->st_pending_irqs, 1, 0) == 1)
  1725. val = 1;
  1726. return scnprintf(buf, PAGE_SIZE, "%u", val);
  1727. }
  1728. static DEVICE_ATTR(secure_touch_enable, S_IRUGO | S_IWUSR | S_IWGRP ,
  1729. mxt_secure_touch_enable_show,
  1730. mxt_secure_touch_enable_store);
  1731. static DEVICE_ATTR(secure_touch, S_IRUGO, mxt_secure_touch_show, NULL);
  1732. #endif
  1733. static DEVICE_ATTR(object, S_IRUGO, mxt_object_show, NULL);
  1734. static DEVICE_ATTR(update_fw, S_IWUSR | S_IWGRP , NULL, mxt_update_fw_store);
  1735. static DEVICE_ATTR(force_cfg_update, S_IWUSR | S_IWGRP ,
  1736. NULL,
  1737. mxt_force_cfg_update_store);
  1738. static struct attribute *mxt_attrs[] = {
  1739. &dev_attr_object.attr,
  1740. &dev_attr_update_fw.attr,
  1741. &dev_attr_force_cfg_update.attr,
  1742. #if defined(CONFIG_SECURE_TOUCH)
  1743. &dev_attr_secure_touch_enable.attr,
  1744. &dev_attr_secure_touch.attr,
  1745. #endif
  1746. NULL
  1747. };
  1748. static const struct attribute_group mxt_attr_group = {
  1749. .attrs = mxt_attrs,
  1750. };
  1751. #if defined(CONFIG_SECURE_TOUCH)
  1752. static void mxt_secure_touch_stop(struct mxt_data *data, int blocking)
  1753. {
  1754. if (atomic_read(&data->st_enabled)) {
  1755. atomic_set(&data->st_pending_irqs, -1);
  1756. mxt_secure_touch_notify(data);
  1757. if (blocking)
  1758. wait_for_completion_interruptible(&data->st_powerdown);
  1759. }
  1760. }
  1761. #else
  1762. static void mxt_secure_touch_stop(struct mxt_data *data, int blocking)
  1763. {
  1764. }
  1765. #endif
  1766. static int mxt_start(struct mxt_data *data)
  1767. {
  1768. int error;
  1769. mxt_secure_touch_stop(data, 1);
  1770. /* restore the old power state values and reenable touch */
  1771. error = __mxt_write_reg(data->client, data->t7_start_addr,
  1772. T7_DATA_SIZE, data->t7_data);
  1773. if (error < 0) {
  1774. dev_err(&data->client->dev,
  1775. "failed to restore old power state\n");
  1776. return error;
  1777. }
  1778. return 0;
  1779. }
  1780. static int mxt_stop(struct mxt_data *data)
  1781. {
  1782. int error;
  1783. u8 t7_data[T7_DATA_SIZE] = {0};
  1784. mxt_secure_touch_stop(data, 1);
  1785. error = __mxt_write_reg(data->client, data->t7_start_addr,
  1786. T7_DATA_SIZE, t7_data);
  1787. if (error < 0) {
  1788. dev_err(&data->client->dev,
  1789. "failed to configure deep sleep mode\n");
  1790. return error;
  1791. }
  1792. return 0;
  1793. }
  1794. static int mxt_input_open(struct input_dev *dev)
  1795. {
  1796. struct mxt_data *data = input_get_drvdata(dev);
  1797. int error;
  1798. if (data->state == APPMODE) {
  1799. error = mxt_start(data);
  1800. if (error < 0) {
  1801. dev_err(&data->client->dev, "mxt_start failed in input_open\n");
  1802. return error;
  1803. }
  1804. }
  1805. return 0;
  1806. }
  1807. static void mxt_input_close(struct input_dev *dev)
  1808. {
  1809. struct mxt_data *data = input_get_drvdata(dev);
  1810. int error;
  1811. if (data->state == APPMODE) {
  1812. error = mxt_stop(data);
  1813. if (error < 0)
  1814. dev_err(&data->client->dev, "mxt_stop failed in input_close\n");
  1815. }
  1816. }
  1817. static int reg_set_optimum_mode_check(struct regulator *reg, int load_uA)
  1818. {
  1819. return (regulator_count_voltages(reg) > 0) ?
  1820. regulator_set_optimum_mode(reg, load_uA) : 0;
  1821. }
  1822. static int mxt_power_on(struct mxt_data *data, bool on)
  1823. {
  1824. int rc;
  1825. if (on == false)
  1826. goto power_off;
  1827. rc = reg_set_optimum_mode_check(data->vcc_ana, MXT_ACTIVE_LOAD_UA);
  1828. if (rc < 0) {
  1829. dev_err(&data->client->dev,
  1830. "Regulator vcc_ana set_opt failed rc=%d\n", rc);
  1831. return rc;
  1832. }
  1833. rc = regulator_enable(data->vcc_ana);
  1834. if (rc) {
  1835. dev_err(&data->client->dev,
  1836. "Regulator vcc_ana enable failed rc=%d\n", rc);
  1837. goto error_reg_en_vcc_ana;
  1838. }
  1839. if (data->pdata->digital_pwr_regulator) {
  1840. rc = reg_set_optimum_mode_check(data->vcc_dig,
  1841. MXT_ACTIVE_LOAD_DIG_UA);
  1842. if (rc < 0) {
  1843. dev_err(&data->client->dev,
  1844. "Regulator vcc_dig set_opt failed rc=%d\n",
  1845. rc);
  1846. goto error_reg_opt_vcc_dig;
  1847. }
  1848. rc = regulator_enable(data->vcc_dig);
  1849. if (rc) {
  1850. dev_err(&data->client->dev,
  1851. "Regulator vcc_dig enable failed rc=%d\n", rc);
  1852. goto error_reg_en_vcc_dig;
  1853. }
  1854. }
  1855. if (data->pdata->i2c_pull_up) {
  1856. rc = reg_set_optimum_mode_check(data->vcc_i2c, MXT_I2C_LOAD_UA);
  1857. if (rc < 0) {
  1858. dev_err(&data->client->dev,
  1859. "Regulator vcc_i2c set_opt failed rc=%d\n", rc);
  1860. goto error_reg_opt_i2c;
  1861. }
  1862. rc = regulator_enable(data->vcc_i2c);
  1863. if (rc) {
  1864. dev_err(&data->client->dev,
  1865. "Regulator vcc_i2c enable failed rc=%d\n", rc);
  1866. goto error_reg_en_vcc_i2c;
  1867. }
  1868. }
  1869. msleep(130);
  1870. return 0;
  1871. error_reg_en_vcc_i2c:
  1872. if (data->pdata->i2c_pull_up)
  1873. reg_set_optimum_mode_check(data->vcc_i2c, 0);
  1874. error_reg_opt_i2c:
  1875. if (data->pdata->digital_pwr_regulator)
  1876. regulator_disable(data->vcc_dig);
  1877. error_reg_en_vcc_dig:
  1878. if (data->pdata->digital_pwr_regulator)
  1879. reg_set_optimum_mode_check(data->vcc_dig, 0);
  1880. error_reg_opt_vcc_dig:
  1881. regulator_disable(data->vcc_ana);
  1882. error_reg_en_vcc_ana:
  1883. reg_set_optimum_mode_check(data->vcc_ana, 0);
  1884. return rc;
  1885. power_off:
  1886. reg_set_optimum_mode_check(data->vcc_ana, 0);
  1887. regulator_disable(data->vcc_ana);
  1888. if (data->pdata->digital_pwr_regulator) {
  1889. reg_set_optimum_mode_check(data->vcc_dig, 0);
  1890. regulator_disable(data->vcc_dig);
  1891. }
  1892. if (data->pdata->i2c_pull_up) {
  1893. reg_set_optimum_mode_check(data->vcc_i2c, 0);
  1894. regulator_disable(data->vcc_i2c);
  1895. }
  1896. msleep(50);
  1897. return 0;
  1898. }
  1899. static int mxt_regulator_configure(struct mxt_data *data, bool on)
  1900. {
  1901. int rc;
  1902. if (on == false)
  1903. goto hw_shutdown;
  1904. data->vcc_ana = regulator_get(&data->client->dev, "vdd_ana");
  1905. if (IS_ERR(data->vcc_ana)) {
  1906. rc = PTR_ERR(data->vcc_ana);
  1907. dev_err(&data->client->dev,
  1908. "Regulator get failed vcc_ana rc=%d\n", rc);
  1909. return rc;
  1910. }
  1911. if (regulator_count_voltages(data->vcc_ana) > 0) {
  1912. rc = regulator_set_voltage(data->vcc_ana, MXT_VTG_MIN_UV,
  1913. MXT_VTG_MAX_UV);
  1914. if (rc) {
  1915. dev_err(&data->client->dev,
  1916. "regulator set_vtg failed rc=%d\n", rc);
  1917. goto error_set_vtg_vcc_ana;
  1918. }
  1919. }
  1920. if (data->pdata->digital_pwr_regulator) {
  1921. data->vcc_dig = regulator_get(&data->client->dev, "vdd_dig");
  1922. if (IS_ERR(data->vcc_dig)) {
  1923. rc = PTR_ERR(data->vcc_dig);
  1924. dev_err(&data->client->dev,
  1925. "Regulator get dig failed rc=%d\n", rc);
  1926. goto error_get_vtg_vcc_dig;
  1927. }
  1928. if (regulator_count_voltages(data->vcc_dig) > 0) {
  1929. rc = regulator_set_voltage(data->vcc_dig,
  1930. MXT_VTG_DIG_MIN_UV, MXT_VTG_DIG_MAX_UV);
  1931. if (rc) {
  1932. dev_err(&data->client->dev,
  1933. "regulator set_vtg failed rc=%d\n", rc);
  1934. goto error_set_vtg_vcc_dig;
  1935. }
  1936. }
  1937. }
  1938. if (data->pdata->i2c_pull_up) {
  1939. data->vcc_i2c = regulator_get(&data->client->dev, "vcc_i2c");
  1940. if (IS_ERR(data->vcc_i2c)) {
  1941. rc = PTR_ERR(data->vcc_i2c);
  1942. dev_err(&data->client->dev,
  1943. "Regulator get failed rc=%d\n", rc);
  1944. goto error_get_vtg_i2c;
  1945. }
  1946. if (regulator_count_voltages(data->vcc_i2c) > 0) {
  1947. rc = regulator_set_voltage(data->vcc_i2c,
  1948. MXT_I2C_VTG_MIN_UV, MXT_I2C_VTG_MAX_UV);
  1949. if (rc) {
  1950. dev_err(&data->client->dev,
  1951. "regulator set_vtg failed rc=%d\n", rc);
  1952. goto error_set_vtg_i2c;
  1953. }
  1954. }
  1955. }
  1956. return 0;
  1957. error_set_vtg_i2c:
  1958. regulator_put(data->vcc_i2c);
  1959. error_get_vtg_i2c:
  1960. if (data->pdata->digital_pwr_regulator)
  1961. if (regulator_count_voltages(data->vcc_dig) > 0)
  1962. regulator_set_voltage(data->vcc_dig, 0,
  1963. MXT_VTG_DIG_MAX_UV);
  1964. error_set_vtg_vcc_dig:
  1965. if (data->pdata->digital_pwr_regulator)
  1966. regulator_put(data->vcc_dig);
  1967. error_get_vtg_vcc_dig:
  1968. if (regulator_count_voltages(data->vcc_ana) > 0)
  1969. regulator_set_voltage(data->vcc_ana, 0, MXT_VTG_MAX_UV);
  1970. error_set_vtg_vcc_ana:
  1971. regulator_put(data->vcc_ana);
  1972. return rc;
  1973. hw_shutdown:
  1974. if (regulator_count_voltages(data->vcc_ana) > 0)
  1975. regulator_set_voltage(data->vcc_ana, 0, MXT_VTG_MAX_UV);
  1976. regulator_put(data->vcc_ana);
  1977. if (data->pdata->digital_pwr_regulator) {
  1978. if (regulator_count_voltages(data->vcc_dig) > 0)
  1979. regulator_set_voltage(data->vcc_dig, 0,
  1980. MXT_VTG_DIG_MAX_UV);
  1981. regulator_put(data->vcc_dig);
  1982. }
  1983. if (data->pdata->i2c_pull_up) {
  1984. if (regulator_count_voltages(data->vcc_i2c) > 0)
  1985. regulator_set_voltage(data->vcc_i2c, 0,
  1986. MXT_I2C_VTG_MAX_UV);
  1987. regulator_put(data->vcc_i2c);
  1988. }
  1989. return 0;
  1990. }
  1991. #ifdef CONFIG_PM
  1992. static int mxt_regulator_lpm(struct mxt_data *data, bool on)
  1993. {
  1994. int rc;
  1995. if (on == false)
  1996. goto regulator_hpm;
  1997. rc = reg_set_optimum_mode_check(data->vcc_ana, MXT_LPM_LOAD_UA);
  1998. if (rc < 0) {
  1999. dev_err(&data->client->dev,
  2000. "Regulator vcc_ana set_opt failed rc=%d\n", rc);
  2001. goto fail_regulator_lpm;
  2002. }
  2003. if (data->pdata->digital_pwr_regulator) {
  2004. rc = reg_set_optimum_mode_check(data->vcc_dig,
  2005. MXT_LPM_LOAD_DIG_UA);
  2006. if (rc < 0) {
  2007. dev_err(&data->client->dev,
  2008. "Regulator vcc_dig set_opt failed rc=%d\n", rc);
  2009. goto fail_regulator_lpm;
  2010. }
  2011. }
  2012. if (data->pdata->i2c_pull_up) {
  2013. rc = reg_set_optimum_mode_check(data->vcc_i2c,
  2014. MXT_I2C_LPM_LOAD_UA);
  2015. if (rc < 0) {
  2016. dev_err(&data->client->dev,
  2017. "Regulator vcc_i2c set_opt failed rc=%d\n", rc);
  2018. goto fail_regulator_lpm;
  2019. }
  2020. }
  2021. return 0;
  2022. regulator_hpm:
  2023. rc = reg_set_optimum_mode_check(data->vcc_ana, MXT_ACTIVE_LOAD_UA);
  2024. if (rc < 0) {
  2025. dev_err(&data->client->dev,
  2026. "Regulator vcc_ana set_opt failed rc=%d\n", rc);
  2027. goto fail_regulator_hpm;
  2028. }
  2029. if (data->pdata->digital_pwr_regulator) {
  2030. rc = reg_set_optimum_mode_check(data->vcc_dig,
  2031. MXT_ACTIVE_LOAD_DIG_UA);
  2032. if (rc < 0) {
  2033. dev_err(&data->client->dev,
  2034. "Regulator vcc_dig set_opt failed rc=%d\n", rc);
  2035. goto fail_regulator_hpm;
  2036. }
  2037. }
  2038. if (data->pdata->i2c_pull_up) {
  2039. rc = reg_set_optimum_mode_check(data->vcc_i2c, MXT_I2C_LOAD_UA);
  2040. if (rc < 0) {
  2041. dev_err(&data->client->dev,
  2042. "Regulator vcc_i2c set_opt failed rc=%d\n", rc);
  2043. goto fail_regulator_hpm;
  2044. }
  2045. }
  2046. return 0;
  2047. fail_regulator_lpm:
  2048. reg_set_optimum_mode_check(data->vcc_ana, MXT_ACTIVE_LOAD_UA);
  2049. if (data->pdata->digital_pwr_regulator)
  2050. reg_set_optimum_mode_check(data->vcc_dig,
  2051. MXT_ACTIVE_LOAD_DIG_UA);
  2052. if (data->pdata->i2c_pull_up)
  2053. reg_set_optimum_mode_check(data->vcc_i2c, MXT_I2C_LOAD_UA);
  2054. return rc;
  2055. fail_regulator_hpm:
  2056. reg_set_optimum_mode_check(data->vcc_ana, MXT_LPM_LOAD_UA);
  2057. if (data->pdata->digital_pwr_regulator)
  2058. reg_set_optimum_mode_check(data->vcc_dig, MXT_LPM_LOAD_DIG_UA);
  2059. if (data->pdata->i2c_pull_up)
  2060. reg_set_optimum_mode_check(data->vcc_i2c, MXT_I2C_LPM_LOAD_UA);
  2061. return rc;
  2062. }
  2063. static int mxt_suspend(struct device *dev)
  2064. {
  2065. struct i2c_client *client = to_i2c_client(dev);
  2066. struct mxt_data *data = i2c_get_clientdata(client);
  2067. struct input_dev *input_dev = data->input_dev;
  2068. int error;
  2069. if (data->dev_sleep) {
  2070. dev_dbg(dev, "Device already in sleep\n");
  2071. return 0;
  2072. }
  2073. disable_irq(data->irq);
  2074. mutex_lock(&input_dev->mutex);
  2075. if (input_dev->users) {
  2076. error = mxt_stop(data);
  2077. if (error < 0) {
  2078. dev_err(dev, "mxt_stop failed in suspend\n");
  2079. mutex_unlock(&input_dev->mutex);
  2080. return error;
  2081. }
  2082. }
  2083. mutex_unlock(&input_dev->mutex);
  2084. mxt_release_all(data);
  2085. /* put regulators in low power mode */
  2086. if (data->lpm_support) {
  2087. error = mxt_regulator_lpm(data, true);
  2088. if (error < 0) {
  2089. dev_err(dev, "failed to enter low power mode\n");
  2090. return error;
  2091. }
  2092. } else {
  2093. error = mxt_power_on(data, false);
  2094. if (error < 0) {
  2095. dev_err(dev, "failed to disable regulators\n");
  2096. return error;
  2097. }
  2098. }
  2099. data->dev_sleep = true;
  2100. return 0;
  2101. }
  2102. static int mxt_resume(struct device *dev)
  2103. {
  2104. struct i2c_client *client = to_i2c_client(dev);
  2105. struct mxt_data *data = i2c_get_clientdata(client);
  2106. struct input_dev *input_dev = data->input_dev;
  2107. int error;
  2108. if (!data->dev_sleep) {
  2109. dev_dbg(dev, "Device already in resume\n");
  2110. return 0;
  2111. }
  2112. /* put regulators back in active power mode */
  2113. if (data->lpm_support) {
  2114. error = mxt_regulator_lpm(data, false);
  2115. if (error < 0) {
  2116. dev_err(dev, "failed to enter high power mode\n");
  2117. return error;
  2118. }
  2119. } else {
  2120. error = mxt_power_on(data, true);
  2121. if (error < 0) {
  2122. dev_err(dev, "failed to enable regulators\n");
  2123. return error;
  2124. }
  2125. mxt_power_on_delay(data);
  2126. }
  2127. mxt_write_object(data, MXT_GEN_COMMAND_T6, MXT_COMMAND_RESET, 1);
  2128. mxt_reset_delay(data);
  2129. mutex_lock(&input_dev->mutex);
  2130. if (input_dev->users) {
  2131. error = mxt_start(data);
  2132. if (error < 0) {
  2133. dev_err(dev, "mxt_start failed in resume\n");
  2134. mutex_unlock(&input_dev->mutex);
  2135. return error;
  2136. }
  2137. }
  2138. /* calibrate */
  2139. if (data->pdata->need_calibration) {
  2140. mxt_secure_touch_stop(data, 1);
  2141. error = mxt_write_object(data, MXT_GEN_COMMAND_T6,
  2142. MXT_COMMAND_CALIBRATE, 1);
  2143. if (error < 0)
  2144. dev_dbg(dev, "sending calibration command failed\n");
  2145. }
  2146. mutex_unlock(&input_dev->mutex);
  2147. enable_irq(data->irq);
  2148. data->dev_sleep = false;
  2149. return 0;
  2150. }
  2151. static const struct dev_pm_ops mxt_pm_ops = {
  2152. #if (!defined(CONFIG_FB) && !defined(CONFIG_HAS_EARLYSUSPEND))
  2153. .suspend = mxt_suspend,
  2154. .resume = mxt_resume,
  2155. #endif
  2156. };
  2157. #else
  2158. static int mxt_suspend(struct device *dev)
  2159. {
  2160. return 0;
  2161. };
  2162. static int mxt_resume(struct device *dev)
  2163. {
  2164. return 0;
  2165. };
  2166. #endif
  2167. static int mxt_debugfs_object_show(struct seq_file *m, void *v)
  2168. {
  2169. struct mxt_data *data = m->private;
  2170. struct mxt_object *object;
  2171. struct device *dev = &data->client->dev;
  2172. int i, j, k;
  2173. int error;
  2174. int obj_size;
  2175. u8 val;
  2176. for (i = 0; i < data->info.object_num; i++) {
  2177. object = data->object_table + i;
  2178. obj_size = object->size + 1;
  2179. seq_printf(m, "Object[%d] (Type %d)\n", i + 1, object->type);
  2180. for (j = 0; j < object->instances + 1; j++) {
  2181. seq_printf(m, "[Instance %d]\n", j);
  2182. for (k = 0; k < obj_size; k++) {
  2183. error = mxt_read_object(data, object->type,
  2184. j * obj_size + k, &val);
  2185. if (error) {
  2186. dev_err(dev,
  2187. "Failed to read object %d "
  2188. "instance %d at offset %d\n",
  2189. object->type, j, k);
  2190. return error;
  2191. }
  2192. seq_printf(m, "Byte %d: 0x%02x (%d)\n",
  2193. k, val, val);
  2194. }
  2195. }
  2196. }
  2197. return 0;
  2198. }
  2199. static int mxt_debugfs_object_open(struct inode *inode, struct file *file)
  2200. {
  2201. return single_open(file, mxt_debugfs_object_show, inode->i_private);
  2202. }
  2203. static const struct file_operations mxt_object_fops = {
  2204. .owner = THIS_MODULE,
  2205. .open = mxt_debugfs_object_open,
  2206. .read = seq_read,
  2207. .release = single_release,
  2208. };
  2209. static void __devinit mxt_debugfs_init(struct mxt_data *data)
  2210. {
  2211. debug_base = debugfs_create_dir(MXT_DEBUGFS_DIR, NULL);
  2212. if (IS_ERR_OR_NULL(debug_base))
  2213. pr_err("atmel_mxt_ts: Failed to create debugfs dir\n");
  2214. if (IS_ERR_OR_NULL(debugfs_create_file(MXT_DEBUGFS_FILE,
  2215. 0444,
  2216. debug_base,
  2217. data,
  2218. &mxt_object_fops))) {
  2219. pr_err("atmel_mxt_ts: Failed to create object file\n");
  2220. debugfs_remove_recursive(debug_base);
  2221. }
  2222. }
  2223. #ifdef CONFIG_OF
  2224. static int mxt_get_dt_coords(struct device *dev, char *name,
  2225. struct mxt_platform_data *pdata)
  2226. {
  2227. u32 coords[MXT_COORDS_ARR_SIZE];
  2228. struct property *prop;
  2229. struct device_node *np = dev->of_node;
  2230. int coords_size, rc;
  2231. prop = of_find_property(np, name, NULL);
  2232. if (!prop)
  2233. return -EINVAL;
  2234. if (!prop->value)
  2235. return -ENODATA;
  2236. coords_size = prop->length / sizeof(u32);
  2237. if (coords_size != MXT_COORDS_ARR_SIZE) {
  2238. dev_err(dev, "invalid %s\n", name);
  2239. return -EINVAL;
  2240. }
  2241. rc = of_property_read_u32_array(np, name, coords, coords_size);
  2242. if (rc && (rc != -EINVAL)) {
  2243. dev_err(dev, "Unable to read %s\n", name);
  2244. return rc;
  2245. }
  2246. if (strncmp(name, "atmel,panel-coords",
  2247. sizeof("atmel,panel-coords")) == 0) {
  2248. pdata->panel_minx = coords[0];
  2249. pdata->panel_miny = coords[1];
  2250. pdata->panel_maxx = coords[2];
  2251. pdata->panel_maxy = coords[3];
  2252. } else if (strncmp(name, "atmel,display-coords",
  2253. sizeof("atmel,display-coords")) == 0) {
  2254. pdata->disp_minx = coords[0];
  2255. pdata->disp_miny = coords[1];
  2256. pdata->disp_maxx = coords[2];
  2257. pdata->disp_maxy = coords[3];
  2258. } else {
  2259. dev_err(dev, "unsupported property %s\n", name);
  2260. return -EINVAL;
  2261. }
  2262. return 0;
  2263. }
  2264. static int mxt_parse_config(struct device *dev, struct device_node *np,
  2265. struct mxt_config_info *info)
  2266. {
  2267. struct property *prop;
  2268. u8 *temp_cfg;
  2269. prop = of_find_property(np, "atmel,config", &info->config_length);
  2270. if (!prop) {
  2271. dev_err(dev, "Looking up %s property in node %s failed",
  2272. "atmel,config", np->full_name);
  2273. return -ENODEV;
  2274. } else if (!info->config_length) {
  2275. dev_err(dev, "Invalid length of configuration data\n");
  2276. return -EINVAL;
  2277. }
  2278. temp_cfg = devm_kzalloc(dev,
  2279. info->config_length * sizeof(u8), GFP_KERNEL);
  2280. if (!temp_cfg) {
  2281. dev_err(dev, "Unable to allocate memory to store cfg\n");
  2282. return -ENOMEM;
  2283. }
  2284. memcpy(temp_cfg, prop->value, info->config_length);
  2285. info->config = temp_cfg;
  2286. return 0;
  2287. }
  2288. static int mxt_parse_dt(struct device *dev, struct mxt_platform_data *pdata)
  2289. {
  2290. int rc;
  2291. struct mxt_config_info *info;
  2292. struct device_node *temp, *np = dev->of_node;
  2293. struct property *prop;
  2294. u32 temp_val;
  2295. rc = mxt_get_dt_coords(dev, "atmel,panel-coords", pdata);
  2296. if (rc)
  2297. return rc;
  2298. rc = mxt_get_dt_coords(dev, "atmel,display-coords", pdata);
  2299. if (rc)
  2300. return rc;
  2301. /* regulator info */
  2302. pdata->i2c_pull_up = of_property_read_bool(np, "atmel,i2c-pull-up");
  2303. pdata->digital_pwr_regulator = of_property_read_bool(np,
  2304. "atmel,dig-reg-support");
  2305. pdata->no_force_update = of_property_read_bool(np,
  2306. "atmel,no-force-update");
  2307. pdata->no_lpm_support = of_property_read_bool(np,
  2308. "atmel,no-lpm-support");
  2309. /* reset, irq gpio info */
  2310. pdata->reset_gpio = of_get_named_gpio_flags(np, "atmel,reset-gpio",
  2311. 0, &pdata->reset_gpio_flags);
  2312. pdata->irq_gpio = of_get_named_gpio_flags(np, "atmel,irq-gpio",
  2313. 0, &pdata->irq_gpio_flags);
  2314. /* keycodes for keyarray object*/
  2315. prop = of_find_property(np, "atmel,key-codes", NULL);
  2316. if (prop) {
  2317. pdata->key_codes = devm_kzalloc(dev,
  2318. sizeof(int) * MXT_KEYARRAY_MAX_KEYS,
  2319. GFP_KERNEL);
  2320. if (!pdata->key_codes)
  2321. return -ENOMEM;
  2322. if ((prop->length/sizeof(u32)) == MXT_KEYARRAY_MAX_KEYS) {
  2323. rc = of_property_read_u32_array(np, "atmel,key-codes",
  2324. pdata->key_codes, MXT_KEYARRAY_MAX_KEYS);
  2325. if (rc) {
  2326. dev_err(dev, "Unable to read key codes\n");
  2327. return rc;
  2328. }
  2329. } else
  2330. return -EINVAL;
  2331. }
  2332. /* need calibration during wakeup? */
  2333. pdata->need_calibration = of_property_read_bool(np,
  2334. "atmel,need-calibration");
  2335. /* config array size */
  2336. pdata->config_array_size = 0;
  2337. temp = NULL;
  2338. while ((temp = of_get_next_child(np, temp)))
  2339. pdata->config_array_size++;
  2340. if (!pdata->config_array_size)
  2341. return 0;
  2342. info = devm_kzalloc(dev, pdata->config_array_size *
  2343. sizeof(struct mxt_config_info), GFP_KERNEL);
  2344. if (!info) {
  2345. dev_err(dev, "Unable to allocate memory\n");
  2346. return -ENOMEM;
  2347. }
  2348. rc = of_property_read_u32(np, "atmel,bl-addr", &temp_val);
  2349. if (rc && (rc != -EINVAL))
  2350. dev_err(dev, "Unable to read bootloader address\n");
  2351. else if (rc != -EINVAL)
  2352. pdata->bl_addr = (u8) temp_val;
  2353. pdata->config_array = info;
  2354. for_each_child_of_node(np, temp) {
  2355. rc = of_property_read_string(temp, "atmel,fw-name",
  2356. &info->fw_name);
  2357. if (rc && (rc != -EINVAL)) {
  2358. dev_err(dev, "Unable to read fw name\n");
  2359. return rc;
  2360. }
  2361. rc = of_property_read_u32(temp, "atmel,family-id", &temp_val);
  2362. if (rc) {
  2363. dev_err(dev, "Unable to read family id\n");
  2364. return rc;
  2365. } else
  2366. info->family_id = (u8) temp_val;
  2367. rc = of_property_read_u32(temp, "atmel,variant-id", &temp_val);
  2368. if (rc) {
  2369. dev_err(dev, "Unable to read variant id\n");
  2370. return rc;
  2371. } else
  2372. info->variant_id = (u8) temp_val;
  2373. rc = of_property_read_u32(temp, "atmel,version", &temp_val);
  2374. if (rc) {
  2375. dev_err(dev, "Unable to read controller version\n");
  2376. return rc;
  2377. } else
  2378. info->version = (u8) temp_val;
  2379. rc = of_property_read_u32(temp, "atmel,build", &temp_val);
  2380. if (rc) {
  2381. dev_err(dev, "Unable to read build id\n");
  2382. return rc;
  2383. } else
  2384. info->build = (u8) temp_val;
  2385. rc = of_property_read_u32(temp,
  2386. "atmel,bootldr-id", &temp_val);
  2387. if (rc && (rc != -EINVAL))
  2388. dev_err(dev, "Unable to read bootldr-id\n");
  2389. else if (rc != -EINVAL)
  2390. info->bootldr_id = (u8) temp_val;
  2391. rc = mxt_parse_config(dev, temp, info);
  2392. if (rc) {
  2393. dev_err(dev, "Unable to parse config data\n");
  2394. return rc;
  2395. }
  2396. info++;
  2397. }
  2398. return 0;
  2399. }
  2400. #else
  2401. static int mxt_parse_dt(struct device *dev, struct mxt_platform_data *pdata)
  2402. {
  2403. return -ENODEV;
  2404. }
  2405. #endif
  2406. #if defined(CONFIG_FB)
  2407. static int fb_notifier_callback(struct notifier_block *self,
  2408. unsigned long event, void *data)
  2409. {
  2410. struct fb_event *evdata = data;
  2411. int *blank;
  2412. struct mxt_data *mxt_dev_data =
  2413. container_of(self, struct mxt_data, fb_notif);
  2414. if (evdata && evdata->data && mxt_dev_data && mxt_dev_data->client) {
  2415. if (event == FB_EVENT_BLANK) {
  2416. blank = evdata->data;
  2417. if (*blank == FB_BLANK_UNBLANK)
  2418. mxt_resume(&mxt_dev_data->client->dev);
  2419. else if (*blank == FB_BLANK_POWERDOWN)
  2420. mxt_suspend(&mxt_dev_data->client->dev);
  2421. }
  2422. }
  2423. return 0;
  2424. }
  2425. #elif defined(CONFIG_HAS_EARLYSUSPEND)
  2426. static void mxt_early_suspend(struct early_suspend *h)
  2427. {
  2428. struct mxt_data *data = container_of(h, struct mxt_data,
  2429. early_suspend);
  2430. mxt_suspend(&data->client->dev);
  2431. }
  2432. static void mxt_late_resume(struct early_suspend *h)
  2433. {
  2434. struct mxt_data *data = container_of(h, struct mxt_data,
  2435. early_suspend);
  2436. mxt_resume(&data->client->dev);
  2437. }
  2438. #endif
  2439. #if defined(CONFIG_SECURE_TOUCH)
  2440. static void __devinit mxt_secure_touch_init(struct mxt_data *data)
  2441. {
  2442. init_completion(&data->st_powerdown);
  2443. }
  2444. #else
  2445. static void __devinit mxt_secure_touch_init(struct mxt_data *data)
  2446. {
  2447. }
  2448. #endif
  2449. static int __devinit mxt_probe(struct i2c_client *client,
  2450. const struct i2c_device_id *id)
  2451. {
  2452. struct mxt_platform_data *pdata;
  2453. struct mxt_data *data;
  2454. struct input_dev *input_dev;
  2455. int error, i;
  2456. if (client->dev.of_node) {
  2457. pdata = devm_kzalloc(&client->dev,
  2458. sizeof(struct mxt_platform_data), GFP_KERNEL);
  2459. if (!pdata) {
  2460. dev_err(&client->dev, "Failed to allocate memory\n");
  2461. return -ENOMEM;
  2462. }
  2463. error = mxt_parse_dt(&client->dev, pdata);
  2464. if (error)
  2465. return error;
  2466. } else
  2467. pdata = client->dev.platform_data;
  2468. if (!pdata)
  2469. return -EINVAL;
  2470. data = kzalloc(sizeof(struct mxt_data), GFP_KERNEL);
  2471. input_dev = input_allocate_device();
  2472. if (!data || !input_dev) {
  2473. dev_err(&client->dev, "Failed to allocate memory\n");
  2474. error = -ENOMEM;
  2475. goto err_free_mem;
  2476. }
  2477. data->state = INIT;
  2478. input_dev->name = "atmel_mxt_ts";
  2479. input_dev->id.bustype = BUS_I2C;
  2480. input_dev->dev.parent = &client->dev;
  2481. input_dev->open = mxt_input_open;
  2482. input_dev->close = mxt_input_close;
  2483. data->client = client;
  2484. data->input_dev = input_dev;
  2485. data->pdata = pdata;
  2486. data->no_force_update = pdata->no_force_update;
  2487. data->lpm_support = !pdata->no_lpm_support;
  2488. data->dev_sleep = false;
  2489. __set_bit(EV_ABS, input_dev->evbit);
  2490. __set_bit(EV_KEY, input_dev->evbit);
  2491. __set_bit(BTN_TOUCH, input_dev->keybit);
  2492. __set_bit(INPUT_PROP_DIRECT, input_dev->propbit);
  2493. /* For single touch */
  2494. input_set_abs_params(input_dev, ABS_X,
  2495. pdata->disp_minx, pdata->disp_maxx, 0, 0);
  2496. input_set_abs_params(input_dev, ABS_Y,
  2497. pdata->disp_miny, pdata->disp_maxy, 0, 0);
  2498. input_set_abs_params(input_dev, ABS_PRESSURE,
  2499. 0, 255, 0, 0);
  2500. /* For multi touch */
  2501. input_mt_init_slots(input_dev, MXT_MAX_FINGER);
  2502. input_set_abs_params(input_dev, ABS_MT_TOUCH_MAJOR,
  2503. 0, MXT_MAX_AREA, 0, 0);
  2504. input_set_abs_params(input_dev, ABS_MT_POSITION_X,
  2505. pdata->disp_minx, pdata->disp_maxx, 0, 0);
  2506. input_set_abs_params(input_dev, ABS_MT_POSITION_Y,
  2507. pdata->disp_miny, pdata->disp_maxy, 0, 0);
  2508. input_set_abs_params(input_dev, ABS_MT_PRESSURE,
  2509. 0, 255, 0, 0);
  2510. /* set key array supported keys */
  2511. if (pdata->key_codes) {
  2512. for (i = 0; i < MXT_KEYARRAY_MAX_KEYS; i++) {
  2513. if (pdata->key_codes[i])
  2514. input_set_capability(input_dev, EV_KEY,
  2515. pdata->key_codes[i]);
  2516. }
  2517. }
  2518. input_set_drvdata(input_dev, data);
  2519. i2c_set_clientdata(client, data);
  2520. if (pdata->init_hw)
  2521. error = pdata->init_hw(true);
  2522. else
  2523. error = mxt_regulator_configure(data, true);
  2524. if (error) {
  2525. dev_err(&client->dev, "Failed to intialize hardware\n");
  2526. goto err_free_mem;
  2527. }
  2528. if (gpio_is_valid(pdata->reset_gpio)) {
  2529. /* configure touchscreen reset out gpio */
  2530. error = gpio_request(pdata->reset_gpio, "mxt_reset_gpio");
  2531. if (error) {
  2532. dev_err(&client->dev, "unable to request gpio [%d]\n",
  2533. pdata->reset_gpio);
  2534. goto err_regulator_on;
  2535. }
  2536. error = gpio_direction_output(pdata->reset_gpio, 0);
  2537. if (error) {
  2538. dev_err(&client->dev,
  2539. "unable to set direction for gpio [%d]\n",
  2540. pdata->reset_gpio);
  2541. goto err_reset_gpio_req;
  2542. }
  2543. mxt_reset_delay(data);
  2544. }
  2545. if (pdata->power_on)
  2546. error = pdata->power_on(true);
  2547. else
  2548. error = mxt_power_on(data, true);
  2549. if (error) {
  2550. dev_err(&client->dev, "Failed to power on hardware\n");
  2551. goto err_reset_gpio_req;
  2552. }
  2553. if (gpio_is_valid(pdata->irq_gpio)) {
  2554. /* configure touchscreen irq gpio */
  2555. error = gpio_request(pdata->irq_gpio, "mxt_irq_gpio");
  2556. if (error) {
  2557. dev_err(&client->dev, "unable to request gpio [%d]\n",
  2558. pdata->irq_gpio);
  2559. goto err_power_on;
  2560. }
  2561. error = gpio_direction_input(pdata->irq_gpio);
  2562. if (error) {
  2563. dev_err(&client->dev,
  2564. "unable to set direction for gpio [%d]\n",
  2565. pdata->irq_gpio);
  2566. goto err_irq_gpio_req;
  2567. }
  2568. data->irq = client->irq = gpio_to_irq(pdata->irq_gpio);
  2569. } else {
  2570. dev_err(&client->dev, "irq gpio not provided\n");
  2571. goto err_power_on;
  2572. }
  2573. if (gpio_is_valid(pdata->reset_gpio)) {
  2574. error = gpio_direction_output(pdata->reset_gpio, 1);
  2575. if (error) {
  2576. dev_err(&client->dev,
  2577. "unable to set direction for gpio [%d]\n",
  2578. pdata->reset_gpio);
  2579. goto err_irq_gpio_req;
  2580. }
  2581. }
  2582. mxt_power_on_delay(data);
  2583. data->addr_pair.application = data->client->addr;
  2584. if (pdata->bl_addr)
  2585. data->addr_pair.bootloader = pdata->bl_addr;
  2586. else
  2587. mxt_lookup_bootloader_address(data);
  2588. error = mxt_initialize(data);
  2589. if (error)
  2590. goto err_irq_gpio_req;
  2591. error = request_threaded_irq(client->irq, NULL, mxt_interrupt,
  2592. pdata->irqflags, client->dev.driver->name, data);
  2593. if (error) {
  2594. dev_err(&client->dev, "Failed to register interrupt\n");
  2595. goto err_free_object;
  2596. }
  2597. if (data->state == APPMODE) {
  2598. error = mxt_make_highchg(data);
  2599. if (error) {
  2600. dev_err(&client->dev, "Failed to make high CHG\n");
  2601. goto err_free_irq;
  2602. }
  2603. }
  2604. error = input_register_device(input_dev);
  2605. if (error)
  2606. goto err_free_irq;
  2607. error = sysfs_create_group(&client->dev.kobj, &mxt_attr_group);
  2608. if (error)
  2609. goto err_unregister_device;
  2610. #if defined(CONFIG_FB)
  2611. data->fb_notif.notifier_call = fb_notifier_callback;
  2612. error = fb_register_client(&data->fb_notif);
  2613. if (error)
  2614. dev_err(&client->dev, "Unable to register fb_notifier: %d\n",
  2615. error);
  2616. #elif defined(CONFIG_HAS_EARLYSUSPEND)
  2617. data->early_suspend.level = EARLY_SUSPEND_LEVEL_BLANK_SCREEN +
  2618. MXT_SUSPEND_LEVEL;
  2619. data->early_suspend.suspend = mxt_early_suspend;
  2620. data->early_suspend.resume = mxt_late_resume;
  2621. register_early_suspend(&data->early_suspend);
  2622. #endif
  2623. mxt_debugfs_init(data);
  2624. mxt_secure_touch_init(data);
  2625. return 0;
  2626. err_unregister_device:
  2627. input_unregister_device(input_dev);
  2628. input_dev = NULL;
  2629. err_free_irq:
  2630. free_irq(client->irq, data);
  2631. err_free_object:
  2632. kfree(data->object_table);
  2633. err_irq_gpio_req:
  2634. if (gpio_is_valid(pdata->irq_gpio))
  2635. gpio_free(pdata->irq_gpio);
  2636. err_power_on:
  2637. if (pdata->power_on)
  2638. pdata->power_on(false);
  2639. else
  2640. mxt_power_on(data, false);
  2641. err_reset_gpio_req:
  2642. if (gpio_is_valid(pdata->reset_gpio))
  2643. gpio_free(pdata->reset_gpio);
  2644. err_regulator_on:
  2645. if (pdata->init_hw)
  2646. pdata->init_hw(false);
  2647. else
  2648. mxt_regulator_configure(data, false);
  2649. err_free_mem:
  2650. input_free_device(input_dev);
  2651. kfree(data);
  2652. return error;
  2653. }
  2654. static int __devexit mxt_remove(struct i2c_client *client)
  2655. {
  2656. struct mxt_data *data = i2c_get_clientdata(client);
  2657. sysfs_remove_group(&client->dev.kobj, &mxt_attr_group);
  2658. free_irq(data->irq, data);
  2659. input_unregister_device(data->input_dev);
  2660. #if defined(CONFIG_FB)
  2661. if (fb_unregister_client(&data->fb_notif))
  2662. dev_err(&client->dev, "Error occurred while unregistering fb_notifier.\n");
  2663. #elif defined(CONFIG_HAS_EARLYSUSPEND)
  2664. unregister_early_suspend(&data->early_suspend);
  2665. #endif
  2666. if (data->pdata->power_on)
  2667. data->pdata->power_on(false);
  2668. else
  2669. mxt_power_on(data, false);
  2670. if (data->pdata->init_hw)
  2671. data->pdata->init_hw(false);
  2672. else
  2673. mxt_regulator_configure(data, false);
  2674. if (gpio_is_valid(data->pdata->reset_gpio))
  2675. gpio_free(data->pdata->reset_gpio);
  2676. if (gpio_is_valid(data->pdata->irq_gpio))
  2677. gpio_free(data->pdata->irq_gpio);
  2678. kfree(data->object_table);
  2679. kfree(data);
  2680. debugfs_remove_recursive(debug_base);
  2681. return 0;
  2682. }
  2683. static const struct i2c_device_id mxt_id[] = {
  2684. { "qt602240_ts", 0 },
  2685. { "atmel_mxt_ts", 0 },
  2686. { "mXT224", 0 },
  2687. { }
  2688. };
  2689. MODULE_DEVICE_TABLE(i2c, mxt_id);
  2690. #ifdef CONFIG_OF
  2691. static struct of_device_id mxt_match_table[] = {
  2692. { .compatible = "atmel,mxt-ts",},
  2693. { },
  2694. };
  2695. #else
  2696. #define mxt_match_table NULL
  2697. #endif
  2698. static struct i2c_driver mxt_driver = {
  2699. .driver = {
  2700. .name = "atmel_mxt_ts",
  2701. .owner = THIS_MODULE,
  2702. .of_match_table = mxt_match_table,
  2703. #ifdef CONFIG_PM
  2704. .pm = &mxt_pm_ops,
  2705. #endif
  2706. },
  2707. .probe = mxt_probe,
  2708. .remove = __devexit_p(mxt_remove),
  2709. .id_table = mxt_id,
  2710. };
  2711. module_i2c_driver(mxt_driver);
  2712. /* Module information */
  2713. MODULE_AUTHOR("Joonyoung Shim <jy0922.shim@samsung.com>");
  2714. MODULE_DESCRIPTION("Atmel maXTouch Touchscreen driver");
  2715. MODULE_LICENSE("GPL");