luat_lcdseg_air101.c 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. #include "luat_base.h"
  2. #include "luat_lcdseg.h"
  3. #include "wm_include.h"
  4. #include "wm_lcd.h"
  5. #include "wm_regs.h"
  6. #include "wm_pmu.h"
  7. #define LUAT_LOG_TAG "lcdseg"
  8. #include "luat_log.h"
  9. int luat_lcdseg_setup(luat_lcd_options_t *opts) {
  10. tls_lcd_options_t conf = {0};
  11. conf.enable = 0;
  12. switch (opts->bias)
  13. {
  14. case 0:
  15. conf.bias = BIAS_STATIC;
  16. break;
  17. case 2:
  18. conf.bias = BIAS_ONEHALF;
  19. break;
  20. case 3:
  21. conf.bias = BIAS_ONETHIRD;
  22. break;
  23. case 4:
  24. conf.bias = BIAS_ONEFOURTH;
  25. break;
  26. default:
  27. LLOGD("invaild bias %d", opts->bias);
  28. return -1;
  29. }
  30. switch (opts->duty)
  31. {
  32. case 0:
  33. conf.duty = DUTY_STATIC;
  34. break;
  35. case 2:
  36. conf.duty = DUTY_ONEHALF;
  37. break;
  38. case 3:
  39. conf.duty = DUTY_ONETHIRD;
  40. break;
  41. case 4:
  42. conf.duty = DUTY_ONEFOURTH;
  43. break;
  44. case 5:
  45. conf.duty = DUTY_ONEFIFTH;
  46. break;
  47. case 6:
  48. conf.duty = DUTY_ONESIXTH;
  49. break;
  50. case 7:
  51. conf.duty = DUTY_ONESEVENTH;
  52. break;
  53. case 8:
  54. conf.duty = DUTY_ONEEIGHTH;
  55. break;
  56. default:
  57. LLOGD("invaild duty %d", opts->bias);
  58. return -1;
  59. }
  60. switch(opts->vlcd) {
  61. case 27:
  62. conf.vlcd = VLCD27;
  63. break;
  64. case 29:
  65. conf.vlcd = VLCD29;
  66. break;
  67. case 31:
  68. conf.vlcd = VLCD31;
  69. break;
  70. case 33:
  71. conf.vlcd = VLCD33;
  72. break;
  73. default:
  74. LLOGD("invaild vlcd %d", opts->vlcd);
  75. return -1;
  76. }
  77. if (opts->com_number > 4) {
  78. LLOGD("invaild com_number %d", opts->com_number);
  79. return -1;
  80. }
  81. conf.com_number = opts->com_number;
  82. conf.fresh_rate = opts->fresh_rate;
  83. /**
  84. tls_io_cfg_set(WM_IO_PB_25, WM_IO_OPTION6);
  85. tls_io_cfg_set(WM_IO_PB_21, WM_IO_OPTION6);
  86. tls_io_cfg_set(WM_IO_PB_22, WM_IO_OPTION6);
  87. tls_io_cfg_set(WM_IO_PB_27, WM_IO_OPTION6);
  88. */
  89. if (opts->com_mark & 0x01)
  90. tls_io_cfg_set(WM_IO_PB_25, WM_IO_OPTION6);
  91. if (opts->com_mark & 0x02)
  92. tls_io_cfg_set(WM_IO_PB_21, WM_IO_OPTION6);
  93. if (opts->com_mark & 0x04)
  94. tls_io_cfg_set(WM_IO_PB_22, WM_IO_OPTION6);
  95. if (opts->com_mark & 0x08)
  96. tls_io_cfg_set(WM_IO_PB_27, WM_IO_OPTION6);
  97. // seg 0-5
  98. //if (opts->seg_mark & (1 << 0))
  99. // tls_io_cfg_set(WM_IO_PB_23, WM_IO_OPTION6);
  100. if (opts->seg_mark & (1 << 1))
  101. tls_io_cfg_set(WM_IO_PB_26, WM_IO_OPTION6);
  102. if (opts->seg_mark & (1 << 2))
  103. tls_io_cfg_set(WM_IO_PB_24, WM_IO_OPTION6);
  104. if (opts->seg_mark & (1 << 3))
  105. tls_io_cfg_set(WM_IO_PA_07, WM_IO_OPTION6);
  106. if (opts->seg_mark & (1 << 4))
  107. tls_io_cfg_set(WM_IO_PA_08, WM_IO_OPTION6);
  108. if (opts->seg_mark & (1 << 5))
  109. tls_io_cfg_set(WM_IO_PA_09, WM_IO_OPTION6);
  110. if (opts->seg_mark & (1 << 6))
  111. tls_io_cfg_set(WM_IO_PA_10, WM_IO_OPTION6);
  112. if (opts->seg_mark & (1 << 7))
  113. tls_io_cfg_set(WM_IO_PA_11, WM_IO_OPTION6);
  114. if (opts->seg_mark & (1 << 8))
  115. tls_io_cfg_set(WM_IO_PA_12, WM_IO_OPTION6);
  116. if (opts->seg_mark & (1 << 9))
  117. tls_io_cfg_set(WM_IO_PA_13, WM_IO_OPTION6);
  118. if (opts->seg_mark & (1 << 10))
  119. tls_io_cfg_set(WM_IO_PA_14, WM_IO_OPTION6);
  120. if (opts->seg_mark & (1 << 11))
  121. tls_io_cfg_set(WM_IO_PA_15, WM_IO_OPTION6);
  122. if (opts->seg_mark & (1 << 12))
  123. tls_io_cfg_set(WM_IO_PB_00, WM_IO_OPTION6);
  124. if (opts->seg_mark & (1 << 13))
  125. tls_io_cfg_set(WM_IO_PB_01, WM_IO_OPTION6);
  126. if (opts->seg_mark & (1 << 14))
  127. tls_io_cfg_set(WM_IO_PB_02, WM_IO_OPTION6);
  128. if (opts->seg_mark & (1 << 15))
  129. tls_io_cfg_set(WM_IO_PB_03, WM_IO_OPTION6);
  130. if (opts->seg_mark & (1 << 16))
  131. tls_io_cfg_set(WM_IO_PB_04, WM_IO_OPTION6);
  132. if (opts->seg_mark & (1 << 17))
  133. tls_io_cfg_set(WM_IO_PB_05, WM_IO_OPTION6);
  134. if (opts->seg_mark & (1 << 18))
  135. tls_io_cfg_set(WM_IO_PB_06, WM_IO_OPTION6);
  136. if (opts->seg_mark & (1 << 19))
  137. tls_io_cfg_set(WM_IO_PB_07, WM_IO_OPTION6);
  138. if (opts->seg_mark & (1 << 20))
  139. tls_io_cfg_set(WM_IO_PB_08, WM_IO_OPTION6);
  140. if (opts->seg_mark & (1 << 21))
  141. tls_io_cfg_set(WM_IO_PB_09, WM_IO_OPTION6);
  142. if (opts->seg_mark & (1 << 22))
  143. tls_io_cfg_set(WM_IO_PB_10, WM_IO_OPTION6);
  144. if (opts->seg_mark & (1 << 23))
  145. tls_io_cfg_set(WM_IO_PB_11, WM_IO_OPTION6);
  146. if (opts->seg_mark & (1 << 24))
  147. tls_io_cfg_set(WM_IO_PB_12, WM_IO_OPTION6);
  148. if (opts->seg_mark & (1 << 25))
  149. tls_io_cfg_set(WM_IO_PB_13, WM_IO_OPTION6);
  150. if (opts->seg_mark & (1 << 26))
  151. tls_io_cfg_set(WM_IO_PB_14, WM_IO_OPTION6);
  152. if (opts->seg_mark & (1 << 27))
  153. tls_io_cfg_set(WM_IO_PB_15, WM_IO_OPTION6);
  154. if (opts->seg_mark & (1 << 28))
  155. tls_io_cfg_set(WM_IO_PB_16, WM_IO_OPTION6);
  156. if (opts->seg_mark & (1 << 29))
  157. tls_io_cfg_set(WM_IO_PB_17, WM_IO_OPTION6);
  158. if (opts->seg_mark & (1 << 30))
  159. tls_io_cfg_set(WM_IO_PB_18, WM_IO_OPTION6);
  160. if (opts->seg_mark & (1 << 31))
  161. tls_io_cfg_set(WM_IO_PA_06, WM_IO_OPTION6);
  162. tls_reg_write32(HR_LCD_COM_EN, opts->com_mark);
  163. tls_reg_write32(HR_LCD_SEG_EN, opts->seg_mark);
  164. tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_LCD);
  165. tls_lcd_init(&conf);
  166. return 0;
  167. }
  168. int luat_lcdseg_enable(uint8_t enable) {
  169. TLS_LCD_ENABLE(enable == 0 ? 0 : 1);
  170. return 0;
  171. }
  172. int luat_lcdseg_power(uint8_t enable) {
  173. TLS_LCD_POWERDOWM(enable == 0 ? 1 : 0);
  174. return 0;
  175. }
  176. int luat_lcdseg_seg_set(uint8_t com, uint32_t seg, uint8_t val) {
  177. if (com > 4)
  178. return -1;
  179. if (seg > 32)
  180. return -1;
  181. tls_lcd_seg_set(com, seg, val == 0 ? 0 : 1);
  182. return 0;
  183. }