linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/7] Cleanup SBS power-supply drivers
@ 2021-03-09 18:04 Sebastian Reichel
  2021-03-09 18:04 ` [PATCH 1/7] power: supply: sbs-battery: use dev_err_probe Sebastian Reichel
                   ` (6 more replies)
  0 siblings, 7 replies; 8+ messages in thread
From: Sebastian Reichel @ 2021-03-09 18:04 UTC (permalink / raw)
  To: Sebastian Reichel; +Cc: linux-pm, linux-kernel, kernel, Sebastian Reichel

Hi,

This is a collection of cleanups for the SBS battery/charger/manager.
The series does three things:

1. remove legacy gpio usage (only headers needed updates)
2. simple code cleanups
3. remove probe defer message logging

To provide some more data for the last point: The following messages
appeared on a SBS battery using system if the battery driver is probed
before the charger at default loglevel and will be degraded to debug
level:

[    0.348325] power_supply sbs-0-000b: Not all required supplies found, defer probe
[    0.348337] sbs-battery 0-000b: sbs_probe: Failed to register power supply
[    0.588072] power_supply sbs-0-000b: sbs-0-000b: Found supply : battery-charger

-- Sebastian

Sebastian Reichel (7):
  power: supply: sbs-battery: use dev_err_probe
  power: supply: sbs-charger: use dev_err_probe
  power: supply: sbs-charger: drop unused gpio includes
  power: supply: sbs-manager: use managed i2c_mux_adapter
  power: supply: sbs-manager: use dev_err_probe
  power: supply: sbs-manager: update gpio include
  power: supply: core: reduce loglevel for probe defer info

 drivers/power/supply/power_supply_core.c |  4 +-
 drivers/power/supply/sbs-battery.c       | 28 +++------
 drivers/power/supply/sbs-charger.c       | 24 +++-----
 drivers/power/supply/sbs-manager.c       | 78 +++++++++---------------
 4 files changed, 47 insertions(+), 87 deletions(-)

-- 
2.30.1


^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PATCH 1/7] power: supply: sbs-battery: use dev_err_probe
  2021-03-09 18:04 [PATCH 0/7] Cleanup SBS power-supply drivers Sebastian Reichel
@ 2021-03-09 18:04 ` Sebastian Reichel
  2021-03-09 18:04 ` [PATCH 2/7] power: supply: sbs-charger: " Sebastian Reichel
                   ` (5 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: Sebastian Reichel @ 2021-03-09 18:04 UTC (permalink / raw)
  To: Sebastian Reichel; +Cc: linux-pm, linux-kernel, kernel, Sebastian Reichel

Introduce usage of dev_err_probe in probe routine, which
makes the code slightly more readable and removes some
lines of code. It also removes PROBE_DEFER errors being
logged by default, which are common when the battery is
waiting for the charger driver to be registered.

This also cleans up a useless goto and instead returns
directly.

Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
---
 drivers/power/supply/sbs-battery.c | 28 +++++++++-------------------
 1 file changed, 9 insertions(+), 19 deletions(-)

diff --git a/drivers/power/supply/sbs-battery.c b/drivers/power/supply/sbs-battery.c
index b6a538ebb378..4bf92831cb06 100644
--- a/drivers/power/supply/sbs-battery.c
+++ b/drivers/power/supply/sbs-battery.c
@@ -1123,11 +1123,9 @@ static int sbs_probe(struct i2c_client *client)
 
 	chip->gpio_detect = devm_gpiod_get_optional(&client->dev,
 			"sbs,battery-detect", GPIOD_IN);
-	if (IS_ERR(chip->gpio_detect)) {
-		dev_err(&client->dev, "Failed to get gpio: %ld\n",
-			PTR_ERR(chip->gpio_detect));
-		return PTR_ERR(chip->gpio_detect);
-	}
+	if (IS_ERR(chip->gpio_detect))
+		return dev_err_probe(&client->dev, PTR_ERR(chip->gpio_detect),
+				     "Failed to get gpio\n");
 
 	i2c_set_clientdata(client, chip);
 
@@ -1158,31 +1156,23 @@ static int sbs_probe(struct i2c_client *client)
 
 		rc = sbs_get_battery_presence_and_health(
 				client, POWER_SUPPLY_PROP_PRESENT, &val);
-		if (rc < 0 || !val.intval) {
-			dev_err(&client->dev, "Failed to get present status\n");
-			rc = -ENODEV;
-			goto exit_psupply;
-		}
+		if (rc < 0 || !val.intval)
+			return dev_err_probe(&client->dev, -ENODEV,
+					     "Failed to get present status\n");
 	}
 
 	INIT_DELAYED_WORK(&chip->work, sbs_delayed_work);
 
 	chip->power_supply = devm_power_supply_register(&client->dev, sbs_desc,
 						   &psy_cfg);
-	if (IS_ERR(chip->power_supply)) {
-		dev_err(&client->dev,
-			"%s: Failed to register power supply\n", __func__);
-		rc = PTR_ERR(chip->power_supply);
-		goto exit_psupply;
-	}
+	if (IS_ERR(chip->power_supply))
+		return dev_err_probe(&client->dev, PTR_ERR(chip->power_supply),
+				     "Failed to register power supply\n");
 
 	dev_info(&client->dev,
 		"%s: battery gas gauge device registered\n", client->name);
 
 	return 0;
-
-exit_psupply:
-	return rc;
 }
 
 static int sbs_remove(struct i2c_client *client)
-- 
2.30.1


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 2/7] power: supply: sbs-charger: use dev_err_probe
  2021-03-09 18:04 [PATCH 0/7] Cleanup SBS power-supply drivers Sebastian Reichel
  2021-03-09 18:04 ` [PATCH 1/7] power: supply: sbs-battery: use dev_err_probe Sebastian Reichel
