board_mipi.c 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225
  1. /*
  2. * Copyright (c) 2012, Freescale Semiconductor, Inc.
  3. * All rights reserved.
  4. *
  5. * Redistribution and use in source and binary forms, with or without modification,
  6. * are permitted provided that the following conditions are met:
  7. *
  8. * o Redistributions of source code must retain the above copyright notice, this list
  9. * of conditions and the following disclaimer.
  10. *
  11. * o Redistributions in binary form must reproduce the above copyright notice, this
  12. * list of conditions and the following disclaimer in the documentation and/or
  13. * other materials provided with the distribution.
  14. *
  15. * o Neither the name of Freescale Semiconductor, Inc. nor the names of its
  16. * contributors may be used to endorse or promote products derived from this
  17. * software without specific prior written permission.
  18. *
  19. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
  20. * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
  21. * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  22. * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
  23. * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
  24. * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
  25. * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
  26. * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  27. * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
  28. * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  29. */
  30. #include "sdk.h"
  31. #include "registers/regsccm.h"
  32. #include "registers/regsccmanalog.h"
  33. #include "registers/regsiomuxc.h"
  34. ////////////////////////////////////////////////////////////////////////////////
  35. // Code
  36. ////////////////////////////////////////////////////////////////////////////////
  37. /*!
  38. * Provide the mipi camera power and reset
  39. */
  40. void mipi_cam_power_on(void)
  41. {
  42. #if defined(BOARD_EVB)
  43. board_ioexpander_iomux_config();
  44. /*reset of camera sensor, pin 27 */
  45. max7310_set_gpio_output(0, 2, GPIO_LOW_LEVEL);
  46. hal_delay_us(1000);
  47. max7310_set_gpio_output(0, 2, GPIO_HIGH_LEVEL);
  48. /*power supply through pin25 of connector, for cam_pdown, power down and then up */
  49. max7310_set_gpio_output(0, 0, GPIO_LOW_LEVEL);
  50. hal_delay_us(1000);
  51. max7310_set_gpio_output(0, 0, GPIO_HIGH_LEVEL);
  52. // max7310_set_gpio_output(1, 1, GPIO_HIGH_LEVEL);
  53. #endif
  54. #if defined(BOARD_SABRE_AI)
  55. board_ioexpander_iomux_config();
  56. /*power supply through pin25 of connector, direct connected to P3V3_DELAY,
  57. controlled by CPU_PER_RST_B */
  58. /*reset of camera sensor, together with the reset button */
  59. max7310_set_gpio_output(0, 2, GPIO_LOW_LEVEL);
  60. hal_delay_us(1000);
  61. max7310_set_gpio_output(0, 2, GPIO_HIGH_LEVEL);
  62. max7310_set_gpio_output(0, 0, GPIO_HIGH_LEVEL);
  63. #endif
  64. #if defined(BOARD_SMART_DEVICE)
  65. /*power supply through pin25 of connector, for cam_pdown */
  66. gpio_set_gpio(GPIO_PORT6, 9);
  67. HW_IOMUXC_SW_PAD_CTL_PAD_NAND_WP_B_WR(
  68. BF_IOMUXC_SW_PAD_CTL_PAD_NAND_WP_B_HYS_V(ENABLED) |
  69. BF_IOMUXC_SW_PAD_CTL_PAD_NAND_WP_B_PUS_V(100K_OHM_PU) |
  70. BF_IOMUXC_SW_PAD_CTL_PAD_NAND_WP_B_PUE_V(PULL) |
  71. BF_IOMUXC_SW_PAD_CTL_PAD_NAND_WP_B_PKE_V(ENABLED) |
  72. BF_IOMUXC_SW_PAD_CTL_PAD_NAND_WP_B_ODE_V(DISABLED) |
  73. BF_IOMUXC_SW_PAD_CTL_PAD_NAND_WP_B_SPEED_V(100MHZ) |
  74. BF_IOMUXC_SW_PAD_CTL_PAD_NAND_WP_B_DSE_V(40_OHM) |
  75. BF_IOMUXC_SW_PAD_CTL_PAD_NAND_WP_B_SRE_V(SLOW));
  76. gpio_set_direction(GPIO_PORT6, 9, GPIO_GDIR_OUTPUT);
  77. gpio_set_level(GPIO_PORT6, 9, GPIO_HIGH_LEVEL);
  78. /*reset of camera sensor, pin 27 */
  79. gpio_set_gpio(GPIO_PORT6, 10);
  80. HW_IOMUXC_SW_PAD_CTL_PAD_NAND_READY_WR(
  81. BF_IOMUXC_SW_PAD_CTL_PAD_NAND_READY_HYS_V(ENABLED) |
  82. BF_IOMUXC_SW_PAD_CTL_PAD_NAND_READY_PUS_V(100K_OHM_PU) |
  83. BF_IOMUXC_SW_PAD_CTL_PAD_NAND_READY_PUE_V(PULL) |
  84. BF_IOMUXC_SW_PAD_CTL_PAD_NAND_READY_PKE_V(ENABLED) |
  85. BF_IOMUXC_SW_PAD_CTL_PAD_NAND_READY_ODE_V(DISABLED) |
  86. BF_IOMUXC_SW_PAD_CTL_PAD_NAND_READY_SPEED_V(100MHZ) |
  87. BF_IOMUXC_SW_PAD_CTL_PAD_NAND_READY_DSE_V(40_OHM) |
  88. BF_IOMUXC_SW_PAD_CTL_PAD_NAND_READY_SRE_V(SLOW));
  89. gpio_set_direction(GPIO_PORT6, 10, GPIO_GDIR_OUTPUT);
  90. gpio_set_level(GPIO_PORT6, 10, GPIO_LOW_LEVEL);
  91. hal_delay_us(1000);
  92. gpio_set_level(GPIO_PORT6, 10, GPIO_HIGH_LEVEL);
  93. #endif
  94. }
  95. /*!
  96. * enable mipi backlight
  97. */
  98. void mipi_backlight_en(void)
  99. {
  100. //configure pin19 of the mipi dsi/csi connector
  101. #ifdef BOARD_EVB
  102. //set GPIO1_9 to 0 so clear vbus on board
  103. gpio_set_direction(GPIO_PORT1, 9, GPIO_GDIR_OUTPUT);
  104. gpio_set_level(GPIO_PORT1, 9, GPIO_HIGH_LEVEL);
  105. #endif
  106. #ifdef BOARD_SABRE_AI
  107. //default be populated by P3V3_DELAYED
  108. #endif
  109. #ifdef BOARD_SMART_DEVICE
  110. gpio_set_gpio(GPIO_PORT2, 0);
  111. HW_IOMUXC_SW_PAD_CTL_PAD_NAND_DATA00_WR(
  112. BF_IOMUXC_SW_PAD_CTL_PAD_NAND_DATA00_HYS_V(ENABLED) |
  113. BF_IOMUXC_SW_PAD_CTL_PAD_NAND_DATA00_PUS_V(100K_OHM_PU) |
  114. BF_IOMUXC_SW_PAD_CTL_PAD_NAND_DATA00_PUE_V(PULL) |
  115. BF_IOMUXC_SW_PAD_CTL_PAD_NAND_DATA00_PKE_V(ENABLED) |
  116. BF_IOMUXC_SW_PAD_CTL_PAD_NAND_DATA00_ODE_V(DISABLED) |
  117. BF_IOMUXC_SW_PAD_CTL_PAD_NAND_DATA00_SPEED_V(100MHZ) |
  118. BF_IOMUXC_SW_PAD_CTL_PAD_NAND_DATA00_DSE_V(40_OHM) |
  119. BF_IOMUXC_SW_PAD_CTL_PAD_NAND_DATA00_SRE_V(SLOW));
  120. gpio_set_direction(GPIO_PORT2, 0, GPIO_GDIR_OUTPUT);
  121. gpio_set_level(GPIO_PORT2, 0, GPIO_HIGH_LEVEL);
  122. #endif
  123. }
  124. /*!
  125. * reset MIPI display
  126. */
  127. void mipi_display_reset(void)
  128. {
  129. #ifdef BOARD_EVB
  130. /*pin29 of mipi connector for the LCD reset*/
  131. gpio_set_gpio(GPIO_PORT5, 0);
  132. HW_IOMUXC_SW_PAD_CTL_PAD_EIM_WAIT_WR(
  133. BF_IOMUXC_SW_PAD_CTL_PAD_EIM_WAIT_HYS_V(ENABLED) |
  134. BF_IOMUXC_SW_PAD_CTL_PAD_EIM_WAIT_PUS_V(100K_OHM_PU) |
  135. BF_IOMUXC_SW_PAD_CTL_PAD_EIM_WAIT_PUE_V(PULL) |
  136. BF_IOMUXC_SW_PAD_CTL_PAD_EIM_WAIT_PKE_V(ENABLED) |
  137. BF_IOMUXC_SW_PAD_CTL_PAD_EIM_WAIT_ODE_V(DISABLED) |
  138. BF_IOMUXC_SW_PAD_CTL_PAD_EIM_WAIT_SPEED_V(100MHZ) |
  139. BF_IOMUXC_SW_PAD_CTL_PAD_EIM_WAIT_DSE_V(40_OHM) |
  140. BF_IOMUXC_SW_PAD_CTL_PAD_EIM_WAIT_SRE_V(SLOW));
  141. gpio_set_direction(GPIO_PORT5, 0, GPIO_GDIR_OUTPUT);
  142. gpio_set_level(GPIO_PORT5, 0, GPIO_LOW_LEVEL);
  143. hal_delay_us(1000);
  144. gpio_set_level(GPIO_PORT5, 0, GPIO_HIGH_LEVEL);
  145. hal_delay_us(1000);
  146. #endif
  147. #ifdef BOARD_SABRE_AI
  148. /*binded with the board reset button*/
  149. #endif
  150. #ifdef BOARD_SMART_DEVICE
  151. /*pin29 of mipi connector for the LCD reset*/
  152. gpio_set_gpio(GPIO_PORT6, 11);
  153. HW_IOMUXC_SW_PAD_CTL_PAD_NAND_CS0_B_WR(
  154. BF_IOMUXC_SW_PAD_CTL_PAD_NAND_CS0_B_HYS_V(ENABLED) |
  155. BF_IOMUXC_SW_PAD_CTL_PAD_NAND_CS0_B_PUS_V(100K_OHM_PU) |
  156. BF_IOMUXC_SW_PAD_CTL_PAD_NAND_CS0_B_PUE_V(PULL) |
  157. BF_IOMUXC_SW_PAD_CTL_PAD_NAND_CS0_B_PKE_V(ENABLED) |
  158. BF_IOMUXC_SW_PAD_CTL_PAD_NAND_CS0_B_ODE_V(DISABLED) |
  159. BF_IOMUXC_SW_PAD_CTL_PAD_NAND_CS0_B_SPEED_V(100MHZ) |
  160. BF_IOMUXC_SW_PAD_CTL_PAD_NAND_CS0_B_DSE_V(40_OHM) |
  161. BF_IOMUXC_SW_PAD_CTL_PAD_NAND_CS0_B_SRE_V(SLOW));
  162. gpio_set_direction(GPIO_PORT6, 11, GPIO_GDIR_OUTPUT);
  163. gpio_set_level(GPIO_PORT6, 11, GPIO_LOW_LEVEL);
  164. hal_delay_us(1000);
  165. gpio_set_level(GPIO_PORT6, 11, GPIO_HIGH_LEVEL);
  166. hal_delay_us(1000);
  167. #endif
  168. }
  169. void mipi_clock_set(void)
  170. {
  171. BW_CCM_ANALOG_PFD_480_PFD1_FRAC(0x10);
  172. }
  173. void mipi_csi2_clock_set(void)
  174. {
  175. //set VIDPLL(PLL5) to 596MHz
  176. HW_CCM_ANALOG_PLL_VIDEO_WR(BF_CCM_ANALOG_PLL_VIDEO_DIV_SELECT(0) |
  177. BF_CCM_ANALOG_PLL_VIDEO_ENABLE(1));
  178. HW_CCM_ANALOG_PLL_VIDEO_NUM_WR(0x00000000);
  179. HW_CCM_ANALOG_PLL_VIDEO_DENOM_WR(0x00000001);
  180. while (!HW_CCM_ANALOG_PLL_VIDEO.B.LOCK) ; //waiting for PLL lock
  181. BF_CLR(CCM_ANALOG_PLL_VIDEO, BYPASS);
  182. //select CSI0_HSYNC osc_clk 24MHz, CKO1 output drives cko2 clock
  183. HW_IOMUXC_SW_MUX_CTL_PAD_CSI0_HSYNC_WR(
  184. BF_IOMUXC_SW_MUX_CTL_PAD_CSI0_HSYNC_SION_V(DISABLED) |
  185. BF_IOMUXC_SW_MUX_CTL_PAD_CSI0_HSYNC_MUX_MODE_V(ALT3));
  186. HW_IOMUXC_SW_PAD_CTL_PAD_CSI0_HSYNC_WR(
  187. BF_IOMUXC_SW_PAD_CTL_PAD_CSI0_HSYNC_HYS_V(ENABLED) |
  188. BF_IOMUXC_SW_PAD_CTL_PAD_CSI0_HSYNC_PUS_V(100K_OHM_PU) |
  189. BF_IOMUXC_SW_PAD_CTL_PAD_CSI0_HSYNC_PUE_V(PULL) |
  190. BF_IOMUXC_SW_PAD_CTL_PAD_CSI0_HSYNC_PKE_V(ENABLED) |
  191. BF_IOMUXC_SW_PAD_CTL_PAD_CSI0_HSYNC_ODE_V(DISABLED) |
  192. BF_IOMUXC_SW_PAD_CTL_PAD_CSI0_HSYNC_SPEED_V(100MHZ) |
  193. BF_IOMUXC_SW_PAD_CTL_PAD_CSI0_HSYNC_DSE_V(40_OHM) |
  194. BF_IOMUXC_SW_PAD_CTL_PAD_CSI0_HSYNC_SRE_V(SLOW));
  195. HW_CCM_CCOSR_WR(
  196. BF_CCM_CCOSR_CLKO1_SEL(0) |
  197. BF_CCM_CCOSR_CLKO1_DIV(0) |
  198. BF_CCM_CCOSR_CLKO1_EN(1) |
  199. BF_CCM_CCOSR_CLKO_SEL(1) | // select cko2 for cko1 output
  200. BF_CCM_CCOSR_CLKO2_SEL(0xe) | // osc_clk
  201. BF_CCM_CCOSR_CLKO2_DIV(0) | // div 1
  202. BF_CCM_CCOSR_CLKO2_EN(1));
  203. }
  204. ////////////////////////////////////////////////////////////////////////////////
  205. // EOF
  206. ////////////////////////////////////////////////////////////////////////////////