diff options
Diffstat (limited to 'drivers/hwmon/ntc_thermistor.c')
| -rw-r--r-- | drivers/hwmon/ntc_thermistor.c | 27 | 
1 files changed, 18 insertions, 9 deletions
| diff --git a/drivers/hwmon/ntc_thermistor.c b/drivers/hwmon/ntc_thermistor.c index 3aad62a0e661..8587189c7f15 100644 --- a/drivers/hwmon/ntc_thermistor.c +++ b/drivers/hwmon/ntc_thermistor.c @@ -326,18 +326,27 @@ struct ntc_data {  static int ntc_adc_iio_read(struct ntc_thermistor_platform_data *pdata)  {  	struct iio_channel *channel = pdata->chan; -	int raw, uv, ret; +	int uv, ret; -	ret = iio_read_channel_raw(channel, &raw); +	ret = iio_read_channel_processed_scale(channel, &uv, 1000);  	if (ret < 0) { -		pr_err("read channel() error: %d\n", ret); -		return ret; -	} +		int raw; -	ret = iio_convert_raw_to_processed(channel, raw, &uv, 1000); -	if (ret < 0) { -		/* Assume 12 bit ADC with vref at pullup_uv */ -		uv = (pdata->pullup_uv * (s64)raw) >> 12; +		/* +		 * This fallback uses a raw read and then +		 * assumes the ADC is 12 bits, scaling with +		 * a factor 1000 to get to microvolts. +		 */ +		ret = iio_read_channel_raw(channel, &raw); +		if (ret < 0) { +			pr_err("read channel() error: %d\n", ret); +			return ret; +		} +		ret = iio_convert_raw_to_processed(channel, raw, &uv, 1000); +		if (ret < 0) { +			/* Assume 12 bit ADC with vref at pullup_uv */ +			uv = (pdata->pullup_uv * (s64)raw) >> 12; +		}  	}  	return uv; | 
