@ -12,7 +12,9 @@
# include <asm/arch/gpio.h>
# include <asm/gpio.h>
# include <asm/arch/cpu.h>
# include <dm.h>
# include <power/pmic.h>
# include <power/regulator.h>
# include <power/max77686_pmic.h>
# include <errno.h>
# include <mmc.h>
@ -31,6 +33,12 @@ enum {
ODROID_TYPES ,
} ;
static const char * mmc_regulators [ ] = {
" VDDQ_EMMC_1.8V " ,
" VDDQ_EMMC_2.8V " ,
" TFLASH_2.8V " ,
} ;
void set_board_type ( void )
{
/* Set GPA1 pin 1 to HI - enable XCL205 output */
@ -403,21 +411,6 @@ static void board_gpio_init(void)
# endif
}
static int pmic_init_max77686 ( void )
{
struct pmic * p = pmic_get ( " MAX77686_PMIC " ) ;
if ( pmic_probe ( p ) )
return - ENODEV ;
/* Set LDO Voltage */
max77686_set_ldo_voltage ( p , 20 , 1800000 ) ; /* LDO20 eMMC */
max77686_set_ldo_voltage ( p , 21 , 2800000 ) ; /* LDO21 SD */
max77686_set_ldo_voltage ( p , 22 , 2800000 ) ; /* LDO22 eMMC */
return 0 ;
}
int exynos_early_init_f ( void )
{
board_clock_init ( ) ;
@ -434,8 +427,10 @@ int exynos_init(void)
int exynos_power_init ( void )
{
pmic_init ( 0 ) ;
pmic_init_max77686 ( ) ;
int list_count = ARRAY_SIZE ( mmc_regulators ) ;
if ( regulator_list_autoset ( mmc_regulators , list_count , NULL , true ) )
error ( " Unable to init all mmc regulators " ) ;
return 0 ;
}
@ -443,19 +438,20 @@ int exynos_power_init(void)
# ifdef CONFIG_USB_GADGET
static int s5pc210_phy_control ( int on )
{
struct pmic * p_pmic ;
struct udevice * dev ;
int ret ;
p_pmic = pmic_get ( " MAX77686_PMIC " ) ;
if ( ! p_pmic )
return - ENODEV ;
if ( pmic_probe ( p_pmic ) )
return - 1 ;
ret = regulator_by_platname ( " VDD_UOTG_3.0V " , & dev ) ;
if ( ret ) {
error ( " Regulator get error: %d " , ret ) ;
return ret ;
}
if ( on )
return max77686_set_ldo_mode ( p_pmic , 12 , OPMODE_ON ) ;
return regulator_set_mode ( dev , OPMODE_ON ) ;
else
return max77686_set_ldo_mode ( p_pmic , 12 , OPMODE_LPM ) ;
return regulator_set_mode ( dev , OPMODE_LPM ) ;
}
struct s3c_plat_otg_data s5pc210_otg_data = {
@ -472,7 +468,8 @@ struct s3c_plat_otg_data s5pc210_otg_data = {
int board_usb_init ( int index , enum usb_init_type init )
{
# ifdef CONFIG_CMD_USB
struct pmic * p_pmic ;
struct udevice * dev ;
int ret ;
/* Set Ref freq 0 => 24MHz, 1 => 26MHz*/
/* Odroid Us have it at 24MHz, Odroid Xs at 26MHz */
@ -490,14 +487,30 @@ int board_usb_init(int index, enum usb_init_type init)
/* Power off and on BUCK8 for LAN9730 */
debug ( " LAN9730 - Turning power buck 8 OFF and ON. \n " ) ;
p_pmic = pmic_get ( " MAX77686_PMIC " ) ;
if ( p_pmic & & ! pmic_probe ( p_pmic ) ) {
max77686_set_buck_voltage ( p_pmic , 8 , 750000 ) ;
max77686_set_buck_voltage ( p_pmic , 8 , 3300000 ) ;
ret = regulator_by_platname ( " VCC_P3V3_2.85V " , & dev ) ;
if ( ret ) {
error ( " Regulator get error: %d " , ret ) ;
return ret ;
}
# endif
ret = regulator_set_enable ( dev , true ) ;
if ( ret ) {
error ( " Regulator %s enable setting error: %d " , dev - > name , ret ) ;
return ret ;
}
ret = regulator_set_value ( dev , 750000 ) ;
if ( ret ) {
error ( " Regulator %s value setting error: %d " , dev - > name , ret ) ;
return ret ;
}
ret = regulator_set_value ( dev , 3300000 ) ;
if ( ret ) {
error ( " Regulator %s value setting error: %d " , dev - > name , ret ) ;
return ret ;
}
# endif
debug ( " USB_udc_probe \n " ) ;
return s3c_udc_probe ( & s5pc210_otg_data ) ;
}