[U-Boot] [PATCH 01/17] sunxi: axp221: Protect axp221_init against multiple calls

Ian Campbell ijc at hellion.org.uk
Tue Jan 13 19:49:03 CET 2015


On Sun, 2015-01-11 at 20:34 +0100, Hans de Goede wrote:
> The voltage setting code knows it needs to call axp221_init before calling
> the various voltage setting functions.
> 
> But users of axp utility functions like axp221_get_sid() do not know this,
> so the utility functions always call axp221_init() to ensure that the
> p2wi / rsb setup magic has been done.
> 
> Since doing this repeatedly is quite expensive, add a check to axp221_init
> so that it only does the initialization once.
> 
> Signed-off-by: Hans de Goede <hdegoede at redhat.com>
Acked-by: Ian Campbell <ijc at hellion.org.uk>

> ---
>  drivers/power/axp221.c | 6 ++++++
>  1 file changed, 6 insertions(+)
> 
> diff --git a/drivers/power/axp221.c b/drivers/power/axp221.c
> index 1fda19a..728727b 100644
> --- a/drivers/power/axp221.c
> +++ b/drivers/power/axp221.c
> @@ -304,9 +304,14 @@ int axp221_set_aldo3(unsigned int mvolt)
>  
>  int axp221_init(void)
>  {
> +	/* This cannot be 0 because it is used in SPL before BSS is ready */
> +	static int needs_init = 1;
>  	u8 axp_chip_id;
>  	int ret;
>  
> +	if (!needs_init)
> +		return 0;
> +
>  	ret = pmic_bus_init();
>  	if (ret)
>  		return ret;
> @@ -318,6 +323,7 @@ int axp221_init(void)
>  	if (!(axp_chip_id == 0x6 || axp_chip_id == 0x7 || axp_chip_id == 0x17))
>  		return -ENODEV;
>  
> +	needs_init = 0;
>  	return 0;
>  }
>  




More information about the U-Boot mailing list