Advertisement
Guest User

uBoot board init

a guest
Oct 31st, 2018
288
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.91 KB | None | 0 0
  1. struct display_info_t const displays[] = {{
  2.     .bus    = -1,
  3.     .addr   = 0,
  4.     .pixfmt = IPU_PIX_FMT_LVDS666,
  5.     .detect = NULL,
  6.     .enable = enable_lvds,
  7.     .mode   = {
  8.         .name           = "LDB-XGA",
  9.         .refresh        = 60,
  10.         .xres           = 1024,
  11.         .yres           = 600,
  12.         .pixclock       = 19531, /* ~51.2MHz */
  13.         .left_margin    = 160,
  14.         .right_margin   = 140,
  15.         .hsync_len      = 20,
  16.         .upper_margin   = 20,
  17.         .lower_margin   = 12,
  18.         .vsync_len      = 3,
  19.         .sync           = FB_SYNC_EXT,
  20.         .vmode          = FB_VMODE_NONINTERLACED
  21. } }, {
  22.     .bus    = -1,
  23.     .addr   = 0,
  24.     .pixfmt = IPU_PIX_FMT_RGB24,
  25.     .detect = NULL,
  26.     .enable = do_enable_hdmi,
  27.     .mode   = {
  28.         .name           = "HDMI",
  29.         .refresh        = 60,
  30.         .xres           = 1280,
  31.         .yres           = 720,
  32.         .pixclock       = 15385,
  33.         .left_margin    = 220,
  34.         .right_margin   = 40,
  35.         .upper_margin   = 21,
  36.         .lower_margin   = 7,
  37.         .hsync_len      = 60,
  38.         .vsync_len      = 10,
  39.         .sync           = FB_SYNC_EXT,
  40.         .vmode          = FB_VMODE_NONINTERLACED
  41. } } };
  42. size_t display_count = ARRAY_SIZE(displays);
  43.  
  44. static void setup_display(void)
  45. {
  46.     struct mxc_ccm_reg *mxc_ccm = (struct mxc_ccm_reg *)CCM_BASE_ADDR;
  47.     struct iomuxc *iomux = (struct iomuxc *)IOMUXC_BASE_ADDR;
  48.     int reg;
  49.  
  50.     enable_ipu_clock();
  51.     imx_setup_hdmi();
  52.  
  53.     /* Turn on LDB0,IPU,IPU DI0 clocks */
  54.     reg = __raw_readl(&mxc_ccm->CCGR3);
  55.     reg |=  MXC_CCM_CCGR3_LDB_DI0_MASK;
  56.     writel(reg, &mxc_ccm->CCGR3);
  57.  
  58.     /* set LDB0, LDB1 clk select to 011/011 */
  59.     reg = readl(&mxc_ccm->cs2cdr);
  60.     reg &= ~(MXC_CCM_CS2CDR_LDB_DI0_CLK_SEL_MASK
  61.          |MXC_CCM_CS2CDR_LDB_DI1_CLK_SEL_MASK);
  62.     reg |= (3<<MXC_CCM_CS2CDR_LDB_DI0_CLK_SEL_OFFSET)
  63.           |(3<<MXC_CCM_CS2CDR_LDB_DI1_CLK_SEL_OFFSET);
  64.     writel(reg, &mxc_ccm->cs2cdr);
  65.  
  66.     reg = readl(&mxc_ccm->cscmr2);
  67.     reg |= MXC_CCM_CSCMR2_LDB_DI0_IPU_DIV;
  68.     writel(reg, &mxc_ccm->cscmr2);
  69.  
  70.     reg = readl(&mxc_ccm->chsccdr);
  71.     reg |= (CHSCCDR_CLK_SEL_LDB_DI0
  72.         <<MXC_CCM_CHSCCDR_IPU1_DI0_CLK_SEL_OFFSET);
  73.     writel(reg, &mxc_ccm->chsccdr);
  74.  
  75.     reg = IOMUXC_GPR2_BGREF_RRMODE_EXTERNAL_RES
  76.          |IOMUXC_GPR2_DI1_VS_POLARITY_ACTIVE_HIGH
  77.          |IOMUXC_GPR2_DI0_VS_POLARITY_ACTIVE_LOW
  78.          |IOMUXC_GPR2_BIT_MAPPING_CH1_SPWG
  79.          |IOMUXC_GPR2_DATA_WIDTH_CH1_18BIT
  80.          |IOMUXC_GPR2_BIT_MAPPING_CH0_SPWG
  81.          |IOMUXC_GPR2_DATA_WIDTH_CH0_18BIT
  82.          |IOMUXC_GPR2_LVDS_CH1_MODE_DISABLED
  83.          |IOMUXC_GPR2_LVDS_CH0_MODE_ENABLED_DI0;
  84.     writel(reg, &iomux->gpr[2]);
  85.  
  86.     reg = readl(&iomux->gpr[3]);
  87.     reg = (reg & ~(IOMUXC_GPR3_LVDS0_MUX_CTL_MASK
  88.             |IOMUXC_GPR3_HDMI_MUX_CTL_MASK))
  89.         | (IOMUXC_GPR3_MUX_SRC_IPU1_DI0
  90.            <<IOMUXC_GPR3_LVDS0_MUX_CTL_OFFSET);
  91.     writel(reg, &iomux->gpr[3]);
  92.  
  93.     /* backlights off until needed */
  94.     imx_iomux_v3_setup_multiple_pads(display_power_pads,
  95.                      ARRAY_SIZE(display_power_pads));
  96.     gpio_direction_input(LVDS_BACKLIGHT_PWM);
  97.     gpio_direction_input(LVDS_POWER_SHDN);
  98.     gpio_direction_input(LVDS_POWER_RDY);
  99.  
  100. }
  101. #endif /* CONFIG_VIDEO_IPUV3 */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement