@ -12,50 +12,10 @@
# include <common.h>
# include <errno.h>
# include <asm/arch/p2wi.h>
# include <asm/arch/rsb.h>
# include <asm/arch/gpio.h>
# include <asm/arch/pmic_bus.h>
# include <axp221.h>
/*
* The axp221 uses the p2wi bus , the axp223 is identical ( for all registers
* used sofar ) but uses the rsb bus . These functions abstract this .
*/
static int pmic_bus_init ( void )
{
# ifdef CONFIG_MACH_SUN6I
p2wi_init ( ) ;
return p2wi_change_to_p2wi_mode ( AXP221_CHIP_ADDR , AXP221_CTRL_ADDR ,
AXP221_INIT_DATA ) ;
# else
int ret ;
ret = rsb_init ( ) ;
if ( ret )
return ret ;
return rsb_set_device_address ( AXP223_DEVICE_ADDR , AXP223_RUNTIME_ADDR ) ;
# endif
}
static int pmic_bus_read ( const u8 addr , u8 * data )
{
# ifdef CONFIG_MACH_SUN6I
return p2wi_read ( addr , data ) ;
# else
return rsb_read ( AXP223_RUNTIME_ADDR , addr , data ) ;
# endif
}
static int pmic_bus_write ( const u8 addr , u8 data )
{
# ifdef CONFIG_MACH_SUN6I
return p2wi_write ( addr , data ) ;
# else
return rsb_write ( AXP223_RUNTIME_ADDR , addr , data ) ;
# endif
}
static u8 axp221_mvolt_to_cfg ( int mvolt , int min , int max , int div )
{
if ( mvolt < min )
@ -66,52 +26,26 @@ static u8 axp221_mvolt_to_cfg(int mvolt, int min, int max, int div)
return ( mvolt - min ) / div ;
}
static int axp221_setbits ( u8 reg , u8 bits )
{
int ret ;
u8 val ;
ret = pmic_bus_read ( reg , & val ) ;
if ( ret )
return ret ;
val | = bits ;
return pmic_bus_write ( reg , val ) ;
}
static int axp221_clrbits ( u8 reg , u8 bits )
{
int ret ;
u8 val ;
ret = pmic_bus_read ( reg , & val ) ;
if ( ret )
return ret ;
val & = ~ bits ;
return pmic_bus_write ( reg , val ) ;
}
int axp221_set_dcdc1 ( unsigned int mvolt )
{
int ret ;
u8 cfg = axp221_mvolt_to_cfg ( mvolt , 1600 , 3400 , 100 ) ;
if ( mvolt = = 0 )
return axp221 _clrbits( AXP221_OUTPUT_CTRL1 ,
AXP221_OUTPUT_CTRL1_DCDC1_EN ) ;
return pmic_bus_clrbits ( AXP221_OUTPUT_CTRL1 ,
AXP221_OUTPUT_CTRL1_DCDC1_EN ) ;
ret = pmic_bus_write ( AXP221_DCDC1_CTRL , cfg ) ;
if ( ret )
return ret ;
ret = axp221 _setbits( AXP221_OUTPUT_CTRL2 ,
AXP221_OUTPUT_CTRL2_DCDC1SW_EN ) ;
ret = pmic_bus_setbits ( AXP221_OUTPUT_CTRL2 ,
AXP221_OUTPUT_CTRL2_DCDC1SW_EN ) ;
if ( ret )
return ret ;
return axp221 _setbits( AXP221_OUTPUT_CTRL1 ,
AXP221_OUTPUT_CTRL1_DCDC1_EN ) ;
return pmic_bus_setbits ( AXP221_OUTPUT_CTRL1 ,
AXP221_OUTPUT_CTRL1_DCDC1_EN ) ;
}
int axp221_set_dcdc2 ( unsigned int mvolt )
@ -120,15 +54,15 @@ int axp221_set_dcdc2(unsigned int mvolt)
u8 cfg = axp221_mvolt_to_cfg ( mvolt , 600 , 1540 , 20 ) ;
if ( mvolt = = 0 )
return axp221 _clrbits( AXP221_OUTPUT_CTRL1 ,
AXP221_OUTPUT_CTRL1_DCDC2_EN ) ;
return pmic_bus _clrbits( AXP221_OUTPUT_CTRL1 ,
AXP221_OUTPUT_CTRL1_DCDC2_EN ) ;
ret = pmic_bus_write ( AXP221_DCDC2_CTRL , cfg ) ;
if ( ret )
return ret ;
return axp221 _setbits( AXP221_OUTPUT_CTRL1 ,
AXP221_OUTPUT_CTRL1_DCDC2_EN ) ;
return pmic_bus _setbits( AXP221_OUTPUT_CTRL1 ,
AXP221_OUTPUT_CTRL1_DCDC2_EN ) ;
}
int axp221_set_dcdc3 ( unsigned int mvolt )
@ -137,15 +71,15 @@ int axp221_set_dcdc3(unsigned int mvolt)
u8 cfg = axp221_mvolt_to_cfg ( mvolt , 600 , 1860 , 20 ) ;
if ( mvolt = = 0 )
return axp221 _clrbits( AXP221_OUTPUT_CTRL1 ,
AXP221_OUTPUT_CTRL1_DCDC3_EN ) ;
return pmic_bus _clrbits( AXP221_OUTPUT_CTRL1 ,
AXP221_OUTPUT_CTRL1_DCDC3_EN ) ;
ret = pmic_bus_write ( AXP221_DCDC3_CTRL , cfg ) ;
if ( ret )
return ret ;
return axp221 _setbits( AXP221_OUTPUT_CTRL1 ,
AXP221_OUTPUT_CTRL1_DCDC3_EN ) ;
return pmic_bus _setbits( AXP221_OUTPUT_CTRL1 ,
AXP221_OUTPUT_CTRL1_DCDC3_EN ) ;
}
int axp221_set_dcdc4 ( unsigned int mvolt )
@ -154,15 +88,15 @@ int axp221_set_dcdc4(unsigned int mvolt)
u8 cfg = axp221_mvolt_to_cfg ( mvolt , 600 , 1540 , 20 ) ;
if ( mvolt = = 0 )
return axp221 _clrbits( AXP221_OUTPUT_CTRL1 ,
AXP221_OUTPUT_CTRL1_DCDC4_EN ) ;
return pmic_bus _clrbits( AXP221_OUTPUT_CTRL1 ,
AXP221_OUTPUT_CTRL1_DCDC4_EN ) ;
ret = pmic_bus_write ( AXP221_DCDC4_CTRL , cfg ) ;
if ( ret )
return ret ;
return axp221 _setbits( AXP221_OUTPUT_CTRL1 ,
AXP221_OUTPUT_CTRL1_DCDC4_EN ) ;
return pmic_bus _setbits( AXP221_OUTPUT_CTRL1 ,
AXP221_OUTPUT_CTRL1_DCDC4_EN ) ;
}
int axp221_set_dcdc5 ( unsigned int mvolt )
@ -171,15 +105,15 @@ int axp221_set_dcdc5(unsigned int mvolt)
u8 cfg = axp221_mvolt_to_cfg ( mvolt , 1000 , 2550 , 50 ) ;
if ( mvolt = = 0 )
return axp221 _clrbits( AXP221_OUTPUT_CTRL1 ,
AXP221_OUTPUT_CTRL1_DCDC5_EN ) ;
return pmic_bus _clrbits( AXP221_OUTPUT_CTRL1 ,
AXP221_OUTPUT_CTRL1_DCDC5_EN ) ;
ret = pmic_bus_write ( AXP221_DCDC5_CTRL , cfg ) ;
if ( ret )
return ret ;
return axp221 _setbits( AXP221_OUTPUT_CTRL1 ,
AXP221_OUTPUT_CTRL1_DCDC5_EN ) ;
return pmic_bus _setbits( AXP221_OUTPUT_CTRL1 ,
AXP221_OUTPUT_CTRL1_DCDC5_EN ) ;
}
int axp221_set_dldo1 ( unsigned int mvolt )
@ -188,15 +122,15 @@ int axp221_set_dldo1(unsigned int mvolt)
u8 cfg = axp221_mvolt_to_cfg ( mvolt , 700 , 3300 , 100 ) ;
if ( mvolt = = 0 )
return axp221 _clrbits( AXP221_OUTPUT_CTRL2 ,
AXP221_OUTPUT_CTRL2_DLDO1_EN ) ;
return pmic_bus _clrbits( AXP221_OUTPUT_CTRL2 ,
AXP221_OUTPUT_CTRL2_DLDO1_EN ) ;
ret = pmic_bus_write ( AXP221_DLDO1_CTRL , cfg ) ;
if ( ret )
return ret ;
return axp221 _setbits( AXP221_OUTPUT_CTRL2 ,
AXP221_OUTPUT_CTRL2_DLDO1_EN ) ;
return pmic_bus _setbits( AXP221_OUTPUT_CTRL2 ,
AXP221_OUTPUT_CTRL2_DLDO1_EN ) ;
}
int axp221_set_dldo2 ( unsigned int mvolt )
@ -205,15 +139,15 @@ int axp221_set_dldo2(unsigned int mvolt)
u8 cfg = axp221_mvolt_to_cfg ( mvolt , 700 , 3300 , 100 ) ;
if ( mvolt = = 0 )
return axp221 _clrbits( AXP221_OUTPUT_CTRL2 ,
AXP221_OUTPUT_CTRL2_DLDO2_EN ) ;
return pmic_bus _clrbits( AXP221_OUTPUT_CTRL2 ,
AXP221_OUTPUT_CTRL2_DLDO2_EN ) ;
ret = pmic_bus_write ( AXP221_DLDO2_CTRL , cfg ) ;
if ( ret )
return ret ;
return axp221 _setbits( AXP221_OUTPUT_CTRL2 ,
AXP221_OUTPUT_CTRL2_DLDO2_EN ) ;
return pmic_bus _setbits( AXP221_OUTPUT_CTRL2 ,
AXP221_OUTPUT_CTRL2_DLDO2_EN ) ;
}
int axp221_set_dldo3 ( unsigned int mvolt )
@ -222,15 +156,15 @@ int axp221_set_dldo3(unsigned int mvolt)
u8 cfg = axp221_mvolt_to_cfg ( mvolt , 700 , 3300 , 100 ) ;
if ( mvolt = = 0 )
return axp221 _clrbits( AXP221_OUTPUT_CTRL2 ,
AXP221_OUTPUT_CTRL2_DLDO3_EN ) ;
return pmic_bus _clrbits( AXP221_OUTPUT_CTRL2 ,
AXP221_OUTPUT_CTRL2_DLDO3_EN ) ;
ret = pmic_bus_write ( AXP221_DLDO3_CTRL , cfg ) ;
if ( ret )
return ret ;
return axp221 _setbits( AXP221_OUTPUT_CTRL2 ,
AXP221_OUTPUT_CTRL2_DLDO3_EN ) ;
return pmic_bus _setbits( AXP221_OUTPUT_CTRL2 ,
AXP221_OUTPUT_CTRL2_DLDO3_EN ) ;
}
int axp221_set_dldo4 ( unsigned int mvolt )
@ -239,15 +173,15 @@ int axp221_set_dldo4(unsigned int mvolt)
u8 cfg = axp221_mvolt_to_cfg ( mvolt , 700 , 3300 , 100 ) ;
if ( mvolt = = 0 )
return axp221 _clrbits( AXP221_OUTPUT_CTRL2 ,
AXP221_OUTPUT_CTRL2_DLDO4_EN ) ;
return pmic_bus _clrbits( AXP221_OUTPUT_CTRL2 ,
AXP221_OUTPUT_CTRL2_DLDO4_EN ) ;
ret = pmic_bus_write ( AXP221_DLDO4_CTRL , cfg ) ;
if ( ret )
return ret ;
return axp221 _setbits( AXP221_OUTPUT_CTRL2 ,
AXP221_OUTPUT_CTRL2_DLDO4_EN ) ;
return pmic_bus _setbits( AXP221_OUTPUT_CTRL2 ,
AXP221_OUTPUT_CTRL2_DLDO4_EN ) ;
}
int axp221_set_aldo1 ( unsigned int mvolt )
@ -256,15 +190,15 @@ int axp221_set_aldo1(unsigned int mvolt)
u8 cfg = axp221_mvolt_to_cfg ( mvolt , 700 , 3300 , 100 ) ;
if ( mvolt = = 0 )
return axp221 _clrbits( AXP221_OUTPUT_CTRL1 ,
AXP221_OUTPUT_CTRL1_ALDO1_EN ) ;
return pmic_bus _clrbits( AXP221_OUTPUT_CTRL1 ,
AXP221_OUTPUT_CTRL1_ALDO1_EN ) ;
ret = pmic_bus_write ( AXP221_ALDO1_CTRL , cfg ) ;
if ( ret )
return ret ;
return axp221 _setbits( AXP221_OUTPUT_CTRL1 ,
AXP221_OUTPUT_CTRL1_ALDO1_EN ) ;
return pmic_bus _setbits( AXP221_OUTPUT_CTRL1 ,
AXP221_OUTPUT_CTRL1_ALDO1_EN ) ;
}
int axp221_set_aldo2 ( unsigned int mvolt )
@ -273,15 +207,15 @@ int axp221_set_aldo2(unsigned int mvolt)
u8 cfg = axp221_mvolt_to_cfg ( mvolt , 700 , 3300 , 100 ) ;
if ( mvolt = = 0 )
return axp221 _clrbits( AXP221_OUTPUT_CTRL1 ,
AXP221_OUTPUT_CTRL1_ALDO2_EN ) ;
return pmic_bus _clrbits( AXP221_OUTPUT_CTRL1 ,
AXP221_OUTPUT_CTRL1_ALDO2_EN ) ;
ret = pmic_bus_write ( AXP221_ALDO2_CTRL , cfg ) ;
if ( ret )
return ret ;
return axp221 _setbits( AXP221_OUTPUT_CTRL1 ,
AXP221_OUTPUT_CTRL1_ALDO2_EN ) ;
return pmic_bus _setbits( AXP221_OUTPUT_CTRL1 ,
AXP221_OUTPUT_CTRL1_ALDO2_EN ) ;
}
int axp221_set_aldo3 ( unsigned int mvolt )
@ -290,15 +224,15 @@ int axp221_set_aldo3(unsigned int mvolt)
u8 cfg = axp221_mvolt_to_cfg ( mvolt , 700 , 3300 , 100 ) ;
if ( mvolt = = 0 )
return axp221 _clrbits( AXP221_OUTPUT_CTRL3 ,
AXP221_OUTPUT_CTRL3_ALDO3_EN ) ;
return pmic_bus _clrbits( AXP221_OUTPUT_CTRL3 ,
AXP221_OUTPUT_CTRL3_ALDO3_EN ) ;
ret = pmic_bus_write ( AXP221_ALDO3_CTRL , cfg ) ;
if ( ret )
return ret ;
return axp221 _setbits( AXP221_OUTPUT_CTRL3 ,
AXP221_OUTPUT_CTRL3_ALDO3_EN ) ;
return pmic_bus _setbits( AXP221_OUTPUT_CTRL3 ,
AXP221_OUTPUT_CTRL3_ALDO3_EN ) ;
}
int axp221_set_eldo ( int eldo_num , unsigned int mvolt )
@ -325,13 +259,13 @@ int axp221_set_eldo(int eldo_num, unsigned int mvolt)
}
if ( mvolt = = 0 )
return axp221 _clrbits( AXP221_OUTPUT_CTRL2 , bits ) ;
return pmic_bus _clrbits( AXP221_OUTPUT_CTRL2 , bits ) ;
ret = pmic_bus_write ( addr , cfg ) ;
if ( ret )
return ret ;
return axp221 _setbits( AXP221_OUTPUT_CTRL2 , bits ) ;
return pmic_bus _setbits( AXP221_OUTPUT_CTRL2 , bits ) ;
}
int axp221_init ( void )