diff options
Diffstat (limited to 'drivers/hwmon/ultra45_env.c')
| -rw-r--r-- | drivers/hwmon/ultra45_env.c | 69 | 
1 files changed, 35 insertions, 34 deletions
diff --git a/drivers/hwmon/ultra45_env.c b/drivers/hwmon/ultra45_env.c index d863e13a50b..7d465863606 100644 --- a/drivers/hwmon/ultra45_env.c +++ b/drivers/hwmon/ultra45_env.c @@ -1,4 +1,5 @@ -/* ultra45_env.c: Driver for Ultra45 PIC16F747 environmental monitor. +/* + * ultra45_env.c: Driver for Ultra45 PIC16F747 environmental monitor.   *   * Copyright (C) 2008 David S. Miller <davem@davemloft.net>   */ @@ -6,10 +7,12 @@  #include <linux/kernel.h>  #include <linux/types.h>  #include <linux/slab.h> +#include <linux/module.h>  #include <linux/of_device.h>  #include <linux/io.h>  #include <linux/hwmon.h>  #include <linux/hwmon-sysfs.h> +#include <linux/err.h>  #define DRV_MODULE_VERSION	"0.1" @@ -81,7 +84,8 @@ static void env_write(struct env *p, u8 ireg, u8 val)  	spin_unlock(&p->lock);  } -/* There seems to be a adr7462 providing these values, thus a lot +/* + * There seems to be a adr7462 providing these values, thus a lot   * of these calculations are borrowed from the adt7470 driver.   */  #define FAN_PERIOD_TO_RPM(x)	((90000 * 60) / (x)) @@ -89,7 +93,8 @@ static void env_write(struct env *p, u8 ireg, u8 val)  #define FAN_PERIOD_INVALID	(0xff << 8)  #define FAN_DATA_VALID(x)	((x) && (x) != FAN_PERIOD_INVALID) -static ssize_t show_fan_speed(struct device *dev, struct device_attribute *attr, char *buf) +static ssize_t show_fan_speed(struct device *dev, struct device_attribute *attr, +			      char *buf)  {  	int fan_nr = to_sensor_dev_attr(attr)->index;  	struct env *p = dev_get_drvdata(dev); @@ -110,10 +115,15 @@ static ssize_t set_fan_speed(struct device *dev, struct device_attribute *attr,  			     const char *buf, size_t count)  {  	int fan_nr = to_sensor_dev_attr(attr)->index; -	int rpm = simple_strtol(buf, NULL, 10); +	unsigned long rpm;  	struct env *p = dev_get_drvdata(dev);  	int period;  	u8 val; +	int err; + +	err = kstrtoul(buf, 10, &rpm); +	if (err) +		return err;  	if (!rpm)  		return -EINVAL; @@ -125,7 +135,8 @@ static ssize_t set_fan_speed(struct device *dev, struct device_attribute *attr,  	return count;  } -static ssize_t show_fan_fault(struct device *dev, struct device_attribute *attr, char *buf) +static ssize_t show_fan_fault(struct device *dev, struct device_attribute *attr, +			      char *buf)  {  	int fan_nr = to_sensor_dev_attr(attr)->index;  	struct env *p = dev_get_drvdata(dev); @@ -147,7 +158,8 @@ fan(4);  static SENSOR_DEVICE_ATTR(psu_fan_fault, S_IRUGO, show_fan_fault, NULL, 6); -static ssize_t show_temp(struct device *dev, struct device_attribute *attr, char *buf) +static ssize_t show_temp(struct device *dev, struct device_attribute *attr, +			 char *buf)  {  	int temp_nr = to_sensor_dev_attr(attr)->index;  	struct env *p = dev_get_drvdata(dev); @@ -167,7 +179,8 @@ static SENSOR_DEVICE_ATTR(lsi1064_local_temp, S_IRUGO, show_temp, NULL, 6);  static SENSOR_DEVICE_ATTR(front_panel_temp, S_IRUGO, show_temp, NULL, 7);  static SENSOR_DEVICE_ATTR(psu_temp, S_IRUGO, show_temp, NULL, 13); -static ssize_t show_stat_bit(struct device *dev, struct device_attribute *attr, char *buf) +static ssize_t show_stat_bit(struct device *dev, struct device_attribute *attr, +			     char *buf)  {  	int index = to_sensor_dev_attr(attr)->index;  	struct env *p = dev_get_drvdata(dev); @@ -180,9 +193,11 @@ static ssize_t show_stat_bit(struct device *dev, struct device_attribute *attr,  static SENSOR_DEVICE_ATTR(fan_failure, S_IRUGO, show_stat_bit, NULL, 0);  static SENSOR_DEVICE_ATTR(env_bus_busy, S_IRUGO, show_stat_bit, NULL, 1);  static SENSOR_DEVICE_ATTR(env_data_stale, S_IRUGO, show_stat_bit, NULL, 2); -static SENSOR_DEVICE_ATTR(tpm_self_test_passed, S_IRUGO, show_stat_bit, NULL, 3); +static SENSOR_DEVICE_ATTR(tpm_self_test_passed, S_IRUGO, show_stat_bit, NULL, +			  3); -static ssize_t show_fwver(struct device *dev, struct device_attribute *attr, char *buf) +static ssize_t show_fwver(struct device *dev, struct device_attribute *attr, +			  char *buf)  {  	struct env *p = dev_get_drvdata(dev);  	u8 val; @@ -193,7 +208,8 @@ static ssize_t show_fwver(struct device *dev, struct device_attribute *attr, cha  static SENSOR_DEVICE_ATTR(firmware_version, S_IRUGO, show_fwver, NULL, 0); -static ssize_t show_name(struct device *dev, struct device_attribute *attr, char *buf) +static ssize_t show_name(struct device *dev, struct device_attribute *attr, +			 char *buf)  {  	return sprintf(buf, "ultra45\n");  } @@ -234,10 +250,9 @@ static const struct attribute_group env_group = {  	.attrs = env_attributes,  }; -static int __devinit env_probe(struct platform_device *op, -			       const struct of_device_id *match) +static int env_probe(struct platform_device *op)  { -	struct env *p = kzalloc(sizeof(*p), GFP_KERNEL); +	struct env *p = devm_kzalloc(&op->dev, sizeof(*p), GFP_KERNEL);  	int err = -ENOMEM;  	if (!p) @@ -247,7 +262,7 @@ static int __devinit env_probe(struct platform_device *op,  	p->regs = of_ioremap(&op->resource[0], 0, REG_SIZE, "pic16f747");  	if (!p->regs) -		goto out_free; +		goto out;  	err = sysfs_create_group(&op->dev.kobj, &env_group);  	if (err) @@ -259,7 +274,7 @@ static int __devinit env_probe(struct platform_device *op,  		goto out_sysfs_remove_group;  	} -	dev_set_drvdata(&op->dev, p); +	platform_set_drvdata(op, p);  	err = 0;  out: @@ -271,20 +286,17 @@ out_sysfs_remove_group:  out_iounmap:  	of_iounmap(&op->resource[0], p->regs, REG_SIZE); -out_free: -	kfree(p);  	goto out;  } -static int __devexit env_remove(struct platform_device *op) +static int env_remove(struct platform_device *op)  { -	struct env *p = dev_get_drvdata(&op->dev); +	struct env *p = platform_get_drvdata(op);  	if (p) {  		sysfs_remove_group(&op->dev.kobj, &env_group);  		hwmon_device_unregister(p->hwmon_dev);  		of_iounmap(&op->resource[0], p->regs, REG_SIZE); -		kfree(p);  	}  	return 0; @@ -299,25 +311,14 @@ static const struct of_device_id env_match[] = {  };  MODULE_DEVICE_TABLE(of, env_match); -static struct of_platform_driver env_driver = { +static struct platform_driver env_driver = {  	.driver = {  		.name = "ultra45_env",  		.owner = THIS_MODULE,  		.of_match_table = env_match,  	},  	.probe		= env_probe, -	.remove		= __devexit_p(env_remove), +	.remove		= env_remove,  }; -static int __init env_init(void) -{ -	return of_register_platform_driver(&env_driver); -} - -static void __exit env_exit(void) -{ -	of_unregister_platform_driver(&env_driver); -} - -module_init(env_init); -module_exit(env_exit); +module_platform_driver(env_driver);  | 
