power: supply: axp288_charger: Support 3500 and 4000 mA input current limit
authorHans de Goede <hdegoede@redhat.com>
Wed, 18 Apr 2018 12:07:56 +0000 (14:07 +0200)
committerSebastian Reichel <sebastian.reichel@collabora.co.uk>
Wed, 25 Apr 2018 22:44:27 +0000 (00:44 +0200)
The AXP288 supports an input-current-limit of up to 4000 mA, this
commit adds support for the 3500 and 4000 mA settings which were
missing until now.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.co.uk>
drivers/power/supply/axp288_charger.c

index 9bfbde15b07ddac3e9e67123af36d343ab001709..6982927b05c0dcb696ae865a214e2f285e2d5741 100644 (file)
@@ -88,6 +88,8 @@
 #define CHRG_VBUS_ILIM_2000MA          0x4     /* 2000mA */
 #define CHRG_VBUS_ILIM_2500MA          0x5     /* 2500mA */
 #define CHRG_VBUS_ILIM_3000MA          0x6     /* 3000mA */
+#define CHRG_VBUS_ILIM_3500MA          0x7     /* 3500mA */
+#define CHRG_VBUS_ILIM_4000MA          0x8     /* 4000mA */
 
 #define CHRG_VLTFC_0C                  0xA5    /* 0 DegC */
 #define CHRG_VHTFC_45C                 0x1F    /* 45 DegC */
@@ -223,9 +225,11 @@ static int axp288_charger_get_vbus_inlmt(struct axp288_chrg_info *info)
                return 2500000;
        case CHRG_VBUS_ILIM_3000MA:
                return 3000000;
+       case CHRG_VBUS_ILIM_3500MA:
+               return 3500000;
        default:
-               dev_warn(&info->pdev->dev, "Unknown ilim reg val: %d\n", val);
-               return 0;
+               /* All b1xxx values map to 4000 mA */
+               return 4000000;
        }
 }
 
@@ -235,7 +239,11 @@ static inline int axp288_charger_set_vbus_inlmt(struct axp288_chrg_info *info,
        int ret;
        u8 reg_val;
 
-       if (inlmt >= 3000000)
+       if (inlmt >= 4000000)
+               reg_val = CHRG_VBUS_ILIM_4000MA << CHRG_VBUS_ILIM_BIT_POS;
+       else if (inlmt >= 3500000)
+               reg_val = CHRG_VBUS_ILIM_3500MA << CHRG_VBUS_ILIM_BIT_POS;
+       else if (inlmt >= 3000000)
                reg_val = CHRG_VBUS_ILIM_3000MA << CHRG_VBUS_ILIM_BIT_POS;
        else if (inlmt >= 2500000)
                reg_val = CHRG_VBUS_ILIM_2500MA << CHRG_VBUS_ILIM_BIT_POS;