Commit c6b87246 authored by Jean Delvare's avatar Jean Delvare

hwmon: (pc87427) Move sysfs file removal to a separate function

The sysfs file removal code is the same in the probe error path and in
the remove function, so move it to a separate function to avoid code
duplication.
Signed-off-by: default avatarJean Delvare <khali@linux-fr.org>
Acked-by: default avatarGuenter Roeck <guenter.roeck@ericsson.com>
parent 008e5f33
...@@ -1045,6 +1045,29 @@ static void __devinit pc87427_init_device(struct device *dev) ...@@ -1045,6 +1045,29 @@ static void __devinit pc87427_init_device(struct device *dev)
} }
} }
static void pc87427_remove_files(struct device *dev)
{
struct pc87427_data *data = dev_get_drvdata(dev);
int i;
device_remove_file(dev, &dev_attr_name);
for (i = 0; i < 8; i++) {
if (!(data->fan_enabled & (1 << i)))
continue;
sysfs_remove_group(&dev->kobj, &pc87427_group_fan[i]);
}
for (i = 0; i < 4; i++) {
if (!(data->pwm_enabled & (1 << i)))
continue;
sysfs_remove_group(&dev->kobj, &pc87427_group_pwm[i]);
}
for (i = 0; i < 6; i++) {
if (!(data->temp_enabled & (1 << i)))
continue;
sysfs_remove_group(&dev->kobj, &pc87427_group_temp[i]);
}
}
static int __devinit pc87427_probe(struct platform_device *pdev) static int __devinit pc87427_probe(struct platform_device *pdev)
{ {
struct pc87427_sio_data *sio_data = pdev->dev.platform_data; struct pc87427_sio_data *sio_data = pdev->dev.platform_data;
...@@ -1110,21 +1133,7 @@ static int __devinit pc87427_probe(struct platform_device *pdev) ...@@ -1110,21 +1133,7 @@ static int __devinit pc87427_probe(struct platform_device *pdev)
return 0; return 0;
exit_remove_files: exit_remove_files:
for (i = 0; i < 8; i++) { pc87427_remove_files(&pdev->dev);
if (!(data->fan_enabled & (1 << i)))
continue;
sysfs_remove_group(&pdev->dev.kobj, &pc87427_group_fan[i]);
}
for (i = 0; i < 4; i++) {
if (!(data->pwm_enabled & (1 << i)))
continue;
sysfs_remove_group(&pdev->dev.kobj, &pc87427_group_pwm[i]);
}
for (i = 0; i < 6; i++) {
if (!(data->temp_enabled & (1 << i)))
continue;
sysfs_remove_group(&pdev->dev.kobj, &pc87427_group_temp[i]);
}
exit_release_region: exit_release_region:
pc87427_release_regions(pdev, res_count); pc87427_release_regions(pdev, res_count);
exit_kfree: exit_kfree:
...@@ -1137,27 +1146,12 @@ static int __devinit pc87427_probe(struct platform_device *pdev) ...@@ -1137,27 +1146,12 @@ static int __devinit pc87427_probe(struct platform_device *pdev)
static int __devexit pc87427_remove(struct platform_device *pdev) static int __devexit pc87427_remove(struct platform_device *pdev)
{ {
struct pc87427_data *data = platform_get_drvdata(pdev); struct pc87427_data *data = platform_get_drvdata(pdev);
int i, res_count; int res_count;
res_count = (data->address[0] != 0) + (data->address[1] != 0); res_count = (data->address[0] != 0) + (data->address[1] != 0);
hwmon_device_unregister(data->hwmon_dev); hwmon_device_unregister(data->hwmon_dev);
device_remove_file(&pdev->dev, &dev_attr_name); pc87427_remove_files(&pdev->dev);
for (i = 0; i < 8; i++) {
if (!(data->fan_enabled & (1 << i)))
continue;
sysfs_remove_group(&pdev->dev.kobj, &pc87427_group_fan[i]);
}
for (i = 0; i < 4; i++) {
if (!(data->pwm_enabled & (1 << i)))
continue;
sysfs_remove_group(&pdev->dev.kobj, &pc87427_group_pwm[i]);
}
for (i = 0; i < 6; i++) {
if (!(data->temp_enabled & (1 << i)))
continue;
sysfs_remove_group(&pdev->dev.kobj, &pc87427_group_temp[i]);
}
platform_set_drvdata(pdev, NULL); platform_set_drvdata(pdev, NULL);
kfree(data); kfree(data);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment