Skip to content

Commit

Permalink
hwmon: (w83795) Move files removal to a separate function
Browse files Browse the repository at this point in the history
Sysfs files must be removed on device removal but also when device
registration fails. Move the code to a separate function to avoid
code redundancy.

Signed-off-by: Jean Delvare <khali@linux-fr.org>
  • Loading branch information
Jean Delvare authored and Jean Delvare committed Oct 28, 2010
1 parent 2be381d commit 2fa0987
Showing 1 changed file with 31 additions and 50 deletions.
81 changes: 31 additions & 50 deletions drivers/hwmon/w83795.c
Original file line number Diff line number Diff line change
Expand Up @@ -1777,6 +1777,35 @@ static int w83795_detect(struct i2c_client *client,
return 0;
}

static void w83795_remove_files(struct device *dev)
{
struct w83795_data *data = dev_get_drvdata(dev);
int i;

for (i = 0; i < ARRAY_SIZE(w83795_in); i++)
device_remove_file(dev, &w83795_in[i].dev_attr);

for (i = 0; i < ARRAY_SIZE(w83795_fan); i++)
device_remove_file(dev, &w83795_fan[i].dev_attr);

for (i = 0; i < ARRAY_SIZE(sda_single_files); i++)
device_remove_file(dev, &sda_single_files[i].dev_attr);

if (data->chip_type == w83795g) {
for (i = 0; i < ARRAY_SIZE(w83795_left_reg); i++)
device_remove_file(dev, &w83795_left_reg[i].dev_attr);
}

for (i = 0; i < ARRAY_SIZE(w83795_temp); i++)
device_remove_file(dev, &w83795_temp[i].dev_attr);

for (i = 0; i < ARRAY_SIZE(w83795_dts); i++)
device_remove_file(dev, &w83795_dts[i].dev_attr);

for (i = 0; i < ARRAY_SIZE(w83795_static); i++)
device_remove_file(dev, &w83795_static[i].dev_attr);
}

static int w83795_probe(struct i2c_client *client,
const struct i2c_device_id *id)
{
Expand Down Expand Up @@ -2065,31 +2094,8 @@ static int w83795_probe(struct i2c_client *client,

return 0;

/* Unregister sysfs hooks */
exit_remove:
for (i = 0; i < ARRAY_SIZE(w83795_in); i++)
device_remove_file(dev, &w83795_in[i].dev_attr);

for (i = 0; i < ARRAY_SIZE(w83795_fan); i++)
device_remove_file(dev, &w83795_fan[i].dev_attr);

for (i = 0; i < ARRAY_SIZE(sda_single_files); i++)
device_remove_file(dev, &sda_single_files[i].dev_attr);

if (data->chip_type == w83795g) {
for (i = 0; i < ARRAY_SIZE(w83795_left_reg); i++)
device_remove_file(dev, &w83795_left_reg[i].dev_attr);
}

for (i = 0; i < ARRAY_SIZE(w83795_temp); i++)
device_remove_file(dev, &w83795_temp[i].dev_attr);

for (i = 0; i < ARRAY_SIZE(w83795_dts); i++)
device_remove_file(dev, &w83795_dts[i].dev_attr);

for (i = 0; i < ARRAY_SIZE(w83795_static); i++)
device_remove_file(dev, &w83795_static[i].dev_attr);

w83795_remove_files(dev);
kfree(data);
exit:
return err;
Expand All @@ -2098,34 +2104,9 @@ static int w83795_probe(struct i2c_client *client,
static int w83795_remove(struct i2c_client *client)
{
struct w83795_data *data = i2c_get_clientdata(client);
struct device *dev = &client->dev;
int i;

hwmon_device_unregister(data->hwmon_dev);

for (i = 0; i < ARRAY_SIZE(w83795_in); i++)
device_remove_file(dev, &w83795_in[i].dev_attr);

for (i = 0; i < ARRAY_SIZE(w83795_fan); i++)
device_remove_file(dev, &w83795_fan[i].dev_attr);

for (i = 0; i < ARRAY_SIZE(sda_single_files); i++)
device_remove_file(dev, &sda_single_files[i].dev_attr);

if (data->chip_type == w83795g) {
for (i = 0; i < ARRAY_SIZE(w83795_left_reg); i++)
device_remove_file(dev, &w83795_left_reg[i].dev_attr);
}

for (i = 0; i < ARRAY_SIZE(w83795_temp); i++)
device_remove_file(dev, &w83795_temp[i].dev_attr);

for (i = 0; i < ARRAY_SIZE(w83795_dts); i++)
device_remove_file(dev, &w83795_dts[i].dev_attr);

for (i = 0; i < ARRAY_SIZE(w83795_static); i++)
device_remove_file(dev, &w83795_static[i].dev_attr);

w83795_remove_files(&client->dev);
kfree(data);

return 0;
Expand Down

0 comments on commit 2fa0987

Please sign in to comment.