luat_lcd_jd9261t.c 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456
  1. #include "luat_base.h"
  2. #include "luat_lcd.h"
  3. #include "luat_gpio.h"
  4. #include "luat_mem.h"
  5. #include "luat_rtos.h"
  6. #include "luat_i2c.h"
  7. #define LUAT_LOG_TAG "jd9261t-lcd"
  8. #include "luat_log.h"
  9. static int jd9261t_inited_init(luat_lcd_conf_t* conf)
  10. {
  11. if (!conf->buff)
  12. {
  13. conf->buff = luat_heap_opt_zalloc(LUAT_HEAP_AUTO, conf->w * conf->h * ((conf->bpp <= 16)?2:4));
  14. conf->flush_y_min = conf->h;
  15. conf->flush_y_max = 0;
  16. }
  17. luat_lcd_qspi_conf_t auto_flush =
  18. {
  19. .write_4line_cmd = 0xde,
  20. .vsync_reg = 0x61,
  21. .hsync_cmd = 0xde,
  22. .hsync_reg = 0x60,
  23. .write_1line_cmd = 0xde,
  24. .write_4line_data = 0,
  25. };
  26. luat_gpio_set(conf->pin_rst, Luat_GPIO_LOW);
  27. // luat_rtos_task_sleep(5);
  28. // luat_gpio_set(conf->tp_pin_rst, Luat_GPIO_HIGH);
  29. luat_rtos_task_sleep(5);
  30. luat_gpio_set(conf->pin_rst, Luat_GPIO_HIGH);
  31. // luat_gpio_set(conf->tp_pin_rst, Luat_GPIO_LOW);
  32. // luat_rtos_task_sleep(50);
  33. // luat_gpio_set(conf->tp_pin_rst, Luat_GPIO_HIGH);
  34. // luat_rtos_task_sleep(100);
  35. luat_rtos_task_sleep(150);
  36. luat_lcd_qspi_config(conf, &auto_flush); //必须在第一个命令发送前就准备好
  37. luat_lcd_set_direction(conf,conf->direction);
  38. luat_rtos_task_sleep(5);
  39. luat_gpio_set(conf->pin_pwr, Luat_GPIO_HIGH);
  40. luat_lcd_qspi_auto_flush_on_off(conf, 1);
  41. return 0;
  42. }
  43. luat_lcd_opts_t lcd_opts_jd9261t_inited = {
  44. .name = "jd9261t_inited",
  45. .sleep_cmd = 0xff, //不需要发命令
  46. .wakeup_cmd = 0xff, //不需要发命令
  47. .init_cmds_len = 0,
  48. .init_cmds = NULL,
  49. .direction0 = 0x00,
  50. .direction90 = 0x00,
  51. .direction180 = 0x03,
  52. .direction270 = 0x03,
  53. .rb_swap = 1,
  54. .no_ram_mode = 1,
  55. .user_ctrl_init = jd9261t_inited_init,
  56. };
  57. #if 0
  58. typedef struct
  59. {
  60. union
  61. {
  62. uint8_t *queue; //data超过4个字节放地址
  63. uint8_t buf[4]; //不超过4个字节的,直接放值
  64. };
  65. uint8_t delay_ms;
  66. uint8_t ignore_mask;
  67. uint8_t len;
  68. uint8_t cmd;
  69. }spi_lcd_cmd_t;
  70. #define Q_540_MASK (0)
  71. static const uint8_t data_for_cmd_b2_jd9261t[] = {0x01, 0x23, 0x62, 0x88, 0xE4, 0x1B};
  72. static const uint8_t data_for_cmd_bb_jd9261t[] = {0x0C, 0x54, 0x5A, 0x50, 0x22, 0x22};
  73. static const uint8_t data_for_cmd_c3_jd9261t[] = {0x0D, 0x02, 0x06, 0x00, 0x00, 0x95, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  74. 0x00, 0x00, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10}; //24
  75. static const uint8_t data_for_cmd_c6_jd9261t[] = {0x01, 0x6E, 0x00, 0x30, 0x00, 0x14, 0x16, 0x82, 0x00, 0x10, 0x00, 0x10, 0x00, 0x09, 0x00, 0x00,
  76. 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x01}; //23
  77. static const uint8_t data_for_cmd_cb_jd9261t[] = {0x7C, 0x6C, 0x5F, 0x4C, 0x3E, 0x34, 0x28, 0x2D, 0x19, 0x36, 0x38, 0x3B, 0x59, 0x47, 0x4F, 0x42,
  78. 0x40, 0x33, 0x22, 0x15, 0x06, 0x7C, 0x6C, 0x5F, 0x4C, 0x3E, 0x34, 0x28, 0x2D, 0x19, 0x36, 0x38,
  79. 0x3B, 0x59, 0x47, 0x4F, 0x42, 0x40, 0x33, 0x22, 0x15, 0x06}; //42
  80. static const uint8_t data_for_cmd_ce_jd9261t[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00,
  81. 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
  82. 0xFF, 0xFF, 0xFF}; //35
  83. static const uint8_t data_for_cmd_cf_jd9261t[] = {0x52, 0x00, 0x00, 0xFF, 0xFF, 0x18, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x18, 0x00}; //13
  84. static const uint8_t data_for_cmd_d0_jd9261t[] = {0x00, 0x9F, 0x9F, 0x80, 0x9B, 0x99, 0x8E, 0x8C, 0x8A, 0x88, 0x86, 0x84, 0x98, 0x97, 0x90, 0x92,
  85. 0x9F, 0x9F}; //18
  86. static const uint8_t data_for_cmd_d1_jd9261t[] = {0x00, 0x9F, 0x9F, 0x81, 0x9C, 0x9A, 0x8F, 0x8D, 0x8B, 0x89, 0x87, 0x85, 0x98, 0x97, 0x91, 0x93,
  87. 0x9F, 0x9F}; //18
  88. static const uint8_t data_for_cmd_d2_jd9261t[] = {0x00, 0x9F, 0x9F, 0x91, 0x8D, 0x8F, 0x9A, 0x9C, 0x85, 0x87, 0x89, 0x8B, 0x18, 0x17, 0x81, 0x93,
  89. 0x9F, 0x9F}; //18
  90. static const uint8_t data_for_cmd_d3_jd9261t[] = {0x00, 0x9F, 0x9F, 0x90, 0x8C, 0x8E, 0x99, 0x9B, 0x84, 0x86, 0x88, 0x8A, 0x18, 0x17, 0x80, 0x92,
  91. 0x9F, 0x9F}; //18
  92. static const uint8_t data_for_cmd_d4_jd9261t[] = {0x00, 0x60, 0x23, 0x01, 0x00, 0x03, 0x20, 0x01, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00, 0x04, 0x63,
  93. 0x05, 0x04, 0x6A, 0x05, 0x60, 0x60, 0x04, 0x04, 0x20, 0x00, 0x23, 0x01, 0x03, 0x00, 0x23, 0x00,
  94. 0x01, 0x04, 0x4D, 0x04, 0x4D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00,
  95. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00}; //60
  96. static const uint8_t data_for_cmd_d5_jd9261t[] = {0x01, 0x10, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0xA0, 0x00, 0x00, 0x00, 0x07, 0x32, 0x5A,
  97. 0x00, 0x0A, 0x3C, 0x00, 0x04, 0x04, 0x7B, 0xF4, 0xA0, 0x27, 0x00, 0x00, 0x08, 0xF4, 0x27, 0x08,
  98. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02}; //39
  99. static const uint8_t data_for_cmd_d7_jd9261t[] = {0x00, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E,
  100. 0x6E}; //17
  101. static const uint8_t data_for_cmd_ca1_jd9261t[] = {0x76, 0x00, 0x00, 0x00, 0x2C, 0x00, 0xD0, 0xD0, 0x22, 0x1C, 0x1C, 0x22, 0xAB, 0xAA, 0x00, 0x00,
  102. 0x04, 0x1C, 0x32, 0x12, 0x44, 0x3F, 0x0F, 0x00, 0x00, 0x00, 0x22, 0x19, 0x02, 0x02, 0x00, 0x00,
  103. 0x00, 0x00, 0x04, 0x03, 0x00, 0xAA, 0x04, 0x25, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x10, 0x01, 0x21,
  104. 0x03, 0x3F, 0x10, 0x03, 0x00, 0x01, 0x00, 0x00, 0x78, 0x12, 0x40, 0x3C, 0x94, 0x19, 0x19, 0x14,
  105. 0x29, 0x19, 0x80}; //67
  106. static const uint8_t data_for_cmd_cb1_jd9261t[] = {0x02, 0x1C, 0x00, 0x00, 0x00, 0x02, 0x00, 0x81, 0x00, 0x02, 0x00, 0xD0, 0xD0, 0x22}; //14
  107. static const uint8_t data_for_cmd_cc1_jd9261t[] = {0x00, 0x00, 0xFF, 0xFF, 0x5F, 0x7F, 0x14, 0x00, 0x00, 0x00, 0x40, 0x22, 0x71, 0x62, 0x35, 0x17,
  108. 0x26, 0x53, 0x35, 0x62, 0x71, 0x71, 0x26, 0x17, 0x71, 0x62, 0x35, 0x17, 0x26, 0x53, 0x35, 0x62,
  109. 0x71, 0x71, 0x26, 0x17}; //36
  110. static const uint8_t data_for_cmd_bb2_jd9261t[] = {0x00, 0x00, 0x00, 0x00, 0x68, 0x69, 0x00, 0x00};
  111. static const uint8_t data_for_cmd_c12_jd9261t[] = {0x00, 0x40, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x00, 0x00};
  112. static const uint8_t data_for_cmd_c22_jd9261t[] = {0x02, 0xC2, 0x50, 0x00, 0x12, 0xA2, 0x61, 0x73, 0xF7};
  113. static const uint8_t data_for_cmd_c32_jd9261t[] = {0x20, 0xFF, 0x00, 0xA0, 0x10, 0x82, 0x06, 0x01, 0x31, 0x53, 0x64, 0x75, 0x6E, 0x82};
  114. static const uint8_t data_for_cmd_c42_jd9261t[] = {0x00, 0x21, 0x07, 0x00, 0x01, 0x01, 0x08};
  115. static const uint8_t data_for_cmd_d32_jd9261t[] = {0x00, 0x11, 0x00, 0x02, 0x68, 0xAE, 0x14, 0x59, 0xCD, 0x02, 0x68, 0xAE, 0x14, 0x59, 0xCD};
  116. static const uint8_t data_for_cmd_ec2_jd9261t[] = {0x03, 0x0E, 0x7E, 0x77, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF1, 0xFF, 0xFF, 0x00, 0x00, 0x00,
  117. 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x01, 0x7F}; //23
  118. static const uint8_t data_for_cmd_d13_jd9261t[] = {0x00, 0x10, 0x21, 0xFF, 0x88, 0x00, 0x87};
  119. static const spi_lcd_cmd_t cmd_list_jd9261t_all[] =
  120. {
  121. {
  122. .cmd = 0xDF,
  123. .len = 3,
  124. .buf = {0x90,0x62,0xF2},
  125. },
  126. {
  127. .cmd = 0xDE,
  128. .len = 1,
  129. .buf = {0x00},
  130. },
  131. {
  132. .cmd = 0xB2,
  133. .len = sizeof(data_for_cmd_b2_jd9261t),
  134. .queue = (uint8_t *)data_for_cmd_b2_jd9261t,
  135. },
  136. {
  137. .cmd = 0xBB,
  138. .len = sizeof(data_for_cmd_bb_jd9261t),
  139. .queue = (uint8_t *)data_for_cmd_bb_jd9261t,
  140. },
  141. {
  142. .cmd = 0xBD,
  143. .len = 2,
  144. .buf = {0x00,0x71},
  145. },
  146. {
  147. .cmd = 0xBF,
  148. .len = 2,
  149. .buf = {0x50,0x50},
  150. },
  151. {
  152. .cmd = 0xC0,
  153. .len = 4,
  154. .buf = {0x00,0xCD,0x00,0xCD},
  155. },
  156. {
  157. .cmd = 0xC1,
  158. .len = 3,
  159. .buf = {0x40,0x11,0x00},
  160. },
  161. {
  162. .cmd = 0xC3,
  163. .len = sizeof(data_for_cmd_c3_jd9261t),
  164. .queue = (uint8_t *)data_for_cmd_c3_jd9261t,
  165. },
  166. {
  167. .cmd = 0xC4,
  168. .len = 2,
  169. .buf = {0x02,0x06},
  170. },
  171. {
  172. .cmd = 0xC6,
  173. .len = sizeof(data_for_cmd_c6_jd9261t),
  174. .queue = (uint8_t *)data_for_cmd_c6_jd9261t,
  175. },
  176. {
  177. .cmd = 0xC8,
  178. .len = 3,
  179. .buf = {0x18,0x0E,0x87},
  180. },
  181. {
  182. .cmd = 0xCB,
  183. .len = sizeof(data_for_cmd_cb_jd9261t),
  184. .queue = (uint8_t *)data_for_cmd_cb_jd9261t,
  185. },
  186. {
  187. .cmd = 0xCC,
  188. .len = 1,
  189. .buf = {0x33},
  190. },
  191. {
  192. .cmd = 0xCD,
  193. .len = 4,
  194. .buf = {0x08,0x00,0x08,0x00},
  195. },
  196. {
  197. .cmd = 0xCE,
  198. .len = sizeof(data_for_cmd_ce_jd9261t),
  199. .queue = (uint8_t *)data_for_cmd_ce_jd9261t,
  200. },
  201. {
  202. .cmd = 0xCF,
  203. .len = sizeof(data_for_cmd_cf_jd9261t),
  204. .queue = (uint8_t *)data_for_cmd_cf_jd9261t,
  205. },
  206. {
  207. .cmd = 0xD0,
  208. .len = sizeof(data_for_cmd_d0_jd9261t),
  209. .queue = (uint8_t *)data_for_cmd_d0_jd9261t,
  210. },
  211. {
  212. .cmd = 0xD2,
  213. .len = sizeof(data_for_cmd_d2_jd9261t),
  214. .queue = (uint8_t *)data_for_cmd_d2_jd9261t,
  215. },
  216. {
  217. .cmd = 0xD3,
  218. .len = sizeof(data_for_cmd_d3_jd9261t),
  219. .queue = (uint8_t *)data_for_cmd_d3_jd9261t,
  220. },
  221. {
  222. .cmd = 0xD4,
  223. .len = sizeof(data_for_cmd_d4_jd9261t),
  224. .queue = (uint8_t *)data_for_cmd_d4_jd9261t,
  225. },
  226. {
  227. .cmd = 0xD5,
  228. .len = sizeof(data_for_cmd_d5_jd9261t),
  229. .queue = (uint8_t *)data_for_cmd_d5_jd9261t,
  230. },
  231. {
  232. .cmd = 0xD7,
  233. .len = sizeof(data_for_cmd_d7_jd9261t),
  234. .queue = (uint8_t *)data_for_cmd_d7_jd9261t,
  235. },
  236. {
  237. .cmd = 0xDE,
  238. .len = 1,
  239. .buf = {0x01},
  240. },
  241. {
  242. .cmd = 0xC7,
  243. .len = 3,
  244. .buf = {0x06,0x06,0x08},
  245. },
  246. {
  247. .cmd = 0xCA,
  248. .len = sizeof(data_for_cmd_ca1_jd9261t),
  249. .queue = (uint8_t *)data_for_cmd_ca1_jd9261t,
  250. .ignore_mask = (1 << Q_540_MASK),
  251. },
  252. {
  253. .cmd = 0xCB,
  254. .len = sizeof(data_for_cmd_cb1_jd9261t),
  255. .queue = (uint8_t *)data_for_cmd_cb1_jd9261t,
  256. .ignore_mask = (1 << Q_540_MASK),
  257. },
  258. {
  259. .cmd = 0xCC,
  260. .len = sizeof(data_for_cmd_cc1_jd9261t),
  261. .queue = (uint8_t *)data_for_cmd_cc1_jd9261t,
  262. .ignore_mask = (1 << Q_540_MASK),
  263. },
  264. {
  265. .cmd = 0xDE,
  266. .len = 1,
  267. .buf = {0x02},
  268. },
  269. {
  270. .cmd = 0xBB,
  271. .len = sizeof(data_for_cmd_bb2_jd9261t),
  272. .queue = (uint8_t *)data_for_cmd_bb2_jd9261t,
  273. },
  274. {
  275. .cmd = 0xC1,
  276. .len = sizeof(data_for_cmd_c12_jd9261t),
  277. .queue = (uint8_t *)data_for_cmd_c12_jd9261t,
  278. },
  279. {
  280. .cmd = 0xC2,
  281. .len = sizeof(data_for_cmd_c22_jd9261t),
  282. .queue = (uint8_t *)data_for_cmd_c22_jd9261t,
  283. },
  284. {
  285. .cmd = 0xC3,
  286. .len = sizeof(data_for_cmd_c32_jd9261t),
  287. .queue = (uint8_t *)data_for_cmd_c32_jd9261t,
  288. },
  289. {
  290. .cmd = 0xC4,
  291. .len = sizeof(data_for_cmd_c42_jd9261t),
  292. .queue = (uint8_t *)data_for_cmd_c42_jd9261t,
  293. },
  294. {
  295. .cmd = 0xC6,
  296. .len = 1,
  297. .buf = {0x4C},
  298. },
  299. {
  300. .cmd = 0xD3,
  301. .len = sizeof(data_for_cmd_d32_jd9261t),
  302. .queue = (uint8_t *)data_for_cmd_d32_jd9261t,
  303. },
  304. {
  305. .cmd = 0xE6,
  306. .len = 3,
  307. .buf = {0x10, 0x08, 0x63},
  308. },
  309. {
  310. .cmd = 0xEC,
  311. .len = sizeof(data_for_cmd_ec2_jd9261t),
  312. .queue = (uint8_t *)data_for_cmd_ec2_jd9261t,
  313. },
  314. {
  315. .cmd = 0xDE,
  316. .len = 1,
  317. .buf = {0x03},
  318. },
  319. {
  320. .cmd = 0xD0,
  321. .len = 4,
  322. .buf = {0x00, 0x45, 0x31, 0x11},
  323. },
  324. {
  325. .cmd = 0xD1,
  326. .len = sizeof(data_for_cmd_d13_jd9261t),
  327. .queue = (uint8_t *)data_for_cmd_d13_jd9261t,
  328. },
  329. {
  330. .cmd = 0xDE,
  331. .len = 1,
  332. .buf = {0x00},
  333. },
  334. // {
  335. // .cmd = 0x35,
  336. // .len = 0,
  337. // .delay_ms = 30,
  338. // },
  339. // {
  340. // .cmd = 0x3A,
  341. // .len = 1,
  342. // .buf = {0x50},
  343. // },
  344. // {
  345. // .cmd = 0x11,
  346. // .len = 0,
  347. // .delay_ms = 120,
  348. // },
  349. // {
  350. // .cmd = 0x29,
  351. // .len = 0,
  352. // .delay_ms = 120,
  353. // },
  354. };
  355. static int jd9261t_init(luat_lcd_conf_t* conf)
  356. {
  357. uint8_t ignore_mask = 0;
  358. if (540 == conf->w && 540 == conf->h)
  359. {
  360. ignore_mask |= (1 << Q_540_MASK);
  361. }
  362. else if (720 == conf->w && 720 == conf->h)
  363. {
  364. }
  365. else
  366. {
  367. LLOGE("no support");
  368. return -1;
  369. }
  370. if (!conf->buff)
  371. {
  372. conf->buff = luat_heap_opt_zalloc(LUAT_HEAP_AUTO, conf->w * conf->h * ((conf->bpp <= 16)?2:4));
  373. conf->flush_y_min = conf->h;
  374. conf->flush_y_max = 0;
  375. }
  376. luat_lcd_qspi_conf_t auto_flush =
  377. {
  378. .write_4line_cmd = 0xde,
  379. .vsync_reg = 0x61,
  380. .hsync_cmd = 0xde,
  381. .hsync_reg = 0x60,
  382. .write_1line_cmd = 0xde,
  383. .write_4line_data = 0,
  384. };
  385. luat_gpio_set(conf->pin_rst, Luat_GPIO_LOW);
  386. // luat_rtos_task_sleep(5);
  387. // luat_gpio_set(conf->tp_pin_rst, Luat_GPIO_HIGH);
  388. luat_rtos_task_sleep(5);
  389. luat_gpio_set(conf->pin_rst, Luat_GPIO_HIGH);
  390. luat_rtos_task_sleep(150);
  391. luat_lcd_qspi_config(conf, &auto_flush); //必须在第一个命令发送前就准备好
  392. for(int i = 0; i < sizeof(cmd_list_jd9261t_all)/sizeof(spi_lcd_cmd_t); i++)
  393. {
  394. if (cmd_list_jd9261t_all[i].ignore_mask & ignore_mask)
  395. {
  396. LLOGI("ignore cmd %x", cmd_list_jd9261t_all[i].cmd);
  397. }
  398. else
  399. {
  400. if (cmd_list_jd9261t_all[i].len > 4)
  401. {
  402. lcd_write_cmd_data(conf,cmd_list_jd9261t_all[i].cmd, cmd_list_jd9261t_all[i].queue, cmd_list_jd9261t_all[i].len);
  403. }
  404. else
  405. {
  406. lcd_write_cmd_data(conf,cmd_list_jd9261t_all[i].cmd, cmd_list_jd9261t_all[i].buf, cmd_list_jd9261t_all[i].len);
  407. }
  408. }
  409. }
  410. luat_lcd_set_direction(conf,conf->direction);
  411. uint8_t temp = 0x60;
  412. // lcd_write_cmd_data(conf,0xc2, &temp, 1);
  413. lcd_write_cmd_data(conf,0x35, NULL, 0);
  414. temp = 0x50;
  415. lcd_write_cmd_data(conf,0x3a, &temp, 1);
  416. lcd_write_cmd_data(conf,0x11, NULL, 0);
  417. luat_rtos_task_sleep(120);
  418. lcd_write_cmd_data(conf,0x29, NULL, 0);
  419. luat_rtos_task_sleep(120);
  420. luat_gpio_set(conf->pin_pwr, Luat_GPIO_HIGH);
  421. luat_lcd_qspi_auto_flush_on_off(conf, 1);
  422. return 0;
  423. }
  424. luat_lcd_opts_t lcd_opts_jd9261t = {
  425. .name = "jd9261t",
  426. .sleep_cmd = 0xff, //不需要发命令
  427. .wakeup_cmd = 0xff, //不需要发命令
  428. .init_cmds_len = 0,
  429. .init_cmds = NULL,
  430. .direction0 = 0x00,
  431. .direction90 = 0x00,
  432. .direction180 = 0x03,
  433. .direction270 = 0x03,
  434. .rb_swap = 1,
  435. .no_ram_mode = 1,
  436. .user_ctrl_init = jd9261t_init,
  437. };
  438. #endif