i2c: Warn when device removing fails
authorUwe Kleine-König <u.kleine-koenig@pengutronix.de>
Thu, 26 Nov 2020 07:23:30 +0000 (08:23 +0100)
committerWolfram Sang <wsa@kernel.org>
Fri, 11 Dec 2020 14:42:19 +0000 (15:42 +0100)
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>
drivers/i2c/i2c-core-base.c

index 573b5da145d1eb18d1066f9cf612366fceaf0191..6528d9e8f3aea3323b0cb66e91790806c440b9cf 100644 (file)
@@ -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)