formike.c 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513
  1. // SPDX-License-Identifier: GPL-2.0
  2. /*
  3. * LCD: Formike, TFT 4.3", 480x800, RGB24, KWH043ST20-F01, DriverIC NT35510-16
  4. * LCD initialization via SPI
  5. * Based on:
  6. *
  7. */
  8. #include <common.h>
  9. #include <errno.h>
  10. #include <log.h>
  11. #include <spi.h>
  12. #include <linux/delay.h>
  13. #define TAG_READ 0x80
  14. #define TAG_WRITE 0x00
  15. #define TAG_DATA 0x40
  16. #define TAG_COMMAND 0x00
  17. #define TAG_ADDR_H 0x20
  18. #define TAG_ADDR_L 0x00
  19. static int spi_write_tag_val(struct spi_slave *spi, unsigned char tag,
  20. unsigned char val)
  21. {
  22. unsigned long flags = SPI_XFER_BEGIN;
  23. u8 buf[2];
  24. int ret;
  25. buf[0] = tag;
  26. ret = spi_xfer(spi, 8, buf, NULL, flags);
  27. buf[0] = val;
  28. flags = SPI_XFER_END;
  29. ret = spi_xfer(spi, 8, buf, NULL, flags);
  30. #ifdef KWH043ST20_F01_SPI_DEBUG
  31. printf("spi_write_tag_val: tag=%02X, val=%02X ret: %d\n",
  32. tag, val, ret);
  33. #endif /* KWH043ST20_F01_SPI_DEBUG */
  34. if (ret)
  35. debug("%s: Failed to send: %d\n", __func__, ret);
  36. return ret;
  37. }
  38. static void spi_write_dat(struct spi_slave *spi, unsigned int val)
  39. {
  40. spi_write_tag_val(spi, TAG_WRITE|TAG_DATA, val);
  41. }
  42. static void spi_write_com(struct spi_slave *spi, unsigned int addr)
  43. {
  44. spi_write_tag_val(spi, TAG_WRITE|TAG_COMMAND|TAG_ADDR_H,
  45. (addr & 0xff00) >> 8);
  46. spi_write_tag_val(spi, TAG_WRITE|TAG_COMMAND|TAG_ADDR_L,
  47. (addr & 0x00ff) >> 0);
  48. }
  49. int kwh043st20_f01_spi_startup(unsigned int bus, unsigned int cs,
  50. unsigned int max_hz, unsigned int spi_mode)
  51. {
  52. struct spi_slave *spi;
  53. int ret;
  54. spi = spi_setup_slave(bus, cs, max_hz, spi_mode);
  55. if (!spi) {
  56. debug("%s: Failed to set up slave\n", __func__);
  57. return -1;
  58. }
  59. ret = spi_claim_bus(spi);
  60. if (ret) {
  61. debug("%s: Failed to claim SPI bus: %d\n", __func__, ret);
  62. goto err_claim_bus;
  63. }
  64. /* LV2 Page 1 enable */
  65. spi_write_com(spi, 0xF000); spi_write_dat(spi, 0x55);
  66. spi_write_com(spi, 0xF001); spi_write_dat(spi, 0xAA);
  67. spi_write_com(spi, 0xF002); spi_write_dat(spi, 0x52);
  68. spi_write_com(spi, 0xF003); spi_write_dat(spi, 0x08);
  69. spi_write_com(spi, 0xF004); spi_write_dat(spi, 0x01);
  70. /* AVDD Set AVDD 5.2V */
  71. spi_write_com(spi, 0xB000); spi_write_dat(spi, 0x0D);
  72. spi_write_com(spi, 0xB001); spi_write_dat(spi, 0x0D);
  73. spi_write_com(spi, 0xB002); spi_write_dat(spi, 0x0D);
  74. /* AVDD ratio */
  75. spi_write_com(spi, 0xB600); spi_write_dat(spi, 0x34);
  76. spi_write_com(spi, 0xB601); spi_write_dat(spi, 0x34);
  77. spi_write_com(spi, 0xB602); spi_write_dat(spi, 0x34);
  78. /* AVEE -5.2V */
  79. spi_write_com(spi, 0xB100); spi_write_dat(spi, 0x0D);
  80. spi_write_com(spi, 0xB101); spi_write_dat(spi, 0x0D);
  81. spi_write_com(spi, 0xB102); spi_write_dat(spi, 0x0D);
  82. /* AVEE ratio */
  83. spi_write_com(spi, 0xB700); spi_write_dat(spi, 0x35);
  84. spi_write_com(spi, 0xB701); spi_write_dat(spi, 0x35);
  85. spi_write_com(spi, 0xB702); spi_write_dat(spi, 0x35);
  86. /* VCL -2.5V */
  87. spi_write_com(spi, 0xB200); spi_write_dat(spi, 0x00);
  88. spi_write_com(spi, 0xB201); spi_write_dat(spi, 0x00);
  89. spi_write_com(spi, 0xB202); spi_write_dat(spi, 0x00);
  90. /* VCL ratio */
  91. spi_write_com(spi, 0xB800); spi_write_dat(spi, 0x24);
  92. spi_write_com(spi, 0xB801); spi_write_dat(spi, 0x24);
  93. spi_write_com(spi, 0xB802); spi_write_dat(spi, 0x24);
  94. /* VGH 15V */
  95. spi_write_com(spi, 0xBF00); spi_write_dat(spi, 0x01);
  96. spi_write_com(spi, 0xB300); spi_write_dat(spi, 0x08);
  97. spi_write_com(spi, 0xB301); spi_write_dat(spi, 0x08);
  98. spi_write_com(spi, 0xB302); spi_write_dat(spi, 0x08);
  99. /* VGH ratio */
  100. spi_write_com(spi, 0xB900); spi_write_dat(spi, 0x34);
  101. spi_write_com(spi, 0xB901); spi_write_dat(spi, 0x34);
  102. spi_write_com(spi, 0xB902); spi_write_dat(spi, 0x34);
  103. /* VGLX ratio */
  104. spi_write_com(spi, 0xBA00); spi_write_dat(spi, 0x24);
  105. spi_write_com(spi, 0xBA01); spi_write_dat(spi, 0x24);
  106. spi_write_com(spi, 0xBA02); spi_write_dat(spi, 0x24);
  107. /* VGMP/VGSP 4.7V/0V */
  108. spi_write_com(spi, 0xBC00); spi_write_dat(spi, 0x00);
  109. spi_write_com(spi, 0xBC01); spi_write_dat(spi, 0x88);
  110. spi_write_com(spi, 0xBC02); spi_write_dat(spi, 0x00);
  111. /* VGMN/VGSN -4.7V/0V */
  112. spi_write_com(spi, 0xBD00); spi_write_dat(spi, 0x00);
  113. spi_write_com(spi, 0xBD01); spi_write_dat(spi, 0x88);
  114. spi_write_com(spi, 0xBD02); spi_write_dat(spi, 0x00);
  115. /* VCOM 1.525V */
  116. spi_write_com(spi, 0xBE00); spi_write_dat(spi, 0x00);
  117. spi_write_com(spi, 0xBE01); spi_write_dat(spi, 0x7A);
  118. /* Gamma Setting */
  119. spi_write_com(spi, 0xD100); spi_write_dat(spi, 0x00);
  120. spi_write_com(spi, 0xD101); spi_write_dat(spi, 0x05);
  121. spi_write_com(spi, 0xD102); spi_write_dat(spi, 0x00);
  122. spi_write_com(spi, 0xD103); spi_write_dat(spi, 0x15);
  123. spi_write_com(spi, 0xD104); spi_write_dat(spi, 0x00);
  124. spi_write_com(spi, 0xD105); spi_write_dat(spi, 0x30);
  125. spi_write_com(spi, 0xD106); spi_write_dat(spi, 0x00);
  126. spi_write_com(spi, 0xD107); spi_write_dat(spi, 0x47);
  127. spi_write_com(spi, 0xD108); spi_write_dat(spi, 0x00);
  128. spi_write_com(spi, 0xD109); spi_write_dat(spi, 0x5B);
  129. spi_write_com(spi, 0xD10A); spi_write_dat(spi, 0x00);
  130. spi_write_com(spi, 0xD10B); spi_write_dat(spi, 0x7D);
  131. spi_write_com(spi, 0xD10C); spi_write_dat(spi, 0x00);
  132. spi_write_com(spi, 0xD10D); spi_write_dat(spi, 0x9D);
  133. spi_write_com(spi, 0xD10E); spi_write_dat(spi, 0x00);
  134. spi_write_com(spi, 0xD10F); spi_write_dat(spi, 0xCC);
  135. spi_write_com(spi, 0xD110); spi_write_dat(spi, 0x00);
  136. spi_write_com(spi, 0xD111); spi_write_dat(spi, 0xF3);
  137. spi_write_com(spi, 0xD112); spi_write_dat(spi, 0x01);
  138. spi_write_com(spi, 0xD113); spi_write_dat(spi, 0x32);
  139. spi_write_com(spi, 0xD114); spi_write_dat(spi, 0x01);
  140. spi_write_com(spi, 0xD115); spi_write_dat(spi, 0x63);
  141. spi_write_com(spi, 0xD116); spi_write_dat(spi, 0x01);
  142. spi_write_com(spi, 0xD117); spi_write_dat(spi, 0xB1);
  143. spi_write_com(spi, 0xD118); spi_write_dat(spi, 0x01);
  144. spi_write_com(spi, 0xD119); spi_write_dat(spi, 0xF0);
  145. spi_write_com(spi, 0xD11A); spi_write_dat(spi, 0x01);
  146. spi_write_com(spi, 0xD11B); spi_write_dat(spi, 0xF2);
  147. spi_write_com(spi, 0xD11C); spi_write_dat(spi, 0x02);
  148. spi_write_com(spi, 0xD11D); spi_write_dat(spi, 0x2A);
  149. spi_write_com(spi, 0xD11E); spi_write_dat(spi, 0x02);
  150. spi_write_com(spi, 0xD11F); spi_write_dat(spi, 0x67);
  151. spi_write_com(spi, 0xD120); spi_write_dat(spi, 0x02);
  152. spi_write_com(spi, 0xD121); spi_write_dat(spi, 0x90);
  153. spi_write_com(spi, 0xD122); spi_write_dat(spi, 0x02);
  154. spi_write_com(spi, 0xD123); spi_write_dat(spi, 0xCB);
  155. spi_write_com(spi, 0xD124); spi_write_dat(spi, 0x02);
  156. spi_write_com(spi, 0xD125); spi_write_dat(spi, 0xF2);
  157. spi_write_com(spi, 0xD126); spi_write_dat(spi, 0x03);
  158. spi_write_com(spi, 0xD127); spi_write_dat(spi, 0x2A);
  159. spi_write_com(spi, 0xD128); spi_write_dat(spi, 0x03);
  160. spi_write_com(spi, 0xD129); spi_write_dat(spi, 0x51);
  161. spi_write_com(spi, 0xD12A); spi_write_dat(spi, 0x03);
  162. spi_write_com(spi, 0xD12B); spi_write_dat(spi, 0x80);
  163. spi_write_com(spi, 0xD12C); spi_write_dat(spi, 0x03);
  164. spi_write_com(spi, 0xD12D); spi_write_dat(spi, 0x9F);
  165. spi_write_com(spi, 0xD12E); spi_write_dat(spi, 0x03);
  166. spi_write_com(spi, 0xD12F); spi_write_dat(spi, 0xBE);
  167. spi_write_com(spi, 0xD130); spi_write_dat(spi, 0x03);
  168. spi_write_com(spi, 0xD131); spi_write_dat(spi, 0xF9);
  169. spi_write_com(spi, 0xD132); spi_write_dat(spi, 0x03);
  170. spi_write_com(spi, 0xD133); spi_write_dat(spi, 0xFF);
  171. spi_write_com(spi, 0xD200); spi_write_dat(spi, 0x00);
  172. spi_write_com(spi, 0xD201); spi_write_dat(spi, 0x05);
  173. spi_write_com(spi, 0xD202); spi_write_dat(spi, 0x00);
  174. spi_write_com(spi, 0xD203); spi_write_dat(spi, 0x15);
  175. spi_write_com(spi, 0xD204); spi_write_dat(spi, 0x00);
  176. spi_write_com(spi, 0xD205); spi_write_dat(spi, 0x30);
  177. spi_write_com(spi, 0xD206); spi_write_dat(spi, 0x00);
  178. spi_write_com(spi, 0xD207); spi_write_dat(spi, 0x47);
  179. spi_write_com(spi, 0xD208); spi_write_dat(spi, 0x00);
  180. spi_write_com(spi, 0xD209); spi_write_dat(spi, 0x5B);
  181. spi_write_com(spi, 0xD20A); spi_write_dat(spi, 0x00);
  182. spi_write_com(spi, 0xD20B); spi_write_dat(spi, 0x7D);
  183. spi_write_com(spi, 0xD20C); spi_write_dat(spi, 0x00);
  184. spi_write_com(spi, 0xD20D); spi_write_dat(spi, 0x9D);
  185. spi_write_com(spi, 0xD20E); spi_write_dat(spi, 0x00);
  186. spi_write_com(spi, 0xD20F); spi_write_dat(spi, 0xCC);
  187. spi_write_com(spi, 0xD210); spi_write_dat(spi, 0x00);
  188. spi_write_com(spi, 0xD211); spi_write_dat(spi, 0xF3);
  189. spi_write_com(spi, 0xD212); spi_write_dat(spi, 0x01);
  190. spi_write_com(spi, 0xD213); spi_write_dat(spi, 0x32);
  191. spi_write_com(spi, 0xD214); spi_write_dat(spi, 0x01);
  192. spi_write_com(spi, 0xD215); spi_write_dat(spi, 0x63);
  193. spi_write_com(spi, 0xD216); spi_write_dat(spi, 0x01);
  194. spi_write_com(spi, 0xD217); spi_write_dat(spi, 0xB1);
  195. spi_write_com(spi, 0xD218); spi_write_dat(spi, 0x01);
  196. spi_write_com(spi, 0xD219); spi_write_dat(spi, 0xF0);
  197. spi_write_com(spi, 0xD21A); spi_write_dat(spi, 0x01);
  198. spi_write_com(spi, 0xD21B); spi_write_dat(spi, 0xF2);
  199. spi_write_com(spi, 0xD21C); spi_write_dat(spi, 0x02);
  200. spi_write_com(spi, 0xD21D); spi_write_dat(spi, 0x2A);
  201. spi_write_com(spi, 0xD21E); spi_write_dat(spi, 0x02);
  202. spi_write_com(spi, 0xD21F); spi_write_dat(spi, 0x67);
  203. spi_write_com(spi, 0xD220); spi_write_dat(spi, 0x02);
  204. spi_write_com(spi, 0xD221); spi_write_dat(spi, 0x90);
  205. spi_write_com(spi, 0xD222); spi_write_dat(spi, 0x02);
  206. spi_write_com(spi, 0xD223); spi_write_dat(spi, 0xCB);
  207. spi_write_com(spi, 0xD224); spi_write_dat(spi, 0x02);
  208. spi_write_com(spi, 0xD225); spi_write_dat(spi, 0xF2);
  209. spi_write_com(spi, 0xD226); spi_write_dat(spi, 0x03);
  210. spi_write_com(spi, 0xD227); spi_write_dat(spi, 0x2A);
  211. spi_write_com(spi, 0xD228); spi_write_dat(spi, 0x03);
  212. spi_write_com(spi, 0xD229); spi_write_dat(spi, 0x51);
  213. spi_write_com(spi, 0xD22A); spi_write_dat(spi, 0x03);
  214. spi_write_com(spi, 0xD22B); spi_write_dat(spi, 0x80);
  215. spi_write_com(spi, 0xD22C); spi_write_dat(spi, 0x03);
  216. spi_write_com(spi, 0xD22D); spi_write_dat(spi, 0x9F);
  217. spi_write_com(spi, 0xD22E); spi_write_dat(spi, 0x03);
  218. spi_write_com(spi, 0xD22F); spi_write_dat(spi, 0xBE);
  219. spi_write_com(spi, 0xD230); spi_write_dat(spi, 0x03);
  220. spi_write_com(spi, 0xD231); spi_write_dat(spi, 0xF9);
  221. spi_write_com(spi, 0xD232); spi_write_dat(spi, 0x03);
  222. spi_write_com(spi, 0xD233); spi_write_dat(spi, 0xFF);
  223. spi_write_com(spi, 0xD300); spi_write_dat(spi, 0x00);
  224. spi_write_com(spi, 0xD301); spi_write_dat(spi, 0x05);
  225. spi_write_com(spi, 0xD302); spi_write_dat(spi, 0x00);
  226. spi_write_com(spi, 0xD303); spi_write_dat(spi, 0x15);
  227. spi_write_com(spi, 0xD304); spi_write_dat(spi, 0x00);
  228. spi_write_com(spi, 0xD305); spi_write_dat(spi, 0x30);
  229. spi_write_com(spi, 0xD306); spi_write_dat(spi, 0x00);
  230. spi_write_com(spi, 0xD307); spi_write_dat(spi, 0x47);
  231. spi_write_com(spi, 0xD308); spi_write_dat(spi, 0x00);
  232. spi_write_com(spi, 0xD309); spi_write_dat(spi, 0x5B);
  233. spi_write_com(spi, 0xD30A); spi_write_dat(spi, 0x00);
  234. spi_write_com(spi, 0xD30B); spi_write_dat(spi, 0x7D);
  235. spi_write_com(spi, 0xD30C); spi_write_dat(spi, 0x00);
  236. spi_write_com(spi, 0xD30D); spi_write_dat(spi, 0x9D);
  237. spi_write_com(spi, 0xD30E); spi_write_dat(spi, 0x00);
  238. spi_write_com(spi, 0xD30F); spi_write_dat(spi, 0xCC);
  239. spi_write_com(spi, 0xD310); spi_write_dat(spi, 0x00);
  240. spi_write_com(spi, 0xD311); spi_write_dat(spi, 0xF3);
  241. spi_write_com(spi, 0xD312); spi_write_dat(spi, 0x01);
  242. spi_write_com(spi, 0xD313); spi_write_dat(spi, 0x32);
  243. spi_write_com(spi, 0xD314); spi_write_dat(spi, 0x01);
  244. spi_write_com(spi, 0xD315); spi_write_dat(spi, 0x63);
  245. spi_write_com(spi, 0xD316); spi_write_dat(spi, 0x01);
  246. spi_write_com(spi, 0xD317); spi_write_dat(spi, 0xB1);
  247. spi_write_com(spi, 0xD318); spi_write_dat(spi, 0x01);
  248. spi_write_com(spi, 0xD319); spi_write_dat(spi, 0xF0);
  249. spi_write_com(spi, 0xD31A); spi_write_dat(spi, 0x01);
  250. spi_write_com(spi, 0xD31B); spi_write_dat(spi, 0xF2);
  251. spi_write_com(spi, 0xD31C); spi_write_dat(spi, 0x02);
  252. spi_write_com(spi, 0xD31D); spi_write_dat(spi, 0x2A);
  253. spi_write_com(spi, 0xD31E); spi_write_dat(spi, 0x02);
  254. spi_write_com(spi, 0xD31F); spi_write_dat(spi, 0x67);
  255. spi_write_com(spi, 0xD320); spi_write_dat(spi, 0x02);
  256. spi_write_com(spi, 0xD321); spi_write_dat(spi, 0x90);
  257. spi_write_com(spi, 0xD322); spi_write_dat(spi, 0x02);
  258. spi_write_com(spi, 0xD323); spi_write_dat(spi, 0xCB);
  259. spi_write_com(spi, 0xD324); spi_write_dat(spi, 0x02);
  260. spi_write_com(spi, 0xD325); spi_write_dat(spi, 0xF2);
  261. spi_write_com(spi, 0xD326); spi_write_dat(spi, 0x03);
  262. spi_write_com(spi, 0xD327); spi_write_dat(spi, 0x2A);
  263. spi_write_com(spi, 0xD328); spi_write_dat(spi, 0x03);
  264. spi_write_com(spi, 0xD329); spi_write_dat(spi, 0x51);
  265. spi_write_com(spi, 0xD32A); spi_write_dat(spi, 0x03);
  266. spi_write_com(spi, 0xD32B); spi_write_dat(spi, 0x80);
  267. spi_write_com(spi, 0xD32C); spi_write_dat(spi, 0x03);
  268. spi_write_com(spi, 0xD32D); spi_write_dat(spi, 0x9F);
  269. spi_write_com(spi, 0xD32E); spi_write_dat(spi, 0x03);
  270. spi_write_com(spi, 0xD32F); spi_write_dat(spi, 0xBE);
  271. spi_write_com(spi, 0xD330); spi_write_dat(spi, 0x03);
  272. spi_write_com(spi, 0xD331); spi_write_dat(spi, 0xF9);
  273. spi_write_com(spi, 0xD332); spi_write_dat(spi, 0x03);
  274. spi_write_com(spi, 0xD333); spi_write_dat(spi, 0xFF);
  275. spi_write_com(spi, 0xD400); spi_write_dat(spi, 0x00);
  276. spi_write_com(spi, 0xD401); spi_write_dat(spi, 0x05);
  277. spi_write_com(spi, 0xD402); spi_write_dat(spi, 0x00);
  278. spi_write_com(spi, 0xD403); spi_write_dat(spi, 0x15);
  279. spi_write_com(spi, 0xD404); spi_write_dat(spi, 0x00);
  280. spi_write_com(spi, 0xD405); spi_write_dat(spi, 0x30);
  281. spi_write_com(spi, 0xD406); spi_write_dat(spi, 0x00);
  282. spi_write_com(spi, 0xD407); spi_write_dat(spi, 0x47);
  283. spi_write_com(spi, 0xD408); spi_write_dat(spi, 0x00);
  284. spi_write_com(spi, 0xD409); spi_write_dat(spi, 0x5B);
  285. spi_write_com(spi, 0xD40A); spi_write_dat(spi, 0x00);
  286. spi_write_com(spi, 0xD40B); spi_write_dat(spi, 0x7D);
  287. spi_write_com(spi, 0xD40C); spi_write_dat(spi, 0x00);
  288. spi_write_com(spi, 0xD40D); spi_write_dat(spi, 0x9D);
  289. spi_write_com(spi, 0xD40E); spi_write_dat(spi, 0x00);
  290. spi_write_com(spi, 0xD40F); spi_write_dat(spi, 0xCC);
  291. spi_write_com(spi, 0xD410); spi_write_dat(spi, 0x00);
  292. spi_write_com(spi, 0xD411); spi_write_dat(spi, 0xF3);
  293. spi_write_com(spi, 0xD412); spi_write_dat(spi, 0x01);
  294. spi_write_com(spi, 0xD413); spi_write_dat(spi, 0x32);
  295. spi_write_com(spi, 0xD414); spi_write_dat(spi, 0x01);
  296. spi_write_com(spi, 0xD415); spi_write_dat(spi, 0x63);
  297. spi_write_com(spi, 0xD416); spi_write_dat(spi, 0x01);
  298. spi_write_com(spi, 0xD417); spi_write_dat(spi, 0xB1);
  299. spi_write_com(spi, 0xD418); spi_write_dat(spi, 0x01);
  300. spi_write_com(spi, 0xD419); spi_write_dat(spi, 0xF0);
  301. spi_write_com(spi, 0xD41A); spi_write_dat(spi, 0x01);
  302. spi_write_com(spi, 0xD41B); spi_write_dat(spi, 0xF2);
  303. spi_write_com(spi, 0xD41C); spi_write_dat(spi, 0x02);
  304. spi_write_com(spi, 0xD41D); spi_write_dat(spi, 0x2A);
  305. spi_write_com(spi, 0xD41E); spi_write_dat(spi, 0x02);
  306. spi_write_com(spi, 0xD41F); spi_write_dat(spi, 0x67);
  307. spi_write_com(spi, 0xD420); spi_write_dat(spi, 0x02);
  308. spi_write_com(spi, 0xD421); spi_write_dat(spi, 0x90);
  309. spi_write_com(spi, 0xD422); spi_write_dat(spi, 0x02);
  310. spi_write_com(spi, 0xD423); spi_write_dat(spi, 0xCB);
  311. spi_write_com(spi, 0xD424); spi_write_dat(spi, 0x02);
  312. spi_write_com(spi, 0xD425); spi_write_dat(spi, 0xF2);
  313. spi_write_com(spi, 0xD426); spi_write_dat(spi, 0x03);
  314. spi_write_com(spi, 0xD427); spi_write_dat(spi, 0x2A);
  315. spi_write_com(spi, 0xD428); spi_write_dat(spi, 0x03);
  316. spi_write_com(spi, 0xD429); spi_write_dat(spi, 0x51);
  317. spi_write_com(spi, 0xD42A); spi_write_dat(spi, 0x03);
  318. spi_write_com(spi, 0xD42B); spi_write_dat(spi, 0x80);
  319. spi_write_com(spi, 0xD42C); spi_write_dat(spi, 0x03);
  320. spi_write_com(spi, 0xD42D); spi_write_dat(spi, 0x9F);
  321. spi_write_com(spi, 0xD42E); spi_write_dat(spi, 0x03);
  322. spi_write_com(spi, 0xD42F); spi_write_dat(spi, 0xBE);
  323. spi_write_com(spi, 0xD430); spi_write_dat(spi, 0x03);
  324. spi_write_com(spi, 0xD431); spi_write_dat(spi, 0xF9);
  325. spi_write_com(spi, 0xD432); spi_write_dat(spi, 0x03);
  326. spi_write_com(spi, 0xD433); spi_write_dat(spi, 0xFF);
  327. spi_write_com(spi, 0xD500); spi_write_dat(spi, 0x00);
  328. spi_write_com(spi, 0xD501); spi_write_dat(spi, 0x05);
  329. spi_write_com(spi, 0xD502); spi_write_dat(spi, 0x00);
  330. spi_write_com(spi, 0xD503); spi_write_dat(spi, 0x15);
  331. spi_write_com(spi, 0xD504); spi_write_dat(spi, 0x00);
  332. spi_write_com(spi, 0xD505); spi_write_dat(spi, 0x30);
  333. spi_write_com(spi, 0xD506); spi_write_dat(spi, 0x00);
  334. spi_write_com(spi, 0xD507); spi_write_dat(spi, 0x47);
  335. spi_write_com(spi, 0xD508); spi_write_dat(spi, 0x00);
  336. spi_write_com(spi, 0xD509); spi_write_dat(spi, 0x5B);
  337. spi_write_com(spi, 0xD50A); spi_write_dat(spi, 0x00);
  338. spi_write_com(spi, 0xD50B); spi_write_dat(spi, 0x7D);
  339. spi_write_com(spi, 0xD50C); spi_write_dat(spi, 0x00);
  340. spi_write_com(spi, 0xD50D); spi_write_dat(spi, 0x9D);
  341. spi_write_com(spi, 0xD50E); spi_write_dat(spi, 0x00);
  342. spi_write_com(spi, 0xD50F); spi_write_dat(spi, 0xCC);
  343. spi_write_com(spi, 0xD510); spi_write_dat(spi, 0x00);
  344. spi_write_com(spi, 0xD511); spi_write_dat(spi, 0xF3);
  345. spi_write_com(spi, 0xD512); spi_write_dat(spi, 0x01);
  346. spi_write_com(spi, 0xD513); spi_write_dat(spi, 0x32);
  347. spi_write_com(spi, 0xD514); spi_write_dat(spi, 0x01);
  348. spi_write_com(spi, 0xD515); spi_write_dat(spi, 0x63);
  349. spi_write_com(spi, 0xD516); spi_write_dat(spi, 0x01);
  350. spi_write_com(spi, 0xD517); spi_write_dat(spi, 0xB1);
  351. spi_write_com(spi, 0xD518); spi_write_dat(spi, 0x01);
  352. spi_write_com(spi, 0xD519); spi_write_dat(spi, 0xF0);
  353. spi_write_com(spi, 0xD51A); spi_write_dat(spi, 0x01);
  354. spi_write_com(spi, 0xD51B); spi_write_dat(spi, 0xF2);
  355. spi_write_com(spi, 0xD51C); spi_write_dat(spi, 0x02);
  356. spi_write_com(spi, 0xD51D); spi_write_dat(spi, 0x2A);
  357. spi_write_com(spi, 0xD51E); spi_write_dat(spi, 0x02);
  358. spi_write_com(spi, 0xD51F); spi_write_dat(spi, 0x67);
  359. spi_write_com(spi, 0xD520); spi_write_dat(spi, 0x02);
  360. spi_write_com(spi, 0xD521); spi_write_dat(spi, 0x90);
  361. spi_write_com(spi, 0xD522); spi_write_dat(spi, 0x02);
  362. spi_write_com(spi, 0xD523); spi_write_dat(spi, 0xCB);
  363. spi_write_com(spi, 0xD524); spi_write_dat(spi, 0x02);
  364. spi_write_com(spi, 0xD525); spi_write_dat(spi, 0xF2);
  365. spi_write_com(spi, 0xD526); spi_write_dat(spi, 0x03);
  366. spi_write_com(spi, 0xD527); spi_write_dat(spi, 0x2A);
  367. spi_write_com(spi, 0xD528); spi_write_dat(spi, 0x03);
  368. spi_write_com(spi, 0xD529); spi_write_dat(spi, 0x51);
  369. spi_write_com(spi, 0xD52A); spi_write_dat(spi, 0x03);
  370. spi_write_com(spi, 0xD52B); spi_write_dat(spi, 0x80);
  371. spi_write_com(spi, 0xD52C); spi_write_dat(spi, 0x03);
  372. spi_write_com(spi, 0xD52D); spi_write_dat(spi, 0x9F);
  373. spi_write_com(spi, 0xD52E); spi_write_dat(spi, 0x03);
  374. spi_write_com(spi, 0xD52F); spi_write_dat(spi, 0xBE);
  375. spi_write_com(spi, 0xD530); spi_write_dat(spi, 0x03);
  376. spi_write_com(spi, 0xD531); spi_write_dat(spi, 0xF9);
  377. spi_write_com(spi, 0xD532); spi_write_dat(spi, 0x03);
  378. spi_write_com(spi, 0xD533); spi_write_dat(spi, 0xFF);
  379. spi_write_com(spi, 0xD600); spi_write_dat(spi, 0x00);
  380. spi_write_com(spi, 0xD601); spi_write_dat(spi, 0x05);
  381. spi_write_com(spi, 0xD602); spi_write_dat(spi, 0x00);
  382. spi_write_com(spi, 0xD603); spi_write_dat(spi, 0x15);
  383. spi_write_com(spi, 0xD604); spi_write_dat(spi, 0x00);
  384. spi_write_com(spi, 0xD605); spi_write_dat(spi, 0x30);
  385. spi_write_com(spi, 0xD606); spi_write_dat(spi, 0x00);
  386. spi_write_com(spi, 0xD607); spi_write_dat(spi, 0x47);
  387. spi_write_com(spi, 0xD608); spi_write_dat(spi, 0x00);
  388. spi_write_com(spi, 0xD609); spi_write_dat(spi, 0x5B);
  389. spi_write_com(spi, 0xD60A); spi_write_dat(spi, 0x00);
  390. spi_write_com(spi, 0xD60B); spi_write_dat(spi, 0x7D);
  391. spi_write_com(spi, 0xD60C); spi_write_dat(spi, 0x00);
  392. spi_write_com(spi, 0xD60D); spi_write_dat(spi, 0x9D);
  393. spi_write_com(spi, 0xD60E); spi_write_dat(spi, 0x00);
  394. spi_write_com(spi, 0xD60F); spi_write_dat(spi, 0xCC);
  395. spi_write_com(spi, 0xD610); spi_write_dat(spi, 0x00);
  396. spi_write_com(spi, 0xD611); spi_write_dat(spi, 0xF3);
  397. spi_write_com(spi, 0xD612); spi_write_dat(spi, 0x01);
  398. spi_write_com(spi, 0xD613); spi_write_dat(spi, 0x32);
  399. spi_write_com(spi, 0xD614); spi_write_dat(spi, 0x01);
  400. spi_write_com(spi, 0xD615); spi_write_dat(spi, 0x63);
  401. spi_write_com(spi, 0xD616); spi_write_dat(spi, 0x01);
  402. spi_write_com(spi, 0xD617); spi_write_dat(spi, 0xB1);
  403. spi_write_com(spi, 0xD618); spi_write_dat(spi, 0x01);
  404. spi_write_com(spi, 0xD619); spi_write_dat(spi, 0xF0);
  405. spi_write_com(spi, 0xD61A); spi_write_dat(spi, 0x01);
  406. spi_write_com(spi, 0xD61B); spi_write_dat(spi, 0xF2);
  407. spi_write_com(spi, 0xD61C); spi_write_dat(spi, 0x02);
  408. spi_write_com(spi, 0xD61D); spi_write_dat(spi, 0x2A);
  409. spi_write_com(spi, 0xD61E); spi_write_dat(spi, 0x02);
  410. spi_write_com(spi, 0xD61F); spi_write_dat(spi, 0x67);
  411. spi_write_com(spi, 0xD620); spi_write_dat(spi, 0x02);
  412. spi_write_com(spi, 0xD621); spi_write_dat(spi, 0x90);
  413. spi_write_com(spi, 0xD622); spi_write_dat(spi, 0x02);
  414. spi_write_com(spi, 0xD623); spi_write_dat(spi, 0xCB);
  415. spi_write_com(spi, 0xD624); spi_write_dat(spi, 0x02);
  416. spi_write_com(spi, 0xD625); spi_write_dat(spi, 0xF2);
  417. spi_write_com(spi, 0xD626); spi_write_dat(spi, 0x03);
  418. spi_write_com(spi, 0xD627); spi_write_dat(spi, 0x2A);
  419. spi_write_com(spi, 0xD628); spi_write_dat(spi, 0x03);
  420. spi_write_com(spi, 0xD629); spi_write_dat(spi, 0x51);
  421. spi_write_com(spi, 0xD62A); spi_write_dat(spi, 0x03);
  422. spi_write_com(spi, 0xD62B); spi_write_dat(spi, 0x80);
  423. spi_write_com(spi, 0xD62C); spi_write_dat(spi, 0x03);
  424. spi_write_com(spi, 0xD62D); spi_write_dat(spi, 0x9F);
  425. spi_write_com(spi, 0xD62E); spi_write_dat(spi, 0x03);
  426. spi_write_com(spi, 0xD62F); spi_write_dat(spi, 0xBE);
  427. spi_write_com(spi, 0xD630); spi_write_dat(spi, 0x03);
  428. spi_write_com(spi, 0xD631); spi_write_dat(spi, 0xF9);
  429. spi_write_com(spi, 0xD632); spi_write_dat(spi, 0x03);
  430. spi_write_com(spi, 0xD633); spi_write_dat(spi, 0xFF);
  431. /* LV2 Page 0 enable */
  432. spi_write_com(spi, 0xF000); spi_write_dat(spi, 0x55);
  433. spi_write_com(spi, 0xF001); spi_write_dat(spi, 0xAA);
  434. spi_write_com(spi, 0xF002); spi_write_dat(spi, 0x52);
  435. spi_write_com(spi, 0xF003); spi_write_dat(spi, 0x08);
  436. spi_write_com(spi, 0xF004); spi_write_dat(spi, 0x00);
  437. /* Display control */
  438. spi_write_com(spi, 0xB100); spi_write_dat(spi, 0xFC);
  439. spi_write_com(spi, 0xB101); spi_write_dat(spi, 0x00);
  440. /* Source hold time */
  441. spi_write_com(spi, 0xB600); spi_write_dat(spi, 0x05);
  442. /* Gate EQ control */
  443. spi_write_com(spi, 0xB700); spi_write_dat(spi, 0x70);
  444. spi_write_com(spi, 0xB701); spi_write_dat(spi, 0x70);
  445. /* Source EQ control (Mode 2) */
  446. spi_write_com(spi, 0xB800); spi_write_dat(spi, 0x01);
  447. spi_write_com(spi, 0xB801); spi_write_dat(spi, 0x05);
  448. spi_write_com(spi, 0xB802); spi_write_dat(spi, 0x05);
  449. spi_write_com(spi, 0xB803); spi_write_dat(spi, 0x05);
  450. /* Inversion mode (Column) */
  451. spi_write_com(spi, 0xBC00); spi_write_dat(spi, 0x00);
  452. spi_write_com(spi, 0xBC01); spi_write_dat(spi, 0x00);
  453. spi_write_com(spi, 0xBC02); spi_write_dat(spi, 0x00);
  454. /* Timing control 8phase dual side/4H/4delay/RST_EN */
  455. spi_write_com(spi, 0xC900); spi_write_dat(spi, 0xD0);
  456. spi_write_com(spi, 0xC901); spi_write_dat(spi, 0x82);
  457. spi_write_com(spi, 0xC902); spi_write_dat(spi, 0x50);
  458. spi_write_com(spi, 0xC903); spi_write_dat(spi, 0x50);
  459. spi_write_com(spi, 0xC904); spi_write_dat(spi, 0x50);
  460. spi_write_com(spi, 0x3A00); spi_write_dat(spi, 0x55);
  461. mdelay(120);
  462. spi_write_com(spi, 0x1100);
  463. mdelay(120);
  464. spi_write_com(spi, 0x2900);
  465. mdelay(120);
  466. /* spi_write_com(spi, 0x2100); spi_write_dat(spi, 0x00); */
  467. spi_write_com(spi, 0x2C00);
  468. return 0;
  469. err_claim_bus:
  470. spi_free_slave(spi);
  471. return -1;
  472. }