i2c: mux: pca954x: Move device_remove_file() out of pca954x_cleanup()
authorAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Sat, 25 Apr 2020 11:51:51 +0000 (14:51 +0300)
committerWolfram Sang <wsa@kernel.org>
Mon, 11 May 2020 19:23:16 +0000 (21:23 +0200)
device_create_file() is called the last in ->probe() but pca954x_cleanup(),
which is called earlier in error path, tries to remove never created file.
Move device_remove_file() call outside of pca954x_cleanup() to make it
slightly closer to what pca954x_init() is doing.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Reviewed-by: Peter Rosin <peda@axentia.se>
Signed-off-by: Wolfram Sang <wsa@kernel.org>
drivers/i2c/muxes/i2c-mux-pca954x.c

index 928c6f5..0908a06 100644 (file)
@@ -383,11 +383,8 @@ static int pca954x_irq_setup(struct i2c_mux_core *muxc)
 static void pca954x_cleanup(struct i2c_mux_core *muxc)
 {
        struct pca954x *data = i2c_mux_priv(muxc);
-       struct i2c_client *client = data->client;
        int c, irq;
 
-       device_remove_file(&client->dev, &dev_attr_idle_state);
-
        if (data->irq) {
                for (c = 0; c < data->chip->nchans; c++) {
                        irq = irq_find_mapping(data->irq, c);
@@ -531,6 +528,8 @@ static int pca954x_remove(struct i2c_client *client)
 {
        struct i2c_mux_core *muxc = i2c_get_clientdata(client);
 
+       device_remove_file(&client->dev, &dev_attr_idle_state);
+
        pca954x_cleanup(muxc);
        return 0;
 }