diff options
-rw-r--r-- | drivers/hwmon/f71805f.c | 16 | ||||
-rw-r--r-- | drivers/hwmon/pc87427.c | 15 | ||||
-rw-r--r-- | drivers/hwmon/vt1211.c | 13 |
3 files changed, 42 insertions, 2 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 | ||
diff --git a/drivers/hwmon/pc87427.c b/drivers/hwmon/pc87427.c index affa21a5ccfd..29354fa26f81 100644 --- a/drivers/hwmon/pc87427.c +++ b/drivers/hwmon/pc87427.c | |||
@@ -31,6 +31,7 @@ | |||
31 | #include <linux/err.h> | 31 | #include <linux/err.h> |
32 | #include <linux/mutex.h> | 32 | #include <linux/mutex.h> |
33 | #include <linux/sysfs.h> | 33 | #include <linux/sysfs.h> |
34 | #include <linux/ioport.h> | ||
34 | #include <asm/io.h> | 35 | #include <asm/io.h> |
35 | 36 | ||
36 | static struct platform_device *pdev; | 37 | static struct platform_device *pdev; |
@@ -429,6 +430,12 @@ static int __devinit pc87427_probe(struct platform_device *pdev) | |||
429 | /* This will need to be revisited when we add support for | 430 | /* This will need to be revisited when we add support for |
430 | temperature and voltage monitoring. */ | 431 | temperature and voltage monitoring. */ |
431 | res = platform_get_resource(pdev, IORESOURCE_IO, 0); | 432 | res = platform_get_resource(pdev, IORESOURCE_IO, 0); |
433 | if (!request_region(res->start, res->end - res->start + 1, DRVNAME)) { | ||
434 | err = -EBUSY; | ||
435 | dev_err(&pdev->dev, "Failed to request region 0x%lx-0x%lx\n", | ||
436 | (unsigned long)res->start, (unsigned long)res->end); | ||
437 | goto exit_kfree; | ||
438 | } | ||
432 | data->address[0] = res->start; | 439 | data->address[0] = res->start; |
433 | 440 | ||
434 | mutex_init(&data->lock); | 441 | mutex_init(&data->lock); |
@@ -438,7 +445,7 @@ static int __devinit pc87427_probe(struct platform_device *pdev) | |||
438 | 445 | ||
439 | /* Register sysfs hooks */ | 446 | /* Register sysfs hooks */ |
440 | if ((err = device_create_file(&pdev->dev, &dev_attr_name))) | 447 | if ((err = device_create_file(&pdev->dev, &dev_attr_name))) |
441 | goto exit_kfree; | 448 | goto exit_release_region; |
442 | for (i = 0; i < 8; i++) { | 449 | for (i = 0; i < 8; i++) { |
443 | if (!(data->fan_enabled & (1 << i))) | 450 | if (!(data->fan_enabled & (1 << i))) |
444 | continue; | 451 | continue; |
@@ -462,6 +469,8 @@ exit_remove_files: | |||
462 | continue; | 469 | continue; |
463 | sysfs_remove_group(&pdev->dev.kobj, &pc87427_group_fan[i]); | 470 | sysfs_remove_group(&pdev->dev.kobj, &pc87427_group_fan[i]); |
464 | } | 471 | } |
472 | exit_release_region: | ||
473 | release_region(res->start, res->end - res->start + 1); | ||
465 | exit_kfree: | 474 | exit_kfree: |
466 | platform_set_drvdata(pdev, NULL); | 475 | platform_set_drvdata(pdev, NULL); |
467 | kfree(data); | 476 | kfree(data); |
@@ -472,6 +481,7 @@ exit: | |||
472 | static int __devexit pc87427_remove(struct platform_device *pdev) | 481 | static int __devexit pc87427_remove(struct platform_device *pdev) |
473 | { | 482 | { |
474 | struct pc87427_data *data = platform_get_drvdata(pdev); | 483 | struct pc87427_data *data = platform_get_drvdata(pdev); |
484 | struct resource *res; | ||
475 | int i; | 485 | int i; |
476 | 486 | ||
477 | platform_set_drvdata(pdev, NULL); | 487 | platform_set_drvdata(pdev, NULL); |
@@ -484,6 +494,9 @@ static int __devexit pc87427_remove(struct platform_device *pdev) | |||
484 | } | 494 | } |
485 | kfree(data); | 495 | kfree(data); |
486 | 496 | ||
497 | res = platform_get_resource(pdev, IORESOURCE_IO, 0); | ||
498 | release_region(res->start, res->end - res->start + 1); | ||
499 | |||
487 | return 0; | 500 | return 0; |
488 | } | 501 | } |
489 | 502 | ||
diff --git a/drivers/hwmon/vt1211.c b/drivers/hwmon/vt1211.c index 89c23d6add7b..9f3e332c5b7f 100644 --- a/drivers/hwmon/vt1211.c +++ b/drivers/hwmon/vt1211.c | |||
@@ -31,6 +31,7 @@ | |||
31 | #include <linux/hwmon-vid.h> | 31 | #include <linux/hwmon-vid.h> |
32 | #include <linux/err.h> | 32 | #include <linux/err.h> |
33 | #include <linux/mutex.h> | 33 | #include <linux/mutex.h> |
34 | #include <linux/ioport.h> | ||
34 | #include <asm/io.h> | 35 | #include <asm/io.h> |
35 | 36 | ||
36 | static int uch_config = -1; | 37 | static int uch_config = -1; |
@@ -1130,6 +1131,12 @@ static int __devinit vt1211_probe(struct platform_device *pdev) | |||
1130 | } | 1131 | } |
1131 | 1132 | ||
1132 | res = platform_get_resource(pdev, IORESOURCE_IO, 0); | 1133 | res = platform_get_resource(pdev, IORESOURCE_IO, 0); |
1134 | if (!request_region(res->start, res->end - res->start + 1, DRVNAME)) { | ||
1135 | err = -EBUSY; | ||
1136 | dev_err(dev, "Failed to request region 0x%lx-0x%lx\n", | ||
1137 | (unsigned long)res->start, (unsigned long)res->end); | ||
1138 | goto EXIT_KFREE; | ||
1139 | } | ||
1133 | data->addr = res->start; | 1140 | data->addr = res->start; |
1134 | data->name = DRVNAME; | 1141 | data->name = DRVNAME; |
1135 | mutex_init(&data->update_lock); | 1142 | mutex_init(&data->update_lock); |
@@ -1197,6 +1204,8 @@ EXIT_DEV_REMOVE: | |||
1197 | dev_err(dev, "Sysfs interface creation failed (%d)\n", err); | 1204 | dev_err(dev, "Sysfs interface creation failed (%d)\n", err); |
1198 | EXIT_DEV_REMOVE_SILENT: | 1205 | EXIT_DEV_REMOVE_SILENT: |
1199 | vt1211_remove_sysfs(pdev); | 1206 | vt1211_remove_sysfs(pdev); |
1207 | release_region(res->start, res->end - res->start + 1); | ||
1208 | EXIT_KFREE: | ||
1200 | platform_set_drvdata(pdev, NULL); | 1209 | platform_set_drvdata(pdev, NULL); |
1201 | kfree(data); | 1210 | kfree(data); |
1202 | EXIT: | 1211 | EXIT: |
@@ -1206,12 +1215,16 @@ EXIT: | |||
1206 | static int __devexit vt1211_remove(struct platform_device *pdev) | 1215 | static int __devexit vt1211_remove(struct platform_device *pdev) |
1207 | { | 1216 | { |
1208 | struct vt1211_data *data = platform_get_drvdata(pdev); | 1217 | struct vt1211_data *data = platform_get_drvdata(pdev); |
1218 | struct resource *res; | ||
1209 | 1219 | ||
1210 | hwmon_device_unregister(data->class_dev); | 1220 | hwmon_device_unregister(data->class_dev); |
1211 | vt1211_remove_sysfs(pdev); | 1221 | vt1211_remove_sysfs(pdev); |
1212 | platform_set_drvdata(pdev, NULL); | 1222 | platform_set_drvdata(pdev, NULL); |
1213 | kfree(data); | 1223 | kfree(data); |
1214 | 1224 | ||
1225 | res = platform_get_resource(pdev, IORESOURCE_IO, 0); | ||
1226 | release_region(res->start, res->end - res->start + 1); | ||
1227 | |||
1215 | return 0; | 1228 | return 0; |
1216 | } | 1229 | } |
1217 | 1230 | ||