@ 2021-03-09 18:04 ` Sebastian Reichel
  2021-03-09 18:04 ` [PATCH 3/7] power: supply: sbs-charger: drop unused gpio includes Sebastian Reichel
                   ` (4 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: Sebastian Reichel @ 2021-03-09 18:04 UTC (permalink / raw)
  To: Sebastian Reichel; +Cc: linux-pm, linux-kernel, kernel, Sebastian Reichel

Introduce usage of dev_err_probe in probe routine, which
makes the code slightly more readable and removes some
lines of code. It also removes PROBE_DEFER errors being
logged by default.

Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
---
 drivers/power/supply/sbs-charger.c | 22 ++++++++--------------
 1 file changed, 8 insertions(+), 14 deletions(-)

diff --git a/drivers/power/supply/sbs-charger.c b/drivers/power/supply/sbs-charger.c
index fbfb6a620961..36a048d687e0 100644
--- a/drivers/power/supply/sbs-charger.c
+++ b/drivers/power/supply/sbs-charger.c
@@ -189,18 +189,14 @@ static int sbs_probe(struct i2c_client *client,
 	 * to the battery.
 	 */
 	ret = regmap_read(chip->regmap, SBS_CHARGER_REG_STATUS, &val);
-	if (ret) {
-		dev_err(&client->dev, "Failed to get device status\n");
-		return ret;
-	}
+	if (ret)
+		return dev_err_probe(&client->dev, ret, "Failed to get device status\n");
 	chip->last_state = val;
 
-	chip->power_supply = devm_power_supply_register(&client->dev, &sbs_desc,
-							&psy_cfg);
-	if (IS_ERR(chip->power_supply)) {
-		dev_err(&client->dev, "Failed to register power supply\n");
-		return PTR_ERR(chip->power_supply);
-	}
+	chip->power_supply = devm_power_supply_register(&client->dev, &sbs_desc, &psy_cfg);
+	if (IS_ERR(chip->power_supply))
+		return dev_err_probe(&client->dev, PTR_ERR(chip->power_supply),
+				     "Failed to register power supply\n");
 
 	/*
 	 * The sbs-charger spec doesn't impose the use of an interrupt. So in
@@ -212,10 +208,8 @@ static int sbs_probe(struct i2c_client *client,
 					NULL, sbs_irq_thread,
 					IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
 					dev_name(&client->dev), chip);
-		if (ret) {
-			dev_err(&client->dev, "Failed to request irq, %d\n", ret);
-			return ret;
-		}
+		if (ret)
+			return dev_err_probe(&client->dev, ret, "Failed to request irq\n");
 	} else {
 		INIT_DELAYED_WORK(&chip->work, sbs_delayed_work);
 		schedule_delayed_work(&chip->work,
-- 
2.30.1


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 3/7] power: supply: sbs-charger: drop unused gpio includes
  2021-03-09 18:04 [PATCH 0/7] Cleanup SBS power-supply drivers Sebastian Reichel
  2021-03-09 18:04 ` [PATCH 1/7] power: supply: sbs-battery: use dev_err_probe Sebastian Reichel
  2021-03-09 18:04 ` [PATCH 2/7] power: supply: sbs-charger: " Sebastian Reichel
@ 2021-03-09 18:04 ` Sebastian Reichel
  2021-03-09 18:04 ` [PATCH 4/7] power: supply: sbs-manager: use managed i2c_mux_adapter Sebastian Reichel
                   ` (3 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: Sebastian Reichel @ 2021-03-09 18:04 UTC (permalink / raw)
  To: Sebastian Reichel; +Cc: linux-pm, linux-kernel, kernel, Sebastian Reichel

sbs-charger does not use any GPIOs, so no need to include
gpio.h and of_gpio.h.

Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
---
 drivers/power/supply/sbs-charger.c | 2 --
 1 file changed, 2 deletions(-)

diff --git a/drivers/power/supply/sbs-charger.c b/drivers/power/supply/sbs-charger.c
index 36a048d687e0..6fa65d118ec1 100644
--- a/drivers/power/supply/sbs-charger.c
+++ b/drivers/power/supply/sbs-charger.c
@@ -16,9 +16,7 @@
 #include <linux/i2c.h>
 #include <linux/slab.h>
 #include <linux/interrupt.h>
-#include <linux/gpio.h>
 #include <linux/regmap.h>
-#include <linux/of_gpio.h>
 #include <linux/bitops.h>
 
 #define SBS_CHARGER_REG_SPEC_INFO		0x11
-- 
2.30.1


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 4/7] power: supply: sbs-manager: use managed i2c_mux_adapter
  2021-03-09 18:04 [PATCH 0/7] Cleanup SBS power-supply drivers Sebastian Reichel
                   ` (2 preceding siblings ...)
  2021-03-09 18:04 ` [PATCH 3/7] power: supply: sbs-charger: drop unused gpio includes Sebastian Reichel
