diff options
Diffstat (limited to 'drivers/hwmon/lm85.c')
| -rw-r--r-- | drivers/hwmon/lm85.c | 670 | 
1 files changed, 276 insertions, 394 deletions
diff --git a/drivers/hwmon/lm85.c b/drivers/hwmon/lm85.c index ee5eca1c192..12d446f54f9 100644 --- a/drivers/hwmon/lm85.c +++ b/drivers/hwmon/lm85.c @@ -1,7 +1,7 @@  /*      lm85.c - Part of lm_sensors, Linux kernel modules for hardware               monitoring -    Copyright (c) 1998, 1999  Frodo Looijaard <frodol@dds.nl>  +    Copyright (c) 1998, 1999  Frodo Looijaard <frodol@dds.nl>      Copyright (c) 2002, 2003  Philip Pokorny <ppokorny@penguincomputing.com>      Copyright (c) 2003        Margit Schubert-While <margitsw@t-online.de>      Copyright (c) 2004        Justin Thiessen <jthiessen@penguincomputing.com> @@ -51,24 +51,17 @@ I2C_CLIENT_INSMOD_6(lm85b, lm85c, adm1027, adt7463, emc6d100, emc6d102);  #define	LM85_REG_TEMP_MAX(nr)		(0x4f + (nr) * 2)  /* Fan speeds are LSB, MSB (2 bytes) */ -#define	LM85_REG_FAN(nr)		(0x28 + (nr) *2) -#define	LM85_REG_FAN_MIN(nr)		(0x54 + (nr) *2) +#define	LM85_REG_FAN(nr)		(0x28 + (nr) * 2) +#define	LM85_REG_FAN_MIN(nr)		(0x54 + (nr) * 2)  #define	LM85_REG_PWM(nr)		(0x30 + (nr)) -#define	ADT7463_REG_OPPOINT(nr)		(0x33 + (nr)) - -#define	ADT7463_REG_TMIN_CTL1		0x36 -#define	ADT7463_REG_TMIN_CTL2		0x37 - -#define	LM85_REG_DEVICE			0x3d  #define	LM85_REG_COMPANY		0x3e  #define	LM85_REG_VERSTEP		0x3f  /* These are the recognized values for the above regs */ -#define	LM85_DEVICE_ADX			0x27  #define	LM85_COMPANY_NATIONAL		0x01  #define	LM85_COMPANY_ANALOG_DEV		0x41 -#define	LM85_COMPANY_SMSC      		0x5c +#define	LM85_COMPANY_SMSC		0x5c  #define	LM85_VERSTEP_VMASK              0xf0  #define	LM85_VERSTEP_GENERIC		0x60  #define	LM85_VERSTEP_LM85C		0x60 @@ -91,58 +84,45 @@ I2C_CLIENT_INSMOD_6(lm85b, lm85c, adm1027, adt7463, emc6d100, emc6d102);  #define	LM85_REG_AFAN_CONFIG(nr)	(0x5c + (nr))  #define	LM85_REG_AFAN_RANGE(nr)		(0x5f + (nr))  #define	LM85_REG_AFAN_SPIKE1		0x62 -#define	LM85_REG_AFAN_SPIKE2		0x63  #define	LM85_REG_AFAN_MINPWM(nr)	(0x64 + (nr))  #define	LM85_REG_AFAN_LIMIT(nr)		(0x67 + (nr))  #define	LM85_REG_AFAN_CRITICAL(nr)	(0x6a + (nr))  #define	LM85_REG_AFAN_HYST1		0x6d  #define	LM85_REG_AFAN_HYST2		0x6e -#define	LM85_REG_TACH_MODE		0x74 -#define	LM85_REG_SPINUP_CTL		0x75 - -#define	ADM1027_REG_TEMP_OFFSET(nr)	(0x70 + (nr)) -#define	ADM1027_REG_CONFIG2		0x73 -#define	ADM1027_REG_INTMASK1		0x74 -#define	ADM1027_REG_INTMASK2		0x75  #define	ADM1027_REG_EXTEND_ADC1		0x76  #define	ADM1027_REG_EXTEND_ADC2		0x77 -#define	ADM1027_REG_CONFIG3		0x78 -#define	ADM1027_REG_FAN_PPR		0x7b - -#define	ADT7463_REG_THERM		0x79 -#define	ADT7463_REG_THERM_LIMIT		0x7A  #define EMC6D100_REG_ALARM3             0x7d  /* IN5, IN6 and IN7 */ -#define	EMC6D100_REG_IN(nr)             (0x70 + ((nr)-5)) -#define	EMC6D100_REG_IN_MIN(nr)         (0x73 + ((nr)-5) * 2) -#define	EMC6D100_REG_IN_MAX(nr)         (0x74 + ((nr)-5) * 2) +#define	EMC6D100_REG_IN(nr)             (0x70 + ((nr) - 5)) +#define	EMC6D100_REG_IN_MIN(nr)         (0x73 + ((nr) - 5) * 2) +#define	EMC6D100_REG_IN_MAX(nr)         (0x74 + ((nr) - 5) * 2)  #define	EMC6D102_REG_EXTEND_ADC1	0x85  #define	EMC6D102_REG_EXTEND_ADC2	0x86  #define	EMC6D102_REG_EXTEND_ADC3	0x87  #define	EMC6D102_REG_EXTEND_ADC4	0x88 -/* Conversions. Rounding and limit checking is only done on the TO_REG  +/* Conversions. Rounding and limit checking is only done on the TO_REG     variants. Note that you should be a bit careful with which arguments     these macros are called: arguments may be evaluated more than once.   */  /* IN are scaled acording to built-in resistors */ -static int lm85_scaling[] = {  /* .001 Volts */ -		2500, 2250, 3300, 5000, 12000, -		3300, 1500, 1800 /*EMC6D100*/ -	}; -#define SCALE(val,from,to)		(((val)*(to) + ((from)/2))/(from)) +static const int lm85_scaling[] = {  /* .001 Volts */ +	2500, 2250, 3300, 5000, 12000, +	3300, 1500, 1800 /*EMC6D100*/ +}; +#define SCALE(val, from, to)	(((val) * (to) + ((from) / 2)) / (from)) -#define INS_TO_REG(n,val)	\ -		SENSORS_LIMIT(SCALE(val,lm85_scaling[n],192),0,255) +#define INS_TO_REG(n, val)	\ +		SENSORS_LIMIT(SCALE(val, lm85_scaling[n], 192), 0, 255) -#define INSEXT_FROM_REG(n,val,ext)	\ +#define INSEXT_FROM_REG(n, val, ext)	\  		SCALE(((val) << 4) + (ext), 192 << 4, lm85_scaling[n]) -#define INS_FROM_REG(n,val)	SCALE((val), 192, lm85_scaling[n]) +#define INS_FROM_REG(n, val)	SCALE((val), 192, lm85_scaling[n])  /* FAN speed is measured using 90kHz clock */  static inline u16 FAN_TO_REG(unsigned long val) @@ -151,16 +131,17 @@ static inline u16 FAN_TO_REG(unsigned long val)  		return 0xffff;  	return SENSORS_LIMIT(5400000 / val, 1, 0xfffe);  } -#define FAN_FROM_REG(val)	((val)==0?-1:(val)==0xffff?0:5400000/(val)) +#define FAN_FROM_REG(val)	((val) == 0 ? -1 : (val) == 0xffff ? 0 : \ +				 5400000 / (val))  /* Temperature is reported in .001 degC increments */  #define TEMP_TO_REG(val)	\ -		SENSORS_LIMIT(SCALE(val,1000,1),-127,127) -#define TEMPEXT_FROM_REG(val,ext)	\ +		SENSORS_LIMIT(SCALE(val, 1000, 1), -127, 127) +#define TEMPEXT_FROM_REG(val, ext)	\  		SCALE(((val) << 4) + (ext), 16, 1000)  #define TEMP_FROM_REG(val)	((val) * 1000) -#define PWM_TO_REG(val)			(SENSORS_LIMIT(val,0,255)) +#define PWM_TO_REG(val)			SENSORS_LIMIT(val, 0, 255)  #define PWM_FROM_REG(val)		(val) @@ -183,17 +164,17 @@ static inline u16 FAN_TO_REG(unsigned long val)   */  /* These are the zone temperature range encodings in .001 degree C */ -static int lm85_range_map[] = {    -		2000,  2500,  3300,  4000,  5000,  6600, -		8000, 10000, 13300, 16000, 20000, 26600, -		32000, 40000, 53300, 80000 -	}; -static int RANGE_TO_REG( int range ) +static const int lm85_range_map[] = { +	2000, 2500, 3300, 4000, 5000, 6600, 8000, 10000, +	13300, 16000, 20000, 26600, 32000, 40000, 53300, 80000 +}; + +static int RANGE_TO_REG(int range)  {  	int i;  	if (range >= lm85_range_map[15]) -		return 15 ; +		return 15;  	/* Find the closest match */  	for (i = 14; i >= 0; --i) { @@ -207,28 +188,25 @@ static int RANGE_TO_REG( int range )  	return 0;  } -#define RANGE_FROM_REG(val) (lm85_range_map[(val)&0x0f]) +#define RANGE_FROM_REG(val)	lm85_range_map[(val) & 0x0f] -/* These are the Acoustic Enhancement, or Temperature smoothing encodings - * NOTE: The enable/disable bit is INCLUDED in these encodings as the - *       MSB (bit 3, value 8).  If the enable bit is 0, the encoded value - *       is ignored, or set to 0. - */  /* These are the PWM frequency encodings */ -static int lm85_freq_map[] = { /* .1 Hz */ -		100, 150, 230, 300, 380, 470, 620, 940 -	}; -static int FREQ_TO_REG( int freq ) +static const int lm85_freq_map[] = { /* .1 Hz */ +	100, 150, 230, 300, 380, 470, 620, 940 +}; + +static int FREQ_TO_REG(int freq)  {  	int i; -	if( freq >= lm85_freq_map[7] ) { return 7 ; } -	for( i = 0 ; i < 7 ; ++i ) -		if( freq <= lm85_freq_map[i] ) -			break ; -	return( i & 0x07 ); +	if (freq >= lm85_freq_map[7]) +		return 7; +	for (i = 0; i < 7; ++i) +		if (freq <= lm85_freq_map[i]) +			break; +	return i;  } -#define FREQ_FROM_REG(val) (lm85_freq_map[(val)&0x07]) +#define FREQ_FROM_REG(val)	lm85_freq_map[(val) & 0x07]  /* Since we can't use strings, I'm abusing these numbers   *   to stand in for the following meanings: @@ -242,30 +220,23 @@ static int FREQ_TO_REG( int freq )   *     -2 -- PWM responds to manual control   */ -static int lm85_zone_map[] = { 1, 2, 3, -1, 0, 23, 123, -2 }; -#define ZONE_FROM_REG(val) (lm85_zone_map[((val)>>5)&0x07]) +static const int lm85_zone_map[] = { 1, 2, 3, -1, 0, 23, 123, -2 }; +#define ZONE_FROM_REG(val)	lm85_zone_map[(val) >> 5] -static int ZONE_TO_REG( int zone ) +static int ZONE_TO_REG(int zone)  {  	int i; -	for( i = 0 ; i <= 7 ; ++i ) -		if( zone == lm85_zone_map[i] ) -			break ; -	if( i > 7 )   /* Not found. */ +	for (i = 0; i <= 7; ++i) +		if (zone == lm85_zone_map[i]) +			break; +	if (i > 7)   /* Not found. */  		i = 3;  /* Always 100% */ -	return( (i & 0x07)<<5 ); +	return i << 5;  } -#define HYST_TO_REG(val) (SENSORS_LIMIT(((val)+500)/1000,0,15)) -#define HYST_FROM_REG(val) ((val)*1000) - -#define OFFSET_TO_REG(val) (SENSORS_LIMIT((val)/25,-127,127)) -#define OFFSET_FROM_REG(val) ((val)*25) - -#define PPR_MASK(fan) (0x03<<(fan *2)) -#define PPR_TO_REG(val,fan) (SENSORS_LIMIT((val)-1,0,3)<<(fan *2)) -#define PPR_FROM_REG(val,fan) ((((val)>>(fan * 2))&0x03)+1) +#define HYST_TO_REG(val)	SENSORS_LIMIT(((val) + 500) / 1000, 0, 15) +#define HYST_FROM_REG(val)	((val) * 1000)  /* Chip sampling rates   * @@ -292,11 +263,11 @@ struct lm85_zone {  	u8 hyst;	/* Low limit hysteresis. (0-15) */  	u8 range;	/* Temp range, encoded */  	s8 critical;	/* "All fans ON" temp limit */ -	u8 off_desired; /* Actual "off" temperature specified.  Preserved  +	u8 off_desired; /* Actual "off" temperature specified.  Preserved  			 * to prevent "drift" as other autofan control  			 * values change.  			 */ -	u8 max_desired; /* Actual "max" temperature specified.  Preserved  +	u8 max_desired; /* Actual "max" temperature specified.  Preserved  			 * to prevent "drift" as other autofan control  			 * values change.  			 */ @@ -327,23 +298,13 @@ struct lm85_data {  	s8 temp[3];		/* Register value */  	s8 temp_min[3];		/* Register value */  	s8 temp_max[3];		/* Register value */ -	s8 temp_offset[3];	/* Register value */  	u16 fan[4];		/* Register value */  	u16 fan_min[4];		/* Register value */  	u8 pwm[3];		/* Register value */ -	u8 spinup_ctl;		/* Register encoding, combined */ -	u8 tach_mode;		/* Register encoding, combined */  	u8 temp_ext[3];		/* Decoded values */  	u8 in_ext[8];		/* Decoded values */ -	u8 fan_ppr;		/* Register value */ -	u8 smooth[3];		/* Register encoding */  	u8 vid;			/* Register value */  	u8 vrm;			/* VRM version */ -	u8 syncpwm3;		/* Saved PWM3 for TACH 2,3,4 config */ -	u8 oppoint[3];		/* Register value */ -	u16 tmin_ctl;		/* Register value */ -	unsigned long therm_total; /* Cummulative therm count */ -	u8 therm_limit;		/* Register value */  	u32 alarms;		/* Register encoding, combined */  	struct lm85_autofan autofan[3];  	struct lm85_zone zone[3]; @@ -355,9 +316,8 @@ static int lm85_detect(struct i2c_adapter *adapter, int address,  static int lm85_detach_client(struct i2c_client *client);  static int lm85_read_value(struct i2c_client *client, u8 reg); -static int lm85_write_value(struct i2c_client *client, u8 reg, int value); +static void lm85_write_value(struct i2c_client *client, u8 reg, int value);  static struct lm85_data *lm85_update_device(struct device *dev); -static void lm85_init_client(struct i2c_client *client);  static struct i2c_driver lm85_driver = { @@ -375,7 +335,7 @@ static ssize_t show_fan(struct device *dev, struct device_attribute *attr,  {  	int nr = to_sensor_dev_attr(attr)->index;  	struct lm85_data *data = lm85_update_device(dev); -	return sprintf(buf,"%d\n", FAN_FROM_REG(data->fan[nr]) ); +	return sprintf(buf, "%d\n", FAN_FROM_REG(data->fan[nr]));  }  static ssize_t show_fan_min(struct device *dev, struct device_attribute *attr, @@ -383,7 +343,7 @@ static ssize_t show_fan_min(struct device *dev, struct device_attribute *attr,  {  	int nr = to_sensor_dev_attr(attr)->index;  	struct lm85_data *data = lm85_update_device(dev); -	return sprintf(buf,"%d\n", FAN_FROM_REG(data->fan_min[nr]) ); +	return sprintf(buf, "%d\n", FAN_FROM_REG(data->fan_min[nr]));  }  static ssize_t set_fan_min(struct device *dev, struct device_attribute *attr, @@ -414,7 +374,8 @@ show_fan_offset(4);  /* vid, vrm, alarms */ -static ssize_t show_vid_reg(struct device *dev, struct device_attribute *attr, char *buf) +static ssize_t show_vid_reg(struct device *dev, struct device_attribute *attr, +		char *buf)  {  	struct lm85_data *data = lm85_update_device(dev);  	int vid; @@ -432,13 +393,15 @@ static ssize_t show_vid_reg(struct device *dev, struct device_attribute *attr, c  static DEVICE_ATTR(cpu0_vid, S_IRUGO, show_vid_reg, NULL); -static ssize_t show_vrm_reg(struct device *dev, struct device_attribute *attr, char *buf) +static ssize_t show_vrm_reg(struct device *dev, struct device_attribute *attr, +		char *buf)  {  	struct lm85_data *data = dev_get_drvdata(dev);  	return sprintf(buf, "%ld\n", (long) data->vrm);  } -static ssize_t store_vrm_reg(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) +static ssize_t store_vrm_reg(struct device *dev, struct device_attribute *attr, +		const char *buf, size_t count)  {  	struct lm85_data *data = dev_get_drvdata(dev);  	data->vrm = simple_strtoul(buf, NULL, 10); @@ -447,7 +410,8 @@ static ssize_t store_vrm_reg(struct device *dev, struct device_attribute *attr,  static DEVICE_ATTR(vrm, S_IRUGO | S_IWUSR, show_vrm_reg, store_vrm_reg); -static ssize_t show_alarms_reg(struct device *dev, struct device_attribute *attr, char *buf) +static ssize_t show_alarms_reg(struct device *dev, struct device_attribute +		*attr, char *buf)  {  	struct lm85_data *data = lm85_update_device(dev);  	return sprintf(buf, "%u\n", data->alarms); @@ -488,7 +452,7 @@ static ssize_t show_pwm(struct device *dev, struct device_attribute *attr,  {  	int nr = to_sensor_dev_attr(attr)->index;  	struct lm85_data *data = lm85_update_device(dev); -	return sprintf(buf,"%d\n", PWM_FROM_REG(data->pwm[nr]) ); +	return sprintf(buf, "%d\n", PWM_FROM_REG(data->pwm[nr]));  }  static ssize_t set_pwm(struct device *dev, struct device_attribute *attr, @@ -581,17 +545,16 @@ static ssize_t show_in(struct device *dev, struct device_attribute *attr,  {  	int nr = to_sensor_dev_attr(attr)->index;  	struct lm85_data *data = lm85_update_device(dev); -	return sprintf(	buf, "%d\n", INSEXT_FROM_REG(nr, -						     data->in[nr], -						     data->in_ext[nr])); +	return sprintf(buf, "%d\n", INSEXT_FROM_REG(nr, data->in[nr], +						    data->in_ext[nr]));  } -static ssize_t show_in_min(struct device *dev,  struct device_attribute *attr, +static ssize_t show_in_min(struct device *dev, struct device_attribute *attr,  		char *buf)  {  	int nr = to_sensor_dev_attr(attr)->index;  	struct lm85_data *data = lm85_update_device(dev); -	return sprintf(buf,"%d\n", INS_FROM_REG(nr, data->in_min[nr]) ); +	return sprintf(buf, "%d\n", INS_FROM_REG(nr, data->in_min[nr]));  }  static ssize_t set_in_min(struct device *dev, struct device_attribute *attr, @@ -614,7 +577,7 @@ static ssize_t show_in_max(struct device *dev, struct device_attribute *attr,  {  	int nr = to_sensor_dev_attr(attr)->index;  	struct lm85_data *data = lm85_update_device(dev); -	return sprintf(buf,"%d\n", INS_FROM_REG(nr, data->in_max[nr]) ); +	return sprintf(buf, "%d\n", INS_FROM_REG(nr, data->in_max[nr]));  }  static ssize_t set_in_max(struct device *dev, struct device_attribute *attr, @@ -656,8 +619,8 @@ static ssize_t show_temp(struct device *dev, struct device_attribute *attr,  {  	int nr = to_sensor_dev_attr(attr)->index;  	struct lm85_data *data = lm85_update_device(dev); -	return sprintf(buf,"%d\n", TEMPEXT_FROM_REG(data->temp[nr], -						    data->temp_ext[nr])); +	return sprintf(buf, "%d\n", TEMPEXT_FROM_REG(data->temp[nr], +						     data->temp_ext[nr]));  }  static ssize_t show_temp_min(struct device *dev, struct device_attribute *attr, @@ -665,7 +628,7 @@ static ssize_t show_temp_min(struct device *dev, struct device_attribute *attr,  {  	int nr = to_sensor_dev_attr(attr)->index;  	struct lm85_data *data = lm85_update_device(dev); -	return sprintf(buf,"%d\n", TEMP_FROM_REG(data->temp_min[nr]) ); +	return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_min[nr]));  }  static ssize_t set_temp_min(struct device *dev, struct device_attribute *attr, @@ -688,7 +651,7 @@ static ssize_t show_temp_max(struct device *dev, struct device_attribute *attr,  {  	int nr = to_sensor_dev_attr(attr)->index;  	struct lm85_data *data = lm85_update_device(dev); -	return sprintf(buf,"%d\n", TEMP_FROM_REG(data->temp_max[nr]) ); +	return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_max[nr]));  }  static ssize_t set_temp_max(struct device *dev, struct device_attribute *attr, @@ -697,7 +660,7 @@ static ssize_t set_temp_max(struct device *dev, struct device_attribute *attr,  	int nr = to_sensor_dev_attr(attr)->index;  	struct i2c_client *client = to_i2c_client(dev);  	struct lm85_data *data = i2c_get_clientdata(client); -	long val = simple_strtol(buf, NULL, 10);	 +	long val = simple_strtol(buf, NULL, 10);  	mutex_lock(&data->update_lock);  	data->temp_max[nr] = TEMP_TO_REG(val); @@ -726,7 +689,7 @@ static ssize_t show_pwm_auto_channels(struct device *dev,  {  	int nr = to_sensor_dev_attr(attr)->index;  	struct lm85_data *data = lm85_update_device(dev); -	return sprintf(buf,"%d\n", ZONE_FROM_REG(data->autofan[nr].config)); +	return sprintf(buf, "%d\n", ZONE_FROM_REG(data->autofan[nr].config));  }  static ssize_t set_pwm_auto_channels(struct device *dev, @@ -735,11 +698,11 @@ static ssize_t set_pwm_auto_channels(struct device *dev,  	int nr = to_sensor_dev_attr(attr)->index;  	struct i2c_client *client = to_i2c_client(dev);  	struct lm85_data *data = i2c_get_clientdata(client); -	long val = simple_strtol(buf, NULL, 10);    +	long val = simple_strtol(buf, NULL, 10);  	mutex_lock(&data->update_lock);  	data->autofan[nr].config = (data->autofan[nr].config & (~0xe0)) -		| ZONE_TO_REG(val) ; +		| ZONE_TO_REG(val);  	lm85_write_value(client, LM85_REG_AFAN_CONFIG(nr),  		data->autofan[nr].config);  	mutex_unlock(&data->update_lock); @@ -751,7 +714,7 @@ static ssize_t show_pwm_auto_pwm_min(struct device *dev,  {  	int nr = to_sensor_dev_attr(attr)->index;  	struct lm85_data *data = lm85_update_device(dev); -	return sprintf(buf,"%d\n", PWM_FROM_REG(data->autofan[nr].min_pwm)); +	return sprintf(buf, "%d\n", PWM_FROM_REG(data->autofan[nr].min_pwm));  }  static ssize_t set_pwm_auto_pwm_min(struct device *dev, @@ -775,7 +738,7 @@ static ssize_t show_pwm_auto_pwm_minctl(struct device *dev,  {  	int nr = to_sensor_dev_attr(attr)->index;  	struct lm85_data *data = lm85_update_device(dev); -	return sprintf(buf,"%d\n", data->autofan[nr].min_off); +	return sprintf(buf, "%d\n", data->autofan[nr].min_off);  }  static ssize_t set_pwm_auto_pwm_minctl(struct device *dev, @@ -785,15 +748,15 @@ static ssize_t set_pwm_auto_pwm_minctl(struct device *dev,  	struct i2c_client *client = to_i2c_client(dev);  	struct lm85_data *data = i2c_get_clientdata(client);  	long val = simple_strtol(buf, NULL, 10); +	u8 tmp;  	mutex_lock(&data->update_lock);  	data->autofan[nr].min_off = val; -	lm85_write_value(client, LM85_REG_AFAN_SPIKE1, data->smooth[0] -		| data->syncpwm3 -		| (data->autofan[0].min_off ? 0x20 : 0) -		| (data->autofan[1].min_off ? 0x40 : 0) -		| (data->autofan[2].min_off ? 0x80 : 0) -	); +	tmp = lm85_read_value(client, LM85_REG_AFAN_SPIKE1); +	tmp &= ~(0x20 << nr); +	if (data->autofan[nr].min_off) +		tmp |= 0x20 << nr; +	lm85_write_value(client, LM85_REG_AFAN_SPIKE1, tmp);  	mutex_unlock(&data->update_lock);  	return count;  } @@ -803,7 +766,7 @@ static ssize_t show_pwm_auto_pwm_freq(struct device *dev,  {  	int nr = to_sensor_dev_attr(attr)->index;  	struct lm85_data *data = lm85_update_device(dev); -	return sprintf(buf,"%d\n", FREQ_FROM_REG(data->autofan[nr].freq)); +	return sprintf(buf, "%d\n", FREQ_FROM_REG(data->autofan[nr].freq));  }  static ssize_t set_pwm_auto_pwm_freq(struct device *dev, @@ -818,8 +781,7 @@ static ssize_t set_pwm_auto_pwm_freq(struct device *dev,  	data->autofan[nr].freq = FREQ_TO_REG(val);  	lm85_write_value(client, LM85_REG_AFAN_RANGE(nr),  		(data->zone[nr].range << 4) -		| data->autofan[nr].freq -	);  +		| data->autofan[nr].freq);  	mutex_unlock(&data->update_lock);  	return count;  } @@ -849,7 +811,7 @@ static ssize_t show_temp_auto_temp_off(struct device *dev,  {  	int nr = to_sensor_dev_attr(attr)->index;  	struct lm85_data *data = lm85_update_device(dev); -	return sprintf(buf,"%d\n", TEMP_FROM_REG(data->zone[nr].limit) - +	return sprintf(buf, "%d\n", TEMP_FROM_REG(data->zone[nr].limit) -  		HYST_FROM_REG(data->zone[nr].hyst));  } @@ -866,15 +828,13 @@ static ssize_t set_temp_auto_temp_off(struct device *dev,  	min = TEMP_FROM_REG(data->zone[nr].limit);  	data->zone[nr].off_desired = TEMP_TO_REG(val);  	data->zone[nr].hyst = HYST_TO_REG(min - val); -	if ( nr == 0 || nr == 1 ) { +	if (nr == 0 || nr == 1) {  		lm85_write_value(client, LM85_REG_AFAN_HYST1,  			(data->zone[0].hyst << 4) -			| data->zone[1].hyst -			); +			| data->zone[1].hyst);  	} else {  		lm85_write_value(client, LM85_REG_AFAN_HYST2, -			(data->zone[2].hyst << 4) -		); +			(data->zone[2].hyst << 4));  	}  	mutex_unlock(&data->update_lock);  	return count; @@ -885,7 +845,7 @@ static ssize_t show_temp_auto_temp_min(struct device *dev,  {  	int nr = to_sensor_dev_attr(attr)->index;  	struct lm85_data *data = lm85_update_device(dev); -	return sprintf(buf,"%d\n", TEMP_FROM_REG(data->zone[nr].limit) ); +	return sprintf(buf, "%d\n", TEMP_FROM_REG(data->zone[nr].limit));  }  static ssize_t set_temp_auto_temp_min(struct device *dev, @@ -913,15 +873,13 @@ static ssize_t set_temp_auto_temp_min(struct device *dev,  	data->zone[nr].hyst = HYST_TO_REG(TEMP_FROM_REG(  		data->zone[nr].limit) - TEMP_FROM_REG(  		data->zone[nr].off_desired)); -	if ( nr == 0 || nr == 1 ) { +	if (nr == 0 || nr == 1) {  		lm85_write_value(client, LM85_REG_AFAN_HYST1,  			(data->zone[0].hyst << 4) -			| data->zone[1].hyst -			); +			| data->zone[1].hyst);  	} else {  		lm85_write_value(client, LM85_REG_AFAN_HYST2, -			(data->zone[2].hyst << 4) -		); +			(data->zone[2].hyst << 4));  	}  	mutex_unlock(&data->update_lock);  	return count; @@ -932,7 +890,7 @@ static ssize_t show_temp_auto_temp_max(struct device *dev,  {  	int nr = to_sensor_dev_attr(attr)->index;  	struct lm85_data *data = lm85_update_device(dev); -	return sprintf(buf,"%d\n", TEMP_FROM_REG(data->zone[nr].limit) + +	return sprintf(buf, "%d\n", TEMP_FROM_REG(data->zone[nr].limit) +  		RANGE_FROM_REG(data->zone[nr].range));  } @@ -962,11 +920,11 @@ static ssize_t show_temp_auto_temp_crit(struct device *dev,  {  	int nr = to_sensor_dev_attr(attr)->index;  	struct lm85_data *data = lm85_update_device(dev); -	return sprintf(buf,"%d\n", TEMP_FROM_REG(data->zone[nr].critical)); +	return sprintf(buf, "%d\n", TEMP_FROM_REG(data->zone[nr].critical));  }  static ssize_t set_temp_auto_temp_crit(struct device *dev, -		struct device_attribute *attr,const char *buf, size_t count) +		struct device_attribute *attr, const char *buf, size_t count)  {  	int nr = to_sensor_dev_attr(attr)->index;  	struct i2c_client *client = to_i2c_client(dev); @@ -1127,20 +1085,37 @@ static const struct attribute_group lm85_group_in567 = {  	.attrs = lm85_attributes_in567,  }; +static void lm85_init_client(struct i2c_client *client) +{ +	int value; + +	/* Start monitoring if needed */ +	value = lm85_read_value(client, LM85_REG_CONFIG); +	if (!(value & 0x01)) { +		dev_info(&client->dev, "Starting monitoring\n"); +		lm85_write_value(client, LM85_REG_CONFIG, value | 0x01); +	} + +	/* Warn about unusual configuration bits */ +	if (value & 0x02) +		dev_warn(&client->dev, "Device configuration is locked\n"); +	if (!(value & 0x04)) +		dev_warn(&client->dev, "Device is not ready\n"); +} +  static int lm85_detect(struct i2c_adapter *adapter, int address,  		int kind)  { -	int company, verstep ; -	struct i2c_client *new_client = NULL; +	int company, verstep; +	struct i2c_client *client;  	struct lm85_data *data;  	int err = 0; -	const char *type_name = ""; +	const char *type_name; -	if (!i2c_check_functionality(adapter, -					I2C_FUNC_SMBUS_BYTE_DATA)) { +	if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA)) {  		/* We need to be able to do byte I/O */ -		goto ERROR0 ; -	}; +		goto ERROR0; +	}  	/* OK. For now, we presume we have a valid client. We now create the  	   client structure, even though we cannot fill it completely yet. @@ -1151,138 +1126,145 @@ static int lm85_detect(struct i2c_adapter *adapter, int address,  		goto ERROR0;  	} -	new_client = &data->client; -	i2c_set_clientdata(new_client, data); -	new_client->addr = address; -	new_client->adapter = adapter; -	new_client->driver = &lm85_driver; -	new_client->flags = 0; +	client = &data->client; +	i2c_set_clientdata(client, data); +	client->addr = address; +	client->adapter = adapter; +	client->driver = &lm85_driver;  	/* Now, we do the remaining detection. */ -	company = lm85_read_value(new_client, LM85_REG_COMPANY); -	verstep = lm85_read_value(new_client, LM85_REG_VERSTEP); +	company = lm85_read_value(client, LM85_REG_COMPANY); +	verstep = lm85_read_value(client, LM85_REG_VERSTEP);  	dev_dbg(&adapter->dev, "Detecting device at %d,0x%02x with"  		" COMPANY: 0x%02x and VERSTEP: 0x%02x\n", -		i2c_adapter_id(new_client->adapter), new_client->addr, +		i2c_adapter_id(client->adapter), client->addr,  		company, verstep);  	/* If auto-detecting, Determine the chip type. */  	if (kind <= 0) {  		dev_dbg(&adapter->dev, "Autodetecting device at %d,0x%02x ...\n", -			i2c_adapter_id(adapter), address ); -		if( company == LM85_COMPANY_NATIONAL -		    && verstep == LM85_VERSTEP_LM85C ) { -			kind = lm85c ; -		} else if( company == LM85_COMPANY_NATIONAL -		    && verstep == LM85_VERSTEP_LM85B ) { -			kind = lm85b ; -		} else if( company == LM85_COMPANY_NATIONAL -		    && (verstep & LM85_VERSTEP_VMASK) == LM85_VERSTEP_GENERIC ) { +			i2c_adapter_id(adapter), address); +		if (company == LM85_COMPANY_NATIONAL +		    && verstep == LM85_VERSTEP_LM85C) { +			kind = lm85c; +		} else if (company == LM85_COMPANY_NATIONAL +		    && verstep == LM85_VERSTEP_LM85B) { +			kind = lm85b; +		} else if (company == LM85_COMPANY_NATIONAL +		    && (verstep & LM85_VERSTEP_VMASK) == LM85_VERSTEP_GENERIC) {  			dev_err(&adapter->dev, "Unrecognized version/stepping 0x%02x"  				" Defaulting to LM85.\n", verstep); -			kind = any_chip ; -		} else if( company == LM85_COMPANY_ANALOG_DEV -		    && verstep == LM85_VERSTEP_ADM1027 ) { -			kind = adm1027 ; -		} else if( company == LM85_COMPANY_ANALOG_DEV +			kind = any_chip; +		} else if (company == LM85_COMPANY_ANALOG_DEV +		    && verstep == LM85_VERSTEP_ADM1027) { +			kind = adm1027; +		} else if (company == LM85_COMPANY_ANALOG_DEV  		    && (verstep == LM85_VERSTEP_ADT7463 -			 || verstep == LM85_VERSTEP_ADT7463C) ) { -			kind = adt7463 ; -		} else if( company == LM85_COMPANY_ANALOG_DEV -		    && (verstep & LM85_VERSTEP_VMASK) == LM85_VERSTEP_GENERIC ) { +			 || verstep == LM85_VERSTEP_ADT7463C)) { +			kind = adt7463; +		} else if (company == LM85_COMPANY_ANALOG_DEV +		    && (verstep & LM85_VERSTEP_VMASK) == LM85_VERSTEP_GENERIC) {  			dev_err(&adapter->dev, "Unrecognized version/stepping 0x%02x" -				" Defaulting to Generic LM85.\n", verstep ); -			kind = any_chip ; -		} else if( company == LM85_COMPANY_SMSC +				" Defaulting to Generic LM85.\n", verstep); +			kind = any_chip; +		} else if (company == LM85_COMPANY_SMSC  		    && (verstep == LM85_VERSTEP_EMC6D100_A0 -			 || verstep == LM85_VERSTEP_EMC6D100_A1) ) { +			 || verstep == LM85_VERSTEP_EMC6D100_A1)) {  			/* Unfortunately, we can't tell a '100 from a '101  			 * from the registers.  Since a '101 is a '100  			 * in a package with fewer pins and therefore no  			 * 3.3V, 1.5V or 1.8V inputs, perhaps if those  			 * inputs read 0, then it's a '101.  			 */ -			kind = emc6d100 ; -		} else if( company == LM85_COMPANY_SMSC +			kind = emc6d100; +		} else if (company == LM85_COMPANY_SMSC  		    && verstep == LM85_VERSTEP_EMC6D102) { -			kind = emc6d102 ; -		} else if( company == LM85_COMPANY_SMSC +			kind = emc6d102; +		} else if (company == LM85_COMPANY_SMSC  		    && (verstep & LM85_VERSTEP_VMASK) == LM85_VERSTEP_GENERIC) {  			dev_err(&adapter->dev, "lm85: Detected SMSC chip\n");  			dev_err(&adapter->dev, "lm85: Unrecognized version/stepping 0x%02x" -			    " Defaulting to Generic LM85.\n", verstep ); -			kind = any_chip ; -		} else if( kind == any_chip +			    " Defaulting to Generic LM85.\n", verstep); +			kind = any_chip; +		} else if (kind == any_chip  		    && (verstep & LM85_VERSTEP_VMASK) == LM85_VERSTEP_GENERIC) {  			dev_err(&adapter->dev, "Generic LM85 Version 6 detected\n");  			/* Leave kind as "any_chip" */  		} else {  			dev_dbg(&adapter->dev, "Autodetection failed\n"); -			/* Not an LM85 ... */ -			if( kind == any_chip ) {  /* User used force=x,y */ +			/* Not an LM85... */ +			if (kind == any_chip) {  /* User used force=x,y */  				dev_err(&adapter->dev, "Generic LM85 Version 6 not"  					" found at %d,0x%02x. Try force_lm85c.\n", -					i2c_adapter_id(adapter), address ); +					i2c_adapter_id(adapter), address);  			} -			err = 0 ; +			err = 0;  			goto ERROR1;  		}  	}  	/* Fill in the chip specific driver values */ -	if ( kind == any_chip ) { -		type_name = "lm85"; -	} else if ( kind == lm85b ) { +	switch (kind) { +	case lm85b:  		type_name = "lm85b"; -	} else if ( kind == lm85c ) { +		break; +	case lm85c:  		type_name = "lm85c"; -	} else if ( kind == adm1027 ) { +		break; +	case adm1027:  		type_name = "adm1027"; -	} else if ( kind == adt7463 ) { +		break; +	case adt7463:  		type_name = "adt7463"; -	} else if ( kind == emc6d100){ +		break; +	case emc6d100:  		type_name = "emc6d100"; -	} else if ( kind == emc6d102 ) { +		break; +	case emc6d102:  		type_name = "emc6d102"; +		break; +	default: +		type_name = "lm85";  	} -	strlcpy(new_client->name, type_name, I2C_NAME_SIZE); +	strlcpy(client->name, type_name, I2C_NAME_SIZE);  	/* Fill in the remaining client fields */  	data->type = kind; -	data->valid = 0;  	mutex_init(&data->update_lock);  	/* Tell the I2C layer a new client has arrived */ -	if ((err = i2c_attach_client(new_client))) +	err = i2c_attach_client(client); +	if (err)  		goto ERROR1;  	/* Set the VRM version */  	data->vrm = vid_which_vrm();  	/* Initialize the LM85 chip */ -	lm85_init_client(new_client); +	lm85_init_client(client);  	/* Register sysfs hooks */ -	if ((err = sysfs_create_group(&new_client->dev.kobj, &lm85_group))) +	err = sysfs_create_group(&client->dev.kobj, &lm85_group); +	if (err)  		goto ERROR2;  	/* The ADT7463 has an optional VRM 10 mode where pin 21 is used  	   as a sixth digital VID input rather than an analog input. */ -	data->vid = lm85_read_value(new_client, LM85_REG_VID); +	data->vid = lm85_read_value(client, LM85_REG_VID);  	if (!(kind == adt7463 && (data->vid & 0x80))) -		if ((err = sysfs_create_group(&new_client->dev.kobj, +		if ((err = sysfs_create_group(&client->dev.kobj,  					&lm85_group_in4)))  			goto ERROR3;  	/* The EMC6D100 has 3 additional voltage inputs */  	if (kind == emc6d100) -		if ((err = sysfs_create_group(&new_client->dev.kobj, +		if ((err = sysfs_create_group(&client->dev.kobj,  					&lm85_group_in567)))  			goto ERROR3; -	data->hwmon_dev = hwmon_device_register(&new_client->dev); +	data->hwmon_dev = hwmon_device_register(&client->dev);  	if (IS_ERR(data->hwmon_dev)) {  		err = PTR_ERR(data->hwmon_dev);  		goto ERROR3; @@ -1291,16 +1273,16 @@ static int lm85_detect(struct i2c_adapter *adapter, int address,  	return 0;  	/* Error out and cleanup code */ -    ERROR3: -	sysfs_remove_group(&new_client->dev.kobj, &lm85_group); -	sysfs_remove_group(&new_client->dev.kobj, &lm85_group_in4); + ERROR3: +	sysfs_remove_group(&client->dev.kobj, &lm85_group); +	sysfs_remove_group(&client->dev.kobj, &lm85_group_in4);  	if (kind == emc6d100) -		sysfs_remove_group(&new_client->dev.kobj, &lm85_group_in567); -    ERROR2: -	i2c_detach_client(new_client); -    ERROR1: +		sysfs_remove_group(&client->dev.kobj, &lm85_group_in567); + ERROR2: +	i2c_detach_client(client); + ERROR1:  	kfree(data); -    ERROR0: + ERROR0:  	return err;  } @@ -1323,100 +1305,46 @@ static int lm85_read_value(struct i2c_client *client, u8 reg)  	int res;  	/* What size location is it? */ -	switch( reg ) { -	case LM85_REG_FAN(0) :  /* Read WORD data */ -	case LM85_REG_FAN(1) : -	case LM85_REG_FAN(2) : -	case LM85_REG_FAN(3) : -	case LM85_REG_FAN_MIN(0) : -	case LM85_REG_FAN_MIN(1) : -	case LM85_REG_FAN_MIN(2) : -	case LM85_REG_FAN_MIN(3) : -	case LM85_REG_ALARM1 :	/* Read both bytes at once */ -		res = i2c_smbus_read_byte_data(client, reg) & 0xff ; -		res |= i2c_smbus_read_byte_data(client, reg+1) << 8 ; -		break ; -	case ADT7463_REG_TMIN_CTL1 :  /* Read WORD MSB, LSB */ -		res = i2c_smbus_read_byte_data(client, reg) << 8 ; -		res |= i2c_smbus_read_byte_data(client, reg+1) & 0xff ; -		break ; +	switch (reg) { +	case LM85_REG_FAN(0):  /* Read WORD data */ +	case LM85_REG_FAN(1): +	case LM85_REG_FAN(2): +	case LM85_REG_FAN(3): +	case LM85_REG_FAN_MIN(0): +	case LM85_REG_FAN_MIN(1): +	case LM85_REG_FAN_MIN(2): +	case LM85_REG_FAN_MIN(3): +	case LM85_REG_ALARM1:	/* Read both bytes at once */ +		res = i2c_smbus_read_byte_data(client, reg) & 0xff; +		res |= i2c_smbus_read_byte_data(client, reg + 1) << 8; +		break;  	default:	/* Read BYTE data */  		res = i2c_smbus_read_byte_data(client, reg); -		break ; +		break;  	} -	return res ; +	return res;  } -static int lm85_write_value(struct i2c_client *client, u8 reg, int value) +static void lm85_write_value(struct i2c_client *client, u8 reg, int value)  { -	int res ; - -	switch( reg ) { -	case LM85_REG_FAN(0) :  /* Write WORD data */ -	case LM85_REG_FAN(1) : -	case LM85_REG_FAN(2) : -	case LM85_REG_FAN(3) : -	case LM85_REG_FAN_MIN(0) : -	case LM85_REG_FAN_MIN(1) : -	case LM85_REG_FAN_MIN(2) : -	case LM85_REG_FAN_MIN(3) : +	switch (reg) { +	case LM85_REG_FAN(0):  /* Write WORD data */ +	case LM85_REG_FAN(1): +	case LM85_REG_FAN(2): +	case LM85_REG_FAN(3): +	case LM85_REG_FAN_MIN(0): +	case LM85_REG_FAN_MIN(1): +	case LM85_REG_FAN_MIN(2): +	case LM85_REG_FAN_MIN(3):  	/* NOTE: ALARM is read only, so not included here */ -		res = i2c_smbus_write_byte_data(client, reg, value & 0xff) ; -		res |= i2c_smbus_write_byte_data(client, reg+1, (value>>8) & 0xff) ; -		break ; -	case ADT7463_REG_TMIN_CTL1 :  /* Write WORD MSB, LSB */ -		res = i2c_smbus_write_byte_data(client, reg, (value>>8) & 0xff); -		res |= i2c_smbus_write_byte_data(client, reg+1, value & 0xff) ; -		break ; +		i2c_smbus_write_byte_data(client, reg, value & 0xff); +		i2c_smbus_write_byte_data(client, reg + 1, value >> 8); +		break;  	default:	/* Write BYTE data */ -		res = i2c_smbus_write_byte_data(client, reg, value); -		break ; +		i2c_smbus_write_byte_data(client, reg, value); +		break;  	} - -	return res ; -} - -static void lm85_init_client(struct i2c_client *client) -{ -	int value; -	struct lm85_data *data = i2c_get_clientdata(client); - -	dev_dbg(&client->dev, "Initializing device\n"); - -	/* Warn if part was not "READY" */ -	value = lm85_read_value(client, LM85_REG_CONFIG); -	dev_dbg(&client->dev, "LM85_REG_CONFIG is: 0x%02x\n", value); -	if( value & 0x02 ) { -		dev_err(&client->dev, "Client (%d,0x%02x) config is locked.\n", -			    i2c_adapter_id(client->adapter), client->addr ); -	}; -	if( ! (value & 0x04) ) { -		dev_err(&client->dev, "Client (%d,0x%02x) is not ready.\n", -			    i2c_adapter_id(client->adapter), client->addr ); -	}; -	if( value & 0x10 -	    && ( data->type == adm1027 -		|| data->type == adt7463 ) ) { -		dev_err(&client->dev, "Client (%d,0x%02x) VxI mode is set.  " -			"Please report this to the lm85 maintainer.\n", -			    i2c_adapter_id(client->adapter), client->addr ); -	}; - -	/* WE INTENTIONALLY make no changes to the limits, -	 *   offsets, pwms, fans and zones.  If they were -	 *   configured, we don't want to mess with them. -	 *   If they weren't, the default is 100% PWM, no -	 *   control and will suffice until 'sensors -s' -	 *   can be run by the user. -	 */ - -	/* Start monitoring */ -	value = lm85_read_value(client, LM85_REG_CONFIG); -	/* Try to clear LOCK, Set START, save everything else */ -	value = (value & ~ 0x02) | 0x01 ; -	dev_dbg(&client->dev, "Setting CONFIG to: 0x%02x\n", value); -	lm85_write_value(client, LM85_REG_CONFIG, value);  }  static struct lm85_data *lm85_update_device(struct device *dev) @@ -1427,28 +1355,30 @@ static struct lm85_data *lm85_update_device(struct device *dev)  	mutex_lock(&data->update_lock); -	if ( !data->valid || -	     time_after(jiffies, data->last_reading + LM85_DATA_INTERVAL) ) { +	if (!data->valid || +	     time_after(jiffies, data->last_reading + LM85_DATA_INTERVAL)) {  		/* Things that change quickly */  		dev_dbg(&client->dev, "Reading sensor values\n"); -		 +  		/* Have to read extended bits first to "freeze" the  		 * more significant bits that are read later.  		 * There are 2 additional resolution bits per channel and we  		 * have room for 4, so we shift them to the left.  		 */ -		if ( (data->type == adm1027) || (data->type == adt7463) ) { +		if (data->type == adm1027 || data->type == adt7463) {  			int ext1 = lm85_read_value(client,  						   ADM1027_REG_EXTEND_ADC1);  			int ext2 =  lm85_read_value(client,  						    ADM1027_REG_EXTEND_ADC2);  			int val = (ext1 << 8) + ext2; -			for(i = 0; i <= 4; i++) -				data->in_ext[i] = ((val>>(i * 2))&0x03) << 2; +			for (i = 0; i <= 4; i++) +				data->in_ext[i] = +					((val >> (i * 2)) & 0x03) << 2; -			for(i = 0; i <= 2; i++) -				data->temp_ext[i] = (val>>((i + 4) * 2))&0x0c; +			for (i = 0; i <= 2; i++) +				data->temp_ext[i] = +					(val >> ((i + 4) * 2)) & 0x0c;  		}  		data->vid = lm85_read_value(client, LM85_REG_VID); @@ -1456,6 +1386,8 @@ static struct lm85_data *lm85_update_device(struct device *dev)  		for (i = 0; i <= 3; ++i) {  			data->in[i] =  			    lm85_read_value(client, LM85_REG_IN(i)); +			data->fan[i] = +			    lm85_read_value(client, LM85_REG_FAN(i));  		}  		if (!(data->type == adt7463 && (data->vid & 0x80))) { @@ -1463,38 +1395,25 @@ static struct lm85_data *lm85_update_device(struct device *dev)  				      LM85_REG_IN(4));  		} -		for (i = 0; i <= 3; ++i) { -			data->fan[i] = -			    lm85_read_value(client, LM85_REG_FAN(i)); -		} -  		for (i = 0; i <= 2; ++i) {  			data->temp[i] =  			    lm85_read_value(client, LM85_REG_TEMP(i)); -		} - -		for (i = 0; i <= 2; ++i) {  			data->pwm[i] =  			    lm85_read_value(client, LM85_REG_PWM(i));  		}  		data->alarms = lm85_read_value(client, LM85_REG_ALARM1); -		if ( data->type == adt7463 ) { -			if( data->therm_total < ULONG_MAX - 256 ) { -			    data->therm_total += -				lm85_read_value(client, ADT7463_REG_THERM ); -			} -		} else if ( data->type == emc6d100 ) { +		if (data->type == emc6d100) {  			/* Three more voltage sensors */  			for (i = 5; i <= 7; ++i) { -				data->in[i] = -					lm85_read_value(client, EMC6D100_REG_IN(i)); +				data->in[i] = lm85_read_value(client, +							EMC6D100_REG_IN(i));  			}  			/* More alarm bits */ -			data->alarms |= -				lm85_read_value(client, EMC6D100_REG_ALARM3) << 16; -		} else if (data->type == emc6d102 ) { +			data->alarms |= lm85_read_value(client, +						EMC6D100_REG_ALARM3) << 16; +		} else if (data->type == emc6d102) {  			/* Have to read LSB bits after the MSB ones because  			   the reading of the MSB bits has frozen the  			   LSBs (backward from the ADM1027). @@ -1509,20 +1428,20 @@ static struct lm85_data *lm85_update_device(struct device *dev)  						   EMC6D102_REG_EXTEND_ADC4);  			data->in_ext[0] = ext3 & 0x0f;  			data->in_ext[1] = ext4 & 0x0f; -			data->in_ext[2] = (ext4 >> 4) & 0x0f; -			data->in_ext[3] = (ext3 >> 4) & 0x0f; -			data->in_ext[4] = (ext2 >> 4) & 0x0f; +			data->in_ext[2] = ext4 >> 4; +			data->in_ext[3] = ext3 >> 4; +			data->in_ext[4] = ext2 >> 4;  			data->temp_ext[0] = ext1 & 0x0f;  			data->temp_ext[1] = ext2 & 0x0f; -			data->temp_ext[2] = (ext1 >> 4) & 0x0f; +			data->temp_ext[2] = ext1 >> 4;  		} -		data->last_reading = jiffies ; -	};  /* last_reading */ +		data->last_reading = jiffies; +	}  /* last_reading */ -	if ( !data->valid || -	     time_after(jiffies, data->last_config + LM85_CONFIG_INTERVAL) ) { +	if (!data->valid || +	     time_after(jiffies, data->last_config + LM85_CONFIG_INTERVAL)) {  		/* Things that don't change often */  		dev_dbg(&client->dev, "Reading config values\n"); @@ -1531,6 +1450,8 @@ static struct lm85_data *lm85_update_device(struct device *dev)  			    lm85_read_value(client, LM85_REG_IN_MIN(i));  			data->in_max[i] =  			    lm85_read_value(client, LM85_REG_IN_MAX(i)); +			data->fan_min[i] = +			    lm85_read_value(client, LM85_REG_FAN_MIN(i));  		}  		if (!(data->type == adt7463 && (data->vid & 0x80))) { @@ -1540,34 +1461,28 @@ static struct lm85_data *lm85_update_device(struct device *dev)  					  LM85_REG_IN_MAX(4));  		} -		if ( data->type == emc6d100 ) { +		if (data->type == emc6d100) {  			for (i = 5; i <= 7; ++i) { -				data->in_min[i] = -					lm85_read_value(client, EMC6D100_REG_IN_MIN(i)); -				data->in_max[i] = -					lm85_read_value(client, EMC6D100_REG_IN_MAX(i)); +				data->in_min[i] = lm85_read_value(client, +						EMC6D100_REG_IN_MIN(i)); +				data->in_max[i] = lm85_read_value(client, +						EMC6D100_REG_IN_MAX(i));  			}  		} -		for (i = 0; i <= 3; ++i) { -			data->fan_min[i] = -			    lm85_read_value(client, LM85_REG_FAN_MIN(i)); -		} -  		for (i = 0; i <= 2; ++i) { +			int val; +  			data->temp_min[i] =  			    lm85_read_value(client, LM85_REG_TEMP_MIN(i));  			data->temp_max[i] =  			    lm85_read_value(client, LM85_REG_TEMP_MAX(i)); -		} -		for (i = 0; i <= 2; ++i) { -			int val ;  			data->autofan[i].config =  			    lm85_read_value(client, LM85_REG_AFAN_CONFIG(i));  			val = lm85_read_value(client, LM85_REG_AFAN_RANGE(i)); -			data->autofan[i].freq = val & 0x07 ; -			data->zone[i].range = (val >> 4) & 0x0f ; +			data->autofan[i].freq = val & 0x07; +			data->zone[i].range = val >> 4;  			data->autofan[i].min_pwm =  			    lm85_read_value(client, LM85_REG_AFAN_MINPWM(i));  			data->zone[i].limit = @@ -1577,50 +1492,19 @@ static struct lm85_data *lm85_update_device(struct device *dev)  		}  		i = lm85_read_value(client, LM85_REG_AFAN_SPIKE1); -		data->smooth[0] = i & 0x0f ; -		data->syncpwm3 = i & 0x10 ;  /* Save PWM3 config */ -		data->autofan[0].min_off = (i & 0x20) != 0 ; -		data->autofan[1].min_off = (i & 0x40) != 0 ; -		data->autofan[2].min_off = (i & 0x80) != 0 ; -		i = lm85_read_value(client, LM85_REG_AFAN_SPIKE2); -		data->smooth[1] = (i>>4) & 0x0f ; -		data->smooth[2] = i & 0x0f ; +		data->autofan[0].min_off = (i & 0x20) != 0; +		data->autofan[1].min_off = (i & 0x40) != 0; +		data->autofan[2].min_off = (i & 0x80) != 0;  		i = lm85_read_value(client, LM85_REG_AFAN_HYST1); -		data->zone[0].hyst = (i>>4) & 0x0f ; -		data->zone[1].hyst = i & 0x0f ; +		data->zone[0].hyst = i >> 4; +		data->zone[1].hyst = i & 0x0f;  		i = lm85_read_value(client, LM85_REG_AFAN_HYST2); -		data->zone[2].hyst = (i>>4) & 0x0f ; +		data->zone[2].hyst = i >> 4; -		if ( (data->type == lm85b) || (data->type == lm85c) ) { -			data->tach_mode = lm85_read_value(client, -				LM85_REG_TACH_MODE ); -			data->spinup_ctl = lm85_read_value(client, -				LM85_REG_SPINUP_CTL ); -		} else if ( (data->type == adt7463) || (data->type == adm1027) ) { -			if ( data->type == adt7463 ) { -				for (i = 0; i <= 2; ++i) { -				    data->oppoint[i] = lm85_read_value(client, -					ADT7463_REG_OPPOINT(i) ); -				} -				data->tmin_ctl = lm85_read_value(client, -					ADT7463_REG_TMIN_CTL1 ); -				data->therm_limit = lm85_read_value(client, -					ADT7463_REG_THERM_LIMIT ); -			} -			for (i = 0; i <= 2; ++i) { -			    data->temp_offset[i] = lm85_read_value(client, -				ADM1027_REG_TEMP_OFFSET(i) ); -			} -			data->tach_mode = lm85_read_value(client, -				ADM1027_REG_CONFIG3 ); -			data->fan_ppr = lm85_read_value(client, -				ADM1027_REG_FAN_PPR ); -		} -	  		data->last_config = jiffies; -	};  /* last_config */ +	}  /* last_config */  	data->valid = 1; @@ -1635,17 +1519,15 @@ static int __init sm_lm85_init(void)  	return i2c_add_driver(&lm85_driver);  } -static void  __exit sm_lm85_exit(void) +static void __exit sm_lm85_exit(void)  {  	i2c_del_driver(&lm85_driver);  } -/* Thanks to Richard Barrington for adding the LM85 to sensors-detect. - * Thanks to Margit Schubert-While <margitsw@t-online.de> for help with - *     post 2.7.0 CVS changes. - */  MODULE_LICENSE("GPL"); -MODULE_AUTHOR("Philip Pokorny <ppokorny@penguincomputing.com>, Margit Schubert-While <margitsw@t-online.de>, Justin Thiessen <jthiessen@penguincomputing.com"); +MODULE_AUTHOR("Philip Pokorny <ppokorny@penguincomputing.com>, " +	"Margit Schubert-While <margitsw@t-online.de>, " +	"Justin Thiessen <jthiessen@penguincomputing.com>");  MODULE_DESCRIPTION("LM85-B, LM85-C driver");  module_init(sm_lm85_init);  |