power: supply: sbs-battery: Add TI BQ20Z65 support
authorSebastian Reichel <sebastian.reichel@collabora.com>
Wed, 13 May 2020 18:56:01 +0000 (20:56 +0200)
committerSebastian Reichel <sre@kernel.org>
Thu, 28 May 2020 17:27:38 +0000 (19:27 +0200)
Add support for BQ20Z65 manufacturer data to the sbs-battery
driver. Implementation has been verified using the public TRM
available from [0] and tested using a GE Flex 3S2P battery.

[0] http://www.ti.com/lit/pdf/sluu386

Acked-by: Rob Herring <robh@kernel.org>
Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
Documentation/devicetree/bindings/power/supply/sbs_sbs-battery.txt
drivers/power/supply/sbs-battery.c

index 4e78e51018ebd917a265e3fa3cf71c901eb50646..fa5a8b516dbfddbb4b980d0a141504596179312b 100644 (file)
@@ -6,6 +6,7 @@ Required properties :
      part number compatible string might be used in order to take care of
      vendor specific registers.
      Known <vendor>,<part-number>:
+       ti,bq20z65
        ti,bq20z75
 
 Optional properties :
index 6acd242eed488fc39d3cb083dd7a09b79d3d187b..a15783802ef8281e5720e07d41c2852b5c6b70cc 100644 (file)
@@ -149,8 +149,8 @@ static enum power_supply_property sbs_properties[] = {
        POWER_SUPPLY_PROP_MODEL_NAME
 };
 
-/* Supports special manufacturer commands from TI BQ20Z75 IC. */
-#define SBS_FLAGS_TI_BQ20Z75           BIT(0)
+/* Supports special manufacturer commands from TI BQ20Z65 and BQ20Z75 IC. */
+#define SBS_FLAGS_TI_BQ20ZX5           BIT(0)
 
 struct sbs_info {
        struct i2c_client               *client;
@@ -626,7 +626,7 @@ static int sbs_get_property(struct power_supply *psy,
        switch (psp) {
        case POWER_SUPPLY_PROP_PRESENT:
        case POWER_SUPPLY_PROP_HEALTH:
-               if (chip->flags & SBS_FLAGS_TI_BQ20Z75)
+               if (chip->flags & SBS_FLAGS_TI_BQ20ZX5)
                        ret = sbs_get_ti_battery_presence_and_health(client,
                                                                     psp, val);
                else
@@ -950,7 +950,7 @@ static int sbs_suspend(struct device *dev)
        if (chip->poll_time > 0)
                cancel_delayed_work_sync(&chip->work);
 
-       if (chip->flags & SBS_FLAGS_TI_BQ20Z75) {
+       if (chip->flags & SBS_FLAGS_TI_BQ20ZX5) {
                /* Write to manufacturer access with sleep command. */
                ret = sbs_write_word_data(client,
                                          sbs_data[REG_MANUFACTURER_DATA].addr,
@@ -970,6 +970,7 @@ static SIMPLE_DEV_PM_OPS(sbs_pm_ops, sbs_suspend, NULL);
 #endif
 
 static const struct i2c_device_id sbs_id[] = {
+       { "bq20z65", 0 },
        { "bq20z75", 0 },
        { "sbs-battery", 1 },
        {}
@@ -978,9 +979,13 @@ MODULE_DEVICE_TABLE(i2c, sbs_id);
 
 static const struct of_device_id sbs_dt_ids[] = {
        { .compatible = "sbs,sbs-battery" },
+       {
+               .compatible = "ti,bq20z65",
+               .data = (void *)SBS_FLAGS_TI_BQ20ZX5,
+       },
        {
                .compatible = "ti,bq20z75",
-               .data = (void *)SBS_FLAGS_TI_BQ20Z75,
+               .data = (void *)SBS_FLAGS_TI_BQ20ZX5,
        },
        { }
 };