board.c 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557
  1. /*
  2. * Copyright (c) 2019 Actions Semiconductor Co., Ltd
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. */
  6. /**
  7. * @file
  8. * @brief board init functions
  9. */
  10. #include <kernel.h>
  11. #include <init.h>
  12. #include <device.h>
  13. #include <soc.h>
  14. #include "board.h"
  15. #include <drivers/gpio.h>
  16. #include <board_cfg.h>
  17. #define CONFIG_GPIO_HIGHZ (0x1000)
  18. static const struct acts_pin_config board_pin_config[] = {
  19. /*UART0 */
  20. #if IS_ENABLED(CONFIG_UART_0)
  21. /* uart0 tx */
  22. PIN_MFP_SET(GPIO_28, UART0_MFP_CFG),
  23. /* uart0 rx */
  24. PIN_MFP_SET(GPIO_29, UART0_MFP_CFG),
  25. #endif
  26. /*UART1 */
  27. #if IS_ENABLED(CONFIG_UART_1)
  28. /* uart1 tx */
  29. PIN_MFP_SET(GPIO_16, UART1_MFP_CFG),
  30. /* uart1 rx */
  31. PIN_MFP_SET(GPIO_17, UART1_MFP_CFG),
  32. #endif
  33. /*UART2 */
  34. #if IS_ENABLED(CONFIG_UART_2)
  35. /* uart2 tx */
  36. PIN_MFP_SET(GPIO_63, UART2_MFP_SEL),
  37. /* uart2 rx */
  38. PIN_MFP_SET(GPIO_62, UART2_MFP_SEL),
  39. #endif
  40. #if IS_ENABLED(CONFIG_SPI_FLASH_0)
  41. /* SPI0 CS */
  42. PIN_MFP_SET(GPIO_0, SPINOR_MFP_CFG),
  43. /* SPI0 MISO */
  44. PIN_MFP_SET(GPIO_1, SPINOR_MFP_CFG),
  45. /* SPI0 CLK */
  46. PIN_MFP_SET(GPIO_2, SPINOR_MFP_CFG),
  47. /* SPI0 MOSI */
  48. PIN_MFP_SET(GPIO_3, SPINOR_MFP_CFG),
  49. /* SPI0 IO2 */
  50. PIN_MFP_SET(GPIO_6, SPINOR_MFP_PU_CFG),
  51. /* SPI0 IO3 */
  52. PIN_MFP_SET(GPIO_7, SPINOR_MFP_PU_CFG),
  53. #endif
  54. #if IS_ENABLED(CONFIG_I2CMT_0)
  55. /* I2C CLK*/
  56. PIN_MFP_SET(GPIO_18, I2CMT_MFP_CFG(MFP0_I2CMT)),
  57. /* I2C DATA*/
  58. PIN_MFP_SET(GPIO_19, I2CMT_MFP_CFG(MFP0_I2CMT)),
  59. #endif
  60. #if IS_ENABLED(CONFIG_I2CMT_1)
  61. /* I2C CLK*/
  62. PIN_MFP_SET(GPIO_55, I2CMT_MFP_CFG(MFP1_I2CMT)),
  63. /* I2C DATA*/
  64. PIN_MFP_SET(GPIO_56, I2CMT_MFP_CFG(MFP1_I2CMT)),
  65. #endif
  66. #if IS_ENABLED(CONFIG_I2C_0)
  67. /* I2C CLK*/
  68. PIN_MFP_SET(GPIO_57, I2C_MFP_CFG(MFP0_I2C)),
  69. /* I2C DATA*/
  70. PIN_MFP_SET(GPIO_58, I2C_MFP_CFG(MFP0_I2C)),
  71. #endif
  72. #if IS_ENABLED(CONFIG_I2C_1)
  73. /* I2C CLK*/
  74. PIN_MFP_SET(GPIO_51, I2C_MFP_CFG(MFP1_I2C)),
  75. /* I2C DATA*/
  76. PIN_MFP_SET(GPIO_52, I2C_MFP_CFG(MFP1_I2C)),
  77. #endif
  78. #if IS_ENABLED(CONFIG_I2C_2)
  79. /* I2C CLK*/
  80. PIN_MFP_SET(GPIO_61, I2C_MFP_CFG(MFP2_I2C)),
  81. /* I2C DATA*/
  82. PIN_MFP_SET(GPIO_62, I2C_MFP_CFG(MFP2_I2C)),
  83. #endif
  84. #if IS_ENABLED(CONFIG_I2C_3)
  85. /* I2C CLK*/
  86. PIN_MFP_SET(GPIO_60, I2C_MFP_CFG(MFP3_I2C)),
  87. /* I2C DATA*/
  88. PIN_MFP_SET(GPIO_59, I2C_MFP_CFG(MFP3_I2C)),
  89. #endif
  90. #if IS_ENABLED(CONFIG_CEC)
  91. PIN_MFP_SET(GPIO_12, CEC_MFP_CFG),
  92. #endif
  93. #if IS_ENABLED(CONFIG_SPINAND_3)
  94. /*SPI3 IO2*/
  95. PIN_MFP_SET(GPIO_8, SPINAND_MFP_PU_CFG),
  96. /*SPI3 IO3*/
  97. PIN_MFP_SET(GPIO_9, SPINAND_MFP_PU_CFG),
  98. /*SPI3 SS*/
  99. PIN_MFP_SET(GPIO_10, SPINAND_MFP_CFG),
  100. /*SPI3 CLK*/
  101. PIN_MFP_SET(GPIO_11, SPINAND_MFP_CFG),
  102. /*SPI3 IO1*/
  103. PIN_MFP_SET(GPIO_12, SPINAND_MFP_CFG),
  104. /*SPI3 IO0*/
  105. PIN_MFP_SET(GPIO_13, SPINAND_MFP_CFG),
  106. #endif
  107. #if IS_ENABLED(CONFIG_AUDIO_I2SRX_0)
  108. /*I2SRX0 mclk*/
  109. PIN_MFP_SET(GPIO_53, I2SRX_MFP_CFG),
  110. /*I2SRX0 bclk*/
  111. PIN_MFP_SET(GPIO_54, I2SRX_MFP_CFG),
  112. /*I2SRX0 lrclk*/
  113. PIN_MFP_SET(GPIO_55, I2SRX_MFP_CFG),
  114. /*I2SRX0 d0*/
  115. PIN_MFP_SET(GPIO_56, I2SRX_MFP_CFG),
  116. #endif
  117. #if IS_ENABLED(CONFIG_SPI_1)
  118. /*SPI SS*/
  119. PIN_MFP_SET(GPIO_24, SPI_MFP_CFG(MFP_SPI1)),
  120. /* SPI CLK*/
  121. PIN_MFP_SET(GPIO_25, SPI_MFP_CFG(MFP_SPI1)),
  122. /* SPI MISO*/
  123. PIN_MFP_SET(GPIO_26, SPI_MFP_CFG(MFP_SPI1)),
  124. /* SPI MOSI*/
  125. PIN_MFP_SET(GPIO_27, SPI_MFP_CFG(MFP_SPI1)),
  126. #endif
  127. #if IS_ENABLED(CONFIG_SPI_2)
  128. /*SPI SS*/
  129. PIN_MFP_SET(GPIO_30, SPI_MFP_CFG(MFP_SPI2)),
  130. /* SPI CLK*/
  131. PIN_MFP_SET(GPIO_31, SPI_MFP_CFG(MFP_SPI2)),
  132. /* SPI MISO*/
  133. PIN_MFP_SET(GPIO_32, SPI_MFP_CFG(MFP_SPI2)),
  134. /* SPI MOSI*/
  135. PIN_MFP_SET(GPIO_33, SPI_MFP_CFG(MFP_SPI2)),
  136. #endif
  137. #if IS_ENABLED(CONFIG_SPI_3)
  138. /*SPI SS*/
  139. PIN_MFP_SET(GPIO_20, SPI_MFP_CFG(MFP_SPI3)),
  140. /* SPI CLK*/
  141. PIN_MFP_SET(GPIO_21, SPI_MFP_CFG(MFP_SPI3)),
  142. /* SPI MISO*/
  143. PIN_MFP_SET(GPIO_22, SPI_MFP_CFG(MFP_SPI3)),
  144. /* SPI MOSI*/
  145. PIN_MFP_SET(GPIO_23, SPI_MFP_CFG(MFP_SPI3)),
  146. #endif
  147. #if IS_ENABLED(CONFIG_SPIMT_0)
  148. /* SPI SS*/
  149. PIN_MFP_SET(GPIO_49, SPIMT_MFP_CFG(MFP0_SPIMT)),
  150. /* SPI CLK*/
  151. PIN_MFP_SET(GPIO_50, SPIMT_MFP_CFG(MFP0_SPIMT)),
  152. /* SPI MISO*/
  153. PIN_MFP_SET(GPIO_51, SPIMT_MFP_CFG(MFP0_SPIMT)),
  154. /* SPI MOSI*/
  155. PIN_MFP_SET(GPIO_52, SPIMT_MFP_CFG(MFP0_SPIMT)),
  156. /* SPI SS1*/
  157. PIN_MFP_SET(GPIO_61, SPIMT_MFP_CFG(MFP0_SPIMT)),
  158. #endif
  159. #if IS_ENABLED(CONFIG_SPIMT_1)
  160. /* SPI SS*/
  161. PIN_MFP_SET(GPIO_53, SPIMT_MFP_CFG(MFP1_SPIMT)),
  162. /* SPI CLK*/
  163. PIN_MFP_SET(GPIO_54, SPIMT_MFP_CFG(MFP1_SPIMT)),
  164. /* SPI MISO*/
  165. PIN_MFP_SET(GPIO_55, SPIMT_MFP_CFG(MFP1_SPIMT)),
  166. /* SPI MOSI*/
  167. PIN_MFP_SET(GPIO_56, SPIMT_MFP_CFG(MFP1_SPIMT)),
  168. #endif
  169. };
  170. #if IS_ENABLED(CONFIG_MMC_0)
  171. static const struct acts_pin_config board_mmc0_config[] = {
  172. /* MMC0 CMD*/
  173. PIN_MFP_SET(GPIO_25, SDC0_MFP_CFG_VAL),
  174. /* MMC0 CLK*/
  175. PIN_MFP_SET(GPIO_24, (GPIO_CTL_MFP(SDC0_MFP_SEL)|GPIO_CTL_PADDRV_LEVEL(3))),
  176. /* MMC0 DATA0 */
  177. PIN_MFP_SET(GPIO_18, SDC0_MFP_CFG_VAL),
  178. /* MMC0 DATA1 */
  179. PIN_MFP_SET(GPIO_19, SDC0_MFP_CFG_VAL),
  180. /* MMC0 DATA2 */
  181. PIN_MFP_SET(GPIO_20, SDC0_MFP_CFG_VAL),
  182. /* MMC0 DATA3 */
  183. PIN_MFP_SET(GPIO_21, SDC0_MFP_CFG_VAL),
  184. };
  185. #endif
  186. #if IS_ENABLED(CONFIG_AUDIO_SPDIFTX_0)
  187. static const struct acts_pin_config board_spdiftx0_config[] = {
  188. PIN_MFP_SET(GPIO_9, SPDIFTX_MFP_CFG),
  189. };
  190. #endif
  191. #if IS_ENABLED(CONFIG_AUDIO_SPDIFRX_0)
  192. static const struct acts_pin_config board_spdifrx0_config[] = {
  193. PIN_MFP_SET(GPIO_13, SPDIFRX_MFP_CFG)
  194. };
  195. #endif
  196. #if IS_ENABLED(CONFIG_AUDIO_I2STX_0)
  197. static const struct acts_pin_config board_i2stx0_config[] = {
  198. /*I2STX0 mclk*/
  199. PIN_MFP_SET(GPIO_49, I2STX_MFP_CFG),
  200. /*I2STX0 bclk*/
  201. PIN_MFP_SET(GPIO_50, I2STX_MFP_CFG),
  202. /*I2STX0 lrclk*/
  203. PIN_MFP_SET(GPIO_51, I2STX_MFP_CFG),
  204. /*I2STX0 d0*/
  205. PIN_MFP_SET(GPIO_52, I2STX_MFP_CFG),
  206. };
  207. #endif
  208. #if IS_ENABLED(CONFIG_PWM)
  209. /* Look at CONFIG_PWM_PIN_CHAN_MAP select the available pwm gpio */
  210. static const struct pwm_acts_pin_config board_pwm_config[] = {
  211. /* GPIO57 used as pwm channel 1*/
  212. PWM_PIN_MFP_SET(GPIO_57, 1, PWM_MFP_CFG),
  213. };
  214. #endif
  215. #if IS_ENABLED(CONFIG_ACTS_BATTERY_NTC)
  216. /* GPIO20 and GPIO_23 are used as lradc2, they can't be used at the same time */
  217. static const struct acts_pin_config board_ntc_config[] = {
  218. PIN_MFP_SET(GPIO_20, BATNTC_MFP_CFG),
  219. PIN_MFP_SET(GPIO_23, CONFIG_GPIO_HIGHZ),
  220. };
  221. static const struct acts_pin_config board_ntc_ref_config[] = {
  222. PIN_MFP_SET(GPIO_20, CONFIG_GPIO_HIGHZ),
  223. /* GPIO23 must be a not use GPIO, use as lradc2 to get ntc scale value */
  224. PIN_MFP_SET(GPIO_23, BATNTC_REF_MFP_CFG),
  225. };
  226. static const struct acts_pin_config board_ntc_disable_config[] = {
  227. PIN_MFP_SET(GPIO_20, CONFIG_GPIO_HIGHZ),
  228. PIN_MFP_SET(GPIO_23, CONFIG_GPIO_HIGHZ),
  229. };
  230. #endif
  231. #if IS_ENABLED(CONFIG_PANEL)
  232. static const struct acts_pin_config board_lcd_pin_config[] = {
  233. /* lcd cs */
  234. PIN_MFP_SET(GPIO_30, (GPIO_CTL_MFP(LCD_MFP_SEL)|GPIO_CTL_PULLUP)),
  235. /* lcd scl */
  236. PIN_MFP_SET(GPIO_34, LCD_MFP_CLK_SEL),
  237. /* lcd_d0*/
  238. PIN_MFP_SET(GPIO_14, LCD_MFP_SEL),
  239. /* lcd_d1*/
  240. PIN_MFP_SET(GPIO_15, LCD_MFP_SEL),
  241. /* lcd_d2*/
  242. PIN_MFP_SET(GPIO_16, LCD_MFP_SEL),
  243. /* lcd_d3*/
  244. PIN_MFP_SET(GPIO_17, LCD_MFP_SEL),
  245. /* lcd power: IOVCC2 */
  246. PIN_MFP_SET(GPIO_33, 0x1F),
  247. };
  248. #endif
  249. #if IS_ENABLED(CONFIG_ADCKEY)
  250. #define CONFIG_ADCKEY_GPIO
  251. #ifdef CONFIG_ADCKEY_GPIO
  252. #define CONFIG_ADCKEY_GPIO_NUM (GPIO_21)
  253. #else
  254. #define CONFIG_ADCKEY_WIO_NUM (WIO_0)
  255. #define CONFIG_ADCKEY_WIO_MFP (3)
  256. #endif
  257. static void board_adckey_pinmux_init(void)
  258. {
  259. #ifdef CONFIG_ADCKEY_GPIO
  260. acts_pinmux_set(CONFIG_ADCKEY_GPIO_NUM, ADCKEY_MFP_CFG);
  261. #else
  262. sys_write32(CONFIG_ADCKEY_WIO_MFP, WIO0_CTL + (CONFIG_ADCKEY_WIO_NUM * 4));
  263. #endif
  264. }
  265. #endif
  266. static int board_early_init(const struct device *arg)
  267. {
  268. ARG_UNUSED(arg);
  269. acts_pinmux_setup_pins(board_pin_config, ARRAY_SIZE(board_pin_config));
  270. #if IS_ENABLED(CONFIG_MMC_0)
  271. acts_pinmux_setup_pins(board_mmc0_config, ARRAY_SIZE(board_mmc0_config));
  272. #endif
  273. #if IS_ENABLED(CONFIG_ADCKEY)
  274. board_adckey_pinmux_init();
  275. #endif
  276. #if IS_ENABLED(CONFIG_PANEL)
  277. acts_pinmux_setup_pins(board_lcd_pin_config, ARRAY_SIZE(board_lcd_pin_config));
  278. #endif
  279. #ifdef CONFIG_RTT_CONSOLE
  280. jtag_set();
  281. #endif
  282. return 0;
  283. }
  284. static int board_later_init(const struct device *arg)
  285. {
  286. ARG_UNUSED(arg);
  287. printk("%s %d: \n", __func__, __LINE__);
  288. return 0;
  289. }
  290. /* UART registers struct */
  291. struct acts_uart_reg {
  292. volatile uint32_t ctrl;
  293. volatile uint32_t rxdat;
  294. volatile uint32_t txdat;
  295. volatile uint32_t stat;
  296. volatile uint32_t br;
  297. } ;
  298. void uart_poll_out_ch(int c)
  299. {
  300. struct acts_uart_reg *uart = (struct acts_uart_reg*)UART0_REG_BASE;
  301. /* Wait for transmitter to be ready */
  302. while (uart->stat & BIT(6));
  303. /* send a character */
  304. uart->txdat = (uint32_t)c;
  305. }
  306. /*for early printk*/
  307. int arch_printk_char_out(int c)
  308. {
  309. if ('\n' == c)
  310. uart_poll_out_ch('\r');
  311. uart_poll_out_ch(c);
  312. return 0;
  313. }
  314. #if 1 //TODO:
  315. static const audio_input_map_t board_audio_input_map[] = {
  316. {AUDIO_LINE_IN0, ADC_CH_INPUT0P, ADC_CH_DISABLE, ADC_CH_INPUT0N, ADC_CH_DISABLE},
  317. {AUDIO_LINE_IN1, ADC_CH_INPUT0NP_DIFF, ADC_CH_INPUT1NP_DIFF, ADC_CH_DISABLE, ADC_CH_DISABLE},
  318. {AUDIO_LINE_IN2, ADC_CH_DISABLE, ADC_CH_INPUT1P, ADC_CH_DISABLE, ADC_CH_INPUT1N},
  319. {AUDIO_ANALOG_MIC0, ADC_CH_INPUT0NP_DIFF, ADC_CH_DISABLE, ADC_CH_DISABLE, ADC_CH_DISABLE},
  320. {AUDIO_ANALOG_MIC1, ADC_CH_INPUT0NP_DIFF, ADC_CH_DISABLE, ADC_CH_DISABLE, ADC_CH_DISABLE},
  321. {AUDIO_ANALOG_MIC2, ADC_CH_INPUT0NP_DIFF, ADC_CH_INPUT1NP_DIFF, ADC_CH_DISABLE, ADC_CH_DISABLE},
  322. {AUDIO_ANALOG_FM0, ADC_CH_INPUT0P, ADC_CH_DISABLE, ADC_CH_INPUT0N, ADC_CH_DISABLE},
  323. {AUDIO_DIGITAL_MIC0, ADC_CH_DMIC, ADC_CH_DMIC, ADC_CH_DISABLE, ADC_CH_DISABLE},
  324. };
  325. int board_audio_device_mapping(audio_input_map_t *input_map)
  326. {
  327. int i;
  328. if (!input_map)
  329. return -EINVAL;
  330. for (i = 0; i < ARRAY_SIZE(board_audio_input_map); i++) {
  331. if (input_map->audio_dev == board_audio_input_map[i].audio_dev) {
  332. input_map->ch0_input = board_audio_input_map[i].ch0_input;
  333. input_map->ch1_input = board_audio_input_map[i].ch1_input;
  334. input_map->ch2_input = board_audio_input_map[i].ch2_input;
  335. input_map->ch3_input = board_audio_input_map[i].ch3_input;
  336. break;
  337. }
  338. }
  339. if (i == ARRAY_SIZE(board_audio_input_map)) {
  340. printk("can not find out audio dev 0x%x\n", input_map->audio_dev);
  341. return -ENOENT;
  342. }
  343. return 0;
  344. }
  345. #endif
  346. #ifdef CONFIG_BOARD_EXTERNAL_PA_ENABLE
  347. #define EXTERN_PA_CTL1_PIN 53
  348. #define EXTERN_PA_CTL_SLEEP_OFF_TIME_MS 160
  349. #define EXTERN_PA_CTL_SLEEP_ON_TIME_MS 20
  350. //#define EXTERN_PA_EIO_CTRL_PIN (0)
  351. //#define EXTERN_PA_EIO_CTRL_PIN_NAME CONFIG_EXTEND_GPIO_NAME
  352. int board_extern_pa_ctl(u8_t pa_class, bool is_on)
  353. {
  354. #ifdef EXTERN_PA_CTL1_PIN
  355. const struct device *pa_gpio_dev;
  356. pa_gpio_dev = device_get_binding(CONFIG_GPIO_PIN2NAME(EXTERN_PA_CTL1_PIN));
  357. if (!pa_gpio_dev)
  358. return -EINVAL;
  359. #endif
  360. #ifdef EXTERN_PA_EIO_CTRL_PIN
  361. const struct device *egpio_dev;
  362. egpio_dev = device_get_binding(EXTERN_PA_EIO_CTRL_PIN_NAME);
  363. if (!egpio_dev)
  364. return -EINVAL;
  365. #endif
  366. if (!is_on) {
  367. /* external PA power off */
  368. printk("audio external PA power off\n");
  369. #ifdef EXTERN_PA_CTL1_PIN
  370. gpio_pin_configure(pa_gpio_dev, EXTERN_PA_CTL1_PIN % 32, GPIO_OUTPUT);
  371. gpio_pin_set(pa_gpio_dev, EXTERN_PA_CTL1_PIN % 32, 0);
  372. /* XA7191D PA spec depicts that shall disable PA for above 150ms when switch work mode */
  373. k_sleep(K_MSEC(EXTERN_PA_CTL_SLEEP_OFF_TIME_MS));
  374. #endif
  375. #ifdef EXTERN_PA_EIO_CTRL_PIN
  376. gpio_pin_configure(egpio_dev, EXTERN_PA_EIO_CTRL_PIN % 32, GPIO_OUTPUT);
  377. gpio_pin_set(egpio_dev, EXTERN_PA_EIO_CTRL_PIN % 32, 0);
  378. #endif
  379. } else {
  380. /* external PA power off */
  381. printk("audio external PA power on\n");
  382. #ifdef EXTERN_PA_CTL1_PIN
  383. gpio_pin_configure(pa_gpio_dev, EXTERN_PA_CTL1_PIN % 32, GPIO_OUTPUT);
  384. gpio_pin_set(pa_gpio_dev, EXTERN_PA_CTL1_PIN % 32, 1);
  385. k_sleep(K_MSEC(EXTERN_PA_CTL_SLEEP_ON_TIME_MS));
  386. #endif
  387. #ifdef EXTERN_PA_EIO_CTRL_PIN
  388. gpio_pin_configure(egpio_dev, EXTERN_PA_EIO_CTRL_PIN % 32, GPIO_OUTPUT);
  389. gpio_pin_set(egpio_dev, EXTERN_PA_EIO_CTRL_PIN % 32, 1);
  390. #endif
  391. }
  392. return 0;
  393. }
  394. #endif
  395. void board_get_mmc0_pinmux_info(struct board_pinmux_info *pinmux_info)
  396. {
  397. #if IS_ENABLED(CONFIG_MMC_0)
  398. pinmux_info->pins_config = board_mmc0_config;
  399. pinmux_info->pins_num = ARRAY_SIZE(board_mmc0_config);
  400. #endif
  401. }
  402. void board_get_spdiftx0_pinmux_info(struct board_pinmux_info *pinmux_info)
  403. {
  404. #if IS_ENABLED(CONFIG_AUDIO_SPDIFTX_0)
  405. pinmux_info->pins_config = board_spdiftx0_config;
  406. pinmux_info->pins_num = ARRAY_SIZE(board_spdiftx0_config);
  407. #endif
  408. }
  409. void board_get_spdifrx0_pinmux_info(struct board_pinmux_info *pinmux_info)
  410. {
  411. #if IS_ENABLED(CONFIG_AUDIO_SPDIFRX_0)
  412. pinmux_info->pins_config = board_spdifrx0_config;
  413. pinmux_info->pins_num = ARRAY_SIZE(board_spdifrx0_config);
  414. #endif
  415. }
  416. void board_get_i2stx0_pinmux_info(struct board_pinmux_info *pinmux_info)
  417. {
  418. #if IS_ENABLED(CONFIG_AUDIO_I2STX_0)
  419. pinmux_info->pins_config = board_i2stx0_config;
  420. pinmux_info->pins_num = ARRAY_SIZE(board_i2stx0_config);
  421. #endif
  422. }
  423. void board_get_pwm_pinmux_info(struct board_pwm_pinmux_info *pinmux_info)
  424. {
  425. #if IS_ENABLED(CONFIG_PWM)
  426. pinmux_info->pins_config = board_pwm_config;
  427. pinmux_info->pins_num = ARRAY_SIZE(board_pwm_config);
  428. #endif
  429. }
  430. void board_set_ntc_pinmux_info(bool enable, bool use_as_ntc)
  431. {
  432. #if IS_ENABLED(CONFIG_ACTS_BATTERY_NTC)
  433. if (enable) {
  434. if (use_as_ntc)
  435. acts_pinmux_setup_pins(board_ntc_config, ARRAY_SIZE(board_ntc_config));
  436. else
  437. acts_pinmux_setup_pins(board_ntc_ref_config, ARRAY_SIZE(board_ntc_ref_config));
  438. } else {
  439. acts_pinmux_setup_pins(board_ntc_disable_config, ARRAY_SIZE(board_ntc_disable_config));
  440. }
  441. #endif
  442. }
  443. #if IS_ENABLED(CONFIG_PANEL)
  444. static uint32_t lcd_pin_backup[3];
  445. void board_lcd_suspend(bool aod_en, bool early_suspend)
  446. {
  447. if (early_suspend) {
  448. lcd_pin_backup[0] = sys_read32(GPION_CTL(35)); /* lcd te */
  449. sys_write32(CONFIG_GPIO_HIGHZ, GPION_CTL(35));
  450. if (aod_en == false) {
  451. lcd_pin_backup[1] = sys_read32(GPION_CTL(21)); /* lcd power */
  452. sys_write32(CONFIG_GPIO_HIGHZ, GPION_CTL(21));
  453. lcd_pin_backup[2] = sys_read32(GPION_CTL(32)); /* lcd reset */
  454. sys_write32(CONFIG_GPIO_HIGHZ, GPION_CTL(32));
  455. sys_write32(CONFIG_GPIO_HIGHZ, GPION_CTL(30)); /* lcd cs */
  456. sys_write32(CONFIG_GPIO_HIGHZ, GPION_CTL(33)); /* lcd power IOVCC2 */
  457. }
  458. }
  459. sys_write32(CONFIG_GPIO_HIGHZ, GPION_CTL(34)); /* lcd scl */
  460. sys_write32(CONFIG_GPIO_HIGHZ, GPION_CTL(14)); /* lcd d0 */
  461. sys_write32(CONFIG_GPIO_HIGHZ, GPION_CTL(15)); /* lcd d1 */
  462. sys_write32(CONFIG_GPIO_HIGHZ, GPION_CTL(16)); /* lcd d2 */
  463. sys_write32(CONFIG_GPIO_HIGHZ, GPION_CTL(17)); /* lcd d3 */
  464. }
  465. void board_lcd_resume(bool aod_en, bool late_resume)
  466. {
  467. acts_pinmux_setup_pins(board_lcd_pin_config, ARRAY_SIZE(board_lcd_pin_config));
  468. if (late_resume) {
  469. sys_write32(lcd_pin_backup[0], GPION_CTL(35)); /* lcd te */
  470. if (aod_en == false) {
  471. sys_write32(lcd_pin_backup[1], GPION_CTL(21)); /* lcd GND_LEDK */
  472. sys_write32(lcd_pin_backup[2], GPION_CTL(32)); /* lcd reset */
  473. }
  474. }
  475. }
  476. #endif /* CONFIG_PANEL */
  477. SYS_INIT(board_early_init, PRE_KERNEL_1, 5);
  478. SYS_INIT(board_later_init, POST_KERNEL, 5);