power: supply: ab8500: Enable USB and AC
authorLinus Walleij <linus.walleij@linaro.org>
Sat, 22 May 2021 22:50:42 +0000 (00:50 +0200)
committerSebastian Reichel <sre@kernel.org>
Thu, 3 Jun 2021 16:40:15 +0000 (18:40 +0200)
The vendor code tree supplies platform data to enable he
USB charging for AB8500 and AB8500 and disable the AC
charging on the AB8505. This was missed when the driver
was submitted to the mainline kernel.

Fix this by doing what the vendor kernel does: always
register the USB charger, do not register the AC charger
on the AB8505.

Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
drivers/power/supply/ab8500-bm.h
drivers/power/supply/ab8500_charger.c

index 012595a9d2696303e61b127307fd9809da428631..871bdc1f5cbdacc65b422e0bbba8950be0ccab7e 100644 (file)
@@ -507,8 +507,6 @@ struct abx500_bm_data {
        int bkup_bat_v;
        int bkup_bat_i;
        bool autopower_cfg;
-       bool ac_enabled;
-       bool usb_enabled;
        bool no_maintenance;
        bool capacity_scaling;
        bool chg_unknown_bat;
index 57fbfe3d8c03df7b1c34f4594643ccc4f85076f7..e6f23ae05f95e2d18753146a69adb905551322f2 100644 (file)
@@ -3511,7 +3511,14 @@ static int ab8500_charger_probe(struct platform_device *pdev)
        di->ac_chg.max_out_curr =
                di->bm->chg_output_curr[di->bm->n_chg_out_curr - 1];
        di->ac_chg.wdt_refresh = CHG_WD_INTERVAL;
-       di->ac_chg.enabled = di->bm->ac_enabled;
+       /*
+        * The AB8505 only supports USB charging. If we are not the
+        * AB8505, register an AC charger.
+        *
+        * TODO: if this should be opt-in, add DT properties for this.
+        */
+       if (!is_ab8505(di->parent))
+               di->ac_chg.enabled = true;
        di->ac_chg.external = false;
 
        /* USB supply */
@@ -3525,7 +3532,6 @@ static int ab8500_charger_probe(struct platform_device *pdev)
        di->usb_chg.max_out_curr =
                di->bm->chg_output_curr[di->bm->n_chg_out_curr - 1];
        di->usb_chg.wdt_refresh = CHG_WD_INTERVAL;
-       di->usb_chg.enabled = di->bm->usb_enabled;
        di->usb_chg.external = false;
        di->usb_state.usb_current = -1;
 
@@ -3599,14 +3605,12 @@ static int ab8500_charger_probe(struct platform_device *pdev)
        }
 
        /* Register USB charger class */
-       if (di->usb_chg.enabled) {
-               di->usb_chg.psy = devm_power_supply_register(dev,
-                                                       &ab8500_usb_chg_desc,
-                                                       &usb_psy_cfg);
-               if (IS_ERR(di->usb_chg.psy)) {
-                       dev_err(dev, "failed to register USB charger\n");
-                       return PTR_ERR(di->usb_chg.psy);
-               }
+       di->usb_chg.psy = devm_power_supply_register(dev,
+                                                    &ab8500_usb_chg_desc,
+                                                    &usb_psy_cfg);
+       if (IS_ERR(di->usb_chg.psy)) {
+               dev_err(dev, "failed to register USB charger\n");
+               return PTR_ERR(di->usb_chg.psy);
        }
 
        /* Identify the connected charger types during startup */