diff options
Diffstat (limited to 'drivers/hwmon/w83781d.c')
| -rw-r--r-- | drivers/hwmon/w83781d.c | 625 | 
1 files changed, 345 insertions, 280 deletions
diff --git a/drivers/hwmon/w83781d.c b/drivers/hwmon/w83781d.c index c84b9b4e696..84911616d8c 100644 --- a/drivers/hwmon/w83781d.c +++ b/drivers/hwmon/w83781d.c @@ -1,37 +1,39 @@  /* -    w83781d.c - Part of lm_sensors, Linux kernel modules for hardware -                monitoring -    Copyright (c) 1998 - 2001  Frodo Looijaard <frodol@dds.nl>, -                               Philip Edelbrock <phil@netroedge.com>, -                               and Mark Studebaker <mdsxyz123@yahoo.com> -    Copyright (c) 2007 - 2008  Jean Delvare <khali@linux-fr.org> - -    This program is free software; you can redistribute it and/or modify -    it under the terms of the GNU General Public License as published by -    the Free Software Foundation; either version 2 of the License, or -    (at your option) any later version. - -    This program is distributed in the hope that it will be useful, -    but WITHOUT ANY WARRANTY; without even the implied warranty of -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the -    GNU General Public License for more details. - -    You should have received a copy of the GNU General Public License -    along with this program; if not, write to the Free Software -    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -*/ + * w83781d.c - Part of lm_sensors, Linux kernel modules for hardware + *	       monitoring + * Copyright (c) 1998 - 2001  Frodo Looijaard <frodol@dds.nl>, + *			      Philip Edelbrock <phil@netroedge.com>, + *			      and Mark Studebaker <mdsxyz123@yahoo.com> + * Copyright (c) 2007 - 2008  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 as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */  /* -    Supports following chips: - -    Chip	#vin	#fanin	#pwm	#temp	wchipid	vendid	i2c	ISA -    as99127f	7	3	0	3	0x31	0x12c3	yes	no -    as99127f rev.2 (type_name = as99127f)	0x31	0x5ca3	yes	no -    w83781d	7	3	0	3	0x10-1	0x5ca3	yes	yes -    w83782d	9	3	2-4	3	0x30	0x5ca3	yes	yes -    w83783s	5-6	3	2	1-2	0x40	0x5ca3	yes	no + * Supports following chips: + * + * Chip		#vin	#fanin	#pwm	#temp	wchipid	vendid	i2c	ISA + * as99127f	7	3	0	3	0x31	0x12c3	yes	no + * as99127f rev.2 (type_name = as99127f)	0x31	0x5ca3	yes	no + * w83781d	7	3	0	3	0x10-1	0x5ca3	yes	yes + * w83782d	9	3	2-4	3	0x30	0x5ca3	yes	yes + * w83783s	5-6	3	2	1-2	0x40	0x5ca3	yes	no + * + */ -*/ +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt  #include <linux/module.h>  #include <linux/init.h> @@ -62,14 +64,14 @@ enum chips { w83781d, w83782d, w83783s, as99127f };  /* Insmod parameters */  static unsigned short force_subclients[4];  module_param_array(force_subclients, short, NULL, 0); -MODULE_PARM_DESC(force_subclients, "List of subclient addresses: " -		    "{bus, clientaddr, subclientaddr1, subclientaddr2}"); +MODULE_PARM_DESC(force_subclients, +		 "List of subclient addresses: {bus, clientaddr, subclientaddr1, subclientaddr2}"); -static int reset; +static bool reset;  module_param(reset, bool, 0);  MODULE_PARM_DESC(reset, "Set to one to reset chip on load"); -static int init = 1; +static bool init = 1;  module_param(init, bool, 0);  MODULE_PARM_DESC(init, "Set to zero to bypass chip initialization"); @@ -143,8 +145,10 @@ static const u8 W83781D_REG_PWM[] = { 0x5B, 0x5A, 0x5E, 0x5F };  #define W83781D_REG_I2C_ADDR		0x48  #define W83781D_REG_I2C_SUBADDR		0x4A -/* The following are undocumented in the data sheets however we -   received the information in an email from Winbond tech support */ +/* + * The following are undocumented in the data sheets however we + * received the information in an email from Winbond tech support + */  /* Sensor selection - not on 781d */  #define W83781D_REG_SCFG1		0x5D  static const u8 BIT_SCFG1[] = { 0x02, 0x04, 0x08 }; @@ -155,7 +159,7 @@ static const u8 BIT_SCFG2[] = { 0x10, 0x20, 0x40 };  #define W83781D_DEFAULT_BETA		3435  /* Conversions */ -#define IN_TO_REG(val)			SENSORS_LIMIT(((val) + 8) / 16, 0, 255) +#define IN_TO_REG(val)			clamp_val(((val) + 8) / 16, 0, 255)  #define IN_FROM_REG(val)		((val) * 16)  static inline u8 @@ -163,8 +167,8 @@ FAN_TO_REG(long rpm, int div)  {  	if (rpm == 0)  		return 255; -	rpm = SENSORS_LIMIT(rpm, 1, 1000000); -	return SENSORS_LIMIT((1350000 + rpm * div / 2) / (rpm * div), 1, 254); +	rpm = clamp_val(rpm, 1, 1000000); +	return clamp_val((1350000 + rpm * div / 2) / (rpm * div), 1, 254);  }  static inline long @@ -177,12 +181,12 @@ FAN_FROM_REG(u8 val, int div)  	return 1350000 / (val * div);  } -#define TEMP_TO_REG(val)		SENSORS_LIMIT((val) / 1000, -127, 128) +#define TEMP_TO_REG(val)		clamp_val((val) / 1000, -127, 128)  #define TEMP_FROM_REG(val)		((val) * 1000) -#define BEEP_MASK_FROM_REG(val,type)	((type) == as99127f ? \ +#define BEEP_MASK_FROM_REG(val, type)	((type) == as99127f ? \  					 (~(val)) & 0x7fff : (val) & 0xff7fff) -#define BEEP_MASK_TO_REG(val,type)	((type) == as99127f ? \ +#define BEEP_MASK_TO_REG(val, type)	((type) == as99127f ? \  					 (~(val)) & 0x7fff : (val) & 0xff7fff)  #define DIV_FROM_REG(val)		(1 << (val)) @@ -191,9 +195,8 @@ static inline u8  DIV_TO_REG(long val, enum chips type)  {  	int i; -	val = SENSORS_LIMIT(val, 1, -			    ((type == w83781d -			      || type == as99127f) ? 8 : 128)) >> 1; +	val = clamp_val(val, 1, +			((type == w83781d || type == as99127f) ? 8 : 128)) >> 1;  	for (i = 0; i < 7; i++) {  		if (val == 0)  			break; @@ -236,9 +239,11 @@ struct w83781d_data {  	u32 beep_mask;		/* Register encoding, combined */  	u8 pwm[4];		/* Register value */  	u8 pwm2_enable;		/* Boolean */ -	u16 sens[3];		/* 782D/783S only. -				   1 = pentium diode; 2 = 3904 diode; -				   4 = thermistor */ +	u16 sens[3];		/* +				 * 782D/783S only. +				 * 1 = pentium diode; 2 = 3904 diode; +				 * 4 = thermistor +				 */  	u8 vrm;  }; @@ -252,7 +257,7 @@ static void w83781d_init_device(struct device *dev);  /* following are the sysfs callback functions */  #define show_in_reg(reg) \ -static ssize_t show_##reg (struct device *dev, struct device_attribute *da, \ +static ssize_t show_##reg(struct device *dev, struct device_attribute *da, \  		char *buf) \  { \  	struct sensor_device_attribute *attr = to_sensor_dev_attr(da); \ @@ -265,20 +270,21 @@ show_in_reg(in_min);  show_in_reg(in_max);  #define store_in_reg(REG, reg) \ -static ssize_t store_in_##reg (struct device *dev, struct device_attribute \ +static ssize_t store_in_##reg(struct device *dev, struct device_attribute \  		*da, const char *buf, size_t count) \  { \  	struct sensor_device_attribute *attr = to_sensor_dev_attr(da); \  	struct w83781d_data *data = dev_get_drvdata(dev); \  	int nr = attr->index; \ -	u32 val; \ -	 \ -	val = simple_strtoul(buf, NULL, 10); \ -	 \ +	unsigned long val; \ +	int err = kstrtoul(buf, 10, &val); \ +	if (err) \ +		return err; \  	mutex_lock(&data->update_lock); \  	data->in_##reg[nr] = IN_TO_REG(val); \ -	w83781d_write_value(data, W83781D_REG_IN_##REG(nr), data->in_##reg[nr]); \ -	 \ +	w83781d_write_value(data, W83781D_REG_IN_##REG(nr), \ +			    data->in_##reg[nr]); \ +	\  	mutex_unlock(&data->update_lock); \  	return count; \  } @@ -304,12 +310,12 @@ sysfs_in_offsets(7);  sysfs_in_offsets(8);  #define show_fan_reg(reg) \ -static ssize_t show_##reg (struct device *dev, struct device_attribute *da, \ +static ssize_t show_##reg(struct device *dev, struct device_attribute *da, \  		char *buf) \  { \  	struct sensor_device_attribute *attr = to_sensor_dev_attr(da); \  	struct w83781d_data *data = w83781d_update_device(dev); \ -	return sprintf(buf,"%ld\n", \ +	return sprintf(buf, "%ld\n", \  		FAN_FROM_REG(data->reg[attr->index], \  			DIV_FROM_REG(data->fan_div[attr->index]))); \  } @@ -323,9 +329,12 @@ store_fan_min(struct device *dev, struct device_attribute *da,  	struct sensor_device_attribute *attr = to_sensor_dev_attr(da);  	struct w83781d_data *data = dev_get_drvdata(dev);  	int nr = attr->index; -	u32 val; +	unsigned long val; +	int err; -	val = simple_strtoul(buf, NULL, 10); +	err = kstrtoul(buf, 10, &val); +	if (err) +		return err;  	mutex_lock(&data->update_lock);  	data->fan_min[nr] = @@ -348,17 +357,17 @@ static SENSOR_DEVICE_ATTR(fan3_min, S_IRUGO | S_IWUSR,  		show_fan_min, store_fan_min, 2);  #define show_temp_reg(reg) \ -static ssize_t show_##reg (struct device *dev, struct device_attribute *da, \ +static ssize_t show_##reg(struct device *dev, struct device_attribute *da, \  		char *buf) \  { \  	struct sensor_device_attribute *attr = to_sensor_dev_attr(da); \  	struct w83781d_data *data = w83781d_update_device(dev); \  	int nr = attr->index; \  	if (nr >= 2) {	/* TEMP2 and TEMP3 */ \ -		return sprintf(buf,"%d\n", \ +		return sprintf(buf, "%d\n", \  			LM75_TEMP_FROM_REG(data->reg##_add[nr-2])); \  	} else {	/* TEMP1 */ \ -		return sprintf(buf,"%ld\n", (long)TEMP_FROM_REG(data->reg)); \ +		return sprintf(buf, "%ld\n", (long)TEMP_FROM_REG(data->reg)); \  	} \  }  show_temp_reg(temp); @@ -366,16 +375,16 @@ show_temp_reg(temp_max);  show_temp_reg(temp_max_hyst);  #define store_temp_reg(REG, reg) \ -static ssize_t store_temp_##reg (struct device *dev, \ +static ssize_t store_temp_##reg(struct device *dev, \  		struct device_attribute *da, const char *buf, size_t count) \  { \  	struct sensor_device_attribute *attr = to_sensor_dev_attr(da); \  	struct w83781d_data *data = dev_get_drvdata(dev); \  	int nr = attr->index; \  	long val; \ -	 \ -	val = simple_strtol(buf, NULL, 10); \ -	 \ +	int err = kstrtol(buf, 10, &val); \ +	if (err) \ +		return err; \  	mutex_lock(&data->update_lock); \  	 \  	if (nr >= 2) {	/* TEMP2 and TEMP3 */ \ @@ -423,13 +432,17 @@ show_vrm_reg(struct device *dev, struct device_attribute *attr, char *buf)  }  static ssize_t -store_vrm_reg(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) +store_vrm_reg(struct device *dev, struct device_attribute *attr, +	      const char *buf, size_t count)  {  	struct w83781d_data *data = dev_get_drvdata(dev); -	u32 val; +	unsigned long val; +	int err; -	val = simple_strtoul(buf, NULL, 10); -	data->vrm = val; +	err = kstrtoul(buf, 10, &val); +	if (err) +		return err; +	data->vrm = clamp_val(val, 0, 255);  	return count;  } @@ -478,7 +491,8 @@ static SENSOR_DEVICE_ATTR(temp1_alarm, S_IRUGO, show_alarm, NULL, 4);  static SENSOR_DEVICE_ATTR(temp2_alarm, S_IRUGO, show_alarm, NULL, 5);  static SENSOR_DEVICE_ATTR(temp3_alarm, S_IRUGO, show_temp3_alarm, NULL, 0); -static ssize_t show_beep_mask (struct device *dev, struct device_attribute *attr, char *buf) +static ssize_t show_beep_mask(struct device *dev, +			       struct device_attribute *attr, char *buf)  {  	struct w83781d_data *data = w83781d_update_device(dev);  	return sprintf(buf, "%ld\n", @@ -490,9 +504,12 @@ store_beep_mask(struct device *dev, struct device_attribute *attr,  		const char *buf, size_t count)  {  	struct w83781d_data *data = dev_get_drvdata(dev); -	u32 val; +	unsigned long val; +	int err; -	val = simple_strtoul(buf, NULL, 10); +	err = kstrtoul(buf, 10, &val); +	if (err) +		return err;  	mutex_lock(&data->update_lock);  	data->beep_mask &= 0x8000; /* preserve beep enable */ @@ -527,10 +544,14 @@ store_beep(struct device *dev, struct device_attribute *attr,  {  	struct w83781d_data *data = dev_get_drvdata(dev);  	int bitnr = to_sensor_dev_attr(attr)->index; -	unsigned long bit;  	u8 reg; +	unsigned long bit; +	int err; + +	err = kstrtoul(buf, 10, &bit); +	if (err) +		return err; -	bit = simple_strtoul(buf, NULL, 10);  	if (bit & ~1)  		return -EINVAL; @@ -618,10 +639,12 @@ show_fan_div(struct device *dev, struct device_attribute *da, char *buf)  		       (long) DIV_FROM_REG(data->fan_div[attr->index]));  } -/* Note: we save and restore the fan minimum here, because its value is -   determined in part by the fan divisor.  This follows the principle of -   least surprise; the user doesn't expect the fan minimum to change just -   because the divisor changed. */ +/* + * Note: we save and restore the fan minimum here, because its value is + * determined in part by the fan divisor.  This follows the principle of + * least surprise; the user doesn't expect the fan minimum to change just + * because the divisor changed. + */  static ssize_t  store_fan_div(struct device *dev, struct device_attribute *da,  		const char *buf, size_t count) @@ -631,7 +654,12 @@ store_fan_div(struct device *dev, struct device_attribute *da,  	unsigned long min;  	int nr = attr->index;  	u8 reg; -	unsigned long val = simple_strtoul(buf, NULL, 10); +	unsigned long val; +	int err; + +	err = kstrtoul(buf, 10, &val); +	if (err) +		return err;  	mutex_lock(&data->update_lock); @@ -641,10 +669,12 @@ store_fan_div(struct device *dev, struct device_attribute *da,  	data->fan_div[nr] = DIV_TO_REG(val, data->type); -	reg = (w83781d_read_value(data, nr==2 ? W83781D_REG_PIN : W83781D_REG_VID_FANDIV) -	       & (nr==0 ? 0xcf : 0x3f)) -	    | ((data->fan_div[nr] & 0x03) << (nr==0 ? 4 : 6)); -	w83781d_write_value(data, nr==2 ? W83781D_REG_PIN : W83781D_REG_VID_FANDIV, reg); +	reg = (w83781d_read_value(data, nr == 2 ? +				  W83781D_REG_PIN : W83781D_REG_VID_FANDIV) +		& (nr == 0 ? 0xcf : 0x3f)) +	      | ((data->fan_div[nr] & 0x03) << (nr == 0 ? 4 : 6)); +	w83781d_write_value(data, nr == 2 ? +			    W83781D_REG_PIN : W83781D_REG_VID_FANDIV, reg);  	/* w83781d and as99127f don't have extended divisor bits */  	if (data->type != w83781d && data->type != as99127f) { @@ -691,12 +721,15 @@ store_pwm(struct device *dev, struct device_attribute *da, const char *buf,  	struct sensor_device_attribute *attr = to_sensor_dev_attr(da);  	struct w83781d_data *data = dev_get_drvdata(dev);  	int nr = attr->index; -	u32 val; +	unsigned long val; +	int err; -	val = simple_strtoul(buf, NULL, 10); +	err = kstrtoul(buf, 10, &val); +	if (err) +		return err;  	mutex_lock(&data->update_lock); -	data->pwm[nr] = SENSORS_LIMIT(val, 0, 255); +	data->pwm[nr] = clamp_val(val, 0, 255);  	w83781d_write_value(data, W83781D_REG_PWM[nr], data->pwm[nr]);  	mutex_unlock(&data->update_lock);  	return count; @@ -707,9 +740,13 @@ store_pwm2_enable(struct device *dev, struct device_attribute *da,  		const char *buf, size_t count)  {  	struct w83781d_data *data = dev_get_drvdata(dev); -	u32 val, reg; +	unsigned long val; +	u32 reg; +	int err; -	val = simple_strtoul(buf, NULL, 10); +	err = kstrtoul(buf, 10, &val); +	if (err) +		return err;  	mutex_lock(&data->update_lock); @@ -759,9 +796,13 @@ store_sensor(struct device *dev, struct device_attribute *da,  	struct sensor_device_attribute *attr = to_sensor_dev_attr(da);  	struct w83781d_data *data = dev_get_drvdata(dev);  	int nr = attr->index; -	u32 val, tmp; +	unsigned long val; +	u32 tmp; +	int err; -	val = simple_strtoul(buf, NULL, 10); +	err = kstrtoul(buf, 10, &val); +	if (err) +		return err;  	mutex_lock(&data->update_lock); @@ -785,8 +826,9 @@ store_sensor(struct device *dev, struct device_attribute *da,  		data->sens[nr] = val;  		break;  	case W83781D_DEFAULT_BETA: -		dev_warn(dev, "Sensor type %d is deprecated, please use 4 " -			 "instead\n", W83781D_DEFAULT_BETA); +		dev_warn(dev, +			 "Sensor type %d is deprecated, please use 4 instead\n", +			 W83781D_DEFAULT_BETA);  		/* fall through */  	case 4:		/* thermistor */  		tmp = w83781d_read_value(data, W83781D_REG_SCFG1); @@ -811,7 +853,8 @@ static SENSOR_DEVICE_ATTR(temp2_type, S_IRUGO | S_IWUSR,  static SENSOR_DEVICE_ATTR(temp3_type, S_IRUGO | S_IWUSR,  	show_sensor, store_sensor, 2); -/* Assumes that adapter is of I2C, not ISA variety. +/* + * Assumes that adapter is of I2C, not ISA variety.   * OTHERWISE DON'T CALL THIS   */  static int @@ -824,6 +867,7 @@ w83781d_detect_subclients(struct i2c_client *new_client)  	struct i2c_adapter *adapter = new_client->adapter;  	struct w83781d_data *data = i2c_get_clientdata(new_client);  	enum chips kind = data->type; +	int num_sc = 1;  	id = i2c_adapter_id(adapter); @@ -831,8 +875,8 @@ w83781d_detect_subclients(struct i2c_client *new_client)  		for (i = 2; i <= 3; i++) {  			if (force_subclients[i] < 0x48 ||  			    force_subclients[i] > 0x4f) { -				dev_err(&new_client->dev, "Invalid subclient " -					"address %d; must be 0x48-0x4f\n", +				dev_err(&new_client->dev, +					"Invalid subclient address %d; must be 0x48-0x4f\n",  					force_subclients[i]);  				err = -EINVAL;  				goto ERROR_SC_1; @@ -848,6 +892,7 @@ w83781d_detect_subclients(struct i2c_client *new_client)  	}  	if (kind != w83783s) { +		num_sc = 2;  		if (force_subclients[0] == id &&  		    force_subclients[1] == address) {  			sc_addr[1] = force_subclients[3]; @@ -863,19 +908,17 @@ w83781d_detect_subclients(struct i2c_client *new_client)  		}  	} -	for (i = 0; i <= 1; i++) { +	for (i = 0; i < num_sc; i++) {  		data->lm75[i] = i2c_new_dummy(adapter, sc_addr[i]);  		if (!data->lm75[i]) { -			dev_err(&new_client->dev, "Subclient %d " -				"registration at address 0x%x " -				"failed.\n", i, sc_addr[i]); +			dev_err(&new_client->dev, +				"Subclient %d registration at address 0x%x failed.\n", +				i, sc_addr[i]);  			err = -ENOMEM;  			if (i == 1)  				goto ERROR_SC_3;  			goto ERROR_SC_2;  		} -		if (kind == w83783s) -			break;  	}  	return 0; @@ -909,7 +952,7 @@ ERROR_SC_1:  	&sensor_dev_attr_temp##X##_alarm.dev_attr.attr,		\  	&sensor_dev_attr_temp##X##_beep.dev_attr.attr -static struct attribute* w83781d_attributes[] = { +static struct attribute *w83781d_attributes[] = {  	IN_UNIT_ATTRS(0),  	IN_UNIT_ATTRS(2),  	IN_UNIT_ATTRS(3), @@ -932,23 +975,58 @@ static const struct attribute_group w83781d_group = {  	.attrs = w83781d_attributes,  }; -static struct attribute *w83781d_attributes_opt[] = { +static struct attribute *w83781d_attributes_in1[] = {  	IN_UNIT_ATTRS(1), +	NULL +}; +static const struct attribute_group w83781d_group_in1 = { +	.attrs = w83781d_attributes_in1, +}; + +static struct attribute *w83781d_attributes_in78[] = {  	IN_UNIT_ATTRS(7),  	IN_UNIT_ATTRS(8), +	NULL +}; +static const struct attribute_group w83781d_group_in78 = { +	.attrs = w83781d_attributes_in78, +}; + +static struct attribute *w83781d_attributes_temp3[] = {  	TEMP_UNIT_ATTRS(3), +	NULL +}; +static const struct attribute_group w83781d_group_temp3 = { +	.attrs = w83781d_attributes_temp3, +}; + +static struct attribute *w83781d_attributes_pwm12[] = {  	&sensor_dev_attr_pwm1.dev_attr.attr,  	&sensor_dev_attr_pwm2.dev_attr.attr, +	&dev_attr_pwm2_enable.attr, +	NULL +}; +static const struct attribute_group w83781d_group_pwm12 = { +	.attrs = w83781d_attributes_pwm12, +}; + +static struct attribute *w83781d_attributes_pwm34[] = {  	&sensor_dev_attr_pwm3.dev_attr.attr,  	&sensor_dev_attr_pwm4.dev_attr.attr, -	&dev_attr_pwm2_enable.attr, +	NULL +}; +static const struct attribute_group w83781d_group_pwm34 = { +	.attrs = w83781d_attributes_pwm34, +}; + +static struct attribute *w83781d_attributes_other[] = {  	&sensor_dev_attr_temp1_type.dev_attr.attr,  	&sensor_dev_attr_temp2_type.dev_attr.attr,  	&sensor_dev_attr_temp3_type.dev_attr.attr,  	NULL  }; -static const struct attribute_group w83781d_group_opt = { -	.attrs = w83781d_attributes_opt, +static const struct attribute_group w83781d_group_other = { +	.attrs = w83781d_attributes_other,  };  /* No clean up is done on error, it's up to the caller */ @@ -957,56 +1035,23 @@ w83781d_create_files(struct device *dev, int kind, int is_isa)  {  	int err; -	if ((err = sysfs_create_group(&dev->kobj, &w83781d_group))) +	err = sysfs_create_group(&dev->kobj, &w83781d_group); +	if (err)  		return err;  	if (kind != w83783s) { -		if ((err = device_create_file(dev, -				&sensor_dev_attr_in1_input.dev_attr)) -		    || (err = device_create_file(dev, -				&sensor_dev_attr_in1_min.dev_attr)) -		    || (err = device_create_file(dev, -				&sensor_dev_attr_in1_max.dev_attr)) -		    || (err = device_create_file(dev, -				&sensor_dev_attr_in1_alarm.dev_attr)) -		    || (err = device_create_file(dev, -				&sensor_dev_attr_in1_beep.dev_attr))) +		err = sysfs_create_group(&dev->kobj, &w83781d_group_in1); +		if (err)  			return err;  	}  	if (kind != as99127f && kind != w83781d && kind != w83783s) { -		if ((err = device_create_file(dev, -				&sensor_dev_attr_in7_input.dev_attr)) -		    || (err = device_create_file(dev, -				&sensor_dev_attr_in7_min.dev_attr)) -		    || (err = device_create_file(dev, -				&sensor_dev_attr_in7_max.dev_attr)) -		    || (err = device_create_file(dev, -				&sensor_dev_attr_in7_alarm.dev_attr)) -		    || (err = device_create_file(dev, -				&sensor_dev_attr_in7_beep.dev_attr)) -		    || (err = device_create_file(dev, -				&sensor_dev_attr_in8_input.dev_attr)) -		    || (err = device_create_file(dev, -				&sensor_dev_attr_in8_min.dev_attr)) -		    || (err = device_create_file(dev, -				&sensor_dev_attr_in8_max.dev_attr)) -		    || (err = device_create_file(dev, -				&sensor_dev_attr_in8_alarm.dev_attr)) -		    || (err = device_create_file(dev, -				&sensor_dev_attr_in8_beep.dev_attr))) +		err = sysfs_create_group(&dev->kobj, &w83781d_group_in78); +		if (err)  			return err;  	}  	if (kind != w83783s) { -		if ((err = device_create_file(dev, -				&sensor_dev_attr_temp3_input.dev_attr)) -		    || (err = device_create_file(dev, -				&sensor_dev_attr_temp3_max.dev_attr)) -		    || (err = device_create_file(dev, -				&sensor_dev_attr_temp3_max_hyst.dev_attr)) -		    || (err = device_create_file(dev, -				&sensor_dev_attr_temp3_alarm.dev_attr)) -		    || (err = device_create_file(dev, -				&sensor_dev_attr_temp3_beep.dev_attr))) +		err = sysfs_create_group(&dev->kobj, &w83781d_group_temp3); +		if (err)  			return err;  		if (kind != w83781d) { @@ -1019,30 +1064,29 @@ w83781d_create_files(struct device *dev, int kind, int is_isa)  	}  	if (kind != w83781d && kind != as99127f) { -		if ((err = device_create_file(dev, -				&sensor_dev_attr_pwm1.dev_attr)) -		    || (err = device_create_file(dev, -				&sensor_dev_attr_pwm2.dev_attr)) -		    || (err = device_create_file(dev, &dev_attr_pwm2_enable))) +		err = sysfs_create_group(&dev->kobj, &w83781d_group_pwm12); +		if (err)  			return err;  	}  	if (kind == w83782d && !is_isa) { -		if ((err = device_create_file(dev, -				&sensor_dev_attr_pwm3.dev_attr)) -		    || (err = device_create_file(dev, -				&sensor_dev_attr_pwm4.dev_attr))) +		err = sysfs_create_group(&dev->kobj, &w83781d_group_pwm34); +		if (err)  			return err;  	}  	if (kind != as99127f && kind != w83781d) { -		if ((err = device_create_file(dev, -				&sensor_dev_attr_temp1_type.dev_attr)) -		    || (err = device_create_file(dev, -				&sensor_dev_attr_temp2_type.dev_attr))) +		err = device_create_file(dev, +					 &sensor_dev_attr_temp1_type.dev_attr); +		if (err) +			return err; +		err = device_create_file(dev, +					 &sensor_dev_attr_temp2_type.dev_attr); +		if (err)  			return err;  		if (kind != w83783s) { -			if ((err = device_create_file(dev, -					&sensor_dev_attr_temp3_type.dev_attr))) +			err = device_create_file(dev, +					&sensor_dev_attr_temp3_type.dev_attr); +			if (err)  				return err;  		}  	} @@ -1064,9 +1108,11 @@ w83781d_detect(struct i2c_client *client, struct i2c_board_info *info)  	if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA))  		return -ENODEV; -	/* We block updates of the ISA device to minimize the risk of -	   concurrent access to the same W83781D chip through different -	   interfaces. */ +	/* +	 * We block updates of the ISA device to minimize the risk of +	 * concurrent access to the same W83781D chip through different +	 * interfaces. +	 */  	if (isa)  		mutex_lock(&isa->update_lock); @@ -1081,15 +1127,17 @@ w83781d_detect(struct i2c_client *client, struct i2c_board_info *info)  	/* Check for Winbond or Asus ID if in bank 0 */  	if (!(val1 & 0x07) &&  	    ((!(val1 & 0x80) && val2 != 0xa3 && val2 != 0xc3) || -	     ( (val1 & 0x80) && val2 != 0x5c && val2 != 0x12))) { +	     ((val1 & 0x80) && val2 != 0x5c && val2 != 0x12))) {  		dev_dbg(&adapter->dev,  			"Detection of w83781d chip failed at step 4\n");  		goto err_nodev;  	} -	/* If Winbond SMBus, check address at 0x48. -	   Asus doesn't support, except for as99127f rev.2 */ +	/* +	 * If Winbond SMBus, check address at 0x48. +	 * Asus doesn't support, except for as99127f rev.2 +	 */  	if ((!(val1 & 0x80) && val2 == 0xa3) || -	    ( (val1 & 0x80) && val2 == 0x5c)) { +	    ((val1 & 0x80) && val2 == 0x5c)) {  		if (i2c_smbus_read_byte_data(client, W83781D_REG_I2C_ADDR)  		    != address) {  			dev_dbg(&adapter->dev, @@ -1129,8 +1177,9 @@ w83781d_detect(struct i2c_client *client, struct i2c_board_info *info)  		goto err_nodev;  	if (val1 <= 0x30 && w83781d_alias_detect(client, val1)) { -		dev_dbg(&adapter->dev, "Device at 0x%02x appears to " -			"be the same as ISA device\n", address); +		dev_dbg(&adapter->dev, +			"Device at 0x%02x appears to be the same as ISA device\n", +			address);  		goto err_nodev;  	} @@ -1147,6 +1196,17 @@ w83781d_detect(struct i2c_client *client, struct i2c_board_info *info)  	return -ENODEV;  } +static void w83781d_remove_files(struct device *dev) +{ +	sysfs_remove_group(&dev->kobj, &w83781d_group); +	sysfs_remove_group(&dev->kobj, &w83781d_group_in1); +	sysfs_remove_group(&dev->kobj, &w83781d_group_in78); +	sysfs_remove_group(&dev->kobj, &w83781d_group_temp3); +	sysfs_remove_group(&dev->kobj, &w83781d_group_pwm12); +	sysfs_remove_group(&dev->kobj, &w83781d_group_pwm34); +	sysfs_remove_group(&dev->kobj, &w83781d_group_other); +} +  static int  w83781d_probe(struct i2c_client *client, const struct i2c_device_id *id)  { @@ -1154,11 +1214,9 @@ w83781d_probe(struct i2c_client *client, const struct i2c_device_id *id)  	struct w83781d_data *data;  	int err; -	data = kzalloc(sizeof(struct w83781d_data), GFP_KERNEL); -	if (!data) { -		err = -ENOMEM; -		goto ERROR1; -	} +	data = devm_kzalloc(dev, sizeof(struct w83781d_data), GFP_KERNEL); +	if (!data) +		return -ENOMEM;  	i2c_set_clientdata(client, data);  	mutex_init(&data->lock); @@ -1170,7 +1228,7 @@ w83781d_probe(struct i2c_client *client, const struct i2c_device_id *id)  	/* attach secondary i2c lm75-like clients */  	err = w83781d_detect_subclients(client);  	if (err) -		goto ERROR3; +		return err;  	/* Initialize the chip */  	w83781d_init_device(dev); @@ -1178,27 +1236,22 @@ w83781d_probe(struct i2c_client *client, const struct i2c_device_id *id)  	/* Register sysfs hooks */  	err = w83781d_create_files(dev, data->type, 0);  	if (err) -		goto ERROR4; +		goto exit_remove_files;  	data->hwmon_dev = hwmon_device_register(dev);  	if (IS_ERR(data->hwmon_dev)) {  		err = PTR_ERR(data->hwmon_dev); -		goto ERROR4; +		goto exit_remove_files;  	}  	return 0; -ERROR4: -	sysfs_remove_group(&dev->kobj, &w83781d_group); -	sysfs_remove_group(&dev->kobj, &w83781d_group_opt); - + exit_remove_files: +	w83781d_remove_files(dev);  	if (data->lm75[0])  		i2c_unregister_device(data->lm75[0]);  	if (data->lm75[1])  		i2c_unregister_device(data->lm75[1]); -ERROR3: -	kfree(data); -ERROR1:  	return err;  } @@ -1209,17 +1262,13 @@ w83781d_remove(struct i2c_client *client)  	struct device *dev = &client->dev;  	hwmon_device_unregister(data->hwmon_dev); - -	sysfs_remove_group(&dev->kobj, &w83781d_group); -	sysfs_remove_group(&dev->kobj, &w83781d_group_opt); +	w83781d_remove_files(dev);  	if (data->lm75[0])  		i2c_unregister_device(data->lm75[0]);  	if (data->lm75[1])  		i2c_unregister_device(data->lm75[1]); -	kfree(data); -  	return 0;  } @@ -1243,17 +1292,17 @@ w83781d_read_value_i2c(struct w83781d_data *data, u16 reg)  		/* convert from ISA to LM75 I2C addresses */  		switch (reg & 0xff) {  		case 0x50:	/* TEMP */ -			res = swab16(i2c_smbus_read_word_data(cl, 0)); +			res = i2c_smbus_read_word_swapped(cl, 0);  			break;  		case 0x52:	/* CONFIG */  			res = i2c_smbus_read_byte_data(cl, 1);  			break;  		case 0x53:	/* HYST */ -			res = swab16(i2c_smbus_read_word_data(cl, 2)); +			res = i2c_smbus_read_word_swapped(cl, 2);  			break;  		case 0x55:	/* OVER */  		default: -			res = swab16(i2c_smbus_read_word_data(cl, 3)); +			res = i2c_smbus_read_word_swapped(cl, 3);  			break;  		}  	} @@ -1287,10 +1336,10 @@ w83781d_write_value_i2c(struct w83781d_data *data, u16 reg, u16 value)  			i2c_smbus_write_byte_data(cl, 1, value & 0xff);  			break;  		case 0x53:	/* HYST */ -			i2c_smbus_write_word_data(cl, 2, swab16(value)); +			i2c_smbus_write_word_swapped(cl, 2, value);  			break;  		case 0x55:	/* OVER */ -			i2c_smbus_write_word_data(cl, 3, swab16(value)); +			i2c_smbus_write_word_swapped(cl, 3, value);  			break;  		}  	} @@ -1308,35 +1357,47 @@ w83781d_init_device(struct device *dev)  	int type = data->type;  	u8 tmp; -	if (reset && type != as99127f) { /* this resets registers we don't have -					   documentation for on the as99127f */ -		/* Resetting the chip has been the default for a long time, -		   but it causes the BIOS initializations (fan clock dividers, -		   thermal sensor types...) to be lost, so it is now optional. -		   It might even go away if nobody reports it as being useful, -		   as I see very little reason why this would be needed at -		   all. */ -		dev_info(dev, "If reset=1 solved a problem you were " -			 "having, please report!\n"); +	if (reset && type != as99127f) { /* +					  * this resets registers we don't have +					  * documentation for on the as99127f +					  */ +		/* +		 * Resetting the chip has been the default for a long time, +		 * but it causes the BIOS initializations (fan clock dividers, +		 * thermal sensor types...) to be lost, so it is now optional. +		 * It might even go away if nobody reports it as being useful, +		 * as I see very little reason why this would be needed at +		 * all. +		 */ +		dev_info(dev, +			 "If reset=1 solved a problem you were having, please report!\n");  		/* save these registers */  		i = w83781d_read_value(data, W83781D_REG_BEEP_CONFIG);  		p = w83781d_read_value(data, W83781D_REG_PWMCLK12); -		/* Reset all except Watchdog values and last conversion values -		   This sets fan-divs to 2, among others */ +		/* +		 * Reset all except Watchdog values and last conversion values +		 * This sets fan-divs to 2, among others +		 */  		w83781d_write_value(data, W83781D_REG_CONFIG, 0x80); -		/* Restore the registers and disable power-on abnormal beep. -		   This saves FAN 1/2/3 input/output values set by BIOS. */ +		/* +		 * Restore the registers and disable power-on abnormal beep. +		 * This saves FAN 1/2/3 input/output values set by BIOS. +		 */  		w83781d_write_value(data, W83781D_REG_BEEP_CONFIG, i | 0x80);  		w83781d_write_value(data, W83781D_REG_PWMCLK12, p); -		/* Disable master beep-enable (reset turns it on). -		   Individual beep_mask should be reset to off but for some reason -		   disabling this bit helps some people not get beeped */ +		/* +		 * Disable master beep-enable (reset turns it on). +		 * Individual beep_mask should be reset to off but for some +		 * reason disabling this bit helps some people not get beeped +		 */  		w83781d_write_value(data, W83781D_REG_BEEP_INTS2, 0);  	} -	/* Disable power-on abnormal beep, as advised by the datasheet. -	   Already done if reset=1. */ +	/* +	 * Disable power-on abnormal beep, as advised by the datasheet. +	 * Already done if reset=1. +	 */  	if (init && !reset && type != as99127f) {  		i = w83781d_read_value(data, W83781D_REG_BEEP_CONFIG);  		w83781d_write_value(data, W83781D_REG_BEEP_CONFIG, i | 0x80); @@ -1366,8 +1427,8 @@ w83781d_init_device(struct device *dev)  		/* Enable temp2 */  		tmp = w83781d_read_value(data, W83781D_REG_TEMP2_CONFIG);  		if (tmp & 0x01) { -			dev_warn(dev, "Enabling temp2, readings " -				 "might not make sense\n"); +			dev_warn(dev, +				 "Enabling temp2, readings might not make sense\n");  			w83781d_write_value(data, W83781D_REG_TEMP2_CONFIG,  				tmp & 0xfe);  		} @@ -1377,8 +1438,8 @@ w83781d_init_device(struct device *dev)  			tmp = w83781d_read_value(data,  				W83781D_REG_TEMP3_CONFIG);  			if (tmp & 0x01) { -				dev_warn(dev, "Enabling temp3, " -					 "readings might not make sense\n"); +				dev_warn(dev, +					 "Enabling temp3, readings might not make sense\n");  				w83781d_write_value(data,  					W83781D_REG_TEMP3_CONFIG, tmp & 0xfe);  			} @@ -1442,7 +1503,7 @@ static struct w83781d_data *w83781d_update_device(struct device *dev)  			}  			/* Only PWM2 can be disabled */  			data->pwm2_enable = (w83781d_read_value(data, -					      W83781D_REG_PWMCLK12) & 0x08) >> 3; +					     W83781D_REG_PWMCLK12) & 0x08) >> 3;  		}  		data->temp = w83781d_read_value(data, W83781D_REG_TEMP(1)); @@ -1493,8 +1554,10 @@ static struct w83781d_data *w83781d_update_device(struct device *dev)  				     | (w83781d_read_value(data,  						W83782D_REG_ALARM2) << 8);  		} else { -			/* No real-time status registers, fall back to -			   interrupt status registers */ +			/* +			 * No real-time status registers, fall back to +			 * interrupt status registers +			 */  			data->alarms = w83781d_read_value(data,  						W83781D_REG_ALARM1)  				     | (w83781d_read_value(data, @@ -1548,8 +1611,10 @@ static struct platform_device *pdev;  static unsigned short isa_address = 0x290; -/* I2C devices get this name attribute automatically, but for ISA devices -   we must create it by ourselves. */ +/* + * I2C devices get this name attribute automatically, but for ISA devices + * we must create it by ourselves. + */  static ssize_t  show_name(struct device *dev, struct device_attribute *devattr, char *buf)  { @@ -1579,8 +1644,10 @@ static int w83781d_alias_detect(struct i2c_client *client, u8 chipid)  	if (w83781d_read_value(isa, W83781D_REG_WCHIPID) != chipid)  		return 0;	/* Chip type doesn't match */ -	/* We compare all the limit registers, the config register and the -	 * interrupt mask registers */ +	/* +	 * We compare all the limit registers, the config register and the +	 * interrupt mask registers +	 */  	for (i = 0x2b; i <= 0x3d; i++) {  		if (w83781d_read_value(isa, i) !=  		    i2c_smbus_read_byte_data(client, i)) @@ -1661,12 +1728,14 @@ w83781d_write_value_isa(struct w83781d_data *data, u16 reg, u16 value)  	}  } -/* The SMBus locks itself, usually, but nothing may access the Winbond between -   bank switches. ISA access must always be locked explicitly! -   We ignore the W83781D BUSY flag at this moment - it could lead to deadlocks, -   would slow down the W83781D access and should not be necessary. -   There are some ugly typecasts here, but the good news is - they should -   nowhere else be necessary! */ +/* + * The SMBus locks itself, usually, but nothing may access the Winbond between + * bank switches. ISA access must always be locked explicitly! + * We ignore the W83781D BUSY flag at this moment - it could lead to deadlocks, + * would slow down the W83781D access and should not be necessary. + * There are some ugly typecasts here, but the good news is - they should + * nowhere else be necessary! + */  static int  w83781d_read_value(struct w83781d_data *data, u16 reg)  { @@ -1696,7 +1765,7 @@ w83781d_write_value(struct w83781d_data *data, u16 reg, u16 value)  	return 0;  } -static int __devinit +static int  w83781d_isa_probe(struct platform_device *pdev)  {  	int err, reg; @@ -1705,17 +1774,16 @@ w83781d_isa_probe(struct platform_device *pdev)  	/* Reserve the ISA region */  	res = platform_get_resource(pdev, IORESOURCE_IO, 0); -	if (!request_region(res->start + W83781D_ADDR_REG_OFFSET, 2, -			    "w83781d")) { -		err = -EBUSY; -		goto exit; -	} +	if (!devm_request_region(&pdev->dev, +				 res->start + W83781D_ADDR_REG_OFFSET, 2, +				 "w83781d")) +		return -EBUSY; + +	data = devm_kzalloc(&pdev->dev, sizeof(struct w83781d_data), +			    GFP_KERNEL); +	if (!data) +		return -ENOMEM; -	data = kzalloc(sizeof(struct w83781d_data), GFP_KERNEL); -	if (!data) { -		err = -ENOMEM; -		goto exit_release_region; -	}  	mutex_init(&data->lock);  	data->isa_addr = res->start;  	platform_set_drvdata(pdev, data); @@ -1752,27 +1820,19 @@ w83781d_isa_probe(struct platform_device *pdev)  	return 0;   exit_remove_files: -	sysfs_remove_group(&pdev->dev.kobj, &w83781d_group); -	sysfs_remove_group(&pdev->dev.kobj, &w83781d_group_opt); +	w83781d_remove_files(&pdev->dev);  	device_remove_file(&pdev->dev, &dev_attr_name); -	kfree(data); - exit_release_region: -	release_region(res->start + W83781D_ADDR_REG_OFFSET, 2); - exit:  	return err;  } -static int __devexit +static int  w83781d_isa_remove(struct platform_device *pdev)  {  	struct w83781d_data *data = platform_get_drvdata(pdev);  	hwmon_device_unregister(data->hwmon_dev); -	sysfs_remove_group(&pdev->dev.kobj, &w83781d_group); -	sysfs_remove_group(&pdev->dev.kobj, &w83781d_group_opt); +	w83781d_remove_files(&pdev->dev);  	device_remove_file(&pdev->dev, &dev_attr_name); -	release_region(data->isa_addr + W83781D_ADDR_REG_OFFSET, 2); -	kfree(data);  	return 0;  } @@ -1783,7 +1843,7 @@ static struct platform_driver w83781d_isa_driver = {  		.name = "w83781d",  	},  	.probe = w83781d_isa_probe, -	.remove = __devexit_p(w83781d_isa_remove), +	.remove = w83781d_isa_remove,  };  /* return 1 if a supported chip is found, 0 otherwise */ @@ -1793,41 +1853,46 @@ w83781d_isa_found(unsigned short address)  	int val, save, found = 0;  	int port; -	/* Some boards declare base+0 to base+7 as a PNP device, some base+4 +	/* +	 * Some boards declare base+0 to base+7 as a PNP device, some base+4  	 * to base+7 and some base+5 to base+6. So we better request each port -	 * individually for the probing phase. */ +	 * individually for the probing phase. +	 */  	for (port = address; port < address + W83781D_EXTENT; port++) {  		if (!request_region(port, 1, "w83781d")) { -			pr_debug("w83781d: Failed to request port 0x%x\n", -				 port); +			pr_debug("Failed to request port 0x%x\n", port);  			goto release;  		}  	}  #define REALLY_SLOW_IO -	/* We need the timeouts for at least some W83781D-like -	   chips. But only if we read 'undefined' registers. */ +	/* +	 * We need the timeouts for at least some W83781D-like +	 * chips. But only if we read 'undefined' registers. +	 */  	val = inb_p(address + 1);  	if (inb_p(address + 2) != val  	 || inb_p(address + 3) != val  	 || inb_p(address + 7) != val) { -		pr_debug("w83781d: Detection failed at step 1\n"); +		pr_debug("Detection failed at step %d\n", 1);  		goto release;  	}  #undef REALLY_SLOW_IO -	/* We should be able to change the 7 LSB of the address port. The -	   MSB (busy flag) should be clear initially, set after the write. */ +	/* +	 * We should be able to change the 7 LSB of the address port. The +	 * MSB (busy flag) should be clear initially, set after the write. +	 */  	save = inb_p(address + W83781D_ADDR_REG_OFFSET);  	if (save & 0x80) { -		pr_debug("w83781d: Detection failed at step 2\n"); +		pr_debug("Detection failed at step %d\n", 2);  		goto release;  	}  	val = ~save & 0x7f;  	outb_p(val, address + W83781D_ADDR_REG_OFFSET);  	if (inb_p(address + W83781D_ADDR_REG_OFFSET) != (val | 0x80)) {  		outb_p(save, address + W83781D_ADDR_REG_OFFSET); -		pr_debug("w83781d: Detection failed at step 3\n"); +		pr_debug("Detection failed at step %d\n", 3);  		goto release;  	} @@ -1835,7 +1900,7 @@ w83781d_isa_found(unsigned short address)  	outb_p(W83781D_REG_CONFIG, address + W83781D_ADDR_REG_OFFSET);  	val = inb_p(address + W83781D_DATA_REG_OFFSET);  	if (val & 0x80) { -		pr_debug("w83781d: Detection failed at step 4\n"); +		pr_debug("Detection failed at step %d\n", 4);  		goto release;  	}  	outb_p(W83781D_REG_BANK, address + W83781D_ADDR_REG_OFFSET); @@ -1844,19 +1909,19 @@ w83781d_isa_found(unsigned short address)  	val = inb_p(address + W83781D_DATA_REG_OFFSET);  	if ((!(save & 0x80) && (val != 0xa3))  	 || ((save & 0x80) && (val != 0x5c))) { -		pr_debug("w83781d: Detection failed at step 5\n"); +		pr_debug("Detection failed at step %d\n", 5);  		goto release;  	}  	outb_p(W83781D_REG_I2C_ADDR, address + W83781D_ADDR_REG_OFFSET);  	val = inb_p(address + W83781D_DATA_REG_OFFSET);  	if (val < 0x03 || val > 0x77) {	/* Not a valid I2C address */ -		pr_debug("w83781d: Detection failed at step 6\n"); +		pr_debug("Detection failed at step %d\n", 6);  		goto release;  	}  	/* The busy flag should be clear again */  	if (inb_p(address + W83781D_ADDR_REG_OFFSET) & 0x80) { -		pr_debug("w83781d: Detection failed at step 7\n"); +		pr_debug("Detection failed at step %d\n", 7);  		goto release;  	} @@ -1871,7 +1936,7 @@ w83781d_isa_found(unsigned short address)  		found = 1;  	if (found) -		pr_info("w83781d: Found a %s chip at %#x\n", +		pr_info("Found a %s chip at %#x\n",  			val == 0x30 ? "W83782D" : "W83781D", (int)address);   release: @@ -1894,21 +1959,19 @@ w83781d_isa_device_add(unsigned short address)  	pdev = platform_device_alloc("w83781d", address);  	if (!pdev) {  		err = -ENOMEM; -		printk(KERN_ERR "w83781d: Device allocation failed\n"); +		pr_err("Device allocation failed\n");  		goto exit;  	}  	err = platform_device_add_resources(pdev, &res, 1);  	if (err) { -		printk(KERN_ERR "w83781d: Device resource addition failed " -		       "(%d)\n", err); +		pr_err("Device resource addition failed (%d)\n", err);  		goto exit_device_put;  	}  	err = platform_device_add(pdev);  	if (err) { -		printk(KERN_ERR "w83781d: Device addition failed (%d)\n", -		       err); +		pr_err("Device addition failed (%d)\n", err);  		goto exit_device_put;  	} @@ -2005,8 +2068,10 @@ sensors_w83781d_init(void)  {  	int res; -	/* We register the ISA device first, so that we can skip the -	 * registration of an I2C interface to the same device. */ +	/* +	 * We register the ISA device first, so that we can skip the +	 * registration of an I2C interface to the same device. +	 */  	res = w83781d_isa_register();  	if (res)  		goto exit;  | 
