sunxi: axp221: Protect axp221_init against multiple calls
authorHans de Goede <hdegoede@redhat.com>
Sun, 11 Jan 2015 18:43:56 +0000 (19:43 +0100)
committerHans de Goede <hdegoede@redhat.com>
Wed, 14 Jan 2015 13:56:40 +0000 (14:56 +0100)
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

index 1fda19ac01d020c8b5e6c34134d3c665754b5ab1..728727b48eb6a72dc9635ba52fb0e1b08d9e93ac 100644 (file)
@@ -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;
 }