Commit 0ff96915 authored by Sebastian Reichel's avatar Sebastian Reichel Committed by Sebastian Reichel

power: supply: sbs-battery: Add TI BQ20Z65 support

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/sluu386Acked-by: default avatarRob Herring <robh@kernel.org>
Signed-off-by: default avatarSebastian Reichel <sebastian.reichel@collabora.com>
parent 601c2a54
...@@ -6,6 +6,7 @@ Required properties : ...@@ -6,6 +6,7 @@ Required properties :
part number compatible string might be used in order to take care of part number compatible string might be used in order to take care of
vendor specific registers. vendor specific registers.
Known <vendor>,<part-number>: Known <vendor>,<part-number>:
ti,bq20z65
ti,bq20z75 ti,bq20z75
Optional properties : Optional properties :
......
...@@ -149,8 +149,8 @@ static enum power_supply_property sbs_properties[] = { ...@@ -149,8 +149,8 @@ static enum power_supply_property sbs_properties[] = {
POWER_SUPPLY_PROP_MODEL_NAME POWER_SUPPLY_PROP_MODEL_NAME
}; };
/* Supports special manufacturer commands from TI BQ20Z75 IC. */ /* Supports special manufacturer commands from TI BQ20Z65 and BQ20Z75 IC. */
#define SBS_FLAGS_TI_BQ20Z75 BIT(0) #define SBS_FLAGS_TI_BQ20ZX5 BIT(0)
struct sbs_info { struct sbs_info {
struct i2c_client *client; struct i2c_client *client;
...@@ -626,7 +626,7 @@ static int sbs_get_property(struct power_supply *psy, ...@@ -626,7 +626,7 @@ static int sbs_get_property(struct power_supply *psy,
switch (psp) { switch (psp) {
case POWER_SUPPLY_PROP_PRESENT: case POWER_SUPPLY_PROP_PRESENT:
case POWER_SUPPLY_PROP_HEALTH: 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, ret = sbs_get_ti_battery_presence_and_health(client,
psp, val); psp, val);
else else
...@@ -950,7 +950,7 @@ static int sbs_suspend(struct device *dev) ...@@ -950,7 +950,7 @@ static int sbs_suspend(struct device *dev)
if (chip->poll_time > 0) if (chip->poll_time > 0)
cancel_delayed_work_sync(&chip->work); 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. */ /* Write to manufacturer access with sleep command. */
ret = sbs_write_word_data(client, ret = sbs_write_word_data(client,
sbs_data[REG_MANUFACTURER_DATA].addr, sbs_data[REG_MANUFACTURER_DATA].addr,
...@@ -970,6 +970,7 @@ static SIMPLE_DEV_PM_OPS(sbs_pm_ops, sbs_suspend, NULL); ...@@ -970,6 +970,7 @@ static SIMPLE_DEV_PM_OPS(sbs_pm_ops, sbs_suspend, NULL);
#endif #endif
static const struct i2c_device_id sbs_id[] = { static const struct i2c_device_id sbs_id[] = {
{ "bq20z65", 0 },
{ "bq20z75", 0 }, { "bq20z75", 0 },
{ "sbs-battery", 1 }, { "sbs-battery", 1 },
{} {}
...@@ -978,9 +979,13 @@ MODULE_DEVICE_TABLE(i2c, sbs_id); ...@@ -978,9 +979,13 @@ MODULE_DEVICE_TABLE(i2c, sbs_id);
static const struct of_device_id sbs_dt_ids[] = { static const struct of_device_id sbs_dt_ids[] = {
{ .compatible = "sbs,sbs-battery" }, { .compatible = "sbs,sbs-battery" },
{
.compatible = "ti,bq20z65",
.data = (void *)SBS_FLAGS_TI_BQ20ZX5,
},
{ {
.compatible = "ti,bq20z75", .compatible = "ti,bq20z75",
.data = (void *)SBS_FLAGS_TI_BQ20Z75, .data = (void *)SBS_FLAGS_TI_BQ20ZX5,
}, },
{ } { }
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment