linux-pm.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Hans de Goede <hdegoede@redhat.com>
To: Sebastian Reichel <sre@kernel.org>
Cc: Hans de Goede <hdegoede@redhat.com>, Takashi Iwai <tiwai@suse.de>,
	linux-pm@vger.kernel.org, Liam Breck <kernel@networkimprov.net>,
	Tony Lindgren <tony@atomide.com>
Subject: [PATCH v2 7/7] power: supply: bq24190_charger: Remove battery power_supply device
Date: Wed, 22 Mar 2017 15:55:36 +0100	[thread overview]
Message-ID: <20170322145536.30570-8-hdegoede@redhat.com> (raw)
In-Reply-To: <20170322145536.30570-1-hdegoede@redhat.com>

The TI bq24190 chip is purely a charger chip, as such it has very
little battery info to export to userspace and in practice it is almost
always used together with a separate fuel-gauge chip which does have
interesting info to export.

Since the userspace ABI requires there to be only 1 power_supply device
registered per physical battery, the limited battery power_supply device
the bq24190_charger driver is registering is actually getting in the way
of a fuel-gauge driver exporting more useful info, therefor this commit
removes the battery power_supply device.

Cc: Liam Breck <kernel@networkimprov.net>
Cc: Tony Lindgren <tony@atomide.com>
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
---
Changes in v2:
-This is a new patch in v2 of this patch-set
---
 drivers/power/supply/bq24190_charger.c | 290 +--------------------------------
 1 file changed, 5 insertions(+), 285 deletions(-)

diff --git a/drivers/power/supply/bq24190_charger.c b/drivers/power/supply/bq24190_charger.c
index 5e3da66..52d8756 100644
--- a/drivers/power/supply/bq24190_charger.c
+++ b/drivers/power/supply/bq24190_charger.c
@@ -151,7 +151,6 @@ struct bq24190_dev_info {
 	struct i2c_client		*client;
 	struct device			*dev;
 	struct power_supply		*charger;
-	struct power_supply		*battery;
 	struct extcon_dev		*extcon;
 	struct notifier_block		extcon_nb;
 	struct delayed_work		extcon_work;
@@ -910,266 +909,9 @@ static const struct power_supply_desc bq24190_charger_desc = {
 	.property_is_writeable	= bq24190_charger_property_is_writeable,
 };
 
-/* Battery power supply property routines */
-
-static int bq24190_battery_get_status(struct bq24190_dev_info *bdi,
-		union power_supply_propval *val)
-{
-	u8 ss_reg, chrg_fault;
-	int status, ret;
-
-	mutex_lock(&bdi->f_reg_lock);
-	chrg_fault = bdi->f_reg;
-	mutex_unlock(&bdi->f_reg_lock);
-
-	chrg_fault &= BQ24190_REG_F_CHRG_FAULT_MASK;
-	chrg_fault >>= BQ24190_REG_F_CHRG_FAULT_SHIFT;
-
-	ret = bq24190_read(bdi, BQ24190_REG_SS, &ss_reg);
-	if (ret < 0)
-		return ret;
-
-	/*
-	 * The battery must be discharging when any of these are true:
-	 * - there is no good power source;
-	 * - there is a charge fault.
-	 * Could also be discharging when in "supplement mode" but
-	 * there is no way to tell when its in that mode.
-	 */
-	if (!(ss_reg & BQ24190_REG_SS_PG_STAT_MASK) || chrg_fault) {
-		status = POWER_SUPPLY_STATUS_DISCHARGING;
-	} else {
-		ss_reg &= BQ24190_REG_SS_CHRG_STAT_MASK;
-		ss_reg >>= BQ24190_REG_SS_CHRG_STAT_SHIFT;
-
-		switch (ss_reg) {
-		case 0x0: /* Not Charging */
-			status = POWER_SUPPLY_STATUS_NOT_CHARGING;
-			break;
-		case 0x1: /* Pre-charge */
-		case 0x2: /* Fast Charging */
-			status = POWER_SUPPLY_STATUS_CHARGING;
-			break;
-		case 0x3: /* Charge Termination Done */
-			status = POWER_SUPPLY_STATUS_FULL;
-			break;
-		default:
-			ret = -EIO;
-		}
-	}
-
-	if (!ret)
-		val->intval = status;
-
-	return ret;
-}
-
-static int bq24190_battery_get_health(struct bq24190_dev_info *bdi,
-		union power_supply_propval *val)
-{
-	u8 v;
-	int health;
-
-	mutex_lock(&bdi->f_reg_lock);
-	v = bdi->f_reg;
-	mutex_unlock(&bdi->f_reg_lock);
-
-	if (v & BQ24190_REG_F_BAT_FAULT_MASK) {
-		health = POWER_SUPPLY_HEALTH_OVERVOLTAGE;
-	} else {
-		v &= BQ24190_REG_F_NTC_FAULT_MASK;
-		v >>= BQ24190_REG_F_NTC_FAULT_SHIFT;
-
-		switch (v) {
-		case 0x0: /* Normal */
-			health = POWER_SUPPLY_HEALTH_GOOD;
-			break;
-		case 0x1: /* TS1 Cold */
-		case 0x3: /* TS2 Cold */
-		case 0x5: /* Both Cold */
-			health = POWER_SUPPLY_HEALTH_COLD;
-			break;
-		case 0x2: /* TS1 Hot */
-		case 0x4: /* TS2 Hot */
-		case 0x6: /* Both Hot */
-			health = POWER_SUPPLY_HEALTH_OVERHEAT;
-			break;
-		default:
-			health = POWER_SUPPLY_HEALTH_UNKNOWN;
-		}
-	}
-
-	val->intval = health;
-	return 0;
-}
-
-static int bq24190_battery_get_online(struct bq24190_dev_info *bdi,
-		union power_supply_propval *val)
-{
-	u8 batfet_disable;
-	int ret;
-
-	ret = bq24190_read_mask(bdi, BQ24190_REG_MOC,
-			BQ24190_REG_MOC_BATFET_DISABLE_MASK,
-			BQ24190_REG_MOC_BATFET_DISABLE_SHIFT, &batfet_disable);
-	if (ret < 0)
-		return ret;
-
-	val->intval = !batfet_disable;
-	return 0;
-}
-
-static int bq24190_battery_set_online(struct bq24190_dev_info *bdi,
-		const union power_supply_propval *val)
-{
-	return bq24190_write_mask(bdi, BQ24190_REG_MOC,
-			BQ24190_REG_MOC_BATFET_DISABLE_MASK,
-			BQ24190_REG_MOC_BATFET_DISABLE_SHIFT, !val->intval);
-}
-
-static int bq24190_battery_get_temp_alert_max(struct bq24190_dev_info *bdi,
-		union power_supply_propval *val)
-{
-	int temp, ret;
-
-	ret = bq24190_get_field_val(bdi, BQ24190_REG_ICTRC,
-			BQ24190_REG_ICTRC_TREG_MASK,
-			BQ24190_REG_ICTRC_TREG_SHIFT,
-			bq24190_ictrc_treg_values,
-			ARRAY_SIZE(bq24190_ictrc_treg_values), &temp);
-	if (ret < 0)
-		return ret;
-
-	val->intval = temp;
-	return 0;
-}
-
-static int bq24190_battery_set_temp_alert_max(struct bq24190_dev_info *bdi,
-		const union power_supply_propval *val)
-{
-	return bq24190_set_field_val(bdi, BQ24190_REG_ICTRC,
-			BQ24190_REG_ICTRC_TREG_MASK,
-			BQ24190_REG_ICTRC_TREG_SHIFT,
-			bq24190_ictrc_treg_values,
-			ARRAY_SIZE(bq24190_ictrc_treg_values), val->intval);
-}
-
-static int bq24190_battery_get_property(struct power_supply *psy,
-		enum power_supply_property psp, union power_supply_propval *val)
-{
-	struct bq24190_dev_info *bdi = power_supply_get_drvdata(psy);
-	int ret;
-
-	dev_dbg(bdi->dev, "prop: %d\n", psp);
-
-	ret = pm_runtime_get_sync(bdi->dev);
-	if (ret < 0)
-		return ret;
-
-	switch (psp) {
-	case POWER_SUPPLY_PROP_STATUS:
-		ret = bq24190_battery_get_status(bdi, val);
-		break;
-	case POWER_SUPPLY_PROP_HEALTH:
-		ret = bq24190_battery_get_health(bdi, val);
-		break;
-	case POWER_SUPPLY_PROP_ONLINE:
-		ret = bq24190_battery_get_online(bdi, val);
-		break;
-	case POWER_SUPPLY_PROP_TECHNOLOGY:
-		/* Could be Li-on or Li-polymer but no way to tell which */
-		val->intval = POWER_SUPPLY_TECHNOLOGY_UNKNOWN;
-		ret = 0;
-		break;
-	case POWER_SUPPLY_PROP_TEMP_ALERT_MAX:
-		ret = bq24190_battery_get_temp_alert_max(bdi, val);
-		break;
-	case POWER_SUPPLY_PROP_SCOPE:
-		val->intval = POWER_SUPPLY_SCOPE_SYSTEM;
-		ret = 0;
-		break;
-	default:
-		ret = -ENODATA;
-	}
-
-	pm_runtime_mark_last_busy(bdi->dev);
-	pm_runtime_put_autosuspend(bdi->dev);
-
-	return ret;
-}
-
-static int bq24190_battery_set_property(struct power_supply *psy,
-		enum power_supply_property psp,
-		const union power_supply_propval *val)
-{
-	struct bq24190_dev_info *bdi = power_supply_get_drvdata(psy);
-	int ret;
-
-	dev_dbg(bdi->dev, "prop: %d\n", psp);
-
-	ret = pm_runtime_get_sync(bdi->dev);
-	if (ret < 0)
-		return ret;
-
-	switch (psp) {
-	case POWER_SUPPLY_PROP_ONLINE:
-		ret = bq24190_battery_set_online(bdi, val);
-		break;
-	case POWER_SUPPLY_PROP_TEMP_ALERT_MAX:
-		ret = bq24190_battery_set_temp_alert_max(bdi, val);
-		break;
-	default:
-		ret = -EINVAL;
-	}
-
-	pm_runtime_mark_last_busy(bdi->dev);
-	pm_runtime_put_autosuspend(bdi->dev);
-
-	return ret;
-}
-
-static int bq24190_battery_property_is_writeable(struct power_supply *psy,
-		enum power_supply_property psp)
-{
-	int ret;
-
-	switch (psp) {
-	case POWER_SUPPLY_PROP_ONLINE:
-	case POWER_SUPPLY_PROP_TEMP_ALERT_MAX:
-		ret = 1;
-		break;
-	default:
-		ret = 0;
-	}
-
-	return ret;
-}
-
-static enum power_supply_property bq24190_battery_properties[] = {
-	POWER_SUPPLY_PROP_STATUS,
-	POWER_SUPPLY_PROP_HEALTH,
-	POWER_SUPPLY_PROP_ONLINE,
-	POWER_SUPPLY_PROP_TECHNOLOGY,
-	POWER_SUPPLY_PROP_TEMP_ALERT_MAX,
-	POWER_SUPPLY_PROP_SCOPE,
-};
-
-static const struct power_supply_desc bq24190_battery_desc = {
-	.name			= "bq24190-battery",
-	.type			= POWER_SUPPLY_TYPE_BATTERY,
-	.properties		= bq24190_battery_properties,
-	.num_properties		= ARRAY_SIZE(bq24190_battery_properties),
-	.get_property		= bq24190_battery_get_property,
-	.set_property		= bq24190_battery_set_property,
-	.property_is_writeable	= bq24190_battery_property_is_writeable,
-};
-
 static void bq24190_check_status(struct bq24190_dev_info *bdi)
 {
-	const u8 battery_mask_ss = BQ24190_REG_SS_CHRG_STAT_MASK;
-	const u8 battery_mask_f = BQ24190_REG_F_BAT_FAULT_MASK
-				| BQ24190_REG_F_NTC_FAULT_MASK;
-	bool alert_charger = false, alert_battery = false;
+	bool alert_charger = false;
 	u8 ss_reg = 0, f_reg = 0;
 	int i, ret;
 
@@ -1202,12 +944,9 @@ static void bq24190_check_status(struct bq24190_dev_info *bdi)
 				!!(f_reg & BQ24190_REG_F_NTC_FAULT_MASK));
 
 		mutex_lock(&bdi->f_reg_lock);
-		if ((bdi->f_reg & battery_mask_f) != (f_reg & battery_mask_f))
-			alert_battery = true;
-		if ((bdi->f_reg & ~battery_mask_f) != (f_reg & ~battery_mask_f))
-			alert_charger = true;
 		bdi->f_reg = f_reg;
 		mutex_unlock(&bdi->f_reg_lock);
+		alert_charger = true;
 	}
 
 	if (ss_reg != bdi->ss_reg) {
@@ -1226,17 +965,12 @@ static void bq24190_check_status(struct bq24190_dev_info *bdi)
 					ret);
 		}
 
-		if ((bdi->ss_reg & battery_mask_ss) != (ss_reg & battery_mask_ss))
-			alert_battery = true;
-		if ((bdi->ss_reg & ~battery_mask_ss) != (ss_reg & ~battery_mask_ss))
-			alert_charger = true;
 		bdi->ss_reg = ss_reg;
+		alert_charger = true;
 	}
 
 	if (alert_charger)
 		power_supply_changed(bdi->charger);
-	if (alert_battery)
-		power_supply_changed(bdi->battery);
 
 	dev_dbg(bdi->dev, "ss_reg: 0x%02x, f_reg: 0x%02x\n", ss_reg, f_reg);
 }
@@ -1363,7 +1097,7 @@ static int bq24190_probe(struct i2c_client *client,
 {
 	struct i2c_adapter *adapter = to_i2c_adapter(client->dev.parent);
 	struct device *dev = &client->dev;
-	struct power_supply_config charger_cfg = {}, battery_cfg = {};
+	struct power_supply_config charger_cfg = {};
 	struct bq24190_dev_info *bdi;
 	const char *name;
 	int ret;
@@ -1427,19 +1161,10 @@ static int bq24190_probe(struct i2c_client *client,
 		goto pm_runtime_disable;
 	}
 
-	battery_cfg.drv_data = bdi;
-	bdi->battery = power_supply_register(dev, &bq24190_battery_desc,
-						&battery_cfg);
-	if (IS_ERR(bdi->battery)) {
-		dev_err(dev, "Can't register battery\n");
-		ret = PTR_ERR(bdi->battery);
-		goto unregister_charger;
-	}
-
 	ret = bq24190_sysfs_create_group(bdi);
 	if (ret) {
 		dev_err(dev, "Can't create sysfs entries\n");
-		goto unregister_battery;
+		goto unregister_charger;
 	}
 
 	bdi->initialized = true;
@@ -1475,9 +1200,6 @@ static int bq24190_probe(struct i2c_client *client,
 remove_sysfs_group:
 	bq24190_sysfs_remove_group(bdi);
 
-unregister_battery:
-	power_supply_unregister(bdi->battery);
-
 unregister_charger:
 	power_supply_unregister(bdi->charger);
 
@@ -1500,7 +1222,6 @@ static int bq24190_remove(struct i2c_client *client)
 	}
 
 	bq24190_sysfs_remove_group(bdi);
-	power_supply_unregister(bdi->battery);
 	power_supply_unregister(bdi->charger);
 	if (error >= 0)
 		pm_runtime_put_sync(bdi->dev);
@@ -1568,7 +1289,6 @@ static __maybe_unused int bq24190_pm_resume(struct device *dev)
 
 	/* Things may have changed while suspended so alert upper layer */
 	power_supply_changed(bdi->charger);
-	power_supply_changed(bdi->battery);
 
 	return 0;
 }
-- 
2.9.3

  parent reply	other threads:[~2017-03-22 15:05 UTC|newest]

Thread overview: 55+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-03-22 14:55 [PATCH 0/7] power: supply: bq24190_charger: Various fixes + extcon support Hans de Goede
2017-03-22 14:55 ` [PATCH v2 1/7] power: supply: bq24190_charger: Use i2c-core irq-mapping code Hans de Goede
2017-03-22 15:37   ` Tony Lindgren
2017-03-23 11:11   ` Sebastian Reichel
2017-03-24 23:44   ` Liam Breck
2017-03-22 14:55 ` [PATCH v2 2/7] power: supply: bq24190_charger: Add support for bq24192i Hans de Goede
2017-03-23 11:12   ` Sebastian Reichel
2017-03-24 23:34   ` Liam Breck
2017-03-22 14:55 ` [PATCH v2 3/7] power: supply: bq24190_charger: Use extcon to determine ilimit, 5v boost Hans de Goede
2017-03-22 15:50   ` Tony Lindgren
2017-03-22 15:57     ` Hans de Goede
2017-03-22 18:50   ` Liam Breck
2017-03-23  8:31     ` Hans de Goede
2017-03-22 14:55 ` [PATCH v2 4/7] power: supply: bq24190_charger: Never reset the charger chip Hans de Goede
2017-03-22 15:43   ` Tony Lindgren
2017-03-22 15:45     ` Hans de Goede
2017-03-22 15:51       ` Tony Lindgren
2017-03-23  7:16       ` Liam Breck
2017-03-23  8:44         ` Hans de Goede
2017-03-23 11:36           ` Liam Breck
2017-03-23 11:44             ` Hans de Goede
2017-03-23 11:47               ` Liam Breck
2017-03-23 11:48                 ` Hans de Goede
2017-03-23 20:33               ` Liam Breck
2017-03-23 22:01                 ` Hans de Goede
2017-03-24 23:49                   ` Liam Breck
2017-03-22 18:41   ` Liam Breck
2017-03-23  8:16     ` Hans de Goede
2017-03-23 10:59     ` Sebastian Reichel
2017-03-23 11:20   ` Sebastian Reichel
2017-03-22 14:55 ` [PATCH v2 5/7] power: supply: bq24190_charger: Don't spam the logs on charger plug / unplug Hans de Goede
2017-03-22 15:44   ` Tony Lindgren
2017-03-23 11:17   ` Sebastian Reichel
2017-03-23 13:34   ` Liam Breck
2017-03-23 21:31   ` Liam Breck
2017-03-23 22:02     ` Hans de Goede
2017-03-23 22:24       ` Liam Breck
2017-03-24  9:25         ` Sebastian Reichel
2017-03-24 23:31           ` Liam Breck
2017-03-24 10:29   ` [PATCH] power: bq24190_charger: Limit over/under voltage fault logging Liam Breck
2017-03-25 11:17     ` Hans de Goede
2017-03-25 11:24   ` [PATCH v2] " Liam Breck
2017-03-26  8:44     ` Hans de Goede
2017-03-26 10:56       ` Liam Breck
2017-03-26 11:04         ` Hans de Goede
2017-03-29 16:33           ` Tony Lindgren
2017-03-22 14:55 ` [PATCH v2 6/7] power: supply: bq24190_charger: Cleanup error-exit labels in probe() Hans de Goede
2017-03-22 15:45   ` Tony Lindgren
2017-03-22 19:09   ` Liam Breck
2017-03-23  8:37     ` Hans de Goede
2017-03-24 23:58       ` Liam Breck
2017-03-23 11:21   ` Sebastian Reichel
2017-03-23 11:46     ` Hans de Goede
2017-03-22 14:55 ` Hans de Goede [this message]
2017-03-25  0:19   ` [PATCH v2 7/7] power: supply: bq24190_charger: Remove battery power_supply device Liam Breck

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20170322145536.30570-8-hdegoede@redhat.com \
    --to=hdegoede@redhat.com \
    --cc=kernel@networkimprov.net \
    --cc=linux-pm@vger.kernel.org \
    --cc=sre@kernel.org \
    --cc=tiwai@suse.de \
    --cc=tony@atomide.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).