lcd_cfg.c 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224
  1. #include <stdio.h>
  2. #include <stdint.h>
  3. #include <stdlib.h>
  4. #include <unistd.h>
  5. #include <hal_clk.h>
  6. #include <hal_gpio.h>
  7. #include "disp_sys_intf.h"
  8. #include "disp_board_config.h"
  9. #include <rtthread.h>
  10. #include "lcd_cfg.h"
  11. struct property_t *g_lcd0_config = NULL;
  12. static struct lcd_cfg_panel_info _panel_info = DEFAULT_LCD_CONFIG;
  13. struct property_t g_lcd0_config_rgb[] = {
  14. {
  15. .name = "lcd_used",
  16. .type = PROPERTY_INTGER,
  17. .v.value = 1,
  18. },
  19. {
  20. .name = "lcd_driver_name",
  21. .type = PROPERTY_STRING,
  22. .v.str = "default_lcd",
  23. },
  24. {
  25. .name = "lcd_if",
  26. .type = PROPERTY_INTGER,
  27. .v.value = 0, /* LCD_IF_HV */
  28. },
  29. {
  30. .name = "lcd_hv_if",
  31. .type = PROPERTY_INTGER,
  32. .v.value = 0, /* LCD_HV_IF_PRGB_1CYC */
  33. },
  34. {
  35. .name = "lcd_x",
  36. .type = PROPERTY_INTGER,
  37. .v.value = 480, //
  38. },
  39. {
  40. .name = "lcd_y",
  41. .type = PROPERTY_INTGER,
  42. .v.value = 272,
  43. },
  44. {
  45. .name = "lcd_width",
  46. .type = PROPERTY_INTGER,
  47. .v.value = 80,
  48. },
  49. {
  50. .name = "lcd_height",
  51. .type = PROPERTY_INTGER,
  52. .v.value = 47,
  53. },
  54. {
  55. .name = "lcd_dclk_freq",
  56. .type = PROPERTY_INTGER,
  57. .v.value = 10,
  58. },
  59. /* lcd_ht = lcd_x + lcd_hspw + lcd_hbp + lcd_hfp */
  60. {
  61. .name = "lcd_ht",
  62. .type = PROPERTY_INTGER,
  63. .v.value = 592,
  64. },
  65. {
  66. .name = "lcd_hbp",
  67. .type = PROPERTY_INTGER,
  68. .v.value = 56,
  69. },
  70. {
  71. .name = "lcd_hspw",
  72. .type = PROPERTY_INTGER,
  73. .v.value = 40,
  74. },
  75. /* lcd_vt = lcd_y + lcd_vspw + lcd_vbp + lcd_vfp */
  76. {
  77. .name = "lcd_vt",
  78. .type = PROPERTY_INTGER,
  79. .v.value = 286,
  80. },
  81. {
  82. .name = "lcd_vspw",
  83. .type = PROPERTY_INTGER,
  84. .v.value = 5,
  85. },
  86. {
  87. .name = "lcd_vbp",
  88. .type = PROPERTY_INTGER,
  89. .v.value = 6,
  90. },
  91. {
  92. .name = "lcd_frm",
  93. .type = PROPERTY_INTGER,
  94. .v.value = 1,
  95. },
  96. {
  97. .name = "lcd_io_phase",
  98. .type = PROPERTY_INTGER,
  99. .v.value = 0,
  100. },
  101. {
  102. .name = "lcd_gamma_en",
  103. .type = PROPERTY_INTGER,
  104. .v.value = 0,
  105. },
  106. {
  107. .name = "lcd_bright_curve_en",
  108. .type = PROPERTY_INTGER,
  109. .v.value = 0,
  110. },
  111. {
  112. .name = "lcd_cmap_en",
  113. .type = PROPERTY_INTGER,
  114. .v.value = 0,
  115. },
  116. {
  117. .name = "deu_mode",
  118. .type = PROPERTY_INTGER,
  119. .v.value = 0,
  120. },
  121. {
  122. .name = "lcdgamma4iep",
  123. .type = PROPERTY_INTGER,
  124. .v.value = 22,
  125. },
  126. {
  127. .name = "smart_color",
  128. .type = PROPERTY_INTGER,
  129. .v.value = 90,
  130. },
  131. // backlight enable
  132. {
  133. .name = "lcd_gpio_1",
  134. .type = PROPERTY_GPIO,
  135. .v.gpio_list = {
  136. .gpio = GPIOG(13),
  137. .mul_sel = GPIO_DIRECTION_OUTPUT,
  138. .pull = 0,
  139. .drv_level = 3,
  140. .data = 1,
  141. },
  142. },
  143. {
  144. .name = "lcd_backlight",
  145. .type = PROPERTY_INTGER,
  146. .v.value = 50,
  147. },
  148. {
  149. .name = "lcd_pwm_used",
  150. .type = PROPERTY_INTGER,
  151. .v.value = 1,
  152. },
  153. {
  154. .name = "lcd_pwm_ch",
  155. .type = PROPERTY_INTGER,
  156. .v.value = 1,
  157. },
  158. {
  159. .name = "lcd_pwm_freq",
  160. .type = PROPERTY_INTGER,
  161. .v.value = 1000,
  162. },
  163. {
  164. .name = "lcd_pwm_pol",
  165. .type = PROPERTY_INTGER,
  166. .v.value = 1,
  167. },
  168. {
  169. .name = "lcd_pwm_max_limit",
  170. .type = PROPERTY_INTGER,
  171. .v.value = 255,
  172. },
  173. /* POWER-vcc */
  174. {
  175. .name = "lcd_gpio_0",
  176. .type = PROPERTY_GPIO,
  177. .v.gpio_list = {
  178. .gpio = GPIOG(15),
  179. .mul_sel = GPIO_DIRECTION_OUTPUT,
  180. .pull = 0,
  181. .drv_level = 3,
  182. .data = 1,
  183. },
  184. },
  185. // gpio
  186. {
  187. .name = "LCD0_D2",
  188. .type = PROPERTY_PIN,
  189. .v.gpio_list = {
  190. .gpio = GPIOD(0),
  191. .mul_sel = 2,
  192. .pull = 0,
  193. .drv_level = 3,
  194. },
  195. },
  196. {
  197. .name = "LCD0_D3",
  198. .type = PROPERTY_PIN,
  199. .v.gpio_list = {
  200. .gpio = GPIOD(1),
  201. .mul_sel = 2,
  202. .pull = 0,
  203. .drv_level = 3,
  204. },
  205. },
  206. {
  207. .name = "LCD0_D4",
  208. .type = PROPERTY_PIN,
  209. .v.gpio_list = {
  210. .gpio = GPIOD(2),
  211. .mul_sel = 2,
  212. .pull = 0,
  213. .drv_level = 3,
  214. },
  215. },
  216. {
  217. .name = "LCD0_D5",
  218. .type = PROPERTY_PIN,
  219. .v.gpio_list = {
  220. .gpio = GPIOD(3),
  221. .mul_sel = 2,
  222. .pull = 0,
  223. .drv_level = 3,
  224. },
  225. },
  226. {
  227. .name = "LCD0_D6",
  228. .type = PROPERTY_PIN,
  229. .v.gpio_list = {
  230. .gpio = GPIOD(4),
  231. .mul_sel = 2,
  232. .pull = 0,
  233. .drv_level = 3,
  234. },
  235. },
  236. {
  237. .name = "LCD0_D7",
  238. .type = PROPERTY_PIN,
  239. .v.gpio_list = {
  240. .gpio = GPIOD(5),
  241. .mul_sel = 2,
  242. .pull = 0,
  243. .drv_level = 3,
  244. },
  245. },
  246. {
  247. .name = "LCD0_D10",
  248. .type = PROPERTY_PIN,
  249. .v.gpio_list = {
  250. .gpio = GPIOD(6),
  251. .mul_sel = 2,
  252. .pull = 0,
  253. .drv_level = 3,
  254. },
  255. },
  256. {
  257. .name = "LCD0_D11",
  258. .type = PROPERTY_PIN,
  259. .v.gpio_list = {
  260. .gpio = GPIOD(7),
  261. .mul_sel = 2,
  262. .pull = 0,
  263. .drv_level = 3,
  264. },
  265. },
  266. {
  267. .name = "LCD0_D12",
  268. .type = PROPERTY_PIN,
  269. .v.gpio_list = {
  270. .gpio = GPIOD(8),
  271. .mul_sel = 2,
  272. .pull = 0,
  273. .drv_level = 3,
  274. },
  275. },
  276. {
  277. .name = "LCD0_D13",
  278. .type = PROPERTY_PIN,
  279. .v.gpio_list = {
  280. .gpio = GPIOD(9),
  281. .mul_sel = 2,
  282. .pull = 0,
  283. .drv_level = 3,
  284. },
  285. },
  286. {
  287. .name = "LCD0_D14",
  288. .type = PROPERTY_PIN,
  289. .v.gpio_list = {
  290. .gpio = GPIOD(10),
  291. .mul_sel = 2,
  292. .pull = 0,
  293. .drv_level = 3,
  294. },
  295. },
  296. {
  297. .name = "LCD0_D15",
  298. .type = PROPERTY_PIN,
  299. .v.gpio_list = {
  300. .gpio = GPIOD(11),
  301. .mul_sel = 2,
  302. .pull = 0,
  303. .drv_level = 3,
  304. },
  305. },
  306. {
  307. .name = "LCD0_D18",
  308. .type = PROPERTY_PIN,
  309. .v.gpio_list = {
  310. .gpio = GPIOD(12),
  311. .mul_sel = 2,
  312. .pull = 0,
  313. .drv_level = 3,
  314. },
  315. },
  316. {
  317. .name = "LCD0_D19",
  318. .type = PROPERTY_PIN,
  319. .v.gpio_list = {
  320. .gpio = GPIOD(13),
  321. .mul_sel = 2,
  322. .pull = 0,
  323. .drv_level = 3,
  324. },
  325. },
  326. {
  327. .name = "LCD0_D20",
  328. .type = PROPERTY_PIN,
  329. .v.gpio_list = {
  330. .gpio = GPIOD(14),
  331. .mul_sel = 2,
  332. .pull = 0,
  333. .drv_level = 3,
  334. },
  335. },
  336. {
  337. .name = "LCD0_D21",
  338. .type = PROPERTY_PIN,
  339. .v.gpio_list = {
  340. .gpio = GPIOD(15),
  341. .mul_sel = 2,
  342. .pull = 0,
  343. .drv_level = 3,
  344. },
  345. },
  346. {
  347. .name = "LCD0_D22",
  348. .type = PROPERTY_PIN,
  349. .v.gpio_list = {
  350. .gpio = GPIOD(16),
  351. .mul_sel = 2,
  352. .pull = 0,
  353. .drv_level = 3,
  354. },
  355. },
  356. {
  357. .name = "LCD0_D23",
  358. .type = PROPERTY_PIN,
  359. .v.gpio_list = {
  360. .gpio = GPIOD(17),
  361. .mul_sel = 2,
  362. .pull = 0,
  363. .drv_level = 3,
  364. },
  365. },
  366. {
  367. .name = "LCD0_CLK",
  368. .type = PROPERTY_PIN,
  369. .v.gpio_list = {
  370. .gpio = GPIOD(18),
  371. .mul_sel = 2,
  372. .pull = 0,
  373. .drv_level = 3,
  374. },
  375. },
  376. {
  377. .name = "LCD0_DE",
  378. .type = PROPERTY_PIN,
  379. .v.gpio_list = {
  380. .gpio = GPIOD(19),
  381. .mul_sel = 2,
  382. .pull = 0,
  383. .drv_level = 3,
  384. },
  385. },
  386. {
  387. .name = "LCD0_HSYNC",
  388. .type = PROPERTY_PIN,
  389. .v.gpio_list = {
  390. .gpio = GPIOD(20),
  391. .mul_sel = 2,
  392. .pull = 0,
  393. .drv_level = 3,
  394. },
  395. },
  396. {
  397. .name = "LCD0_VSYNC",
  398. .type = PROPERTY_PIN,
  399. .v.gpio_list = {
  400. .gpio = GPIOD(21),
  401. .mul_sel = 2,
  402. .pull = 0,
  403. .drv_level = 3,
  404. },
  405. }};
  406. struct property_t g_lcd0_config_mipi[] = {
  407. {
  408. .name = "lcd_used",
  409. .type = PROPERTY_INTGER,
  410. .v.value = 1,
  411. },
  412. {
  413. .name = "lcd_driver_name",
  414. .type = PROPERTY_STRING,
  415. .v.str = "tft08006",
  416. },
  417. {
  418. .name = "lcd_backlight",
  419. .type = PROPERTY_INTGER,
  420. .v.value = 50,
  421. },
  422. {
  423. .name = "lcd_if",
  424. .type = PROPERTY_INTGER,
  425. .v.value = LCD_IF_DSI,
  426. },
  427. {
  428. .name = "lcd_x",
  429. .type = PROPERTY_INTGER,
  430. .v.value = 540,
  431. },
  432. {
  433. .name = "lcd_y",
  434. .type = PROPERTY_INTGER,
  435. .v.value = 960, // 1280
  436. },
  437. {
  438. .name = "lcd_width",
  439. .type = PROPERTY_INTGER,
  440. .v.value = 52,
  441. },
  442. {
  443. .name = "lcd_height",
  444. .type = PROPERTY_INTGER,
  445. .v.value = 52,
  446. },
  447. {
  448. .name = "lcd_dclk_freq",
  449. .type = PROPERTY_INTGER,
  450. .v.value = 43,
  451. },
  452. {
  453. .name = "lcd_pwm_used",
  454. .type = PROPERTY_INTGER,
  455. .v.value = 1,
  456. },
  457. {
  458. .name = "lcd_pwm_ch",
  459. .type = PROPERTY_INTGER,
  460. .v.value = 1,
  461. },
  462. {
  463. .name = "lcd_pwm_freq",
  464. .type = PROPERTY_INTGER,
  465. .v.value = 50000,
  466. },
  467. {
  468. .name = "lcd_pwm_pol",
  469. .type = PROPERTY_INTGER,
  470. .v.value = 1,
  471. },
  472. {
  473. .name = "lcd_pwm_max_limit",
  474. .type = PROPERTY_INTGER,
  475. .v.value = 255,
  476. },
  477. {
  478. .name = "lcd_hbp",
  479. .type = PROPERTY_INTGER,
  480. .v.value = 88,
  481. },
  482. {
  483. .name = "lcd_ht",
  484. .type = PROPERTY_INTGER,
  485. .v.value = 721,
  486. },
  487. {
  488. .name = "lcd_hspw",
  489. .type = PROPERTY_INTGER,
  490. .v.value = 56,
  491. },
  492. {
  493. .name = "lcd_vbp",
  494. .type = PROPERTY_INTGER,
  495. .v.value = 23,
  496. },
  497. {
  498. .name = "lcd_vt",
  499. .type = PROPERTY_INTGER,
  500. .v.value = 996,
  501. },
  502. {
  503. .name = "lcd_vspw",
  504. .type = PROPERTY_INTGER,
  505. .v.value = 10,
  506. },
  507. {
  508. .name = "lcd_frm",
  509. .type = PROPERTY_INTGER,
  510. .v.value = 0,
  511. },
  512. {
  513. .name = "lcd_io_phase",
  514. .type = PROPERTY_INTGER,
  515. .v.value = 0,
  516. },
  517. {
  518. .name = "lcd_gamma_en",
  519. .type = PROPERTY_INTGER,
  520. .v.value = 0,
  521. },
  522. {
  523. .name = "lcd_bright_curve_en",
  524. .type = PROPERTY_INTGER,
  525. .v.value = 0,
  526. },
  527. {
  528. .name = "lcd_cmap_en",
  529. .type = PROPERTY_INTGER,
  530. .v.value = 0,
  531. },
  532. {
  533. .name = "deu_mode",
  534. .type = PROPERTY_INTGER,
  535. .v.value = 0,
  536. },
  537. {
  538. .name = "lcdgamma4iep",
  539. .type = PROPERTY_INTGER,
  540. .v.value = 22,
  541. },
  542. {
  543. .name = "smart_color",
  544. .type = PROPERTY_INTGER,
  545. .v.value = 90,
  546. },
  547. {
  548. .name = "lcd_dsi_if",
  549. .type = PROPERTY_INTGER,
  550. .v.value = 0,
  551. },
  552. {
  553. .name = "lcd_dsi_lane",
  554. .type = PROPERTY_INTGER,
  555. .v.value = 2,
  556. },
  557. {
  558. .name = "lcd_dsi_format",
  559. .type = PROPERTY_INTGER,
  560. .v.value = 0,
  561. },
  562. {
  563. .name = "lcd_dsi_te",
  564. .type = PROPERTY_INTGER,
  565. .v.value = 0,
  566. },
  567. {
  568. .name = "lcd_fsync_act_time",
  569. .type = PROPERTY_INTGER,
  570. .v.value = 1000,
  571. },
  572. {
  573. .name = "lcd_fsync_dis_time",
  574. .type = PROPERTY_INTGER,
  575. .v.value = 1000,
  576. },
  577. // backlight enable
  578. /*
  579. {
  580. .name = "lcd_gpio_1",
  581. .type = PROPERTY_GPIO,
  582. .v.gpio_list = {
  583. .gpio = GPIOE(11),
  584. .mul_sel = GPIO_DIRECTION_OUTPUT,
  585. .pull = 0,
  586. .drv_level = 3,
  587. .data = 1,
  588. },
  589. },
  590. */
  591. /* DSI reset */
  592. // {
  593. // .name = "lcd_gpio_0",
  594. // .type = PROPERTY_GPIO,
  595. // .v.gpio_list = {
  596. // .gpio = GPIOG(13),
  597. // .mul_sel = GPIO_DIRECTION_OUTPUT,
  598. // .pull = 0,
  599. // .drv_level = 3,
  600. // .data = 1,
  601. // },
  602. // },
  603. // gpio
  604. {
  605. .name = "LCD0_D0",
  606. .type = PROPERTY_PIN,
  607. .v.gpio_list = {
  608. .gpio = GPIOD(0),
  609. .mul_sel = 4,
  610. .pull = 0,
  611. .drv_level = 3,
  612. },
  613. },
  614. {
  615. .name = "LCD0_D1",
  616. .type = PROPERTY_PIN,
  617. .v.gpio_list = {
  618. .gpio = GPIOD(1),
  619. .mul_sel = 4,
  620. .pull = 0,
  621. .drv_level = 3,
  622. },
  623. },
  624. {
  625. .name = "LCD0_D2",
  626. .type = PROPERTY_PIN,
  627. .v.gpio_list = {
  628. .gpio = GPIOD(2),
  629. .mul_sel = 4,
  630. .pull = 0,
  631. .drv_level = 3,
  632. },
  633. },
  634. {
  635. .name = "LCD0_D3",
  636. .type = PROPERTY_PIN,
  637. .v.gpio_list = {
  638. .gpio = GPIOD(3),
  639. .mul_sel = 4,
  640. .pull = 0,
  641. .drv_level = 3,
  642. },
  643. },
  644. {
  645. .name = "LCD0_D4",
  646. .type = PROPERTY_PIN,
  647. .v.gpio_list = {
  648. .gpio = GPIOD(4),
  649. .mul_sel = 4,
  650. .pull = 0,
  651. .drv_level = 3,
  652. },
  653. },
  654. {
  655. .name = "LCD0_D5",
  656. .type = PROPERTY_PIN,
  657. .v.gpio_list = {
  658. .gpio = GPIOD(5),
  659. .mul_sel = 4,
  660. .pull = 0,
  661. .drv_level = 3,
  662. },
  663. },
  664. {
  665. .name = "LCD0_D6",
  666. .type = PROPERTY_PIN,
  667. .v.gpio_list = {
  668. .gpio = GPIOD(6),
  669. .mul_sel = 4,
  670. .pull = 0,
  671. .drv_level = 3,
  672. },
  673. },
  674. {
  675. .name = "LCD0_D7",
  676. .type = PROPERTY_PIN,
  677. .v.gpio_list = {
  678. .gpio = GPIOD(7),
  679. .mul_sel = 4,
  680. .pull = 0,
  681. .drv_level = 3,
  682. },
  683. },
  684. {
  685. .name = "LCD0_D8",
  686. .type = PROPERTY_PIN,
  687. .v.gpio_list = {
  688. .gpio = GPIOD(8),
  689. .mul_sel = 4,
  690. .pull = 0,
  691. .drv_level = 3,
  692. },
  693. },
  694. {
  695. .name = "LCD0_D9",
  696. .type = PROPERTY_PIN,
  697. .v.gpio_list = {
  698. .gpio = GPIOD(9),
  699. .mul_sel = 4,
  700. .pull = 0,
  701. .drv_level = 3,
  702. },
  703. },
  704. };
  705. struct property_t g_lcd0_config_lvds[] = {
  706. {
  707. .name = "lcd_used",
  708. .type = PROPERTY_INTGER,
  709. .v.value = 1,
  710. },
  711. {
  712. .name = "lcd_driver_name",
  713. .type = PROPERTY_STRING,
  714. .v.str = "default_lcd",
  715. },
  716. {
  717. .name = "lcd_backlight",
  718. .type = PROPERTY_INTGER,
  719. .v.value = 150,
  720. },
  721. {
  722. .name = "lcd_if",
  723. .type = PROPERTY_INTGER,
  724. .v.value = LCD_IF_LVDS,
  725. },
  726. {
  727. .name = "lcd_x",
  728. .type = PROPERTY_INTGER,
  729. .v.value = 1920,
  730. },
  731. {
  732. .name = "lcd_y",
  733. .type = PROPERTY_INTGER,
  734. .v.value = 1080,
  735. },
  736. {
  737. .name = "lcd_width",
  738. .type = PROPERTY_INTGER,
  739. .v.value = 150,
  740. },
  741. {
  742. .name = "lcd_height",
  743. .type = PROPERTY_INTGER,
  744. .v.value = 94,
  745. },
  746. {
  747. .name = "lcd_dclk_freq",
  748. .type = PROPERTY_INTGER,
  749. .v.value = 71 * 2, // dual lvds, freq=single*2.
  750. },
  751. {
  752. .name = "lcd_rb_swap",
  753. .type = PROPERTY_INTGER,
  754. .v.value = 0,
  755. },
  756. {
  757. .name = "lcd_pwm_used",
  758. .type = PROPERTY_INTGER,
  759. .v.value = 0,
  760. },
  761. {
  762. .name = "lcd_pwm_ch",
  763. .type = PROPERTY_INTGER,
  764. .v.value = 7,
  765. },
  766. {
  767. .name = "lcd_pwm_freq",
  768. .type = PROPERTY_INTGER,
  769. .v.value = 50000,
  770. },
  771. {
  772. .name = "lcd_pwm_pol",
  773. .type = PROPERTY_INTGER,
  774. .v.value = 1,
  775. },
  776. {
  777. .name = "lcd_pwm_max_limit",
  778. .type = PROPERTY_INTGER,
  779. .v.value = 255,
  780. },
  781. {
  782. .name = "lcd_hbp",
  783. .type = PROPERTY_INTGER,
  784. .v.value = 90, // P19: Tblk(h) period 74-90-140
  785. },
  786. {
  787. .name = "lcd_ht",
  788. .type = PROPERTY_INTGER,
  789. .v.value = (960 + 90) * 2, // x+hbp P19: Th period 1034-1050-1100
  790. },
  791. {
  792. .name = "lcd_hspw",
  793. .type = PROPERTY_INTGER,
  794. .v.value = 10,
  795. },
  796. {
  797. .name = "lcd_vbp",
  798. .type = PROPERTY_INTGER,
  799. .v.value = 50, // P19: Tblk(v) period 12-50-738
  800. },
  801. {
  802. .name = "lcd_vt",
  803. .type = PROPERTY_INTGER,
  804. .v.value = (1080 + 50) + 50, // y+vbp P19: Tv period 1092-1130-1818
  805. },
  806. {
  807. .name = "lcd_vspw",
  808. .type = PROPERTY_INTGER,
  809. .v.value = 5,
  810. },
  811. {
  812. .name = "lcd_lvds_if",
  813. .type = PROPERTY_INTGER,
  814. .v.value = LCD_LVDS_IF_DUAL_LINK,
  815. },
  816. {
  817. .name = "lcd_lvds_colordepth",
  818. .type = PROPERTY_INTGER,
  819. .v.value = LCD_LVDS_8bit,
  820. },
  821. {
  822. .name = "lcd_lvds_mode",
  823. .type = PROPERTY_INTGER,
  824. .v.value = LCD_LVDS_MODE_NS,
  825. },
  826. {
  827. .name = "lcd_frm",
  828. .type = PROPERTY_INTGER,
  829. .v.value = 1,
  830. },
  831. {
  832. .name = "lcd_io_phase",
  833. .type = PROPERTY_INTGER,
  834. .v.value = 0,
  835. },
  836. {
  837. .name = "lcd_hv_clk_phase",
  838. .type = PROPERTY_INTGER,
  839. .v.value = 0,
  840. },
  841. {
  842. .name = "lcd_hv_sync_polarity",
  843. .type = PROPERTY_INTGER,
  844. .v.value = 0,
  845. },
  846. {
  847. .name = "lcd_gamma_en",
  848. .type = PROPERTY_INTGER,
  849. .v.value = 0,
  850. },
  851. {
  852. .name = "lcd_bright_curve_en",
  853. .type = PROPERTY_INTGER,
  854. .v.value = 0,
  855. },
  856. {
  857. .name = "lcd_cmap_en",
  858. .type = PROPERTY_INTGER,
  859. .v.value = 0,
  860. },
  861. {
  862. .name = "deu_mode",
  863. .type = PROPERTY_INTGER,
  864. .v.value = 0,
  865. },
  866. {
  867. .name = "lcdgamma4iep",
  868. .type = PROPERTY_INTGER,
  869. .v.value = 22,
  870. },
  871. {
  872. .name = "smart_color",
  873. .type = PROPERTY_INTGER,
  874. .v.value = 90,
  875. },
  876. // gpio
  877. {
  878. .name = "LCD0_D0",
  879. .type = PROPERTY_PIN,
  880. .v.gpio_list = {
  881. .gpio = GPIOD(0),
  882. .mul_sel = 3,
  883. .pull = 0,
  884. .drv_level = 3,
  885. },
  886. },
  887. {
  888. .name = "LCD0_D1",
  889. .type = PROPERTY_PIN,
  890. .v.gpio_list = {
  891. .gpio = GPIOD(1),
  892. .mul_sel = 3,
  893. .pull = 0,
  894. .drv_level = 3,
  895. },
  896. },
  897. {
  898. .name = "LCD0_D2",
  899. .type = PROPERTY_PIN,
  900. .v.gpio_list = {
  901. .gpio = GPIOD(2),
  902. .mul_sel = 3,
  903. .pull = 0,
  904. .drv_level = 3,
  905. },
  906. },
  907. {
  908. .name = "LCD0_D3",
  909. .type = PROPERTY_PIN,
  910. .v.gpio_list = {
  911. .gpio = GPIOD(3),
  912. .mul_sel = 3,
  913. .pull = 0,
  914. .drv_level = 3,
  915. },
  916. },
  917. {
  918. .name = "LCD0_D4",
  919. .type = PROPERTY_PIN,
  920. .v.gpio_list = {
  921. .gpio = GPIOD(4),
  922. .mul_sel = 3,
  923. .pull = 0,
  924. .drv_level = 3,
  925. },
  926. },
  927. {
  928. .name = "LCD0_D5",
  929. .type = PROPERTY_PIN,
  930. .v.gpio_list = {
  931. .gpio = GPIOD(5),
  932. .mul_sel = 3,
  933. .pull = 0,
  934. .drv_level = 3,
  935. },
  936. },
  937. {
  938. .name = "LCD0_D6",
  939. .type = PROPERTY_PIN,
  940. .v.gpio_list = {
  941. .gpio = GPIOD(6),
  942. .mul_sel = 3,
  943. .pull = 0,
  944. .drv_level = 3,
  945. },
  946. },
  947. {
  948. .name = "LCD0_D7",
  949. .type = PROPERTY_PIN,
  950. .v.gpio_list = {
  951. .gpio = GPIOD(7),
  952. .mul_sel = 3,
  953. .pull = 0,
  954. .drv_level = 3,
  955. },
  956. },
  957. {
  958. .name = "LCD0_D8",
  959. .type = PROPERTY_PIN,
  960. .v.gpio_list = {
  961. .gpio = GPIOD(8),
  962. .mul_sel = 3,
  963. .pull = 0,
  964. .drv_level = 3,
  965. },
  966. },
  967. {
  968. .name = "LCD0_D9",
  969. .type = PROPERTY_PIN,
  970. .v.gpio_list = {
  971. .gpio = GPIOD(9),
  972. .mul_sel = 3,
  973. .pull = 0,
  974. .drv_level = 3,
  975. },
  976. },
  977. #if 1
  978. {
  979. .name = "LCD0_D14",
  980. .type = PROPERTY_PIN,
  981. .v.gpio_list = {
  982. .gpio = GPIOD(10),
  983. .mul_sel = 3,
  984. .pull = 0,
  985. .drv_level = 3,
  986. },
  987. },
  988. {
  989. .name = "LCD0_D15",
  990. .type = PROPERTY_PIN,
  991. .v.gpio_list = {
  992. .gpio = GPIOD(11),
  993. .mul_sel = 3,
  994. .pull = 0,
  995. .drv_level = 3,
  996. },
  997. },
  998. {
  999. .name = "LCD0_D18",
  1000. .type = PROPERTY_PIN,
  1001. .v.gpio_list = {
  1002. .gpio = GPIOD(12),
  1003. .mul_sel = 3,
  1004. .pull = 0,
  1005. .drv_level = 3,
  1006. },
  1007. },
  1008. {
  1009. .name = "LCD0_D19",
  1010. .type = PROPERTY_PIN,
  1011. .v.gpio_list = {
  1012. .gpio = GPIOD(13),
  1013. .mul_sel = 3,
  1014. .pull = 0,
  1015. .drv_level = 3,
  1016. },
  1017. },
  1018. {
  1019. .name = "LCD0_D20",
  1020. .type = PROPERTY_PIN,
  1021. .v.gpio_list = {
  1022. .gpio = GPIOD(14),
  1023. .mul_sel = 3,
  1024. .pull = 0,
  1025. .drv_level = 3,
  1026. },
  1027. },
  1028. {
  1029. .name = "LCD0_D21",
  1030. .type = PROPERTY_PIN,
  1031. .v.gpio_list = {
  1032. .gpio = GPIOD(15),
  1033. .mul_sel = 3,
  1034. .pull = 0,
  1035. .drv_level = 3,
  1036. },
  1037. },
  1038. {
  1039. .name = "LCD0_D22",
  1040. .type = PROPERTY_PIN,
  1041. .v.gpio_list = {
  1042. .gpio = GPIOD(16),
  1043. .mul_sel = 3,
  1044. .pull = 0,
  1045. .drv_level = 3,
  1046. },
  1047. },
  1048. {
  1049. .name = "LCD0_D23",
  1050. .type = PROPERTY_PIN,
  1051. .v.gpio_list = {
  1052. .gpio = GPIOD(17),
  1053. .mul_sel = 3,
  1054. .pull = 0,
  1055. .drv_level = 3,
  1056. },
  1057. },
  1058. {
  1059. .name = "LCD0_CLK",
  1060. .type = PROPERTY_PIN,
  1061. .v.gpio_list = {
  1062. .gpio = GPIOD(18),
  1063. .mul_sel = 3,
  1064. .pull = 0,
  1065. .drv_level = 3,
  1066. },
  1067. },
  1068. {
  1069. .name = "LCD0_DE",
  1070. .type = PROPERTY_PIN,
  1071. .v.gpio_list = {
  1072. .gpio = GPIOD(19),
  1073. .mul_sel = 3,
  1074. .pull = 0,
  1075. .drv_level = 3,
  1076. },
  1077. },
  1078. #endif
  1079. };
  1080. struct property_t g_lcd1_config[] = {
  1081. {
  1082. .name = "lcd_used",
  1083. .type = PROPERTY_INTGER,
  1084. .v.value = 0,
  1085. },
  1086. };
  1087. struct property_t g_disp_config[] = {
  1088. {
  1089. .name = "disp_init_enable",
  1090. .type = PROPERTY_INTGER,
  1091. .v.value = 1,
  1092. },
  1093. {
  1094. .name = "disp_mode",
  1095. .type = PROPERTY_INTGER,
  1096. .v.value = 0, /* DISP_INIT_MODE_SCREEN0 */
  1097. },
  1098. {
  1099. .name = "screen0_output_type",
  1100. .type = PROPERTY_INTGER,
  1101. .v.value = 1, /* DISP_OUTPUT_TYPE_LCD */
  1102. },
  1103. {
  1104. .name = "screen0_output_mode",
  1105. .type = PROPERTY_INTGER,
  1106. .v.value = 4,
  1107. },
  1108. {
  1109. .name = "screen0_output_format",
  1110. .type = PROPERTY_INTGER,
  1111. .v.value = 1,
  1112. },
  1113. {
  1114. .name = "screen0_output_bits",
  1115. .type = PROPERTY_INTGER,
  1116. .v.value = 0,
  1117. },
  1118. {
  1119. .name = "screen0_output_eotf",
  1120. .type = PROPERTY_INTGER,
  1121. .v.value = 4,
  1122. },
  1123. {
  1124. .name = "screen0_output_cs",
  1125. .type = PROPERTY_INTGER,
  1126. .v.value = 257,
  1127. },
  1128. {
  1129. .name = "screen0_output_dvi_hdmi",
  1130. .type = PROPERTY_INTGER,
  1131. .v.value = 2,
  1132. },
  1133. {
  1134. .name = "screen0_output_range",
  1135. .type = PROPERTY_INTGER,
  1136. .v.value = 2,
  1137. },
  1138. {
  1139. .name = "screen0_output_scan",
  1140. .type = PROPERTY_INTGER,
  1141. .v.value = 0,
  1142. },
  1143. {
  1144. .name = "screen0_output_aspect_ratio",
  1145. .type = PROPERTY_INTGER,
  1146. .v.value = 8,
  1147. },
  1148. };
  1149. u32 g_lcd0_config_len = sizeof(g_lcd0_config_rgb) / sizeof(struct property_t);
  1150. u32 g_lcd1_config_len = sizeof(g_lcd1_config) / sizeof(struct property_t);
  1151. u32 g_disp_config_len = sizeof(g_disp_config) / sizeof(struct property_t);
  1152. static struct property_t *_lcd_property_find(const char *name, struct property_t *_config, const u32 config_len)
  1153. {
  1154. u32 i;
  1155. for (i = 0; i < config_len; i++)
  1156. {
  1157. if (_config[i].type != PROPERTY_INTGER)
  1158. {
  1159. continue;
  1160. }
  1161. if (!strcmp(name, _config[i].name))
  1162. {
  1163. return _config + i;
  1164. }
  1165. }
  1166. return NULL;
  1167. }
  1168. #ifndef LCD_XML_CONFIG_FILE
  1169. #define LCD_CONFIG_FILE "/etc/lcd_config.xml"
  1170. #else
  1171. #define LCD_CONFIG_FILE LCD_XML_CONFIG_FILE
  1172. #endif
  1173. const struct lcd_cfg_panel_info *load_lcd_config_from_xml(void)
  1174. {
  1175. struct property_t *_config_item;
  1176. static rt_uint8_t init_state = 0;
  1177. rt_enter_critical();
  1178. if (init_state == 0)
  1179. {
  1180. init_state = 1;
  1181. rt_exit_critical();
  1182. }
  1183. else
  1184. {
  1185. rt_exit_critical();
  1186. while (init_state != 2)
  1187. {
  1188. rt_thread_mdelay(10);
  1189. }
  1190. goto _RET;
  1191. }
  1192. g_lcd0_config = g_lcd0_config_rgb;
  1193. g_lcd0_config_len = sizeof(g_lcd0_config_rgb) / sizeof(struct property_t);
  1194. _RET:
  1195. init_state = 2;
  1196. _config_item = _lcd_property_find("lcd_x", g_lcd0_config, g_lcd0_config_len);
  1197. _panel_info.width = _config_item->v.value;
  1198. _config_item = _lcd_property_find("lcd_y", g_lcd0_config, g_lcd0_config_len);
  1199. _panel_info.height = _config_item->v.value;
  1200. return &_panel_info;
  1201. }