@ 2021-03-09 18:04 ` Sebastian Reichel
  2021-03-09 18:04 ` [PATCH 5/7] power: supply: sbs-manager: use dev_err_probe Sebastian Reichel
                   ` (2 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: Sebastian Reichel @ 2021-03-09 18:04 UTC (permalink / raw)
  To: Sebastian Reichel; +Cc: linux-pm, linux-kernel, kernel, Sebastian Reichel

Simplify code by using devm_add_action_or_reset to unregister
the i2c_mux_adapter.

Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
---
 drivers/power/supply/sbs-manager.c | 21 ++++++++++-----------
 1 file changed, 10 insertions(+), 11 deletions(-)

diff --git a/drivers/power/supply/sbs-manager.c b/drivers/power/supply/sbs-manager.c
index 666243d9dd59..cd2bf0b247fe 100644
--- a/drivers/power/supply/sbs-manager.c
+++ b/drivers/power/supply/sbs-manager.c
@@ -311,6 +311,12 @@ static const struct power_supply_desc sbsm_default_psy_desc = {
 	.property_is_writeable = &sbsm_prop_is_writeable,
 };
 
+static void sbsm_del_mux_adapter(void *data)
+{
+	struct sbsm_data *sbsm = data;
+	i2c_mux_del_adapters(sbsm->muxc);
+}
+
 static int sbsm_probe(struct i2c_client *client,
 		      const struct i2c_device_id *id)
 {
@@ -350,6 +356,10 @@ static int sbsm_probe(struct i2c_client *client,
 	}
 	data->muxc->priv = data;
 
+	ret = devm_add_action_or_reset(dev, sbsm_del_mux_adapter, data);
+	if (ret)
+		return ret;
+
 	/* register muxed i2c channels. One for each supported battery */
 	for (i = 0; i < SBSM_MAX_BATS; ++i) {
 		if (data->supported_bats & BIT(i)) {
@@ -395,20 +405,10 @@ static int sbsm_probe(struct i2c_client *client,
 
 err_psy:
 err_mux_register:
-	i2c_mux_del_adapters(data->muxc);
-
 err_mux_alloc:
 	return ret;
 }
 
-static int sbsm_remove(struct i2c_client *client)
-{
-	struct sbsm_data *data = i2c_get_clientdata(client);
-
-	i2c_mux_del_adapters(data->muxc);
-	return 0;
-}
-
 static const struct i2c_device_id sbsm_ids[] = {
 	{ "sbs-manager", 0 },
 	{ "ltc1760",     0 },
@@ -431,7 +431,6 @@ static struct i2c_driver sbsm_driver = {
 		.of_match_table = of_match_ptr(sbsm_dt_ids),
 	},
 	.probe		= sbsm_probe,
-	.remove		= sbsm_remove,
 	.alert		= sbsm_alert,
 	.id_table	= sbsm_ids
 };
-- 
2.30.1


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 5/7] power: supply: sbs-manager: use dev_err_probe
  2021-03-09 18:04 [PATCH 0/7] Cleanup SBS power-supply drivers Sebastian Reichel
                   ` (3 preceding siblings ...)
  2021-03-09 18:04 ` [PATCH 4/7] power: supply: sbs-manager: use managed i2c_mux_adapter Sebastian Reichel
@ 2021-03-09 18:04 ` Sebastian Reichel
  2021-03-09 18:04 ` [PATCH 6/7] power: supply: sbs-manager: update gpio include Sebastian Reichel
  2021-03-09 18:04 ` [PATCH 7/7] power: supply: core: reduce loglevel for probe defer info Sebastian Reichel
  6 siblings, 0 replies; 8+ messages in thread
From: Sebastian Reichel @ 2021-03-09 18:04 UTC (permalink / raw)
  To: Sebastian Reichel; +Cc: linux-pm, linux-kernel, kernel, Sebastian Reichel

Introduce usage of dev_err_probe in probe routine, which
makes the code slightly more readable and removes some
lines of code. It also removes PROBE_DEFER errors being
logged by default.

Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
---
 drivers/power/supply/sbs-manager.c | 55 +++++++++---------------------
 1 file changed, 17 insertions(+), 38 deletions(-)

diff --git a/drivers/power/supply/sbs-manager.c b/drivers/power/supply/sbs-manager.c
index cd2bf0b247fe..bd2af3ef1021 100644
--- a/drivers/power/supply/sbs-manager.c
+++ b/drivers/power/supply/sbs-manager.c
@@ -294,10 +294,8 @@ static int sbsm_gpio_setup(struct sbsm_data *data)
 	gc->owner = THIS_MODULE;
 
 	ret = devm_gpiochip_add_data(dev, gc, data);
-	if (ret) {
-		dev_err(dev, "devm_gpiochip_add_data failed: %d\n", ret);
-		return ret;
-	}
+	if (ret)
+		return dev_err_probe(dev, ret, "devm_gpiochip_add_data failed\n");
 
 	return ret;
 }
