Dear Minkyu, > -----Original Message----- > From: Minkyu Kang [mailto:proms...@gmail.com] > Sent: Saturday, September 15, 2012 10:46 AM > To: Piotr Wilczek; Donghwa Lee > Cc: u-boot@lists.denx.de; Kyungmin Park > Subject: Re: [U-Boot] [PATCH 6/6] arm: exynos4: universal_C210: add > display support > > Dear Piotr, > > On 13 September 2012 16:45, Piotr Wilczek <p.wilc...@samsung.com> > wrote: > > This patch add support for display on Universal C210 board. > > Width of displayed logo must be not bigger than 480 pixel and is > > limited by width of the screen. > > Tizen logo size is 520x120 pixels should be reseized to be displayed > > corectly on Universal C210. > > > > Signed-off-by: Piotr Wilczek <p.wilc...@samsung.com> > > Signed-off-by: Kyungmin Park <kyungmin.p...@samsung.com> > > CC: Minkyu Kang <mk7.k...@samsung.com> > > --- > > board/samsung/universal_c210/universal.c | 225 > +++++++++++++++++++++++++++--- > > include/configs/s5pc210_universal.h | 13 ++ > > 2 files changed, 220 insertions(+), 18 deletions(-) > > > > diff --git a/board/samsung/universal_c210/universal.c > > b/board/samsung/universal_c210/universal.c > > index 772ade5..da28f7a 100644 > > --- a/board/samsung/universal_c210/universal.c > > +++ b/board/samsung/universal_c210/universal.c > > > > +static void init_pmic_lcd(void) > > +{ > > + unsigned char val; > > + int ret = 0; > > + > > + struct pmic *p = get_pmic(); > > + > > + if (pmic_probe(p)) > > + return; > > + > > + /* LDO7 1.8V */ > > + val = 0x02; /* (1800 - 1600) / 100; */ > > + ret |= pmic_reg_write(p, MAX8998_REG_LDO7, val); > > + > > + /* LDO17 3.0V */ > > + val = 0xe; /* (3000 - 1600) / 100; */ > > + ret |= pmic_reg_write(p, MAX8998_REG_LDO17, val); > > + > > + /* Disable unneeded regulators */ > > + /* > > + * ONOFF1 > > + * Buck1 ON, Buck2 OFF, Buck3 ON, Buck4 ON > > + * LDO2 ON, LDO3 OFF, LDO4 OFF, LDO5 ON > > + */ > > + val = 0xB9; > > + ret |= pmic_reg_write(p, MAX8998_REG_ONOFF1, val); > > + > > + /* ONOFF2 > > + * LDO6 OFF, LDO7 ON, LDO8 OFF, LDO9 ON, > > + * LDO10 OFF, LDO11 OFF, LDO12 OFF, LDO13 OFF > > + */ > > + val = 0x50; > > + ret |= pmic_reg_write(p, MAX8998_REG_ONOFF2, val); > > + > > + /* ONOFF3 > > + * LDO14 OFF, LDO15 OFF, LGO16 OFF, LDO17 OFF > > + * EPWRHOLD OFF, EBATTMON OFF, ELBCNFG2 OFF, ELBCNFG1 OFF > > + */ > > + val = 0x00; > > + ret |= pmic_reg_write(p, MAX8998_REG_ONOFF3, val); > > + > > + if (ret) > > + puts("LCD pmic initialisation error!\n"); } > > + > > +static void fimd_clk_set(void) > > +{ > > + unsigned int cfg = 0; > > + > > + /* LCD0_BLK FIFO S/W reset */ > > + cfg = readl(EXYNOS4_DISPLAY_CONTROL); > > + cfg |= EXYNOS_DISPLAYCONTROL_FIFORST_LBLK0; > > + writel(cfg, EXYNOS4_DISPLAY_CONTROL); > > + > > + cfg = 0; > > + > > + /* FIMD of LBLK0 Bypass Selection */ > > + cfg = readl(EXYNOS4_DISPLAY_CONTROL); > > + cfg &= ~EXYNOS_DISPLAYCONTROL_FIFORST_LBLK0; > > + cfg |= EXYNOS_DISPLAYCONTROL_FIMDBYPASS_LBLK0; > > + writel(cfg, EXYNOS4_DISPLAY_CONTROL); > > No.. > We don't allow direct access. > And this function looks same with exynos4_set_system_display. Ok, I will fix it. > > > +} > > + > > +static void lcd_cfg_gpio(void) > > +{ > > + unsigned int i, f3_end = 4; > > + > > + for (i = 0; i < 8; i++) { > > + /* set GPF0,1,2[0:7] for RGB Interface and Data lines > (32bit) */ > > + s5p_gpio_cfg_pin(&gpio1->f0, i, GPIO_FUNC(2)); > > + s5p_gpio_cfg_pin(&gpio1->f1, i, GPIO_FUNC(2)); > > + s5p_gpio_cfg_pin(&gpio1->f2, i, GPIO_FUNC(2)); > > + /* pull-up/down disable */ > > + s5p_gpio_set_pull(&gpio1->f0, i, GPIO_PULL_NONE); > > + s5p_gpio_set_pull(&gpio1->f1, i, GPIO_PULL_NONE); > > + s5p_gpio_set_pull(&gpio1->f2, i, GPIO_PULL_NONE); > > + > > + /* drive strength to max (24bit) */ > > + s5p_gpio_set_drv(&gpio1->f0, i, GPIO_DRV_4X); > > + s5p_gpio_set_rate(&gpio1->f0, i, GPIO_DRV_SLOW); > > + s5p_gpio_set_drv(&gpio1->f1, i, GPIO_DRV_4X); > > + s5p_gpio_set_rate(&gpio1->f1, i, GPIO_DRV_SLOW); > > + s5p_gpio_set_drv(&gpio1->f2, i, GPIO_DRV_4X); > > + s5p_gpio_set_rate(&gpio1->f0, i, GPIO_DRV_SLOW); > > + } > > + > > + for (i = 0; i < f3_end; i++) { > > + /* set GPF3[0:3] for RGB Interface and Data lines > (32bit) */ > > + s5p_gpio_cfg_pin(&gpio1->f3, i, GPIO_FUNC(2)); > > + /* pull-up/down disable */ > > + s5p_gpio_set_pull(&gpio1->f3, i, GPIO_PULL_NONE); > > + /* drive strength to max (24bit) */ > > + s5p_gpio_set_drv(&gpio1->f3, i, GPIO_DRV_4X); > > + s5p_gpio_set_rate(&gpio1->f3, i, GPIO_DRV_SLOW); > > + } > > + > > + /* gpio pad configuration for LCD reset. */ > > + s5p_gpio_cfg_pin(&gpio2->y4, 5, GPIO_OUTPUT); > > + > > + spi_init(); > > + > > + return; > > Please remove this return. Ok. > > > +} > > + > > +static void reset_lcd(void) > > +{ > > + s5p_gpio_set_value(&gpio2->y4, 5, 1); > > + udelay(10000); > > + s5p_gpio_set_value(&gpio2->y4, 5, 0); > > + udelay(10000); > > + s5p_gpio_set_value(&gpio2->y4, 5, 1); > > + udelay(100); > > +} > > + > > +static void lcd_power_on(void) > > +{ > > + struct pmic *p = get_pmic(); > > + > > + if (pmic_probe(p)) > > + return; > > + > > + pmic_set_output(p, MAX8998_REG_ONOFF3, MAX8998_LDO17, > LDO_ON); > > + pmic_set_output(p, MAX8998_REG_ONOFF2, MAX8998_LDO7, LDO_ON); > > +} > > + > > +vidinfo_t panel_info = { > > + .vl_freq = 60, > > + .vl_col = 480, > > + .vl_row = 800, > > + .vl_width = 480, > > + .vl_height = 800, > > + .vl_clkp = CONFIG_SYS_HIGH, > > + .vl_hsp = CONFIG_SYS_HIGH, > > + .vl_vsp = CONFIG_SYS_HIGH, > > + .vl_dp = CONFIG_SYS_HIGH, > > + > > + .vl_bpix = 5, /* Bits per pixel */ > > + > > + /* LD9040 LCD Panel */ > > + .vl_hspw = 2, > > + .vl_hbpd = 16, > > + .vl_hfpd = 16, > > + > > + .vl_vspw = 2, > > + .vl_vbpd = 8, > > + .vl_vfpd = 8, > > + .vl_cmd_allow_len = 0xf, > > + > > + .win_id = 0, > > + .cfg_gpio = lcd_cfg_gpio, > > + .backlight_on = NULL, > > + .lcd_power_on = lcd_power_on, > > + .reset_lcd = reset_lcd, > > + .dual_lcd_enabled = 0, > > + > > + .init_delay = 0, > > + .power_on_delay = 10000, > > + .reset_delay = 10000, > > + .interface_mode = FIMD_RGB_INTERFACE, > > + .mipi_enabled = 0, > > +}; > > + > > +void init_panel_info(vidinfo_t *vid) > > +{ > > + fimd_clk_set(); > > + > > + vid->logo_on = 1; > > + vid->resolution = HD_RESOLUTION; > > + vid->rgb_mode = MODE_RGB_P; > > + > > +#ifdef CONFIG_TIZEN > > + get_tizen_logo_info(vid); > > +#endif > > + > > + /* for LD9040. */ > > + vid->pclk_name = 1; /* MPLL */ > > + vid->sclk_div = 1; > > + > > + vid->cfg_ldo = ld9040_cfg_ldo; > > + vid->enable_ldo = ld9040_enable_ldo; > > + > > + setenv("lcdinfo", "lcd=ld9040"); } > > + > > +int board_init(void) > > +{ > > + gpio1 = (struct exynos4_gpio_part1 *) > EXYNOS4_GPIO_PART1_BASE; > > + gpio2 = (struct exynos4_gpio_part2 *) > EXYNOS4_GPIO_PART2_BASE; > > + > > + gd->bd->bi_arch_number = MACH_TYPE_UNIVERSAL_C210; > > + gd->bd->bi_boot_params = PHYS_SDRAM_1 + 0x100; > > + > > +#if defined(CONFIG_PMIC) > > + pmic_init(); > > +#endif > > + > > + init_pmic_lcd(); > > move this function into CONFIG_PMIC? Yes, it should be in CONFIG_PMIC. > > > + > > + check_hw_revision(); > > + printf("HW Revision:\t0x%x\n", board_rev); > > + > > + return 0; > > +} > > Thanks. > Minkyu Kang. Thank you, Piotr Wilczek > -- > from. prom. > www.promsoft.net
_______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot