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

Ian Campbell
2015-01-13T18:49:03Z

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@redhat.com>
Acked-by: Ian Campbell <ijc@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;
> }
>