diff options
| author | Jean Delvare <[email protected]> | 2011-11-04 12:00:47 +0100 | 
|---|---|---|
| committer | Jean Delvare <[email protected]> | 2011-11-04 12:00:47 +0100 | 
| commit | 6ba71de5f81bbf639b5dcea2bc2c33cdb87ed782 (patch) | |
| tree | 3c982ed45c7f7e51da0b2e735407b9ad3952e843 | |
| parent | 2265cef2751b3441df91f85e0107f9f549e5b711 (diff) | |
hwmon: (w83627ehf) Clean up probe function
The probe function has grown pretty large, I think it's time for some
cleanups, starting with these two simple ones:
* Move temp3/in6 check for the W83667HG later in the function, where
  it is done for all other chip types.
* Move temperature register setting to a separate function, to avoid
  code duplication.
Signed-off-by: Jean Delvare <[email protected]>
Acked-by: Guenter Roeck <[email protected]>
| -rw-r--r-- | drivers/hwmon/w83627ehf.c | 53 | 
1 files changed, 32 insertions, 21 deletions
| diff --git a/drivers/hwmon/w83627ehf.c b/drivers/hwmon/w83627ehf.c index 9354f9541313..81534cbd0aff 100644 --- a/drivers/hwmon/w83627ehf.c +++ b/drivers/hwmon/w83627ehf.c @@ -1853,6 +1853,19 @@ static void w82627ehf_swap_tempreg(struct w83627ehf_data *data,  }  static void __devinit +w83627ehf_set_temp_reg_ehf(struct w83627ehf_data *data, int n_temp) +{ +	int i; + +	for (i = 0; i < n_temp; i++) { +		data->reg_temp[i] = W83627EHF_REG_TEMP[i]; +		data->reg_temp_over[i] = W83627EHF_REG_TEMP_OVER[i]; +		data->reg_temp_hyst[i] = W83627EHF_REG_TEMP_HYST[i]; +		data->reg_temp_config[i] = W83627EHF_REG_TEMP_CONFIG[i]; +	} +} + +static void __devinit  w83627ehf_check_fan_inputs(const struct w83627ehf_sio_data *sio_data,  			   struct w83627ehf_data *data)  { @@ -1955,17 +1968,8 @@ static int __devinit w83627ehf_probe(struct platform_device *pdev)  			 || sio_data->kind == nct6775  			 || sio_data->kind == nct6776) ? 3 : 4; +	/* Default to 3 temperature inputs, code below will adjust as needed */  	data->have_temp = 0x07; -	/* Check temp3 configuration bit for 667HG */ -	if (sio_data->kind == w83667hg) { -		u8 reg; - -		reg = w83627ehf_read_value(data, W83627EHF_REG_TEMP_CONFIG[2]); -		if (reg & 0x01) -			data->have_temp &= ~(1 << 2); -		else -			data->in6_skip = 1;	/* either temp3 or in6 */ -	}  	/* Deal with temperature register setup first. */  	if (sio_data->kind == nct6775 || sio_data->kind == nct6776) { @@ -2042,16 +2046,12 @@ static int __devinit w83627ehf_probe(struct platform_device *pdev)  	} else if (sio_data->kind == w83667hg_b) {  		u8 reg; +		w83627ehf_set_temp_reg_ehf(data, 4); +  		/*  		 * Temperature sources are selected with bank 0, registers 0x49  		 * and 0x4a.  		 */ -		for (i = 0; i < ARRAY_SIZE(W83627EHF_REG_TEMP); i++) { -			data->reg_temp[i] = W83627EHF_REG_TEMP[i]; -			data->reg_temp_over[i] = W83627EHF_REG_TEMP_OVER[i]; -			data->reg_temp_hyst[i] = W83627EHF_REG_TEMP_HYST[i]; -			data->reg_temp_config[i] = W83627EHF_REG_TEMP_CONFIG[i]; -		}  		reg = w83627ehf_read_value(data, 0x4a);  		data->temp_src[0] = reg >> 5;  		reg = w83627ehf_read_value(data, 0x49); @@ -2086,12 +2086,23 @@ static int __devinit w83627ehf_probe(struct platform_device *pdev)  		data->temp_label = w83667hg_b_temp_label;  	} else { +		w83627ehf_set_temp_reg_ehf(data, 3); +  		/* Temperature sources are fixed */ -		for (i = 0; i < 3; i++) { -			data->reg_temp[i] = W83627EHF_REG_TEMP[i]; -			data->reg_temp_over[i] = W83627EHF_REG_TEMP_OVER[i]; -			data->reg_temp_hyst[i] = W83627EHF_REG_TEMP_HYST[i]; -			data->reg_temp_config[i] = W83627EHF_REG_TEMP_CONFIG[i]; + +		if (sio_data->kind == w83667hg) { +			u8 reg; + +			/* +			 * Chip supports either AUXTIN or VIN3. Try to find +			 * out which one. +			 */ +			reg = w83627ehf_read_value(data, +						W83627EHF_REG_TEMP_CONFIG[2]); +			if (reg & 0x01) +				data->have_temp &= ~(1 << 2); +			else +				data->in6_skip = 1;  		}  	} |