summaryrefslogtreecommitdiff
path: root/drivers/i2c/i2c-core-base.c
diff options
context:
space:
mode:
authorUwe Kleine-König <u.kleine-koenig@pengutronix.de>2020-11-26 08:23:30 +0100
committerWolfram Sang <wsa@kernel.org>2020-12-11 15:42:19 +0100
commit71637c620a826434ca6f888b0364a036faa27ffa (patch)
tree530569854bc82a20f1161198d9c714fb5299ce01 /drivers/i2c/i2c-core-base.c
parentbfbccd70eee93c059e22d0d233f57cc164f03687 (diff)
i2c: Warn when device removing fails
The driver core ignores the return value of struct bus_type::remove. So warn if there is an error that went unnoticed before and return 0 unconditionally in i2c_device_remove(). This prepares changing struct bus_type::remove to return void. Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de> [wsa: added a comment and removed unneeded initializtion] Signed-off-by: Wolfram Sang <wsa@kernel.org>
Diffstat (limited to 'drivers/i2c/i2c-core-base.c')
-rw-r--r--drivers/i2c/i2c-core-base.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/drivers/i2c/i2c-core-base.c b/drivers/i2c/i2c-core-base.c
index 573b5da145d1..6528d9e8f3ae 100644
--- a/drivers/i2c/i2c-core-base.c
+++ b/drivers/i2c/i2c-core-base.c
@@ -551,15 +551,19 @@ static int i2c_device_remove(struct device *dev)
{
struct i2c_client *client = i2c_verify_client(dev);
struct i2c_driver *driver;
- int status = 0;
if (!client || !dev->driver)
return 0;
driver = to_i2c_driver(dev->driver);
if (driver->remove) {
+ int status;
+
dev_dbg(dev, "remove\n");
+
status = driver->remove(client);
+ if (status)
+ dev_warn(dev, "remove failed (%pe), will be ignored\n", ERR_PTR(status));
}
dev_pm_domain_detach(&client->dev, true);
@@ -571,7 +575,8 @@ static int i2c_device_remove(struct device *dev)
if (client->flags & I2C_CLIENT_HOST_NOTIFY)
pm_runtime_put(&client->adapter->dev);
- return status;
+ /* return always 0 because there is WIP to make remove-functions void */
+ return 0;
}
static void i2c_device_shutdown(struct device *dev)