@@ -349,11 +347,8 @@ static int sbsm_probe(struct i2c_client *client,
 	data->supported_bats = ret & SBSM_MASK_BAT_SUPPORTED;
 	data->muxc = i2c_mux_alloc(adapter, dev, SBSM_MAX_BATS, 0,
 				   I2C_MUX_LOCKED, &sbsm_select, NULL);
-	if (!data->muxc) {
-		dev_err(dev, "failed to alloc i2c mux\n");
-		ret = -ENOMEM;
-		goto err_mux_alloc;
-	}
+	if (!data->muxc)
+		return dev_err_probe(dev, -ENOMEM, "failed to alloc i2c mux\n");
 	data->muxc->priv = data;
 
 	ret = devm_add_action_or_reset(dev, sbsm_del_mux_adapter, data);
@@ -368,45 +363,29 @@ static int sbsm_probe(struct i2c_client *client,
 				break;
 		}
 	}
-	if (ret) {
-		dev_err(dev, "failed to register i2c mux channel %d\n", i + 1);
-		goto err_mux_register;
-	}
+	if (ret)
+		return dev_err_probe(dev, ret, "failed to register i2c mux channel %d\n", i + 1);
 
-	psy_desc = devm_kmemdup(dev, &sbsm_default_psy_desc,
-				sizeof(struct power_supply_desc),
-				GFP_KERNEL);
-	if (!psy_desc) {
-		ret = -ENOMEM;
-		goto err_psy;
-	}
+	psy_desc = devm_kmemdup(dev, &sbsm_default_psy_desc, sizeof(*psy_desc), GFP_KERNEL);
+	if (!psy_desc)
+		return -ENOMEM;
+
+	psy_desc->name = devm_kasprintf(dev, GFP_KERNEL, "sbsm-%s", dev_name(&client->dev));
+	if (!psy_desc->name)
+		return -ENOMEM;
 
-	psy_desc->name = devm_kasprintf(dev, GFP_KERNEL, "sbsm-%s",
-					dev_name(&client->dev));
-	if (!psy_desc->name) {
-		ret = -ENOMEM;
-		goto err_psy;
-	}
 	ret = sbsm_gpio_setup(data);
 	if (ret < 0)
-		goto err_psy;
+		return ret;
 
 	psy_cfg.drv_data = data;
 	psy_cfg.of_node = dev->of_node;
 	data->psy = devm_power_supply_register(dev, psy_desc, &psy_cfg);
-	if (IS_ERR(data->psy)) {
-		ret = PTR_ERR(data->psy);
-		dev_err(dev, "failed to register power supply %s\n",
-			psy_desc->name);
-		goto err_psy;
-	}
+	if (IS_ERR(data->psy))
+		return dev_err_probe(dev, PTR_ERR(data->psy),
+				     "failed to register power supply %s\n", psy_desc->name);
 
 	return 0;
-
-err_psy:
-err_mux_register:
-err_mux_alloc:
-	return ret;
 }
 
 static const struct i2c_device_id sbsm_ids[] = {
-- 
2.30.1


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 6/7] power: supply: sbs-manager: update gpio include
  2021-03-09 18:04 [PATCH 0/7] Cleanup SBS power-supply drivers Sebastian Reichel
                   ` (4 preceding siblings ...)
  2021-03-09 18:04 ` [PATCH 5/7] power: supply: sbs-manager: use dev_err_probe Sebastian Reichel
@ 2021-03-09 18:04 ` Sebastian Reichel
  2021-03-09 18:04 ` [PATCH 7/7] power: supply: core: reduce loglevel for probe defer info Sebastian Reichel
  6 siblings, 0 replies; 8+ messages in thread
From: Sebastian Reichel @ 2021-03-09 18:04 UTC (permalink / raw)
  To: Sebastian Reichel; +Cc: linux-pm, linux-kernel, kernel, Sebastian Reichel

sbs-manager implements a GPIO chip, so include the proper
gpio driver include instead of the legacy gpio.h.

Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
---
 drivers/power/supply/sbs-manager.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/power/supply/sbs-manager.c b/drivers/power/supply/sbs-manager.c
index bd2af3ef1021..71ec8f74f835 100644
--- a/drivers/power/supply/sbs-manager.c
+++ b/drivers/power/supply/sbs-manager.c
@@ -13,7 +13,7 @@
  * Karl-Heinz Schneider <karl-heinz@schneider-inet.de>
  */
 
-#include <linux/gpio.h>
+#include <linux/gpio/driver.h>
 #include <linux/module.h>
 #include <linux/i2c.h>
 #include <linux/i2c-mux.h>
-- 
2.30.1


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 7/7] power: supply: core: reduce loglevel for probe defer info
  2021-03-09 18:04 [PATCH 0/7] Cleanup SBS power-supply drivers Sebastian Reichel
                   ` (5 preceding siblings ...)
  2021-03-09 18:04 ` [PATCH 6/7] power: supply: sbs-manager: update gpio include Sebastian Reichel
@ 2021-03-09 18:04 ` Sebastian Reichel
  6 siblings, 0 replies; 8+ messages in thread
From: Sebastian Reichel @ 2021-03-09 18:04 UTC (permalink / raw)
  To: Sebastian Reichel; +Cc: linux-pm, linux-kernel, kernel, Sebastian Reichel

Avoid logging probe defer information for default loglevel
configurations. This is only required for debugging probe
defer issues, which requires enabling debug messages for
other subsystems.

This dev_info() message predates having deferred devices
information available in /sys/kernel/debug/devices_deferred,
which is generally more useful.

Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
---
 drivers/power/supply/power_supply_core.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/power/supply/power_supply_core.c b/drivers/power/supply/power_supply_core.c
index 38e3aa642131..d99e2f11c183 100644
--- a/drivers/power/supply/power_supply_core.c
+++ b/drivers/power/supply/power_supply_core.c
@@ -169,7 +169,7 @@ static int __power_supply_populate_supplied_from(struct device *dev,
 			break;
 
 		if (np == epsy->of_node) {
-			dev_info(&psy->dev, "%s: Found supply : %s\n",
+			dev_dbg(&psy->dev, "%s: Found supply : %s\n",
 				psy->desc->name, epsy->desc->name);
 			psy->supplied_from[i-1] = (char *)epsy->desc->name;
 			psy->num_supplies++;
@@ -1143,7 +1143,7 @@ __power_supply_register(struct device *parent,
 
 	rc = power_supply_check_supplies(psy);
 	if (rc) {
-		dev_info(dev, "Not all required supplies found, defer probe\n");
+		dev_dbg(dev, "Not all required supplies found, defer probe\n");
 		goto check_supplies_failed;
 	}
 
-- 
2.30.1


^ permalink raw reply related	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2021-03-09 18:05 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-03-09 18:04 [PATCH 0/7] Cleanup SBS power-supply drivers Sebastian Reichel
2021-03-09 18:04 ` [PATCH 1/7] power: supply: sbs-battery: use dev_err_probe Sebastian Reichel
2021-03-09 18:04 ` [PATCH 2/7] power: supply: sbs-charger: " Sebastian Reichel
2021-03-09 18:04 ` [PATCH 3/7] power: supply: sbs-charger: drop unused gpio includes Sebastian Reichel
2021-03-09 18:04 ` [PATCH 4/7] power: supply: sbs-manager: use managed i2c_mux_adapter Sebastian Reichel
2021-03-09 18:04 ` [PATCH 5/7] power: supply: sbs-manager: use dev_err_probe Sebastian Reichel
2021-03-09 18:04 ` [PATCH 6/7] power: supply: sbs-manager: update gpio include Sebastian Reichel
2021-03-09 18:04 ` [PATCH 7/7] power: supply: core: reduce loglevel for probe defer info Sebastian Reichel

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).