diff options
Diffstat (limited to 'drivers/hwmon/f71805f.c')
-rw-r--r-- | drivers/hwmon/f71805f.c | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/drivers/hwmon/f71805f.c b/drivers/hwmon/f71805f.c index 7c2973487122..cdbe309b8fc4 100644 --- a/drivers/hwmon/f71805f.c +++ b/drivers/hwmon/f71805f.c | |||
@@ -35,6 +35,7 @@ | |||
35 | #include <linux/err.h> | 35 | #include <linux/err.h> |
36 | #include <linux/mutex.h> | 36 | #include <linux/mutex.h> |
37 | #include <linux/sysfs.h> | 37 | #include <linux/sysfs.h> |
38 | #include <linux/ioport.h> | ||
38 | #include <asm/io.h> | 39 | #include <asm/io.h> |
39 | 40 | ||
40 | static struct platform_device *pdev; | 41 | static struct platform_device *pdev; |
@@ -1140,6 +1141,13 @@ static int __devinit f71805f_probe(struct platform_device *pdev) | |||
1140 | } | 1141 | } |
1141 | 1142 | ||
1142 | res = platform_get_resource(pdev, IORESOURCE_IO, 0); | 1143 | res = platform_get_resource(pdev, IORESOURCE_IO, 0); |
1144 | if (!request_region(res->start + ADDR_REG_OFFSET, 2, DRVNAME)) { | ||
1145 | err = -EBUSY; | ||
1146 | dev_err(&pdev->dev, "Failed to request region 0x%lx-0x%lx\n", | ||
1147 | (unsigned long)(res->start + ADDR_REG_OFFSET), | ||
1148 | (unsigned long)(res->start + ADDR_REG_OFFSET + 1)); | ||
1149 | goto exit_free; | ||
1150 | } | ||
1143 | data->addr = res->start; | 1151 | data->addr = res->start; |
1144 | data->name = names[sio_data->kind]; | 1152 | data->name = names[sio_data->kind]; |
1145 | mutex_init(&data->update_lock); | 1153 | mutex_init(&data->update_lock); |
@@ -1165,7 +1173,7 @@ static int __devinit f71805f_probe(struct platform_device *pdev) | |||
1165 | 1173 | ||
1166 | /* Register sysfs interface files */ | 1174 | /* Register sysfs interface files */ |
1167 | if ((err = sysfs_create_group(&pdev->dev.kobj, &f71805f_group))) | 1175 | if ((err = sysfs_create_group(&pdev->dev.kobj, &f71805f_group))) |
1168 | goto exit_free; | 1176 | goto exit_release_region; |
1169 | if (data->has_in & (1 << 4)) { /* in4 */ | 1177 | if (data->has_in & (1 << 4)) { /* in4 */ |
1170 | if ((err = sysfs_create_group(&pdev->dev.kobj, | 1178 | if ((err = sysfs_create_group(&pdev->dev.kobj, |
1171 | &f71805f_group_optin[0]))) | 1179 | &f71805f_group_optin[0]))) |
@@ -1219,6 +1227,8 @@ exit_remove_files: | |||
1219 | for (i = 0; i < 4; i++) | 1227 | for (i = 0; i < 4; i++) |
1220 | sysfs_remove_group(&pdev->dev.kobj, &f71805f_group_optin[i]); | 1228 | sysfs_remove_group(&pdev->dev.kobj, &f71805f_group_optin[i]); |
1221 | sysfs_remove_group(&pdev->dev.kobj, &f71805f_group_pwm_freq); | 1229 | sysfs_remove_group(&pdev->dev.kobj, &f71805f_group_pwm_freq); |
1230 | exit_release_region: | ||
1231 | release_region(res->start + ADDR_REG_OFFSET, 2); | ||
1222 | exit_free: | 1232 | exit_free: |
1223 | platform_set_drvdata(pdev, NULL); | 1233 | platform_set_drvdata(pdev, NULL); |
1224 | kfree(data); | 1234 | kfree(data); |
@@ -1229,6 +1239,7 @@ exit: | |||
1229 | static int __devexit f71805f_remove(struct platform_device *pdev) | 1239 | static int __devexit f71805f_remove(struct platform_device *pdev) |
1230 | { | 1240 | { |
1231 | struct f71805f_data *data = platform_get_drvdata(pdev); | 1241 | struct f71805f_data *data = platform_get_drvdata(pdev); |
1242 | struct resource *res; | ||
1232 | int i; | 1243 | int i; |
1233 | 1244 | ||
1234 | platform_set_drvdata(pdev, NULL); | 1245 | platform_set_drvdata(pdev, NULL); |
@@ -1239,6 +1250,9 @@ static int __devexit f71805f_remove(struct platform_device *pdev) | |||
1239 | sysfs_remove_group(&pdev->dev.kobj, &f71805f_group_pwm_freq); | 1250 | sysfs_remove_group(&pdev->dev.kobj, &f71805f_group_pwm_freq); |
1240 | kfree(data); | 1251 | kfree(data); |
1241 | 1252 | ||
1253 | res = platform_get_resource(pdev, IORESOURCE_IO, 0); | ||
1254 | release_region(res->start + ADDR_REG_OFFSET, 2); | ||
1255 | |||
1242 | return 0; | 1256 | return 0; |
1243 | } | 1257 | } |
1244 | 1258 | ||