mirror of
				git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
				synced 2025-11-01 09:13:37 +00:00 
			
		
		
		
	hwmon: (pmbus/ltc2978) Fix temperature reporting
On LTC2978, only READ_TEMPERATURE is supported. It reports the internal junction temperature. This register is unpaged. On LTC3880, READ_TEMPERATURE and READ_TEMPERATURE2 are supported. READ_TEMPERATURE is paged and reports external temperatures. READ_TEMPERATURE2 is unpaged and reports the internal junction temperature. Signed-off-by: Guenter Roeck <linux@roeck-us.net> Cc: stable@vger.kernel.org # 3.2+ Acked-by: Jean Delvare <khali@linux-fr.org>
This commit is contained in:
		
							parent
							
								
									6975404fb9
								
							
						
					
					
						commit
						8c958c703e
					
				
					 1 changed files with 8 additions and 6 deletions
				
			
		| 
						 | 
				
			
			@ -59,7 +59,7 @@ enum chips { ltc2978, ltc3880 };
 | 
			
		|||
struct ltc2978_data {
 | 
			
		||||
	enum chips id;
 | 
			
		||||
	int vin_min, vin_max;
 | 
			
		||||
	int temp_min, temp_max;
 | 
			
		||||
	int temp_min, temp_max[2];
 | 
			
		||||
	int vout_min[8], vout_max[8];
 | 
			
		||||
	int iout_max[2];
 | 
			
		||||
	int temp2_max;
 | 
			
		||||
| 
						 | 
				
			
			@ -113,9 +113,10 @@ static int ltc2978_read_word_data_common(struct i2c_client *client, int page,
 | 
			
		|||
		ret = pmbus_read_word_data(client, page,
 | 
			
		||||
					   LTC2978_MFR_TEMPERATURE_PEAK);
 | 
			
		||||
		if (ret >= 0) {
 | 
			
		||||
			if (lin11_to_val(ret) > lin11_to_val(data->temp_max))
 | 
			
		||||
				data->temp_max = ret;
 | 
			
		||||
			ret = data->temp_max;
 | 
			
		||||
			if (lin11_to_val(ret)
 | 
			
		||||
			    > lin11_to_val(data->temp_max[page]))
 | 
			
		||||
				data->temp_max[page] = ret;
 | 
			
		||||
			ret = data->temp_max[page];
 | 
			
		||||
		}
 | 
			
		||||
		break;
 | 
			
		||||
	case PMBUS_VIRT_RESET_VOUT_HISTORY:
 | 
			
		||||
| 
						 | 
				
			
			@ -266,7 +267,7 @@ static int ltc2978_write_word_data(struct i2c_client *client, int page,
 | 
			
		|||
		break;
 | 
			
		||||
	case PMBUS_VIRT_RESET_TEMP_HISTORY:
 | 
			
		||||
		data->temp_min = 0x7bff;
 | 
			
		||||
		data->temp_max = 0x7c00;
 | 
			
		||||
		data->temp_max[page] = 0x7c00;
 | 
			
		||||
		ret = ltc2978_clear_peaks(client, page, data->id);
 | 
			
		||||
		break;
 | 
			
		||||
	default:
 | 
			
		||||
| 
						 | 
				
			
			@ -323,7 +324,8 @@ static int ltc2978_probe(struct i2c_client *client,
 | 
			
		|||
	data->vin_min = 0x7bff;
 | 
			
		||||
	data->vin_max = 0x7c00;
 | 
			
		||||
	data->temp_min = 0x7bff;
 | 
			
		||||
	data->temp_max = 0x7c00;
 | 
			
		||||
	for (i = 0; i < ARRAY_SIZE(data->temp_max); i++)
 | 
			
		||||
		data->temp_max[i] = 0x7c00;
 | 
			
		||||
	data->temp2_max = 0x7c00;
 | 
			
		||||
 | 
			
		||||
	switch (data->id) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		
		Reference in a new issue