aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/hwmon
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/hwmon')
-rw-r--r--drivers/hwmon/smsc47b397.c22
1 files changed, 6 insertions, 16 deletions
diff --git a/drivers/hwmon/smsc47b397.c b/drivers/hwmon/smsc47b397.c
index c5f6be478bad..65b07de11a0f 100644
--- a/drivers/hwmon/smsc47b397.c
+++ b/drivers/hwmon/smsc47b397.c
@@ -231,13 +231,9 @@ static const struct attribute_group smsc47b397_group = {
231static int __devexit smsc47b397_remove(struct platform_device *pdev) 231static int __devexit smsc47b397_remove(struct platform_device *pdev)
232{ 232{
233 struct smsc47b397_data *data = platform_get_drvdata(pdev); 233 struct smsc47b397_data *data = platform_get_drvdata(pdev);
234 struct resource *res;
235 234
236 hwmon_device_unregister(data->hwmon_dev); 235 hwmon_device_unregister(data->hwmon_dev);
237 sysfs_remove_group(&pdev->dev.kobj, &smsc47b397_group); 236 sysfs_remove_group(&pdev->dev.kobj, &smsc47b397_group);
238 res = platform_get_resource(pdev, IORESOURCE_IO, 0);
239 release_region(res->start, SMSC_EXTENT);
240 kfree(data);
241 237
242 return 0; 238 return 0;
243} 239}
@@ -261,19 +257,17 @@ static int __devinit smsc47b397_probe(struct platform_device *pdev)
261 int err = 0; 257 int err = 0;
262 258
263 res = platform_get_resource(pdev, IORESOURCE_IO, 0); 259 res = platform_get_resource(pdev, IORESOURCE_IO, 0);
264 if (!request_region(res->start, SMSC_EXTENT, 260 if (!devm_request_region(dev, res->start, SMSC_EXTENT,
265 smsc47b397_driver.driver.name)) { 261 smsc47b397_driver.driver.name)) {
266 dev_err(dev, "Region 0x%lx-0x%lx already in use!\n", 262 dev_err(dev, "Region 0x%lx-0x%lx already in use!\n",
267 (unsigned long)res->start, 263 (unsigned long)res->start,
268 (unsigned long)res->start + SMSC_EXTENT - 1); 264 (unsigned long)res->start + SMSC_EXTENT - 1);
269 return -EBUSY; 265 return -EBUSY;
270 } 266 }
271 267
272 data = kzalloc(sizeof(struct smsc47b397_data), GFP_KERNEL); 268 data = devm_kzalloc(dev, sizeof(struct smsc47b397_data), GFP_KERNEL);
273 if (!data) { 269 if (!data)
274 err = -ENOMEM; 270 return -ENOMEM;
275 goto error_release;
276 }
277 271
278 data->addr = res->start; 272 data->addr = res->start;
279 data->name = "smsc47b397"; 273 data->name = "smsc47b397";
@@ -283,7 +277,7 @@ static int __devinit smsc47b397_probe(struct platform_device *pdev)
283 277
284 err = sysfs_create_group(&dev->kobj, &smsc47b397_group); 278 err = sysfs_create_group(&dev->kobj, &smsc47b397_group);
285 if (err) 279 if (err)
286 goto error_free; 280 return err;
287 281
288 data->hwmon_dev = hwmon_device_register(dev); 282 data->hwmon_dev = hwmon_device_register(dev);
289 if (IS_ERR(data->hwmon_dev)) { 283 if (IS_ERR(data->hwmon_dev)) {
@@ -295,10 +289,6 @@ static int __devinit smsc47b397_probe(struct platform_device *pdev)
295 289
296error_remove: 290error_remove:
297 sysfs_remove_group(&dev->kobj, &smsc47b397_group); 291 sysfs_remove_group(&dev->kobj, &smsc47b397_group);
298error_free:
299 kfree(data);
300error_release:
301 release_region(res->start, SMSC_EXTENT);
302 return err; 292 return err;
303} 293}
304 294