@ -147,159 +147,6 @@ int board_get_revision(void)
return 0 ;
}
# ifdef CONFIG_LCD
static int board_dp_bridge_init ( struct udevice * dev )
{
const int max_tries = 10 ;
int num_tries ;
int ret ;
debug ( " %s \n " , __func__ ) ;
ret = video_bridge_attach ( dev ) ;
if ( ret ) {
debug ( " video bridge init failed: %d \n " , ret ) ;
return ret ;
}
/*
* We need to wait for 90 ms after bringing up the bridge since there
* is a phantom " high " on the HPD chip during its bootup . The phantom
* high comes within 7 ms of de - asserting PD and persists for at least
* 15 ms . The real high comes roughly 50 ms after PD is de - asserted . The
* phantom high makes it hard for us to know when the NXP chip is up .
*/
mdelay ( 90 ) ;
for ( num_tries = 0 ; num_tries < max_tries ; num_tries + + ) {
/* Check HPD. If it's high, or we don't have it, all is well */
ret = video_bridge_check_attached ( dev ) ;
if ( ! ret | | ret = = - ENOENT )
return 0 ;
debug ( " %s: eDP bridge failed to come up; try %d of %d \n " ,
__func__ , num_tries , max_tries ) ;
}
/* Immediately go into bridge reset if the hp line is not high */
return - EIO ;
}
static int board_dp_bridge_setup ( const void * blob )
{
const int max_tries = 2 ;
int num_tries ;
struct udevice * dev ;
int ret ;
/* Configure I2C registers for Parade bridge */
ret = uclass_get_device ( UCLASS_VIDEO_BRIDGE , 0 , & dev ) ;
if ( ret ) {
debug ( " video bridge init failed: %d \n " , ret ) ;
return ret ;
}
if ( strncmp ( dev - > driver - > name , " parade " , 6 ) ) {
/* Mux HPHPD to the special hotplug detect mode */
exynos_pinmux_config ( PERIPH_ID_DPHPD , 0 ) ;
}
for ( num_tries = 0 ; num_tries < max_tries ; num_tries + + ) {
ret = board_dp_bridge_init ( dev ) ;
if ( ! ret )
return 0 ;
if ( num_tries = = max_tries - 1 )
break ;
/*
* If we ' re here , the bridge chip failed to initialise .
* Power down the bridge in an attempt to reset .
*/
video_bridge_set_active ( dev , false ) ;
/*
* Arbitrarily wait 300 ms here with DP_N low . Don ' t know for
* sure how long we should wait , but we ' re being paranoid .
*/
mdelay ( 300 ) ;
}
return ret ;
}
void exynos_cfg_lcd_gpio ( void )
{
/* For Backlight */
gpio_request ( EXYNOS5_GPIO_B20 , " lcd_backlight " ) ;
gpio_cfg_pin ( EXYNOS5_GPIO_B20 , S5P_GPIO_OUTPUT ) ;
gpio_set_value ( EXYNOS5_GPIO_B20 , 1 ) ;
}
static int board_dp_set_backlight ( int percent )
{
struct udevice * dev ;
int ret ;
ret = uclass_get_device ( UCLASS_VIDEO_BRIDGE , 0 , & dev ) ;
if ( ! ret )
ret = video_bridge_set_backlight ( dev , percent ) ;
return ret ;
}
void exynos_backlight_on ( unsigned int on )
{
struct udevice * dev ;
int ret ;
debug ( " %s(%u) \n " , __func__ , on ) ;
if ( ! on )
return ;
ret = regulator_get_by_platname ( " vcd_led " , & dev ) ;
if ( ! ret )
ret = regulator_set_enable ( dev , true ) ;
if ( ret )
debug ( " Failed to enable backlight: ret=%d \n " , ret ) ;
/* T5 in the LCD timing spec (defined as > 10ms) */
mdelay ( 10 ) ;
/* board_dp_backlight_pwm */
gpio_direction_output ( EXYNOS5_GPIO_B20 , 1 ) ;
/* T6 in the LCD timing spec (defined as > 10ms) */
mdelay ( 10 ) ;
/* try to set the backlight in the bridge registers */
ret = board_dp_set_backlight ( 80 ) ;
/* if we have no bridge or it does not support backlight, use a GPIO */
if ( ret = = - ENODEV | | ret = = - ENOSYS ) {
gpio_request ( EXYNOS5_GPIO_X30 , " board_dp_backlight_en " ) ;
gpio_direction_output ( EXYNOS5_GPIO_X30 , 1 ) ;
}
}
void exynos_lcd_power_on ( void )
{
struct udevice * dev ;
int ret ;
debug ( " %s \n " , __func__ ) ;
ret = regulator_get_by_platname ( " lcd_vdd " , & dev ) ;
if ( ! ret )
ret = regulator_set_enable ( dev , true ) ;
if ( ret )
debug ( " Failed to enable LCD panel: ret=%d \n " , ret ) ;
ret = board_dp_bridge_setup ( gd - > fdt_blob ) ;
if ( ret & & ret ! = - ENODEV )
printf ( " LCD bridge failed to enable: %d \n " , ret ) ;
}
# endif
# ifdef CONFIG_USB_DWC3
static struct dwc3_device dwc3_device_data = {
. maximum_speed = USB_SPEED_SUPER ,