diff options
Diffstat (limited to 'drivers/hwmon')
-rw-r--r-- | drivers/hwmon/w83627hf.c | 46 |
1 files changed, 16 insertions, 30 deletions
diff --git a/drivers/hwmon/w83627hf.c b/drivers/hwmon/w83627hf.c index 5ce54a2..ab48252 100644 --- a/drivers/hwmon/w83627hf.c +++ b/drivers/hwmon/w83627hf.c @@ -1359,19 +1359,17 @@ static int __devinit w83627hf_probe(struct platform_device *pdev) }; res = platform_get_resource(pdev, IORESOURCE_IO, 0); - if (!request_region(res->start, WINB_REGION_SIZE, DRVNAME)) { + if (!devm_request_region(dev, res->start, WINB_REGION_SIZE, DRVNAME)) { dev_err(dev, "Failed to request region 0x%lx-0x%lx\n", (unsigned long)res->start, (unsigned long)(res->start + WINB_REGION_SIZE - 1)); - err = -EBUSY; - goto ERROR0; + return -EBUSY; } - data = kzalloc(sizeof(struct w83627hf_data), GFP_KERNEL); - if (!data) { - err = -ENOMEM; - goto ERROR1; - } + data = devm_kzalloc(dev, sizeof(struct w83627hf_data), GFP_KERNEL); + if (!data) + return -ENOMEM; + data->addr = res->start; data->type = sio_data->type; data->name = names[sio_data->type]; @@ -1391,7 +1389,7 @@ static int __devinit w83627hf_probe(struct platform_device *pdev) /* Register common device attributes */ err = sysfs_create_group(&dev->kobj, &w83627hf_group); if (err) - goto ERROR3; + return err; /* Register chip-specific device attributes */ if (data->type == w83627hf || data->type == w83697hf) @@ -1419,7 +1417,7 @@ static int __devinit w83627hf_probe(struct platform_device *pdev) &sensor_dev_attr_pwm1_freq.dev_attr)) || (err = device_create_file(dev, &sensor_dev_attr_pwm2_freq.dev_attr))) - goto ERROR4; + goto error; if (data->type != w83697hf) if ((err = device_create_file(dev, @@ -1454,7 +1452,7 @@ static int __devinit w83627hf_probe(struct platform_device *pdev) &sensor_dev_attr_temp3_beep.dev_attr)) || (err = device_create_file(dev, &sensor_dev_attr_temp3_type.dev_attr))) - goto ERROR4; + goto error; if (data->type != w83697hf && data->vid != 0xff) { /* Convert VID to voltage based on VRM */ @@ -1462,14 +1460,14 @@ static int __devinit w83627hf_probe(struct platform_device *pdev) if ((err = device_create_file(dev, &dev_attr_cpu0_vid)) || (err = device_create_file(dev, &dev_attr_vrm))) - goto ERROR4; + goto error; } if (data->type == w83627thf || data->type == w83637hf || data->type == w83687thf) { err = device_create_file(dev, &sensor_dev_attr_pwm3.dev_attr); if (err) - goto ERROR4; + goto error; } if (data->type == w83637hf || data->type == w83687thf) @@ -1479,57 +1477,45 @@ static int __devinit w83627hf_probe(struct platform_device *pdev) &sensor_dev_attr_pwm2_freq.dev_attr)) || (err = device_create_file(dev, &sensor_dev_attr_pwm3_freq.dev_attr))) - goto ERROR4; + goto error; if (data->type != w83627hf) if ((err = device_create_file(dev, &sensor_dev_attr_pwm1_enable.dev_attr)) || (err = device_create_file(dev, &sensor_dev_attr_pwm2_enable.dev_attr))) - goto ERROR4; + goto error; if (data->type == w83627thf || data->type == w83637hf || data->type == w83687thf) { err = device_create_file(dev, &sensor_dev_attr_pwm3_enable.dev_attr); if (err) - goto ERROR4; + goto error; } data->hwmon_dev = hwmon_device_register(dev); if (IS_ERR(data->hwmon_dev)) { err = PTR_ERR(data->hwmon_dev); - goto ERROR4; + goto error; } return 0; - ERROR4: + error: sysfs_remove_group(&dev->kobj, &w83627hf_group); sysfs_remove_group(&dev->kobj, &w83627hf_group_opt); - ERROR3: - platform_set_drvdata(pdev, NULL); - kfree(data); - ERROR1: - release_region(res->start, WINB_REGION_SIZE); - ERROR0: return err; } static int __devexit w83627hf_remove(struct platform_device *pdev) { struct w83627hf_data *data = platform_get_drvdata(pdev); - struct resource *res; hwmon_device_unregister(data->hwmon_dev); sysfs_remove_group(&pdev->dev.kobj, &w83627hf_group); sysfs_remove_group(&pdev->dev.kobj, &w83627hf_group_opt); - platform_set_drvdata(pdev, NULL); - kfree(data); - - res = platform_get_resource(pdev, IORESOURCE_IO, 0); - release_region(res->start, WINB_REGION_SIZE); return 0; } |