@ -2,6 +2,7 @@
* Copyright ( C ) 2011 Samsung Electronics
* Heungjun Kim < riverful . kim @ samsung . com >
* Kyungmin Park < kyungmin . park @ samsung . com >
* Donghwa Lee < dh09 . lee @ samsung . com >
*
* See file CREDITS for list of people who contributed to this
* project .
@ -23,11 +24,14 @@
*/
# include <common.h>
# include <lcd.h>
# include <asm/io.h>
# include <asm/arch/cpu.h>
# include <asm/arch/gpio.h>
# include <asm/arch/mmc.h>
# include <asm/arch/clock.h>
# include <asm/arch/clk.h>
# include <asm/arch/mipi_dsim.h>
# include <asm/arch/watchdog.h>
# include <asm/arch/power.h>
# include <pmic.h>
@ -357,3 +361,145 @@ int board_early_init_f(void)
return 0 ;
}
static void lcd_reset ( void )
{
struct exynos4_gpio_part2 * gpio2 =
( struct exynos4_gpio_part2 * ) samsung_get_base_gpio_part2 ( ) ;
s5p_gpio_direction_output ( & gpio2 - > y4 , 5 , 1 ) ;
udelay ( 10000 ) ;
s5p_gpio_direction_output ( & gpio2 - > y4 , 5 , 0 ) ;
udelay ( 10000 ) ;
s5p_gpio_direction_output ( & gpio2 - > y4 , 5 , 1 ) ;
}
static int lcd_power ( void )
{
int ret = 0 ;
struct pmic * p = get_pmic ( ) ;
if ( pmic_probe ( p ) )
return 0 ;
/* LDO15 voltage: 2.2v */
ret | = pmic_reg_write ( p , MAX8997_REG_LDO15CTRL , 0x1c | EN_LDO ) ;
/* LDO13 voltage: 3.0v */
ret | = pmic_reg_write ( p , MAX8997_REG_LDO13CTRL , 0x2c | EN_LDO ) ;
if ( ret ) {
puts ( " MAX8997 LDO setting error! \n " ) ;
return - 1 ;
}
return 0 ;
}
static struct mipi_dsim_config dsim_config = {
. e_interface = DSIM_VIDEO ,
. e_virtual_ch = DSIM_VIRTUAL_CH_0 ,
. e_pixel_format = DSIM_24BPP_888 ,
. e_burst_mode = DSIM_BURST_SYNC_EVENT ,
. e_no_data_lane = DSIM_DATA_LANE_4 ,
. e_byte_clk = DSIM_PLL_OUT_DIV8 ,
. hfp = 1 ,
. p = 3 ,
. m = 120 ,
. s = 1 ,
/* D-PHY PLL stable time spec :min = 200usec ~ max 400usec */
. pll_stable_time = 500 ,
/* escape clk : 10MHz */
. esc_clk = 20 * 1000000 ,
/* stop state holding counter after bta change count 0 ~ 0xfff */
. stop_holding_cnt = 0x7ff ,
/* bta timeout 0 ~ 0xff */
. bta_timeout = 0xff ,
/* lp rx timeout 0 ~ 0xffff */
. rx_timeout = 0xffff ,
} ;
static struct exynos_platform_mipi_dsim s6e8ax0_platform_data = {
. lcd_panel_info = NULL ,
. dsim_config = & dsim_config ,
} ;
static struct mipi_dsim_lcd_device mipi_lcd_device = {
. name = " s6e8ax0 " ,
. id = - 1 ,
. bus_id = 0 ,
. platform_data = ( void * ) & s6e8ax0_platform_data ,
} ;
static int mipi_power ( void )
{
int ret = 0 ;
struct pmic * p = get_pmic ( ) ;
if ( pmic_probe ( p ) )
return 0 ;
/* LDO3 voltage: 1.1v */
ret | = pmic_reg_write ( p , MAX8997_REG_LDO3CTRL , 0x6 | EN_LDO ) ;
/* LDO4 voltage: 1.8v */
ret | = pmic_reg_write ( p , MAX8997_REG_LDO4CTRL , 0x14 | EN_LDO ) ;
if ( ret ) {
puts ( " MAX8997 LDO setting error! \n " ) ;
return - 1 ;
}
return 0 ;
}
void init_panel_info ( vidinfo_t * vid )
{
vid - > vl_freq = 60 ;
vid - > vl_col = 720 ;
vid - > vl_row = 1280 ;
vid - > vl_width = 720 ;
vid - > vl_height = 1280 ;
vid - > vl_clkp = CONFIG_SYS_HIGH ;
vid - > vl_hsp = CONFIG_SYS_LOW ;
vid - > vl_vsp = CONFIG_SYS_LOW ;
vid - > vl_dp = CONFIG_SYS_LOW ;
vid - > vl_bpix = 32 ;
vid - > dual_lcd_enabled = 0 ;
/* s6e8ax0 Panel */
vid - > vl_hspw = 5 ;
vid - > vl_hbpd = 10 ;
vid - > vl_hfpd = 10 ;
vid - > vl_vspw = 2 ;
vid - > vl_vbpd = 1 ;
vid - > vl_vfpd = 13 ;
vid - > vl_cmd_allow_len = 0xf ;
vid - > win_id = 3 ;
vid - > cfg_gpio = NULL ;
vid - > backlight_on = NULL ;
vid - > lcd_power_on = NULL ; /* lcd_power_on in mipi dsi driver */
vid - > reset_lcd = lcd_reset ;
vid - > init_delay = 0 ;
vid - > power_on_delay = 0 ;
vid - > reset_delay = 0 ;
vid - > interface_mode = FIMD_RGB_INTERFACE ;
vid - > mipi_enabled = 1 ;
strcpy ( s6e8ax0_platform_data . lcd_panel_name , mipi_lcd_device . name ) ;
s6e8ax0_platform_data . lcd_power = lcd_power ;
s6e8ax0_platform_data . mipi_power = mipi_power ;
s6e8ax0_platform_data . phy_enable = set_mipi_phy_ctrl ;
s6e8ax0_platform_data . lcd_panel_info = ( void * ) vid ;
exynos_mipi_dsi_register_lcd_device ( & mipi_lcd_device ) ;
s6e8ax0_init ( ) ;
exynos_set_dsim_platform_data ( & s6e8ax0_platform_data ) ;
setenv ( " lcdinfo " , " lcd=s6e8ax0 " ) ;
}