diff options
Diffstat (limited to 'drivers/hwmon/pc87427.c')
| -rw-r--r-- | drivers/hwmon/pc87427.c | 86 |
1 files changed, 28 insertions, 58 deletions
diff --git a/drivers/hwmon/pc87427.c b/drivers/hwmon/pc87427.c index 37059a3755e..9e4684e747e 100644 --- a/drivers/hwmon/pc87427.c +++ b/drivers/hwmon/pc87427.c @@ -1,7 +1,7 @@ /* * pc87427.c - hardware monitoring driver for the * National Semiconductor PC87427 Super-I/O chip - * Copyright (C) 2006, 2008, 2010 Jean Delvare <khali@linux-fr.org> + * Copyright (C) 2006, 2008, 2010 Jean Delvare <jdelvare@suse.de> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as @@ -627,8 +627,9 @@ static ssize_t set_pwm(struct device *dev, struct device_attribute pc87427_readall_pwm(data, nr); mode = data->pwm_enable[nr] & PWM_ENABLE_MODE_MASK; if (mode != PWM_MODE_MANUAL && mode != PWM_MODE_OFF) { - dev_notice(dev, "Can't set PWM%d duty cycle while not in " - "manual mode\n", nr + 1); + dev_notice(dev, + "Can't set PWM%d duty cycle while not in manual mode\n", + nr + 1); mutex_unlock(&data->lock); return -EPERM; } @@ -956,49 +957,33 @@ static DEVICE_ATTR(name, S_IRUGO, show_name, NULL); * Device detection, attach and detach */ -static void pc87427_release_regions(struct platform_device *pdev, int count) -{ - struct resource *res; - int i; - - for (i = 0; i < count; i++) { - res = platform_get_resource(pdev, IORESOURCE_IO, i); - release_region(res->start, resource_size(res)); - } -} - -static int __devinit pc87427_request_regions(struct platform_device *pdev, +static int pc87427_request_regions(struct platform_device *pdev, int count) { struct resource *res; - int i, err = 0; + int i; for (i = 0; i < count; i++) { res = platform_get_resource(pdev, IORESOURCE_IO, i); if (!res) { - err = -ENOENT; dev_err(&pdev->dev, "Missing resource #%d\n", i); - break; + return -ENOENT; } - if (!request_region(res->start, resource_size(res), DRVNAME)) { - err = -EBUSY; + if (!devm_request_region(&pdev->dev, res->start, + resource_size(res), DRVNAME)) { dev_err(&pdev->dev, "Failed to request region 0x%lx-0x%lx\n", (unsigned long)res->start, (unsigned long)res->end); - break; + return -EBUSY; } } - - if (err && i) - pc87427_release_regions(pdev, i); - - return err; + return 0; } -static void __devinit pc87427_init_device(struct device *dev) +static void pc87427_init_device(struct device *dev) { - struct pc87427_sio_data *sio_data = dev->platform_data; + struct pc87427_sio_data *sio_data = dev_get_platdata(dev); struct pc87427_data *data = dev_get_drvdata(dev); int i; u8 reg; @@ -1088,18 +1073,16 @@ static void pc87427_remove_files(struct device *dev) } } -static int __devinit pc87427_probe(struct platform_device *pdev) +static int pc87427_probe(struct platform_device *pdev) { - struct pc87427_sio_data *sio_data = pdev->dev.platform_data; + struct pc87427_sio_data *sio_data = dev_get_platdata(&pdev->dev); struct pc87427_data *data; int i, err, res_count; - data = kzalloc(sizeof(struct pc87427_data), GFP_KERNEL); - if (!data) { - err = -ENOMEM; - pr_err("Out of memory\n"); - goto exit; - } + data = devm_kzalloc(&pdev->dev, sizeof(struct pc87427_data), + GFP_KERNEL); + if (!data) + return -ENOMEM; data->address[0] = sio_data->address[0]; data->address[1] = sio_data->address[1]; @@ -1107,7 +1090,7 @@ static int __devinit pc87427_probe(struct platform_device *pdev) err = pc87427_request_regions(pdev, res_count); if (err) - goto exit_kfree; + return err; mutex_init(&data->lock); data->name = "pc87427"; @@ -1117,7 +1100,7 @@ static int __devinit pc87427_probe(struct platform_device *pdev) /* Register sysfs hooks */ err = device_create_file(&pdev->dev, &dev_attr_name); if (err) - goto exit_release_region; + return err; for (i = 0; i < 8; i++) { if (!(data->fan_enabled & (1 << i))) continue; @@ -1154,28 +1137,15 @@ static int __devinit pc87427_probe(struct platform_device *pdev) exit_remove_files: pc87427_remove_files(&pdev->dev); -exit_release_region: - pc87427_release_regions(pdev, res_count); -exit_kfree: - platform_set_drvdata(pdev, NULL); - kfree(data); -exit: return err; } -static int __devexit pc87427_remove(struct platform_device *pdev) +static int pc87427_remove(struct platform_device *pdev) { struct pc87427_data *data = platform_get_drvdata(pdev); - int res_count; - - res_count = (data->address[0] != 0) + (data->address[1] != 0); hwmon_device_unregister(data->hwmon_dev); pc87427_remove_files(&pdev->dev); - platform_set_drvdata(pdev, NULL); - kfree(data); - - pc87427_release_regions(pdev, res_count); return 0; } @@ -1187,7 +1157,7 @@ static struct platform_driver pc87427_driver = { .name = DRVNAME, }, .probe = pc87427_probe, - .remove = __devexit_p(pc87427_remove), + .remove = pc87427_remove, }; static int __init pc87427_device_add(const struct pc87427_sio_data *sio_data) @@ -1274,16 +1244,16 @@ static int __init pc87427_find(int sioaddr, struct pc87427_sio_data *sio_data) val = superio_inb(sioaddr, SIOREG_MAP); if (val & 0x01) { - pr_warn("Logical device 0x%02x is memory-mapped, " - "can't use\n", logdev[i]); + pr_warn("Logical device 0x%02x is memory-mapped, can't use\n", + logdev[i]); continue; } val = (superio_inb(sioaddr, SIOREG_IOBASE) << 8) | superio_inb(sioaddr, SIOREG_IOBASE + 1); if (!val) { - pr_info("I/O base address not set for logical device " - "0x%02x\n", logdev[i]); + pr_info("I/O base address not set for logical device 0x%02x\n", + logdev[i]); continue; } sio_data->address[i] = val; @@ -1375,7 +1345,7 @@ static void __exit pc87427_exit(void) platform_driver_unregister(&pc87427_driver); } -MODULE_AUTHOR("Jean Delvare <khali@linux-fr.org>"); +MODULE_AUTHOR("Jean Delvare <jdelvare@suse.de>"); MODULE_DESCRIPTION("PC87427 hardware monitoring driver"); MODULE_LICENSE("GPL"); |
