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

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: default avatarRob Herring <robh@kernel.org>
Signed-off-by: default avatarSebastian Reichel <sebastian.reichel@collabora.com>
parent 601c2a54
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -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 :
+10 −5
Original line number Diff line number Diff line
@@ -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,
	},
	{ }
};