atmel_maxtouch.c 59 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342
  1. /*
  2. * Atmel maXTouch Touchscreen Controller Driver
  3. *
  4. *
  5. * Copyright (C) 2010 Atmel Corporation
  6. * Copyright (C) 2010 Ulf Samuelsson (ulf@atmel.com)
  7. * Copyright (C) 2009 Raphael Derosso Pereira <raphaelpereira@gmail.com>
  8. *
  9. * This program is free software; you can redistribute it and/or modify
  10. * it under the terms of the GNU General Public License as published by
  11. * the Free Software Foundation; version 2 of the License
  12. *
  13. * This program is distributed in the hope that it will be useful,
  14. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  15. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  16. * GNU General Public License for more details.
  17. *
  18. * You should have received a copy of the GNU General Public License
  19. * along with this program; if not, write to the Free Software
  20. * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  21. */
  22. /*
  23. *
  24. * Driver for Atmel maXTouch family of touch controllers.
  25. *
  26. */
  27. #include <linux/i2c.h>
  28. #include <linux/interrupt.h>
  29. #include <linux/input.h>
  30. #include <linux/debugfs.h>
  31. #include <linux/cdev.h>
  32. #include <linux/mutex.h>
  33. #include <linux/slab.h>
  34. #include <linux/pm_runtime.h>
  35. #include <linux/module.h>
  36. #include <asm/uaccess.h>
  37. #include <linux/atmel_maxtouch.h>
  38. #if defined(CONFIG_HAS_EARLYSUSPEND)
  39. #include <linux/earlysuspend.h>
  40. /* Early-suspend level */
  41. #define MXT_SUSPEND_LEVEL 1
  42. #endif
  43. #define DRIVER_VERSION "0.91a_mod"
  44. static int debug = DEBUG_INFO;
  45. static int comms = 0;
  46. module_param(debug, int, 0644);
  47. module_param(comms, int, 0644);
  48. MODULE_PARM_DESC(debug, "Activate debugging output");
  49. MODULE_PARM_DESC(comms, "Select communications mode");
  50. #define T7_DATA_SIZE 3
  51. /* Device Info descriptor */
  52. /* Parsed from maXTouch "Id information" inside device */
  53. struct mxt_device_info {
  54. u8 family_id;
  55. u8 variant_id;
  56. u8 major;
  57. u8 minor;
  58. u8 build;
  59. u8 num_objs;
  60. u8 x_size;
  61. u8 y_size;
  62. char family_name[16]; /* Family name */
  63. char variant_name[16]; /* Variant name */
  64. u16 num_nodes; /* Number of sensor nodes */
  65. };
  66. /* object descriptor table, parsed from maXTouch "object table" */
  67. struct mxt_object {
  68. u16 chip_addr;
  69. u8 type;
  70. u8 size;
  71. u8 instances;
  72. u8 num_report_ids;
  73. };
  74. /* Mapping from report id to object type and instance */
  75. struct report_id_map {
  76. u8 object;
  77. u8 instance;
  78. /*
  79. * This is the first report ID belonging to object. It enables us to
  80. * find out easily the touch number: each touch has different report
  81. * ID (which are assigned to touches in increasing order). By
  82. * subtracting the first report ID from current, we get the touch
  83. * number.
  84. */
  85. u8 first_rid;
  86. };
  87. /* Driver datastructure */
  88. struct mxt_data {
  89. struct i2c_client *client;
  90. struct input_dev *input;
  91. char phys_name[32];
  92. int irq;
  93. u16 last_read_addr;
  94. bool new_msgs;
  95. u8 *last_message;
  96. int valid_irq_counter;
  97. int invalid_irq_counter;
  98. int irq_counter;
  99. int message_counter;
  100. int read_fail_counter;
  101. int bytes_to_read;
  102. struct delayed_work dwork;
  103. u8 xpos_format;
  104. u8 ypos_format;
  105. u8 numtouch;
  106. struct mxt_device_info device_info;
  107. u32 info_block_crc;
  108. u32 configuration_crc;
  109. u16 report_id_count;
  110. struct report_id_map *rid_map;
  111. struct mxt_object *object_table;
  112. u16 msg_proc_addr;
  113. u8 message_size;
  114. u16 min_x_val;
  115. u16 min_y_val;
  116. u16 max_x_val;
  117. u16 max_y_val;
  118. int (*init_hw)(struct i2c_client *client);
  119. int (*exit_hw)(struct i2c_client *client);
  120. int (*power_on)(bool on);
  121. u8 (*valid_interrupt)(void);
  122. u8 (*read_chg)(void);
  123. /* debugfs variables */
  124. struct dentry *debug_dir;
  125. int current_debug_datap;
  126. struct mutex debug_mutex;
  127. u16 *debug_data;
  128. /* Character device variables */
  129. struct cdev cdev;
  130. struct cdev cdev_messages; /* 2nd Char dev for messages */
  131. dev_t dev_num;
  132. struct class *mxt_class;
  133. u16 address_pointer;
  134. bool valid_ap;
  135. /* Message buffer & pointers */
  136. char *messages;
  137. int msg_buffer_startp, msg_buffer_endp;
  138. /* Put only non-touch messages to buffer if this is set */
  139. char nontouch_msg_only;
  140. struct mutex msg_mutex;
  141. #if defined(CONFIG_HAS_EARLYSUSPEND)
  142. struct early_suspend early_suspend;
  143. #endif
  144. u8 t7_data[T7_DATA_SIZE];
  145. bool is_suspended;
  146. };
  147. /*default value, enough to read versioning*/
  148. #define CONFIG_DATA_SIZE 6
  149. static u16 t38_size = CONFIG_DATA_SIZE;
  150. static int mxt_read_block(struct i2c_client *client, u16 addr, u16 length,
  151. u8 *value);
  152. static int mxt_write_byte(struct i2c_client *client, u16 addr, u8 value);
  153. static int mxt_write_block(struct i2c_client *client, u16 addr, u16 length,
  154. u8 *value);
  155. static u8 mxt_valid_interrupt_dummy(void)
  156. {
  157. return 1;
  158. }
  159. #define I2C_RETRY_COUNT 5
  160. #define I2C_PAYLOAD_SIZE 254
  161. /* Returns the start address of object in mXT memory. */
  162. #define MXT_BASE_ADDR(object_type, mxt) \
  163. get_object_address(object_type, 0, mxt->object_table, \
  164. mxt->device_info.num_objs)
  165. /* Maps a report ID to an object type (object type number). */
  166. #define REPORT_ID_TO_OBJECT(rid, mxt) \
  167. (((rid) == 0xff) ? 0 : mxt->rid_map[rid].object)
  168. /* Maps a report ID to an object type (string). */
  169. #define REPORT_ID_TO_OBJECT_NAME(rid, mxt) \
  170. object_type_name[REPORT_ID_TO_OBJECT(rid, mxt)]
  171. /* Returns non-zero if given object is a touch object */
  172. #define IS_TOUCH_OBJECT(object) \
  173. ((object == MXT_TOUCH_MULTITOUCHSCREEN_T9) || \
  174. (object == MXT_TOUCH_KEYARRAY_T15) || \
  175. (object == MXT_TOUCH_PROXIMITY_T23) || \
  176. (object == MXT_TOUCH_SINGLETOUCHSCREEN_T10) || \
  177. (object == MXT_TOUCH_XSLIDER_T11) || \
  178. (object == MXT_TOUCH_YSLIDER_T12) || \
  179. (object == MXT_TOUCH_XWHEEL_T13) || \
  180. (object == MXT_TOUCH_YWHEEL_T14) || \
  181. (object == MXT_TOUCH_KEYSET_T31) || \
  182. (object == MXT_TOUCH_XSLIDERSET_T32) ? 1 : 0)
  183. #define mxt_debug(level, ...) \
  184. do { \
  185. if (debug >= (level)) \
  186. pr_debug(__VA_ARGS__); \
  187. } while (0)
  188. /*
  189. * Check whether we have multi-touch enabled kernel; if not, report just the
  190. * first touch (on mXT224, the maximum is 10 simultaneous touches).
  191. * Because just the 1st one is reported, it might seem that the screen is not
  192. * responding to touch if the first touch is removed while the screen is being
  193. * touched by another finger, so beware.
  194. *
  195. */
  196. #ifdef ABS_MT_TRACKING_ID
  197. static inline void report_mt(int touch_number, int size, int x, int y, struct
  198. mxt_data *mxt) {
  199. input_report_abs(mxt->input, ABS_MT_TRACKING_ID, touch_number);
  200. input_report_abs(mxt->input, ABS_MT_TOUCH_MAJOR, size);
  201. input_report_abs(mxt->input, ABS_MT_POSITION_X, x);
  202. input_report_abs(mxt->input, ABS_MT_POSITION_Y, y);
  203. input_mt_sync(mxt->input);
  204. }
  205. #else
  206. static inline void report_mt(int touch_number, int size, int x, int y, struct
  207. mxt_data *mxt) {
  208. if (touch_number == 0) {
  209. input_report_abs(mxt->input, ABS_TOOL_WIDTH, size);
  210. input_report_abs(mxt->input, ABS_X, x);
  211. input_report_abs(mxt->input, ABS_Y, y);
  212. }
  213. }
  214. #endif
  215. static inline void report_gesture(int data, struct mxt_data *mxt)
  216. {
  217. input_event(mxt->input, EV_MSC, MSC_GESTURE, data);
  218. }
  219. static const u8 *object_type_name[] = {
  220. [0] = "Reserved",
  221. [5] = "GEN_MESSAGEPROCESSOR_T5",
  222. [6] = "GEN_COMMANDPROCESSOR_T6",
  223. [7] = "GEN_POWERCONFIG_T7",
  224. [8] = "GEN_ACQUIRECONFIG_T8",
  225. [9] = "TOUCH_MULTITOUCHSCREEN_T9",
  226. [15] = "TOUCH_KEYARRAY_T15",
  227. [17] = "SPT_COMMSCONFIG_T18",
  228. [19] = "SPT_GPIOPWM_T19",
  229. [20] = "PROCI_GRIPFACESUPPRESSION_T20",
  230. [22] = "PROCG_NOISESUPPRESSION_T22",
  231. [23] = "TOUCH_PROXIMITY_T23",
  232. [24] = "PROCI_ONETOUCHGESTUREPROCESSOR_T24",
  233. [25] = "SPT_SELFTEST_T25",
  234. [27] = "PROCI_TWOTOUCHGESTUREPROCESSOR_T27",
  235. [28] = "SPT_CTECONFIG_T28",
  236. [37] = "DEBUG_DIAGNOSTICS_T37",
  237. [38] = "SPT_USER_DATA_T38",
  238. [40] = "PROCI_GRIPSUPPRESSION_T40",
  239. [41] = "PROCI_PALMSUPPRESSION_T41",
  240. [42] = "PROCI_FACESUPPRESSION_T42",
  241. [43] = "SPT_DIGITIZER_T43",
  242. [44] = "SPT_MESSAGECOUNT_T44",
  243. };
  244. static u16 get_object_address(uint8_t object_type,
  245. uint8_t instance,
  246. struct mxt_object *object_table,
  247. int max_objs);
  248. int mxt_write_ap(struct mxt_data *mxt, u16 ap);
  249. static int mxt_read_block_wo_addr(struct i2c_client *client,
  250. u16 length,
  251. u8 *value);
  252. ssize_t debug_data_read(struct mxt_data *mxt, char *buf, size_t count,
  253. loff_t *ppos, u8 debug_command){
  254. int i;
  255. u16 *data;
  256. u16 diagnostics_reg;
  257. int offset = 0;
  258. int size;
  259. int read_size;
  260. int error;
  261. char *buf_start;
  262. u16 debug_data_addr;
  263. u16 page_address;
  264. u8 page;
  265. u8 debug_command_reg;
  266. data = mxt->debug_data;
  267. if (data == NULL)
  268. return -EIO;
  269. /* If first read after open, read all data to buffer. */
  270. if (mxt->current_debug_datap == 0){
  271. diagnostics_reg = MXT_BASE_ADDR(MXT_GEN_COMMANDPROCESSOR_T6,
  272. mxt) +
  273. MXT_ADR_T6_DIAGNOSTIC;
  274. if (count > (mxt->device_info.num_nodes * 2))
  275. count = mxt->device_info.num_nodes;
  276. debug_data_addr = MXT_BASE_ADDR(MXT_DEBUG_DIAGNOSTIC_T37, mxt)+
  277. MXT_ADR_T37_DATA;
  278. page_address = MXT_BASE_ADDR(MXT_DEBUG_DIAGNOSTIC_T37, mxt) +
  279. MXT_ADR_T37_PAGE;
  280. error = mxt_read_block(mxt->client, page_address, 1, &page);
  281. if (error < 0)
  282. return error;
  283. mxt_debug(DEBUG_TRACE, "debug data page = %d\n", page);
  284. while (page != 0) {
  285. error = mxt_write_byte(mxt->client,
  286. diagnostics_reg,
  287. MXT_CMD_T6_PAGE_DOWN);
  288. if (error < 0)
  289. return error;
  290. /* Wait for command to be handled; when it has, the
  291. register will be cleared. */
  292. debug_command_reg = 1;
  293. while (debug_command_reg != 0) {
  294. error = mxt_read_block(mxt->client,
  295. diagnostics_reg, 1,
  296. &debug_command_reg);
  297. if (error < 0)
  298. return error;
  299. mxt_debug(DEBUG_TRACE,
  300. "Waiting for debug diag command "
  301. "to propagate...\n");
  302. }
  303. error = mxt_read_block(mxt->client, page_address, 1,
  304. &page);
  305. if (error < 0)
  306. return error;
  307. mxt_debug(DEBUG_TRACE, "debug data page = %d\n", page);
  308. }
  309. /*
  310. * Lock mutex to prevent writing some unwanted data to debug
  311. * command register. User can still write through the char
  312. * device interface though. TODO: fix?
  313. */
  314. mutex_lock(&mxt->debug_mutex);
  315. /* Configure Debug Diagnostics object to show deltas/refs */
  316. error = mxt_write_byte(mxt->client, diagnostics_reg,
  317. debug_command);
  318. /* Wait for command to be handled; when it has, the
  319. * register will be cleared. */
  320. debug_command_reg = 1;
  321. while (debug_command_reg != 0) {
  322. error = mxt_read_block(mxt->client,
  323. diagnostics_reg, 1,
  324. &debug_command_reg);
  325. if (error < 0)
  326. return error;
  327. mxt_debug(DEBUG_TRACE, "Waiting for debug diag command "
  328. "to propagate...\n");
  329. }
  330. if (error < 0) {
  331. printk (KERN_WARNING
  332. "Error writing to maXTouch device!\n");
  333. return error;
  334. }
  335. size = mxt->device_info.num_nodes * sizeof(u16);
  336. while (size > 0) {
  337. read_size = size > 128 ? 128 : size;
  338. mxt_debug(DEBUG_TRACE,
  339. "Debug data read loop, reading %d bytes...\n",
  340. read_size);
  341. error = mxt_read_block(mxt->client,
  342. debug_data_addr,
  343. read_size,
  344. (u8 *) &data[offset]);
  345. if (error < 0) {
  346. printk(KERN_WARNING
  347. "Error reading debug data\n");
  348. goto error;
  349. }
  350. offset += read_size/2;
  351. size -= read_size;
  352. /* Select next page */
  353. error = mxt_write_byte(mxt->client, diagnostics_reg,
  354. MXT_CMD_T6_PAGE_UP);
  355. if (error < 0) {
  356. printk(KERN_WARNING
  357. "Error writing to maXTouch device!\n");
  358. goto error;
  359. }
  360. }
  361. mutex_unlock(&mxt->debug_mutex);
  362. }
  363. buf_start = buf;
  364. i = mxt->current_debug_datap;
  365. while (((buf- buf_start) < (count - 6)) &&
  366. (i < mxt->device_info.num_nodes)){
  367. mxt->current_debug_datap++;
  368. if (debug_command == MXT_CMD_T6_REFERENCES_MODE)
  369. buf += sprintf(buf, "%d: %5d\n", i,
  370. (u16) le16_to_cpu(data[i]));
  371. else if (debug_command == MXT_CMD_T6_DELTAS_MODE)
  372. buf += sprintf(buf, "%d: %5d\n", i,
  373. (s16) le16_to_cpu(data[i]));
  374. i++;
  375. }
  376. return (buf - buf_start);
  377. error:
  378. mutex_unlock(&mxt->debug_mutex);
  379. return error;
  380. }
  381. ssize_t deltas_read(struct file *file, char *buf, size_t count, loff_t *ppos)
  382. {
  383. return debug_data_read(file->private_data, buf, count, ppos,
  384. MXT_CMD_T6_DELTAS_MODE);
  385. }
  386. ssize_t refs_read(struct file *file, char *buf, size_t count,
  387. loff_t *ppos)
  388. {
  389. return debug_data_read(file->private_data, buf, count, ppos,
  390. MXT_CMD_T6_REFERENCES_MODE);
  391. }
  392. int debug_data_open(struct inode *inode, struct file *file)
  393. {
  394. struct mxt_data *mxt;
  395. int i;
  396. mxt = inode->i_private;
  397. if (mxt == NULL)
  398. return -EIO;
  399. mxt->current_debug_datap = 0;
  400. mxt->debug_data = kmalloc(mxt->device_info.num_nodes * sizeof(u16),
  401. GFP_KERNEL);
  402. if (mxt->debug_data == NULL)
  403. return -ENOMEM;
  404. for (i = 0; i < mxt->device_info.num_nodes; i++)
  405. mxt->debug_data[i] = 7777;
  406. file->private_data = mxt;
  407. return 0;
  408. }
  409. int debug_data_release(struct inode *inode, struct file *file)
  410. {
  411. struct mxt_data *mxt;
  412. mxt = file->private_data;
  413. kfree(mxt->debug_data);
  414. return 0;
  415. }
  416. static struct file_operations delta_fops = {
  417. .owner = THIS_MODULE,
  418. .open = debug_data_open,
  419. .release = debug_data_release,
  420. .read = deltas_read,
  421. };
  422. static struct file_operations refs_fops = {
  423. .owner = THIS_MODULE,
  424. .open = debug_data_open,
  425. .release = debug_data_release,
  426. .read = refs_read,
  427. };
  428. int mxt_memory_open(struct inode *inode, struct file *file)
  429. {
  430. struct mxt_data *mxt;
  431. mxt = container_of(inode->i_cdev, struct mxt_data, cdev);
  432. if (mxt == NULL)
  433. return -EIO;
  434. file->private_data = mxt;
  435. return 0;
  436. }
  437. int mxt_message_open(struct inode *inode, struct file *file)
  438. {
  439. struct mxt_data *mxt;
  440. mxt = container_of(inode->i_cdev, struct mxt_data, cdev_messages);
  441. if (mxt == NULL)
  442. return -EIO;
  443. file->private_data = mxt;
  444. return 0;
  445. }
  446. ssize_t mxt_memory_read(struct file *file, char *buf, size_t count,
  447. loff_t *ppos)
  448. {
  449. int i;
  450. struct mxt_data *mxt;
  451. mxt = file->private_data;
  452. if (mxt->valid_ap){
  453. mxt_debug(DEBUG_TRACE, "Reading %d bytes from current ap\n",
  454. (int) count);
  455. i = mxt_read_block_wo_addr(mxt->client, count, (u8 *) buf);
  456. } else {
  457. mxt_debug(DEBUG_TRACE, "Address pointer changed since set;"
  458. "writing AP (%d) before reading %d bytes",
  459. mxt->address_pointer, (int) count);
  460. i = mxt_read_block(mxt->client, mxt->address_pointer, count,
  461. buf);
  462. }
  463. return i;
  464. }
  465. ssize_t mxt_memory_write(struct file *file, const char *buf, size_t count,
  466. loff_t *ppos)
  467. {
  468. int i;
  469. int whole_blocks;
  470. int last_block_size;
  471. struct mxt_data *mxt;
  472. u16 address;
  473. mxt = file->private_data;
  474. address = mxt->address_pointer;
  475. mxt_debug(DEBUG_TRACE, "mxt_memory_write entered\n");
  476. whole_blocks = count / I2C_PAYLOAD_SIZE;
  477. last_block_size = count % I2C_PAYLOAD_SIZE;
  478. for (i = 0; i < whole_blocks; i++) {
  479. mxt_debug(DEBUG_TRACE, "About to write to %d...",
  480. address);
  481. mxt_write_block(mxt->client, address, I2C_PAYLOAD_SIZE,
  482. (u8 *) buf);
  483. address += I2C_PAYLOAD_SIZE;
  484. buf += I2C_PAYLOAD_SIZE;
  485. }
  486. mxt_write_block(mxt->client, address, last_block_size, (u8 *) buf);
  487. return count;
  488. }
  489. static long mxt_ioctl(struct file *file,
  490. unsigned int cmd, unsigned long arg)
  491. {
  492. int retval;
  493. struct mxt_data *mxt;
  494. retval = 0;
  495. mxt = file->private_data;
  496. switch (cmd) {
  497. case MXT_SET_ADDRESS_IOCTL:
  498. retval = mxt_write_ap(mxt, (u16) arg);
  499. if (retval >= 0) {
  500. mxt->address_pointer = (u16) arg;
  501. mxt->valid_ap = 1;
  502. }
  503. break;
  504. case MXT_RESET_IOCTL:
  505. retval = mxt_write_byte(mxt->client,
  506. MXT_BASE_ADDR(MXT_GEN_COMMANDPROCESSOR_T6, mxt) +
  507. MXT_ADR_T6_RESET,
  508. 1);
  509. break;
  510. case MXT_CALIBRATE_IOCTL:
  511. retval = mxt_write_byte(mxt->client,
  512. MXT_BASE_ADDR(MXT_GEN_COMMANDPROCESSOR_T6, mxt) +
  513. MXT_ADR_T6_CALIBRATE,
  514. 1);
  515. break;
  516. case MXT_BACKUP_IOCTL:
  517. retval = mxt_write_byte(mxt->client,
  518. MXT_BASE_ADDR(MXT_GEN_COMMANDPROCESSOR_T6, mxt) +
  519. MXT_ADR_T6_BACKUPNV,
  520. MXT_CMD_T6_BACKUP);
  521. break;
  522. case MXT_NONTOUCH_MSG_IOCTL:
  523. mxt->nontouch_msg_only = 1;
  524. break;
  525. case MXT_ALL_MSG_IOCTL:
  526. mxt->nontouch_msg_only = 0;
  527. break;
  528. default:
  529. return -EIO;
  530. }
  531. return retval;
  532. }
  533. /*
  534. * Copies messages from buffer to user space.
  535. *
  536. * NOTE: if less than (mxt->message_size * 5 + 1) bytes requested,
  537. * this will return 0!
  538. *
  539. */
  540. ssize_t mxt_message_read(struct file *file, char *buf, size_t count,
  541. loff_t *ppos)
  542. {
  543. int i;
  544. struct mxt_data *mxt;
  545. char *buf_start;
  546. mxt = file->private_data;
  547. if (mxt == NULL)
  548. return -EIO;
  549. buf_start = buf;
  550. mutex_lock(&mxt->msg_mutex);
  551. /* Copy messages until buffer empty, or 'count' bytes written */
  552. while ((mxt->msg_buffer_startp != mxt->msg_buffer_endp) &&
  553. ((buf - buf_start) < (count - (5 * mxt->message_size) - 1))){
  554. for (i = 0; i < mxt->message_size; i++){
  555. buf += sprintf(buf, "[%2X] ",
  556. *(mxt->messages + mxt->msg_buffer_endp *
  557. mxt->message_size + i));
  558. }
  559. buf += sprintf(buf, "\n");
  560. if (mxt->msg_buffer_endp < MXT_MESSAGE_BUFFER_SIZE)
  561. mxt->msg_buffer_endp++;
  562. else
  563. mxt->msg_buffer_endp = 0;
  564. }
  565. mutex_unlock(&mxt->msg_mutex);
  566. return (buf - buf_start);
  567. }
  568. static struct file_operations mxt_message_fops = {
  569. .owner = THIS_MODULE,
  570. .open = mxt_message_open,
  571. .read = mxt_message_read,
  572. };
  573. static struct file_operations mxt_memory_fops = {
  574. .owner = THIS_MODULE,
  575. .open = mxt_memory_open,
  576. .read = mxt_memory_read,
  577. .write = mxt_memory_write,
  578. .unlocked_ioctl = mxt_ioctl,
  579. };
  580. /* Writes the address pointer (to set up following reads). */
  581. int mxt_write_ap(struct mxt_data *mxt, u16 ap)
  582. {
  583. struct i2c_client *client;
  584. __le16 le_ap = cpu_to_le16(ap);
  585. client = mxt->client;
  586. if (mxt != NULL)
  587. mxt->last_read_addr = -1;
  588. if (i2c_master_send(client, (u8 *) &le_ap, 2) == 2) {
  589. mxt_debug(DEBUG_TRACE, "Address pointer set to %d\n", ap);
  590. return 0;
  591. } else {
  592. mxt_debug(DEBUG_INFO, "Error writing address pointer!\n");
  593. return -EIO;
  594. }
  595. }
  596. /* Calculates the 24-bit CRC sum. */
  597. static u32 CRC_24(u32 crc, u8 byte1, u8 byte2)
  598. {
  599. static const u32 crcpoly = 0x80001B;
  600. u32 result;
  601. u32 data_word;
  602. data_word = ((((u16) byte2) << 8u) | byte1);
  603. result = ((crc << 1u) ^ data_word);
  604. if (result & 0x1000000)
  605. result ^= crcpoly;
  606. return result;
  607. }
  608. /* Returns object address in mXT chip, or zero if object is not found */
  609. static u16 get_object_address(uint8_t object_type,
  610. uint8_t instance,
  611. struct mxt_object *object_table,
  612. int max_objs)
  613. {
  614. uint8_t object_table_index = 0;
  615. uint8_t address_found = 0;
  616. uint16_t address = 0;
  617. struct mxt_object *obj;
  618. while ((object_table_index < max_objs) && !address_found) {
  619. obj = &object_table[object_table_index];
  620. if (obj->type == object_type) {
  621. address_found = 1;
  622. /* Are there enough instances defined in the FW? */
  623. if (obj->instances >= instance) {
  624. address = obj->chip_addr +
  625. (obj->size + 1) * instance;
  626. } else {
  627. return 0;
  628. }
  629. }
  630. object_table_index++;
  631. }
  632. return address;
  633. }
  634. /*
  635. * Reads a block of bytes from given address from mXT chip. If we are
  636. * reading from message window, and previous read was from message window,
  637. * there's no need to write the address pointer: the mXT chip will
  638. * automatically set the address pointer back to message window start.
  639. */
  640. static int mxt_read_block(struct i2c_client *client,
  641. u16 addr,
  642. u16 length,
  643. u8 *value)
  644. {
  645. struct i2c_adapter *adapter = client->adapter;
  646. struct i2c_msg msg[2];
  647. __le16 le_addr;
  648. struct mxt_data *mxt;
  649. mxt = i2c_get_clientdata(client);
  650. if (mxt != NULL) {
  651. if ((mxt->last_read_addr == addr) &&
  652. (addr == mxt->msg_proc_addr)) {
  653. if (i2c_master_recv(client, value, length) == length)
  654. return length;
  655. else
  656. return -EIO;
  657. } else {
  658. mxt->last_read_addr = addr;
  659. }
  660. }
  661. mxt_debug(DEBUG_TRACE, "Writing address pointer & reading %d bytes "
  662. "in on i2c transaction...\n", length);
  663. le_addr = cpu_to_le16(addr);
  664. msg[0].addr = client->addr;
  665. msg[0].flags = 0x00;
  666. msg[0].len = 2;
  667. msg[0].buf = (u8 *) &le_addr;
  668. msg[1].addr = client->addr;
  669. msg[1].flags = I2C_M_RD;
  670. msg[1].len = length;
  671. msg[1].buf = (u8 *) value;
  672. if (i2c_transfer(adapter, msg, 2) == 2)
  673. return length;
  674. else
  675. return -EIO;
  676. }
  677. /* Reads a block of bytes from current address from mXT chip. */
  678. static int mxt_read_block_wo_addr(struct i2c_client *client,
  679. u16 length,
  680. u8 *value)
  681. {
  682. if (i2c_master_recv(client, value, length) == length) {
  683. mxt_debug(DEBUG_TRACE, "I2C block read ok\n");
  684. return length;
  685. } else {
  686. mxt_debug(DEBUG_INFO, "I2C block read failed\n");
  687. return -EIO;
  688. }
  689. }
  690. /* Writes one byte to given address in mXT chip. */
  691. static int mxt_write_byte(struct i2c_client *client, u16 addr, u8 value)
  692. {
  693. struct {
  694. __le16 le_addr;
  695. u8 data;
  696. } i2c_byte_transfer;
  697. struct mxt_data *mxt;
  698. mxt = i2c_get_clientdata(client);
  699. if (mxt != NULL)
  700. mxt->last_read_addr = -1;
  701. i2c_byte_transfer.le_addr = cpu_to_le16(addr);
  702. i2c_byte_transfer.data = value;
  703. if (i2c_master_send(client, (u8 *) &i2c_byte_transfer, 3) == 3)
  704. return 0;
  705. else
  706. return -EIO;
  707. }
  708. /* Writes a block of bytes (max 256) to given address in mXT chip. */
  709. static int mxt_write_block(struct i2c_client *client,
  710. u16 addr,
  711. u16 length,
  712. u8 *value)
  713. {
  714. int i;
  715. struct {
  716. __le16 le_addr;
  717. u8 data[256];
  718. } i2c_block_transfer;
  719. struct mxt_data *mxt;
  720. mxt_debug(DEBUG_TRACE, "Writing %d bytes to %d...", length, addr);
  721. if (length > 256)
  722. return -EINVAL;
  723. mxt = i2c_get_clientdata(client);
  724. if (mxt != NULL)
  725. mxt->last_read_addr = -1;
  726. for (i = 0; i < length; i++)
  727. i2c_block_transfer.data[i] = *value++;
  728. i2c_block_transfer.le_addr = cpu_to_le16(addr);
  729. i = i2c_master_send(client, (u8 *) &i2c_block_transfer, length + 2);
  730. if (i == (length + 2))
  731. return length;
  732. else
  733. return -EIO;
  734. }
  735. /* Calculates the CRC value for mXT infoblock. */
  736. int calculate_infoblock_crc(u32 *crc_result, u8 *data, int crc_area_size)
  737. {
  738. u32 crc = 0;
  739. int i;
  740. for (i = 0; i < (crc_area_size - 1); i = i + 2)
  741. crc = CRC_24(crc, *(data + i), *(data + i + 1));
  742. /* If uneven size, pad with zero */
  743. if (crc_area_size & 0x0001)
  744. crc = CRC_24(crc, *(data + i), 0);
  745. /* Return only 24 bits of CRC. */
  746. *crc_result = (crc & 0x00FFFFFF);
  747. return 0;
  748. }
  749. /* Processes a touchscreen message. */
  750. void process_T9_message(u8 *message, struct mxt_data *mxt, int last_touch)
  751. {
  752. struct input_dev *input;
  753. u8 status;
  754. u16 xpos = 0xFFFF;
  755. u16 ypos = 0xFFFF;
  756. u8 touch_size = 255;
  757. u8 touch_number;
  758. u8 amplitude;
  759. u8 report_id;
  760. static int stored_size[10];
  761. static int stored_x[10];
  762. static int stored_y[10];
  763. int i;
  764. int active_touches = 0;
  765. /*
  766. * If the 'last_touch' flag is set, we have received all the touch
  767. * messages
  768. * there are available in this cycle, so send the events for touches
  769. * that are
  770. * active.
  771. */
  772. if (last_touch){
  773. /* TODO: For compatibility with single-touch systems, send ABS_X &
  774. * ABS_Y */
  775. /*
  776. if (stored_size[0]){
  777. input_report_abs(mxt->input, ABS_X, stored_x[0]);
  778. input_report_abs(mxt->input, ABS_Y, stored_y[0]);
  779. }*/
  780. for (i = 0; i < 10; i++){
  781. if (stored_size[i]){
  782. active_touches++;
  783. input_report_abs(mxt->input,
  784. ABS_MT_TRACKING_ID,
  785. i);
  786. input_report_abs(mxt->input,
  787. ABS_MT_TOUCH_MAJOR,
  788. stored_size[i]);
  789. input_report_abs(mxt->input,
  790. ABS_MT_POSITION_X,
  791. stored_x[i]);
  792. input_report_abs(mxt->input,
  793. ABS_MT_POSITION_Y,
  794. stored_y[i]);
  795. input_mt_sync(mxt->input);
  796. }
  797. }
  798. input_report_key(mxt->input, BTN_TOUCH, !!active_touches);
  799. if (active_touches == 0)
  800. input_mt_sync(mxt->input);
  801. input_sync(mxt->input);
  802. }else{
  803. input = mxt->input;
  804. status = message[MXT_MSG_T9_STATUS];
  805. report_id = message[0];
  806. if (status & MXT_MSGB_T9_SUPPRESS) {
  807. /* Touch has been suppressed by grip/face */
  808. /* detection */
  809. mxt_debug(DEBUG_TRACE, "SUPRESS");
  810. } else {
  811. /* Put together the 10-/12-bit coordinate values. */
  812. xpos = message[MXT_MSG_T9_XPOSMSB] * 16 +
  813. ((message[MXT_MSG_T9_XYPOSLSB] >> 4) & 0xF);
  814. ypos = message[MXT_MSG_T9_YPOSMSB] * 16 +
  815. ((message[MXT_MSG_T9_XYPOSLSB] >> 0) & 0xF);
  816. if (mxt->max_x_val < 1024)
  817. xpos >>= 2;
  818. if (mxt->max_y_val < 1024)
  819. ypos >>= 2;
  820. touch_number = message[MXT_MSG_REPORTID] -
  821. mxt->rid_map[report_id].first_rid;
  822. stored_x[touch_number] = xpos;
  823. stored_y[touch_number] = ypos;
  824. if (status & MXT_MSGB_T9_DETECT) {
  825. /*
  826. * mXT224 reports the number of touched nodes,
  827. * so the exact value for touch ellipse major
  828. * axis length in nodes would be 2*sqrt(touch_size/pi)
  829. * (assuming round touch shape), which would then need
  830. * to be scaled using information about how many sensor
  831. * lines we do have. So this is very much simplified,
  832. * but sufficient for most if not all apps?
  833. */
  834. touch_size = message[MXT_MSG_T9_TCHAREA];
  835. touch_size = touch_size >> 2;
  836. if (!touch_size)
  837. touch_size = 1;
  838. /*
  839. * report_mt(touch_number, touch_size, xpos, ypos, mxt);
  840. */
  841. stored_size[touch_number] = touch_size;
  842. if (status & MXT_MSGB_T9_AMP)
  843. /* Amplitude of touch has changed */
  844. amplitude = message[MXT_MSG_T9_TCHAMPLITUDE];
  845. }
  846. if (status & MXT_MSGB_T9_RELEASE) {
  847. /* The previously reported touch has been removed.*/
  848. /* report_mt(touch_number, 0, xpos, ypos, mxt); */
  849. stored_size[touch_number] = 0;
  850. }
  851. /* input_sync(input); */
  852. }
  853. if (status & MXT_MSGB_T9_SUPPRESS) {
  854. mxt_debug(DEBUG_TRACE, "SUPRESS");
  855. } else {
  856. if (status & MXT_MSGB_T9_DETECT) {
  857. mxt_debug(DEBUG_TRACE, "DETECT:%s%s%s%s",
  858. ((status & MXT_MSGB_T9_PRESS) ? " PRESS" : ""),
  859. ((status & MXT_MSGB_T9_MOVE) ? " MOVE" : ""),
  860. ((status & MXT_MSGB_T9_AMP) ? " AMP" : ""),
  861. ((status & MXT_MSGB_T9_VECTOR) ? " VECT" : ""));
  862. } else if (status & MXT_MSGB_T9_RELEASE) {
  863. mxt_debug(DEBUG_TRACE, "RELEASE");
  864. }
  865. }
  866. mxt_debug(DEBUG_TRACE, "X=%d, Y=%d, TOUCHSIZE=%d",
  867. xpos, ypos, touch_size);
  868. }
  869. return;
  870. }
  871. int process_message(u8 *message, u8 object, struct mxt_data *mxt)
  872. {
  873. struct i2c_client *client;
  874. u8 status;
  875. u16 xpos = 0xFFFF;
  876. u16 ypos = 0xFFFF;
  877. u8 event;
  878. u8 direction;
  879. u16 distance;
  880. u8 length;
  881. u8 report_id;
  882. static u8 error_cond = 0;
  883. client = mxt->client;
  884. length = mxt->message_size;
  885. report_id = message[0];
  886. if ((mxt->nontouch_msg_only == 0) ||
  887. (!IS_TOUCH_OBJECT(object))){
  888. mutex_lock(&mxt->msg_mutex);
  889. /* Copy the message to buffer */
  890. if (mxt->msg_buffer_startp < MXT_MESSAGE_BUFFER_SIZE) {
  891. mxt->msg_buffer_startp++;
  892. } else {
  893. mxt->msg_buffer_startp = 0;
  894. }
  895. if (mxt->msg_buffer_startp == mxt->msg_buffer_endp) {
  896. mxt_debug(DEBUG_TRACE,
  897. "Message buf full, discarding last entry.\n");
  898. if (mxt->msg_buffer_endp < MXT_MESSAGE_BUFFER_SIZE) {
  899. mxt->msg_buffer_endp++;
  900. } else {
  901. mxt->msg_buffer_endp = 0;
  902. }
  903. }
  904. memcpy((mxt->messages + mxt->msg_buffer_startp * length),
  905. message,
  906. length);
  907. mutex_unlock(&mxt->msg_mutex);
  908. }
  909. switch (object) {
  910. case MXT_GEN_COMMANDPROCESSOR_T6:
  911. status = message[1];
  912. if (status & MXT_MSGB_T6_COMSERR) {
  913. if ((!error_cond) & MXT_MSGB_T6_COMSERR){
  914. dev_err(&client->dev,
  915. "maXTouch checksum error\n");
  916. error_cond |= MXT_MSGB_T6_COMSERR;
  917. }
  918. }
  919. if (status & MXT_MSGB_T6_CFGERR) {
  920. /*
  921. * Configuration error. A proper configuration
  922. * needs to be written to chip and backed up.
  923. */
  924. if ((!error_cond) & MXT_MSGB_T6_CFGERR){
  925. dev_err(&client->dev,
  926. "maXTouch configuration error\n");
  927. error_cond |= MXT_MSGB_T6_CFGERR;
  928. }
  929. }
  930. if (status & MXT_MSGB_T6_CAL) {
  931. /* Calibration in action, no need to react */
  932. dev_dbg(&client->dev,
  933. "maXTouch calibration in progress\n");
  934. }
  935. if (status & MXT_MSGB_T6_SIGERR) {
  936. /*
  937. * Signal acquisition error, something is seriously
  938. * wrong, not much we can in the driver to correct
  939. * this
  940. */
  941. if ((!error_cond) & MXT_MSGB_T6_SIGERR){
  942. dev_err(&client->dev,
  943. "maXTouch acquisition error\n");
  944. error_cond |= MXT_MSGB_T6_SIGERR;
  945. }
  946. }
  947. if (status & MXT_MSGB_T6_OFL) {
  948. /*
  949. * Cycle overflow, the acquisition interval is too
  950. * short.
  951. */
  952. dev_err(&client->dev,
  953. "maXTouch cycle overflow\n");
  954. }
  955. if (status & MXT_MSGB_T6_RESET) {
  956. /* Chip has reseted, no need to react. */
  957. dev_dbg(&client->dev,
  958. "maXTouch chip reset\n");
  959. }
  960. if (status == 0) {
  961. /* Chip status back to normal. */
  962. dev_dbg(&client->dev,
  963. "maXTouch status normal\n");
  964. error_cond = 0;
  965. }
  966. break;
  967. case MXT_TOUCH_MULTITOUCHSCREEN_T9:
  968. process_T9_message(message, mxt, 0);
  969. break;
  970. case MXT_SPT_GPIOPWM_T19:
  971. if (debug >= DEBUG_TRACE)
  972. dev_info(&client->dev,
  973. "Receiving GPIO message\n");
  974. break;
  975. case MXT_PROCI_GRIPFACESUPPRESSION_T20:
  976. if (debug >= DEBUG_TRACE)
  977. dev_info(&client->dev,
  978. "Receiving face suppression msg\n");
  979. break;
  980. case MXT_PROCG_NOISESUPPRESSION_T22:
  981. if (debug >= DEBUG_TRACE)
  982. dev_info(&client->dev,
  983. "Receiving noise suppression msg\n");
  984. status = message[MXT_MSG_T22_STATUS];
  985. if (status & MXT_MSGB_T22_FHCHG) {
  986. if (debug >= DEBUG_TRACE)
  987. dev_info(&client->dev,
  988. "maXTouch: Freq changed\n");
  989. }
  990. if (status & MXT_MSGB_T22_GCAFERR) {
  991. if (debug >= DEBUG_TRACE)
  992. dev_info(&client->dev,
  993. "maXTouch: High noise "
  994. "level\n");
  995. }
  996. if (status & MXT_MSGB_T22_FHERR) {
  997. if (debug >= DEBUG_TRACE)
  998. dev_info(&client->dev,
  999. "maXTouch: Freq changed - "
  1000. "Noise level too high\n");
  1001. }
  1002. break;
  1003. case MXT_PROCI_ONETOUCHGESTUREPROCESSOR_T24:
  1004. if (debug >= DEBUG_TRACE)
  1005. dev_info(&client->dev,
  1006. "Receiving one-touch gesture msg\n");
  1007. event = message[MXT_MSG_T24_STATUS] & 0x0F;
  1008. xpos = message[MXT_MSG_T24_XPOSMSB] * 16 +
  1009. ((message[MXT_MSG_T24_XYPOSLSB] >> 4) & 0x0F);
  1010. ypos = message[MXT_MSG_T24_YPOSMSB] * 16 +
  1011. ((message[MXT_MSG_T24_XYPOSLSB] >> 0) & 0x0F);
  1012. if (mxt->max_x_val < 1024)
  1013. xpos >>= 2;
  1014. if (mxt->max_y_val < 1024)
  1015. ypos >>= 2;
  1016. direction = message[MXT_MSG_T24_DIR];
  1017. distance = message[MXT_MSG_T24_DIST] +
  1018. (message[MXT_MSG_T24_DIST + 1] << 16);
  1019. report_gesture((event << 24) | (direction << 16) | distance,
  1020. mxt);
  1021. report_gesture((xpos << 16) | ypos, mxt);
  1022. break;
  1023. case MXT_SPT_SELFTEST_T25:
  1024. if (debug >= DEBUG_TRACE)
  1025. dev_info(&client->dev,
  1026. "Receiving Self-Test msg\n");
  1027. if (message[MXT_MSG_T25_STATUS] == MXT_MSGR_T25_OK) {
  1028. if (debug >= DEBUG_TRACE)
  1029. dev_info(&client->dev,
  1030. "maXTouch: Self-Test OK\n");
  1031. } else {
  1032. dev_err(&client->dev,
  1033. "maXTouch: Self-Test Failed [%02x]:"
  1034. "{%02x,%02x,%02x,%02x,%02x}\n",
  1035. message[MXT_MSG_T25_STATUS],
  1036. message[MXT_MSG_T25_STATUS + 0],
  1037. message[MXT_MSG_T25_STATUS + 1],
  1038. message[MXT_MSG_T25_STATUS + 2],
  1039. message[MXT_MSG_T25_STATUS + 3],
  1040. message[MXT_MSG_T25_STATUS + 4]
  1041. );
  1042. }
  1043. break;
  1044. case MXT_PROCI_TWOTOUCHGESTUREPROCESSOR_T27:
  1045. if (debug >= DEBUG_TRACE)
  1046. dev_info(&client->dev,
  1047. "Receiving 2-touch gesture message\n");
  1048. event = message[MXT_MSG_T27_STATUS] & 0xF0;
  1049. xpos = message[MXT_MSG_T27_XPOSMSB] * 16 +
  1050. ((message[MXT_MSG_T27_XYPOSLSB] >> 4) & 0x0F);
  1051. ypos = message[MXT_MSG_T27_YPOSMSB] * 16 +
  1052. ((message[MXT_MSG_T27_XYPOSLSB] >> 0) & 0x0F);
  1053. if (mxt->max_x_val < 1024)
  1054. xpos >>= 2;
  1055. if (mxt->max_y_val < 1024)
  1056. ypos >>= 2;
  1057. direction = message[MXT_MSG_T27_ANGLE];
  1058. distance = message[MXT_MSG_T27_SEPARATION] +
  1059. (message[MXT_MSG_T27_SEPARATION + 1] << 16);
  1060. report_gesture((event << 24) | (direction << 16) | distance,
  1061. mxt);
  1062. report_gesture((xpos << 16) | ypos, mxt);
  1063. break;
  1064. case MXT_SPT_CTECONFIG_T28:
  1065. if (debug >= DEBUG_TRACE)
  1066. dev_info(&client->dev,
  1067. "Receiving CTE message...\n");
  1068. status = message[MXT_MSG_T28_STATUS];
  1069. if (status & MXT_MSGB_T28_CHKERR)
  1070. dev_err(&client->dev,
  1071. "maXTouch: Power-Up CRC failure\n");
  1072. break;
  1073. default:
  1074. if (debug >= DEBUG_TRACE)
  1075. dev_info(&client->dev,
  1076. "maXTouch: Unknown message!\n");
  1077. break;
  1078. }
  1079. return 0;
  1080. }
  1081. /*
  1082. * Processes messages when the interrupt line (CHG) is asserted. Keeps
  1083. * reading messages until a message with report ID 0xFF is received,
  1084. * which indicates that there is no more new messages.
  1085. *
  1086. */
  1087. static void mxt_worker(struct work_struct *work)
  1088. {
  1089. struct mxt_data *mxt;
  1090. struct i2c_client *client;
  1091. u8 *message;
  1092. u16 message_length;
  1093. u16 message_addr;
  1094. u8 report_id;
  1095. u8 object;
  1096. int error;
  1097. int i;
  1098. char *message_string;
  1099. char *message_start;
  1100. message = NULL;
  1101. mxt = container_of(work, struct mxt_data, dwork.work);
  1102. client = mxt->client;
  1103. message_addr = mxt->msg_proc_addr;
  1104. message_length = mxt->message_size;
  1105. if (message_length < 256) {
  1106. message = kmalloc(message_length, GFP_KERNEL);
  1107. if (message == NULL) {
  1108. dev_err(&client->dev, "Error allocating memory\n");
  1109. goto fail_worker;
  1110. }
  1111. } else {
  1112. dev_err(&client->dev,
  1113. "Message length larger than 256 bytes not supported\n");
  1114. goto fail_worker;
  1115. }
  1116. mxt_debug(DEBUG_TRACE, "maXTouch worker active:\n");
  1117. do {
  1118. /* Read next message, reread on failure. */
  1119. /* TODO: message length, CRC included? */
  1120. mxt->message_counter++;
  1121. for (i = 1; i < I2C_RETRY_COUNT; i++) {
  1122. error = mxt_read_block(client,
  1123. message_addr,
  1124. message_length - 1,
  1125. message);
  1126. if (error >= 0)
  1127. break;
  1128. mxt->read_fail_counter++;
  1129. dev_err(&client->dev,
  1130. "Failure reading maxTouch device\n");
  1131. }
  1132. if (error < 0) {
  1133. kfree(message);
  1134. goto fail_worker;
  1135. }
  1136. if (mxt->address_pointer != message_addr)
  1137. mxt->valid_ap = 0;
  1138. report_id = message[0];
  1139. if (debug >= DEBUG_RAW) {
  1140. mxt_debug(DEBUG_RAW, "%s message [msg count: %08x]:",
  1141. REPORT_ID_TO_OBJECT_NAME(report_id, mxt),
  1142. mxt->message_counter
  1143. );
  1144. /* 5 characters per one byte */
  1145. message_string = kmalloc(message_length * 5,
  1146. GFP_KERNEL);
  1147. if (message_string == NULL) {
  1148. dev_err(&client->dev,
  1149. "Error allocating memory\n");
  1150. kfree(message);
  1151. goto fail_worker;
  1152. }
  1153. message_start = message_string;
  1154. for (i = 0; i < message_length; i++) {
  1155. message_string +=
  1156. sprintf(message_string,
  1157. "0x%02X ", message[i]);
  1158. }
  1159. mxt_debug(DEBUG_RAW, "%s", message_start);
  1160. kfree(message_start);
  1161. }
  1162. if ((report_id != MXT_END_OF_MESSAGES) && (report_id != 0)) {
  1163. memcpy(mxt->last_message, message, message_length);
  1164. mxt->new_msgs = 1;
  1165. smp_wmb();
  1166. /* Get type of object and process the message */
  1167. object = mxt->rid_map[report_id].object;
  1168. process_message(message, object, mxt);
  1169. }
  1170. mxt_debug(DEBUG_TRACE, "chgline: %d\n", mxt->read_chg());
  1171. } while (comms ? (mxt->read_chg() == 0) :
  1172. ((report_id != MXT_END_OF_MESSAGES) && (report_id != 0)));
  1173. /* All messages processed, send the events) */
  1174. process_T9_message(NULL, mxt, 1);
  1175. kfree(message);
  1176. fail_worker:
  1177. /* Make sure we just didn't miss a interrupt. */
  1178. if (mxt->read_chg() == 0){
  1179. schedule_delayed_work(&mxt->dwork, 0);
  1180. } else
  1181. enable_irq(mxt->irq);
  1182. }
  1183. /*
  1184. * The maXTouch device will signal the host about a new message by asserting
  1185. * the CHG line. This ISR schedules a worker routine to read the message when
  1186. * that happens.
  1187. */
  1188. static irqreturn_t mxt_irq_handler(int irq, void *_mxt)
  1189. {
  1190. struct mxt_data *mxt = _mxt;
  1191. mxt->irq_counter++;
  1192. if (mxt->valid_interrupt()) {
  1193. /* Send the signal only if falling edge generated the irq. */
  1194. disable_irq_nosync(mxt->irq);
  1195. schedule_delayed_work(&mxt->dwork, 0);
  1196. mxt->valid_irq_counter++;
  1197. } else {
  1198. mxt->invalid_irq_counter++;
  1199. return IRQ_NONE;
  1200. }
  1201. return IRQ_HANDLED;
  1202. }
  1203. /******************************************************************************/
  1204. /* Initialization of driver */
  1205. /******************************************************************************/
  1206. static int __devinit mxt_identify(struct i2c_client *client,
  1207. struct mxt_data *mxt,
  1208. u8 *id_block_data)
  1209. {
  1210. u8 buf[MXT_ID_BLOCK_SIZE];
  1211. int error;
  1212. int identified;
  1213. identified = 0;
  1214. /* Read Device info to check if chip is valid */
  1215. error = mxt_read_block(client, MXT_ADDR_INFO_BLOCK, MXT_ID_BLOCK_SIZE,
  1216. (u8 *) buf);
  1217. if (error < 0) {
  1218. mxt->read_fail_counter++;
  1219. dev_err(&client->dev, "Failure accessing maXTouch device\n");
  1220. return -EIO;
  1221. }
  1222. memcpy(id_block_data, buf, MXT_ID_BLOCK_SIZE);
  1223. mxt->device_info.family_id = buf[0];
  1224. mxt->device_info.variant_id = buf[1];
  1225. mxt->device_info.major = ((buf[2] >> 4) & 0x0F);
  1226. mxt->device_info.minor = (buf[2] & 0x0F);
  1227. mxt->device_info.build = buf[3];
  1228. mxt->device_info.x_size = buf[4];
  1229. mxt->device_info.y_size = buf[5];
  1230. mxt->device_info.num_objs = buf[6];
  1231. mxt->device_info.num_nodes = mxt->device_info.x_size *
  1232. mxt->device_info.y_size;
  1233. /*
  1234. * Check Family & Variant Info; warn if not recognized but
  1235. * still continue.
  1236. */
  1237. /* MXT224 */
  1238. if (mxt->device_info.family_id == MXT224_FAMILYID) {
  1239. strcpy(mxt->device_info.family_name, "mXT224");
  1240. if (mxt->device_info.variant_id == MXT224_CAL_VARIANTID) {
  1241. strcpy(mxt->device_info.variant_name, "Calibrated");
  1242. } else if (mxt->device_info.variant_id ==
  1243. MXT224_UNCAL_VARIANTID) {
  1244. strcpy(mxt->device_info.variant_name, "Uncalibrated");
  1245. } else {
  1246. dev_err(&client->dev,
  1247. "Warning: maXTouch Variant ID [%d] not "
  1248. "supported\n",
  1249. mxt->device_info.variant_id);
  1250. strcpy(mxt->device_info.variant_name, "UNKNOWN");
  1251. /* identified = -ENXIO; */
  1252. }
  1253. /* MXT1386 */
  1254. } else if (mxt->device_info.family_id == MXT1386_FAMILYID) {
  1255. strcpy(mxt->device_info.family_name, "mXT1386");
  1256. if (mxt->device_info.variant_id == MXT1386_CAL_VARIANTID) {
  1257. strcpy(mxt->device_info.variant_name, "Calibrated");
  1258. } else {
  1259. dev_err(&client->dev,
  1260. "Warning: maXTouch Variant ID [%d] not "
  1261. "supported\n",
  1262. mxt->device_info.variant_id);
  1263. strcpy(mxt->device_info.variant_name, "UNKNOWN");
  1264. /* identified = -ENXIO; */
  1265. }
  1266. /* Unknown family ID! */
  1267. } else {
  1268. dev_err(&client->dev,
  1269. "Warning: maXTouch Family ID [%d] not supported\n",
  1270. mxt->device_info.family_id);
  1271. strcpy(mxt->device_info.family_name, "UNKNOWN");
  1272. strcpy(mxt->device_info.variant_name, "UNKNOWN");
  1273. /* identified = -ENXIO; */
  1274. }
  1275. dev_info(
  1276. &client->dev,
  1277. "Atmel maXTouch (Family %s (%X), Variant %s (%X)) Firmware "
  1278. "version [%d.%d] Build %d\n",
  1279. mxt->device_info.family_name,
  1280. mxt->device_info.family_id,
  1281. mxt->device_info.variant_name,
  1282. mxt->device_info.variant_id,
  1283. mxt->device_info.major,
  1284. mxt->device_info.minor,
  1285. mxt->device_info.build
  1286. );
  1287. dev_dbg(
  1288. &client->dev,
  1289. "Atmel maXTouch Configuration "
  1290. "[X: %d] x [Y: %d]\n",
  1291. mxt->device_info.x_size,
  1292. mxt->device_info.y_size
  1293. );
  1294. return identified;
  1295. }
  1296. /*
  1297. * Reads the object table from maXTouch chip to get object data like
  1298. * address, size, report id. For Info Block CRC calculation, already read
  1299. * id data is passed to this function too (Info Block consists of the ID
  1300. * block and object table).
  1301. *
  1302. */
  1303. static int __devinit mxt_read_object_table(struct i2c_client *client,
  1304. struct mxt_data *mxt,
  1305. u8 *raw_id_data)
  1306. {
  1307. u16 report_id_count;
  1308. u8 buf[MXT_OBJECT_TABLE_ELEMENT_SIZE];
  1309. u8 *raw_ib_data;
  1310. u8 object_type;
  1311. u16 object_address;
  1312. u16 object_size;
  1313. u8 object_instances;
  1314. u8 object_report_ids;
  1315. u16 object_info_address;
  1316. u32 crc;
  1317. u32 calculated_crc;
  1318. int i;
  1319. int error;
  1320. u8 object_instance;
  1321. u8 object_report_id;
  1322. u8 report_id;
  1323. int first_report_id;
  1324. int ib_pointer;
  1325. struct mxt_object *object_table;
  1326. mxt_debug(DEBUG_TRACE, "maXTouch driver reading configuration\n");
  1327. object_table = kzalloc(sizeof(struct mxt_object) *
  1328. mxt->device_info.num_objs,
  1329. GFP_KERNEL);
  1330. if (object_table == NULL) {
  1331. printk(KERN_WARNING "maXTouch: Memory allocation failed!\n");
  1332. error = -ENOMEM;
  1333. goto err_object_table_alloc;
  1334. }
  1335. raw_ib_data = kmalloc(MXT_OBJECT_TABLE_ELEMENT_SIZE *
  1336. mxt->device_info.num_objs + MXT_ID_BLOCK_SIZE,
  1337. GFP_KERNEL);
  1338. if (raw_ib_data == NULL) {
  1339. printk(KERN_WARNING "maXTouch: Memory allocation failed!\n");
  1340. error = -ENOMEM;
  1341. goto err_ib_alloc;
  1342. }
  1343. /* Copy the ID data for CRC calculation. */
  1344. memcpy(raw_ib_data, raw_id_data, MXT_ID_BLOCK_SIZE);
  1345. ib_pointer = MXT_ID_BLOCK_SIZE;
  1346. mxt->object_table = object_table;
  1347. mxt_debug(DEBUG_TRACE, "maXTouch driver Memory allocated\n");
  1348. object_info_address = MXT_ADDR_OBJECT_TABLE;
  1349. report_id_count = 0;
  1350. for (i = 0; i < mxt->device_info.num_objs; i++) {
  1351. mxt_debug(DEBUG_TRACE, "Reading maXTouch at [0x%04x]: ",
  1352. object_info_address);
  1353. error = mxt_read_block(client, object_info_address,
  1354. MXT_OBJECT_TABLE_ELEMENT_SIZE, buf);
  1355. if (error < 0) {
  1356. mxt->read_fail_counter++;
  1357. dev_err(&client->dev,
  1358. "maXTouch Object %d could not be read\n", i);
  1359. error = -EIO;
  1360. goto err_object_read;
  1361. }
  1362. memcpy(raw_ib_data + ib_pointer, buf,
  1363. MXT_OBJECT_TABLE_ELEMENT_SIZE);
  1364. ib_pointer += MXT_OBJECT_TABLE_ELEMENT_SIZE;
  1365. object_type = buf[0];
  1366. object_address = (buf[2] << 8) + buf[1];
  1367. object_size = buf[3] + 1;
  1368. object_instances = buf[4] + 1;
  1369. object_report_ids = buf[5];
  1370. mxt_debug(DEBUG_TRACE, "Type=%03d, Address=0x%04x, "
  1371. "Size=0x%02x, %d instances, %d report id's\n",
  1372. object_type,
  1373. object_address,
  1374. object_size,
  1375. object_instances,
  1376. object_report_ids
  1377. );
  1378. if (object_type == 38)
  1379. t38_size = object_size;
  1380. /* TODO: check whether object is known and supported? */
  1381. /* Save frequently needed info. */
  1382. if (object_type == MXT_GEN_MESSAGEPROCESSOR_T5) {
  1383. mxt->msg_proc_addr = object_address;
  1384. mxt->message_size = object_size;
  1385. }
  1386. object_table[i].type = object_type;
  1387. object_table[i].chip_addr = object_address;
  1388. object_table[i].size = object_size;
  1389. object_table[i].instances = object_instances;
  1390. object_table[i].num_report_ids = object_report_ids;
  1391. report_id_count += object_instances * object_report_ids;
  1392. object_info_address += MXT_OBJECT_TABLE_ELEMENT_SIZE;
  1393. }
  1394. mxt->rid_map =
  1395. kzalloc(sizeof(struct report_id_map) * (report_id_count + 1),
  1396. /* allocate for report_id 0, even if not used */
  1397. GFP_KERNEL);
  1398. if (mxt->rid_map == NULL) {
  1399. printk(KERN_WARNING "maXTouch: Can't allocate memory!\n");
  1400. error = -ENOMEM;
  1401. goto err_rid_map_alloc;
  1402. }
  1403. mxt->messages = kzalloc(mxt->message_size * MXT_MESSAGE_BUFFER_SIZE,
  1404. GFP_KERNEL);
  1405. if (mxt->messages == NULL) {
  1406. printk(KERN_WARNING "maXTouch: Can't allocate memory!\n");
  1407. error = -ENOMEM;
  1408. goto err_msg_alloc;
  1409. }
  1410. mxt->last_message = kzalloc(mxt->message_size, GFP_KERNEL);
  1411. if (mxt->last_message == NULL) {
  1412. printk(KERN_WARNING "maXTouch: Can't allocate memory!\n");
  1413. error = -ENOMEM;
  1414. goto err_msg_alloc;
  1415. }
  1416. mxt->report_id_count = report_id_count;
  1417. if (report_id_count > 254) { /* 0 & 255 are reserved */
  1418. dev_err(&client->dev,
  1419. "Too many maXTouch report id's [%d]\n",
  1420. report_id_count);
  1421. error = -ENXIO;
  1422. goto err_max_rid;
  1423. }
  1424. /* Create a mapping from report id to object type */
  1425. report_id = 1; /* Start from 1, 0 is reserved. */
  1426. /* Create table associating report id's with objects & instances */
  1427. for (i = 0; i < mxt->device_info.num_objs; i++) {
  1428. for (object_instance = 0;
  1429. object_instance < object_table[i].instances;
  1430. object_instance++){
  1431. first_report_id = report_id;
  1432. for (object_report_id = 0;
  1433. object_report_id < object_table[i].num_report_ids;
  1434. object_report_id++) {
  1435. mxt->rid_map[report_id].object =
  1436. object_table[i].type;
  1437. mxt->rid_map[report_id].instance =
  1438. object_instance;
  1439. mxt->rid_map[report_id].first_rid =
  1440. first_report_id;
  1441. report_id++;
  1442. }
  1443. }
  1444. }
  1445. /* Read 3 byte CRC */
  1446. error = mxt_read_block(client, object_info_address, 3, buf);
  1447. if (error < 0) {
  1448. mxt->read_fail_counter++;
  1449. dev_err(&client->dev, "Error reading CRC\n");
  1450. }
  1451. crc = (buf[2] << 16) | (buf[1] << 8) | buf[0];
  1452. if (calculate_infoblock_crc(&calculated_crc, raw_ib_data,
  1453. ib_pointer)) {
  1454. printk(KERN_WARNING "Error while calculating CRC!\n");
  1455. calculated_crc = 0;
  1456. }
  1457. kfree(raw_ib_data);
  1458. mxt_debug(DEBUG_TRACE, "\nReported info block CRC = 0x%6X\n", crc);
  1459. mxt_debug(DEBUG_TRACE, "Calculated info block CRC = 0x%6X\n\n",
  1460. calculated_crc);
  1461. if (crc == calculated_crc) {
  1462. mxt->info_block_crc = crc;
  1463. } else {
  1464. mxt->info_block_crc = 0;
  1465. printk(KERN_ALERT "maXTouch: Info block CRC invalid!\n");
  1466. }
  1467. if (debug >= DEBUG_VERBOSE) {
  1468. dev_info(&client->dev, "maXTouch: %d Objects\n",
  1469. mxt->device_info.num_objs);
  1470. for (i = 0; i < mxt->device_info.num_objs; i++) {
  1471. dev_info(&client->dev, "Type:\t\t\t[%d]: %s\n",
  1472. object_table[i].type,
  1473. object_type_name[object_table[i].type]);
  1474. dev_info(&client->dev, "\tAddress:\t0x%04X\n",
  1475. object_table[i].chip_addr);
  1476. dev_info(&client->dev, "\tSize:\t\t%d Bytes\n",
  1477. object_table[i].size);
  1478. dev_info(&client->dev, "\tInstances:\t%d\n",
  1479. object_table[i].instances);
  1480. dev_info(&client->dev, "\tReport Id's:\t%d\n",
  1481. object_table[i].num_report_ids);
  1482. }
  1483. }
  1484. return 0;
  1485. err_max_rid:
  1486. kfree(mxt->last_message);
  1487. err_msg_alloc:
  1488. kfree(mxt->rid_map);
  1489. err_rid_map_alloc:
  1490. err_object_read:
  1491. kfree(raw_ib_data);
  1492. err_ib_alloc:
  1493. kfree(object_table);
  1494. err_object_table_alloc:
  1495. return error;
  1496. }
  1497. #if defined(CONFIG_PM)
  1498. static int mxt_suspend(struct device *dev)
  1499. {
  1500. struct mxt_data *mxt = dev_get_drvdata(dev);
  1501. int error, i;
  1502. u8 t7_deepsl_data[T7_DATA_SIZE];
  1503. u16 t7_addr;
  1504. if (device_may_wakeup(dev)) {
  1505. enable_irq_wake(mxt->irq);
  1506. return 0;
  1507. }
  1508. disable_irq(mxt->irq);
  1509. flush_delayed_work_sync(&mxt->dwork);
  1510. for (i = 0; i < T7_DATA_SIZE; i++)
  1511. t7_deepsl_data[i] = 0;
  1512. t7_addr = MXT_BASE_ADDR(MXT_GEN_POWERCONFIG_T7, mxt);
  1513. /* save current power state values */
  1514. error = mxt_read_block(mxt->client, t7_addr,
  1515. ARRAY_SIZE(mxt->t7_data), mxt->t7_data);
  1516. if (error < 0)
  1517. goto err_enable_irq;
  1518. /* configure deep sleep mode */
  1519. error = mxt_write_block(mxt->client, t7_addr,
  1520. ARRAY_SIZE(t7_deepsl_data), t7_deepsl_data);
  1521. if (error < 0)
  1522. goto err_enable_irq;
  1523. /* power off the device */
  1524. if (mxt->power_on) {
  1525. error = mxt->power_on(false);
  1526. if (error) {
  1527. dev_err(dev, "power off failed");
  1528. goto err_write_block;
  1529. }
  1530. }
  1531. mxt->is_suspended = true;
  1532. return 0;
  1533. err_write_block:
  1534. mxt_write_block(mxt->client, t7_addr,
  1535. ARRAY_SIZE(mxt->t7_data), mxt->t7_data);
  1536. err_enable_irq:
  1537. enable_irq(mxt->irq);
  1538. return error;
  1539. }
  1540. static int mxt_resume(struct device *dev)
  1541. {
  1542. struct mxt_data *mxt = dev_get_drvdata(dev);
  1543. int error;
  1544. u16 t7_addr;
  1545. if (device_may_wakeup(dev)) {
  1546. disable_irq_wake(mxt->irq);
  1547. return 0;
  1548. }
  1549. if (!mxt->is_suspended)
  1550. return 0;
  1551. /* power on the device */
  1552. if (mxt->power_on) {
  1553. error = mxt->power_on(true);
  1554. if (error) {
  1555. dev_err(dev, "power on failed");
  1556. return error;
  1557. }
  1558. }
  1559. t7_addr = MXT_BASE_ADDR(MXT_GEN_POWERCONFIG_T7, mxt);
  1560. /* restore the old power state values */
  1561. error = mxt_write_block(mxt->client, t7_addr,
  1562. ARRAY_SIZE(mxt->t7_data), mxt->t7_data);
  1563. if (error < 0)
  1564. goto err_write_block;
  1565. /* Make sure we just didn't miss a interrupt. */
  1566. if (mxt->read_chg() == 0)
  1567. schedule_delayed_work(&mxt->dwork, 0);
  1568. else
  1569. enable_irq(mxt->irq);
  1570. mxt->is_suspended = false;
  1571. return 0;
  1572. err_write_block:
  1573. if (mxt->power_on)
  1574. mxt->power_on(false);
  1575. return error;
  1576. }
  1577. #if defined(CONFIG_HAS_EARLYSUSPEND)
  1578. static void mxt_early_suspend(struct early_suspend *h)
  1579. {
  1580. struct mxt_data *mxt = container_of(h, struct mxt_data, early_suspend);
  1581. mxt_suspend(&mxt->client->dev);
  1582. }
  1583. static void mxt_late_resume(struct early_suspend *h)
  1584. {
  1585. struct mxt_data *mxt = container_of(h, struct mxt_data, early_suspend);
  1586. mxt_resume(&mxt->client->dev);
  1587. }
  1588. #endif
  1589. static const struct dev_pm_ops mxt_pm_ops = {
  1590. #ifndef CONFIG_HAS_EARLYSUSPEND
  1591. .suspend = mxt_suspend,
  1592. .resume = mxt_resume,
  1593. #endif
  1594. };
  1595. #endif
  1596. static int __devinit mxt_probe(struct i2c_client *client,
  1597. const struct i2c_device_id *id)
  1598. {
  1599. struct mxt_data *mxt;
  1600. struct maxtouch_platform_data *pdata;
  1601. struct input_dev *input;
  1602. u8 *id_data;
  1603. u8 *t38_data;
  1604. u16 t38_addr;
  1605. int error;
  1606. mxt_debug(DEBUG_INFO, "mXT224: mxt_probe\n");
  1607. if (client == NULL) {
  1608. pr_debug("maXTouch: client == NULL\n");
  1609. return -EINVAL;
  1610. } else if (client->adapter == NULL) {
  1611. pr_debug("maXTouch: client->adapter == NULL\n");
  1612. return -EINVAL;
  1613. } else if (&client->dev == NULL) {
  1614. pr_debug("maXTouch: client->dev == NULL\n");
  1615. return -EINVAL;
  1616. } else if (&client->adapter->dev == NULL) {
  1617. pr_debug("maXTouch: client->adapter->dev == NULL\n");
  1618. return -EINVAL;
  1619. } else if (id == NULL) {
  1620. pr_debug("maXTouch: id == NULL\n");
  1621. return -EINVAL;
  1622. }
  1623. /* Enable runtime PM ops, start in ACTIVE mode */
  1624. error = pm_runtime_set_active(&client->dev);
  1625. if (error < 0)
  1626. dev_dbg(&client->dev, "unable to set runtime pm state\n");
  1627. pm_runtime_enable(&client->dev);
  1628. mxt_debug(DEBUG_INFO, "maXTouch driver v. %s\n", DRIVER_VERSION);
  1629. mxt_debug(DEBUG_INFO, "\t \"%s\"\n", client->name);
  1630. mxt_debug(DEBUG_INFO, "\taddr:\t0x%04x\n", client->addr);
  1631. mxt_debug(DEBUG_INFO, "\tirq:\t%d\n", client->irq);
  1632. mxt_debug(DEBUG_INFO, "\tflags:\t0x%04x\n", client->flags);
  1633. mxt_debug(DEBUG_INFO, "\tadapter:\"%s\"\n", client->adapter->name);
  1634. mxt_debug(DEBUG_INFO, "\tdevice:\t\"%s\"\n", client->dev.init_name);
  1635. mxt_debug(DEBUG_TRACE, "maXTouch driver functionality OK\n");
  1636. /* Allocate structure - we need it to identify device */
  1637. mxt = kzalloc(sizeof(struct mxt_data), GFP_KERNEL);
  1638. if (mxt == NULL) {
  1639. dev_err(&client->dev, "insufficient memory\n");
  1640. error = -ENOMEM;
  1641. goto err_mxt_alloc;
  1642. }
  1643. id_data = kmalloc(MXT_ID_BLOCK_SIZE, GFP_KERNEL);
  1644. if (id_data == NULL) {
  1645. dev_err(&client->dev, "insufficient memory\n");
  1646. error = -ENOMEM;
  1647. goto err_id_alloc;
  1648. }
  1649. input = input_allocate_device();
  1650. if (!input) {
  1651. dev_err(&client->dev, "error allocating input device\n");
  1652. error = -ENOMEM;
  1653. goto err_input_dev_alloc;
  1654. }
  1655. /* Initialize Platform data */
  1656. pdata = client->dev.platform_data;
  1657. if (pdata == NULL) {
  1658. dev_err(&client->dev, "platform data is required!\n");
  1659. error = -EINVAL;
  1660. goto err_pdata;
  1661. }
  1662. if (debug >= DEBUG_TRACE)
  1663. printk(KERN_INFO "Platform OK: pdata = 0x%08x\n",
  1664. (unsigned int) pdata);
  1665. mxt->is_suspended = false;
  1666. mxt->read_fail_counter = 0;
  1667. mxt->message_counter = 0;
  1668. if (pdata->min_x)
  1669. mxt->min_x_val = pdata->min_x;
  1670. else
  1671. mxt->min_x_val = 0;
  1672. if (pdata->min_y)
  1673. mxt->min_y_val = pdata->min_y;
  1674. else
  1675. mxt->min_y_val = 0;
  1676. mxt->max_x_val = pdata->max_x;
  1677. mxt->max_y_val = pdata->max_y;
  1678. /* Get data that is defined in board specific code. */
  1679. mxt->init_hw = pdata->init_platform_hw;
  1680. mxt->exit_hw = pdata->exit_platform_hw;
  1681. mxt->power_on = pdata->power_on;
  1682. mxt->read_chg = pdata->read_chg;
  1683. if (pdata->valid_interrupt != NULL)
  1684. mxt->valid_interrupt = pdata->valid_interrupt;
  1685. else
  1686. mxt->valid_interrupt = mxt_valid_interrupt_dummy;
  1687. if (mxt->init_hw) {
  1688. error = mxt->init_hw(client);
  1689. if (error) {
  1690. dev_err(&client->dev, "hw init failed");
  1691. goto err_init_hw;
  1692. }
  1693. }
  1694. /* power on the device */
  1695. if (mxt->power_on) {
  1696. error = mxt->power_on(true);
  1697. if (error) {
  1698. dev_err(&client->dev, "power on failed");
  1699. goto err_pwr_on;
  1700. }
  1701. }
  1702. if (debug >= DEBUG_TRACE)
  1703. printk(KERN_INFO "maXTouch driver identifying chip\n");
  1704. if (mxt_identify(client, mxt, id_data) < 0) {
  1705. dev_err(&client->dev, "Chip could not be identified\n");
  1706. error = -ENODEV;
  1707. goto err_identify;
  1708. }
  1709. /* Chip is valid and active. */
  1710. if (debug >= DEBUG_TRACE)
  1711. printk(KERN_INFO "maXTouch driver allocating input device\n");
  1712. mxt->client = client;
  1713. mxt->input = input;
  1714. INIT_DELAYED_WORK(&mxt->dwork, mxt_worker);
  1715. mutex_init(&mxt->debug_mutex);
  1716. mutex_init(&mxt->msg_mutex);
  1717. mxt_debug(DEBUG_TRACE, "maXTouch driver creating device name\n");
  1718. snprintf(
  1719. mxt->phys_name,
  1720. sizeof(mxt->phys_name),
  1721. "%s/input0",
  1722. dev_name(&client->dev)
  1723. );
  1724. input->name = "Atmel maXTouch Touchscreen controller";
  1725. input->phys = mxt->phys_name;
  1726. input->id.bustype = BUS_I2C;
  1727. input->dev.parent = &client->dev;
  1728. mxt_debug(DEBUG_INFO, "maXTouch name: \"%s\"\n", input->name);
  1729. mxt_debug(DEBUG_INFO, "maXTouch phys: \"%s\"\n", input->phys);
  1730. mxt_debug(DEBUG_INFO, "maXTouch driver setting abs parameters\n");
  1731. set_bit(BTN_TOUCH, input->keybit);
  1732. set_bit(INPUT_PROP_DIRECT, input->propbit);
  1733. /* Single touch */
  1734. input_set_abs_params(input, ABS_X, mxt->min_x_val,
  1735. mxt->max_x_val, 0, 0);
  1736. input_set_abs_params(input, ABS_Y, mxt->min_y_val,
  1737. mxt->max_y_val, 0, 0);
  1738. input_set_abs_params(input, ABS_PRESSURE, 0, MXT_MAX_REPORTED_PRESSURE,
  1739. 0, 0);
  1740. input_set_abs_params(input, ABS_TOOL_WIDTH, 0, MXT_MAX_REPORTED_WIDTH,
  1741. 0, 0);
  1742. /* Multitouch */
  1743. input_set_abs_params(input, ABS_MT_POSITION_X, mxt->min_x_val,
  1744. mxt->max_x_val, 0, 0);
  1745. input_set_abs_params(input, ABS_MT_POSITION_Y, mxt->min_y_val,
  1746. mxt->max_y_val, 0, 0);
  1747. input_set_abs_params(input, ABS_MT_TOUCH_MAJOR, 0, MXT_MAX_TOUCH_SIZE,
  1748. 0, 0);
  1749. input_set_abs_params(input, ABS_MT_TRACKING_ID, 0, MXT_MAX_NUM_TOUCHES,
  1750. 0, 0);
  1751. __set_bit(EV_ABS, input->evbit);
  1752. __set_bit(EV_SYN, input->evbit);
  1753. __set_bit(EV_KEY, input->evbit);
  1754. __set_bit(EV_MSC, input->evbit);
  1755. input->mscbit[0] = BIT_MASK(MSC_GESTURE);
  1756. mxt_debug(DEBUG_TRACE, "maXTouch driver setting client data\n");
  1757. i2c_set_clientdata(client, mxt);
  1758. mxt_debug(DEBUG_TRACE, "maXTouch driver setting drv data\n");
  1759. input_set_drvdata(input, mxt);
  1760. mxt_debug(DEBUG_TRACE, "maXTouch driver input register device\n");
  1761. error = input_register_device(mxt->input);
  1762. if (error < 0) {
  1763. dev_err(&client->dev,
  1764. "Failed to register input device\n");
  1765. goto err_register_device;
  1766. }
  1767. error = mxt_read_object_table(client, mxt, id_data);
  1768. if (error < 0)
  1769. goto err_read_ot;
  1770. /* Create debugfs entries. */
  1771. mxt->debug_dir = debugfs_create_dir("maXTouch", NULL);
  1772. if (mxt->debug_dir == ERR_PTR(-ENODEV)) {
  1773. /* debugfs is not enabled. */
  1774. printk(KERN_WARNING "debugfs not enabled in kernel\n");
  1775. } else if (mxt->debug_dir == NULL) {
  1776. printk(KERN_WARNING "error creating debugfs dir\n");
  1777. } else {
  1778. mxt_debug(DEBUG_TRACE, "created \"maXTouch\" debugfs dir\n");
  1779. debugfs_create_file("deltas", S_IRUSR, mxt->debug_dir, mxt,
  1780. &delta_fops);
  1781. debugfs_create_file("refs", S_IRUSR, mxt->debug_dir, mxt,
  1782. &refs_fops);
  1783. }
  1784. /* Create character device nodes for reading & writing registers */
  1785. mxt->mxt_class = class_create(THIS_MODULE, "maXTouch_memory");
  1786. if (IS_ERR(mxt->mxt_class)){
  1787. printk(KERN_WARNING "class create failed! exiting...");
  1788. goto err_class_create;
  1789. }
  1790. /* 2 numbers; one for memory and one for messages */
  1791. error = alloc_chrdev_region(&mxt->dev_num, 0, 2,
  1792. "maXTouch_memory");
  1793. mxt_debug(DEBUG_VERBOSE,
  1794. "device number %d allocated!\n", MAJOR(mxt->dev_num));
  1795. if (error){
  1796. printk(KERN_WARNING "Error registering device\n");
  1797. }
  1798. cdev_init(&mxt->cdev, &mxt_memory_fops);
  1799. cdev_init(&mxt->cdev_messages, &mxt_message_fops);
  1800. mxt_debug(DEBUG_VERBOSE, "cdev initialized\n");
  1801. mxt->cdev.owner = THIS_MODULE;
  1802. mxt->cdev_messages.owner = THIS_MODULE;
  1803. error = cdev_add(&mxt->cdev, mxt->dev_num, 1);
  1804. if (error){
  1805. printk(KERN_WARNING "Bad cdev\n");
  1806. }
  1807. error = cdev_add(&mxt->cdev_messages, mxt->dev_num + 1, 1);
  1808. if (error){
  1809. printk(KERN_WARNING "Bad cdev\n");
  1810. }
  1811. mxt_debug(DEBUG_VERBOSE, "cdev added\n");
  1812. device_create(mxt->mxt_class, NULL, MKDEV(MAJOR(mxt->dev_num), 0), NULL,
  1813. "maXTouch");
  1814. device_create(mxt->mxt_class, NULL, MKDEV(MAJOR(mxt->dev_num), 1), NULL,
  1815. "maXTouch_messages");
  1816. mxt->msg_buffer_startp = 0;
  1817. mxt->msg_buffer_endp = 0;
  1818. /* Allocate the interrupt */
  1819. mxt_debug(DEBUG_TRACE, "maXTouch driver allocating interrupt...\n");
  1820. mxt->irq = client->irq;
  1821. mxt->valid_irq_counter = 0;
  1822. mxt->invalid_irq_counter = 0;
  1823. mxt->irq_counter = 0;
  1824. if (mxt->irq) {
  1825. /* Try to request IRQ with falling edge first. This is
  1826. * not always supported. If it fails, try with any edge. */
  1827. error = request_irq(mxt->irq,
  1828. mxt_irq_handler,
  1829. IRQF_TRIGGER_FALLING,
  1830. client->dev.driver->name,
  1831. mxt);
  1832. if (error < 0) {
  1833. /* TODO: why only 0 works on STK1000? */
  1834. error = request_irq(mxt->irq,
  1835. mxt_irq_handler,
  1836. 0,
  1837. client->dev.driver->name,
  1838. mxt);
  1839. }
  1840. if (error < 0) {
  1841. dev_err(&client->dev,
  1842. "failed to allocate irq %d\n", mxt->irq);
  1843. goto err_irq;
  1844. }
  1845. }
  1846. if (debug > DEBUG_INFO)
  1847. dev_info(&client->dev, "touchscreen, irq %d\n", mxt->irq);
  1848. t38_data = kmalloc(t38_size*sizeof(u8), GFP_KERNEL);
  1849. if (t38_data == NULL) {
  1850. dev_err(&client->dev, "insufficient memory\n");
  1851. error = -ENOMEM;
  1852. goto err_t38;
  1853. }
  1854. t38_addr = MXT_BASE_ADDR(MXT_USER_INFO_T38, mxt);
  1855. mxt_read_block(client, t38_addr, t38_size, t38_data);
  1856. dev_info(&client->dev, "VERSION:%02x.%02x.%02x, DATE: %d/%d/%d\n",
  1857. t38_data[0], t38_data[1], t38_data[2],
  1858. t38_data[3], t38_data[4], t38_data[5]);
  1859. /* Schedule a worker routine to read any messages that might have
  1860. * been sent before interrupts were enabled. */
  1861. cancel_delayed_work(&mxt->dwork);
  1862. disable_irq(mxt->irq);
  1863. schedule_delayed_work(&mxt->dwork, 0);
  1864. kfree(t38_data);
  1865. kfree(id_data);
  1866. device_init_wakeup(&client->dev, pdata->wakeup);
  1867. #if defined(CONFIG_HAS_EARLYSUSPEND)
  1868. mxt->early_suspend.level = EARLY_SUSPEND_LEVEL_BLANK_SCREEN +
  1869. MXT_SUSPEND_LEVEL;
  1870. mxt->early_suspend.suspend = mxt_early_suspend;
  1871. mxt->early_suspend.resume = mxt_late_resume;
  1872. register_early_suspend(&mxt->early_suspend);
  1873. #endif
  1874. return 0;
  1875. err_t38:
  1876. free_irq(mxt->irq, mxt);
  1877. err_irq:
  1878. kfree(mxt->rid_map);
  1879. kfree(mxt->object_table);
  1880. kfree(mxt->last_message);
  1881. err_class_create:
  1882. if (mxt->debug_dir)
  1883. debugfs_remove(mxt->debug_dir);
  1884. kfree(mxt->last_message);
  1885. kfree(mxt->rid_map);
  1886. kfree(mxt->object_table);
  1887. err_read_ot:
  1888. input_unregister_device(mxt->input);
  1889. mxt->input = NULL;
  1890. err_register_device:
  1891. mutex_destroy(&mxt->debug_mutex);
  1892. mutex_destroy(&mxt->msg_mutex);
  1893. err_identify:
  1894. if (mxt->power_on)
  1895. mxt->power_on(false);
  1896. err_pwr_on:
  1897. if (mxt->exit_hw != NULL)
  1898. mxt->exit_hw(client);
  1899. err_init_hw:
  1900. err_pdata:
  1901. input_free_device(input);
  1902. err_input_dev_alloc:
  1903. kfree(id_data);
  1904. err_id_alloc:
  1905. kfree(mxt);
  1906. err_mxt_alloc:
  1907. pm_runtime_set_suspended(&client->dev);
  1908. pm_runtime_disable(&client->dev);
  1909. return error;
  1910. }
  1911. static int __devexit mxt_remove(struct i2c_client *client)
  1912. {
  1913. struct mxt_data *mxt;
  1914. pm_runtime_set_suspended(&client->dev);
  1915. pm_runtime_disable(&client->dev);
  1916. mxt = i2c_get_clientdata(client);
  1917. /* Remove debug dir entries */
  1918. debugfs_remove_recursive(mxt->debug_dir);
  1919. device_init_wakeup(&client->dev, 0);
  1920. #if defined(CONFIG_HAS_EARLYSUSPEND)
  1921. unregister_early_suspend(&mxt->early_suspend);
  1922. #endif
  1923. if (mxt != NULL) {
  1924. if (mxt->power_on)
  1925. mxt->power_on(false);
  1926. if (mxt->exit_hw != NULL)
  1927. mxt->exit_hw(client);
  1928. if (mxt->irq) {
  1929. free_irq(mxt->irq, mxt);
  1930. }
  1931. unregister_chrdev_region(mxt->dev_num, 2);
  1932. device_destroy(mxt->mxt_class, MKDEV(MAJOR(mxt->dev_num), 0));
  1933. device_destroy(mxt->mxt_class, MKDEV(MAJOR(mxt->dev_num), 1));
  1934. cdev_del(&mxt->cdev);
  1935. cdev_del(&mxt->cdev_messages);
  1936. cancel_delayed_work_sync(&mxt->dwork);
  1937. input_unregister_device(mxt->input);
  1938. class_destroy(mxt->mxt_class);
  1939. debugfs_remove(mxt->debug_dir);
  1940. kfree(mxt->rid_map);
  1941. kfree(mxt->object_table);
  1942. kfree(mxt->last_message);
  1943. }
  1944. kfree(mxt);
  1945. i2c_set_clientdata(client, NULL);
  1946. if (debug >= DEBUG_TRACE)
  1947. dev_info(&client->dev, "Touchscreen unregistered\n");
  1948. return 0;
  1949. }
  1950. static const struct i2c_device_id mxt_idtable[] = {
  1951. {"maXTouch", 0,},
  1952. { }
  1953. };
  1954. MODULE_DEVICE_TABLE(i2c, mxt_idtable);
  1955. static struct i2c_driver mxt_driver = {
  1956. .driver = {
  1957. .name = "maXTouch",
  1958. .owner = THIS_MODULE,
  1959. #if defined(CONFIG_PM)
  1960. .pm = &mxt_pm_ops,
  1961. #endif
  1962. },
  1963. .id_table = mxt_idtable,
  1964. .probe = mxt_probe,
  1965. .remove = __devexit_p(mxt_remove),
  1966. };
  1967. static int __init mxt_init(void)
  1968. {
  1969. int err;
  1970. err = i2c_add_driver(&mxt_driver);
  1971. if (err) {
  1972. printk(KERN_WARNING "Adding maXTouch driver failed "
  1973. "(errno = %d)\n", err);
  1974. } else {
  1975. mxt_debug(DEBUG_TRACE, "Successfully added driver %s\n",
  1976. mxt_driver.driver.name);
  1977. }
  1978. return err;
  1979. }
  1980. static void __exit mxt_cleanup(void)
  1981. {
  1982. i2c_del_driver(&mxt_driver);
  1983. }
  1984. module_init(mxt_init);
  1985. module_exit(mxt_cleanup);
  1986. MODULE_AUTHOR("Iiro Valkonen");
  1987. MODULE_DESCRIPTION("Driver for Atmel maXTouch Touchscreen Controller");
  1988. MODULE_LICENSE("GPL");