2
0
mirror of https://github.com/edk2-porting/linux-next.git synced 2025-01-03 11:13:56 +08:00

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/sluu386

Acked-by: Rob Herring <robh@kernel.org>
Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
This commit is contained in:
Sebastian Reichel 2020-05-13 20:56:01 +02:00 committed by Sebastian Reichel
parent 601c2a543f
commit 0ff969158a
2 changed files with 11 additions and 5 deletions

View File

@ -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 :

View File

@ -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,
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)
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);
#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);
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,
}, },
{ } { }
}; };