Re: [PATCH] iio: mlx90614: Replace offset sign and define magic numbers

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

 



>> Translates the magic constant numbers to named macros and add some
>> additional comments about their meaning. Also changed the offset to
>> negative as usual equation is: (raw + offset)*scale and in this
>> case offset should be negative (as we deduct 273.15 Kelvin to get
>> temperature in Celsius)..

> On 29 June 2015 at 14:19, Peter Meerwald <pmeerw@xxxxxxxxxx> wrote:
>looks good; strictly, this patch is
>(a) a bugfix (the offset should be negative),
>(b) cleanup to replace constants by macros.

I agree, but other things are more design than a proper change.

I would also like you to reconsider the usage of
IIO_CHAN_INFO_PROCESSED which would report calculated value
to avoid knowing the sensor specifics and just provide general output
(this would avoid different calculations of final temperature for different
sensors).

>>
>> The diff is made towards togreg branch as that branch seems to have the
>> most recent updates of mlx90614 driver (many are yet to be merged).
>>
>> Signed-off-by: Crt Mori <cmo@xxxxxxxxxxx>
>> ---
>>  drivers/iio/temperature/mlx90614.c | 20 ++++++++++++++------
>>  1 file changed, 14 insertions(+), 6 deletions(-)
>>
>> diff --git a/drivers/iio/temperature/mlx90614.c
>> b/drivers/iio/temperature/mlx90614.c
>> index cb2e8ad..909278a 100644
>> --- a/drivers/iio/temperature/mlx90614.c
>> +++ b/drivers/iio/temperature/mlx90614.c
>> @@ -65,6 +65,13 @@
>>
>>  #define MLX90614_AUTOSLEEP_DELAY 5000 /* default autosleep delay */
>>
>> +/* Magic constants */
>> +#define MLX90614_CONST_OFFSET_DEC -13657 /* decimal part of the Kelvin
>> offset */
>> +#define MLX90614_CONST_OFFSET_REM 500000 /* remainder of offset
>> (273.15*50) */
>> +#define MLX90614_CONST_SCALE 20 /* Scale in milliKelvin (0.02 * 1000) */
>> +#define MLX90614_CONST_RAW_EMISSIVITY_MAX 65535 /* max value for
>> emissivity */
>> +#define MLX90614_CONST_EMISSIVITY_RESOLUTION 15259 /* 1/65535 ~
>> 0.000015259 */
>> +
>>  struct mlx90614_data {
>>         struct i2c_client *client;
>>         struct mutex lock; /* for EEPROM access only */
>> @@ -204,11 +211,11 @@ static int mlx90614_read_raw(struct iio_dev
>> *indio_dev,
>>                 *val = ret;
>>                 return IIO_VAL_INT;
>>         case IIO_CHAN_INFO_OFFSET:
>> -               *val = 13657;
>> -               *val2 = 500000;
>> +               *val = MLX90614_CONST_OFFSET_DEC;
>> +               *val2 = MLX90614_CONST_OFFSET_REM;
>>                 return IIO_VAL_INT_PLUS_MICRO;
>>         case IIO_CHAN_INFO_SCALE:
>> -               *val = 20;
>> +               *val = MLX90614_CONST_SCALE;
>>                 return IIO_VAL_INT;
>>         case IIO_CHAN_INFO_CALIBEMISSIVITY: /* 1/65535 / LSB */
>>                 mlx90614_power_get(data, false);
>> @@ -221,12 +228,12 @@ static int mlx90614_read_raw(struct iio_dev
>> *indio_dev,
>>                 if (ret < 0)
>>                         return ret;
>>
>> -               if (ret == 65535) {
>> +               if (ret == MLX90614_CONST_RAW_EMISSIVITY_MAX) {
>>                         *val = 1;
>>                         *val2 = 0;
>>                 } else {
>>                         *val = 0;
>> -                       *val2 = ret * 15259; /* 1/65535 ~ 0.000015259 */
>> +                       *val2 = ret * MLX90614_CONST_EMISSIVITY_RESOLUTION;
>>                 }
>>                 return IIO_VAL_INT_PLUS_NANO;
>>         default:
>> @@ -245,7 +252,8 @@ static int mlx90614_write_raw(struct iio_dev *indio_dev,
>>         case IIO_CHAN_INFO_CALIBEMISSIVITY: /* 1/65535 / LSB */
>>                 if (val < 0 || val2 < 0 || val > 1 || (val == 1 && val2 !=
>> 0))
>>                         return -EINVAL;
>> -               val = val * 65535 + val2 / 15259; /* 1/65535 ~ 0.000015259
>> */
>> +               val = val * MLX90614_CONST_RAW_EMISSIVITY_MAX +
>> +                       val2 / MLX90614_CONST_EMISSIVITY_RESOLUTION;
>>
>>                 mlx90614_power_get(data, false);
>>                 mutex_lock(&data->lock);
>>
--
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