Re: [PATCH 2/3] staging iio adt7410: fix 13bit mode

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 07/03/2012 11:41 AM, Zhang, Sonic wrote:
> Acked-by: Sonic Zhang <sonic.zhang@xxxxxxxxxx>
merged to fixes.
> 
>> -----Original Message-----
>> From: Sascha Hauer [mailto:s.hauer@xxxxxxxxxxxxxx]
>> Sent: Tuesday, July 03, 2012 5:21 PM
>> To: linux-iio@xxxxxxxxxxxxxxx
>> Cc: Jonathan Cameron; Zhang, Sonic; Sascha Hauer
>> Subject: [PATCH 2/3] staging iio adt7410: fix 13bit mode
>>
>> The driver assumes that in 13bit mode the 16bit value has
>> to be shifted to the right by 3 bits. This is not true, in
>> both 16bit and 13bit mode the MSB is at the same position.
>> Currently the driver returns a temperature of 194 degrees
>> Celsius in 13bit mode and 24 degrees Celsius in 16bit mode.
>> Fix this by using the same algorithm for 16bit and 13bit
>> mode and by just masking out the lower three bits in 13bit
>> mode.
>>
>> Signed-off-by: Sascha Hauer <s.hauer@xxxxxxxxxxxxxx>
>> ---
>> drivers/staging/iio/adc/adt7410.c |   29 ++++++++++-------------------
>> 1 file changed, 10 insertions(+), 19 deletions(-)
>>
>> diff --git a/drivers/staging/iio/adc/adt7410.c b/drivers/staging/iio/adc/adt7410.c
>> index fa54a40..f9188e5 100644
>> --- a/drivers/staging/iio/adc/adt7410.c
>> +++ b/drivers/staging/iio/adc/adt7410.c
>> @@ -293,26 +293,17 @@ static ssize_t adt7410_convert_temperature(struct
>> adt7410_chip_info *chip,
>> {
>>       char sign = ' ';
>>
>> -      if (chip->config & ADT7410_RESOLUTION) {
>> -              if (data & ADT7410_T16_VALUE_SIGN) {
>> -                      /* convert supplement to positive value */
>> -                      data = (u16)((ADT7410_T16_VALUE_SIGN << 1) -
>> (u32)data);
>> -                      sign = '-';
>> -              }
>> -              return sprintf(buf, "%c%d.%.7d\n", sign,
>> -                              (data >> ADT7410_T16_VALUE_FLOAT_OFFSET),
>> -                              (data & ADT7410_T16_VALUE_FLOAT_MASK) *
>> 78125);
>> -      } else {
>> -              if (data & ADT7410_T13_VALUE_SIGN) {
>> -                      /* convert supplement to positive value */
>> -                      data >>= ADT7410_T13_VALUE_OFFSET;
>> -                      data = (ADT7410_T13_VALUE_SIGN << 1) - data;
>> -                      sign = '-';
>> -              }
>> -              return sprintf(buf, "%c%d.%.4d\n", sign,
>> -                              (data >> ADT7410_T13_VALUE_FLOAT_OFFSET),
>> -                              (data & ADT7410_T13_VALUE_FLOAT_MASK) *
>> 625);
>> +      if (!(chip->config & ADT7410_RESOLUTION))
>> +              data &= ~0x7;
>> +
>> +      if (data & ADT7410_T16_VALUE_SIGN) {
>> +              /* convert supplement to positive value */
>> +              data = (u16)((ADT7410_T16_VALUE_SIGN << 1) - (u32)data);
>> +              sign = '-';
>>       }
>> +      return sprintf(buf, "%c%d.%.7d\n", sign,
>> +                      (data >> ADT7410_T16_VALUE_FLOAT_OFFSET),
>> +                      (data & ADT7410_T16_VALUE_FLOAT_MASK) * 78125);
>> }
>>
>> static ssize_t adt7410_show_value(struct device *dev,
>> --
>> 1.7.10
>>
> 
> 


--
To unsubscribe from this list: send the line "unsubscribe linux-iio" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Input]     [Linux Kernel]     [Linux SCSI]     [X.org]

  Powered by Linux