2019-02-12 14:50:00

by Mike Looijmans

[permalink] [raw]
Subject: [PATCH] iio/gyro/bmg160: Use millidegrees for temperature scale

Standard unit for temperature is millidegrees Celcius, whereas this driver
was reporting in degrees. Fix the scale factor in the driver.

Signed-off-by: Mike Looijmans <[email protected]>
---
drivers/iio/gyro/bmg160_core.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/drivers/iio/gyro/bmg160_core.c b/drivers/iio/gyro/bmg160_core.c
index 63ca316..ad7f8cb 100644
--- a/drivers/iio/gyro/bmg160_core.c
+++ b/drivers/iio/gyro/bmg160_core.c
@@ -585,8 +585,9 @@ static int bmg160_read_raw(struct iio_dev *indio_dev,
*val = 0;
switch (chan->type) {
case IIO_TEMP:
- *val2 = 500000;
- return IIO_VAL_INT_PLUS_MICRO;
+ *val = 500;
+ *val2 = 0;
+ return IIO_VAL_INT;
case IIO_ANGL_VEL:
{
int i;
--
1.9.1



2019-02-12 17:33:25

by Tomasz Duszynski

[permalink] [raw]
Subject: Re: [PATCH] iio/gyro/bmg160: Use millidegrees for temperature scale

On Tue, Feb 12, 2019 at 03:25:49PM +0100, Mike Looijmans wrote:
> Standard unit for temperature is millidegrees Celcius, whereas this driver
> was reporting in degrees. Fix the scale factor in the driver.
>
> Signed-off-by: Mike Looijmans <[email protected]>
> ---
> drivers/iio/gyro/bmg160_core.c | 5 +++--
> 1 file changed, 3 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/iio/gyro/bmg160_core.c b/drivers/iio/gyro/bmg160_core.c
> index 63ca316..ad7f8cb 100644
> --- a/drivers/iio/gyro/bmg160_core.c
> +++ b/drivers/iio/gyro/bmg160_core.c
> @@ -585,8 +585,9 @@ static int bmg160_read_raw(struct iio_dev *indio_dev,
> *val = 0;
> switch (chan->type) {
> case IIO_TEMP:
> - *val2 = 500000;
> - return IIO_VAL_INT_PLUS_MICRO;
> + *val = 500;
> + *val2 = 0;
> + return IIO_VAL_INT;

You are returning integer type to iio so there's no point in touching
val2. iio will ignore it anyway.

> case IIO_ANGL_VEL:
> {
> int i;
> --
> 1.9.1
>

2019-02-13 09:53:36

by Mike Looijmans

[permalink] [raw]
Subject: Re: [PATCH] iio/gyro/bmg160: Use millidegrees for temperature scale

On 12-02-19 18:00, Tomasz Duszynski wrote:
> On Tue, Feb 12, 2019 at 03:25:49PM +0100, Mike Looijmans wrote:
>> Standard unit for temperature is millidegrees Celcius, whereas this driver
>> was reporting in degrees. Fix the scale factor in the driver.
>>
>> Signed-off-by: Mike Looijmans <[email protected]>
>> ---
>> drivers/iio/gyro/bmg160_core.c | 5 +++--
>> 1 file changed, 3 insertions(+), 2 deletions(-)
>>
>> diff --git a/drivers/iio/gyro/bmg160_core.c b/drivers/iio/gyro/bmg160_core.c
>> index 63ca316..ad7f8cb 100644
>> --- a/drivers/iio/gyro/bmg160_core.c
>> +++ b/drivers/iio/gyro/bmg160_core.c
>> @@ -585,8 +585,9 @@ static int bmg160_read_raw(struct iio_dev *indio_dev,
>> *val = 0;
>> switch (chan->type) {
>> case IIO_TEMP:
>> - *val2 = 500000;
>> - return IIO_VAL_INT_PLUS_MICRO;
>> + *val = 500;
>> + *val2 = 0;
>> + return IIO_VAL_INT;
>
> You are returning integer type to iio so there's no point in touching
> val2. iio will ignore it anyway.

Indeed, I'll post a v2 for that.

>
>> case IIO_ANGL_VEL:
>> {
>> int i;
>> --
>> 1.9.1
>>

2019-02-13 10:11:08

by Mike Looijmans

[permalink] [raw]
Subject: [PATCH v2] iio/gyro/bmg160: Use millidegrees for temperature scale

Standard unit for temperature is millidegrees Celcius, whereas this driver
was reporting in degrees. Fix the scale factor in the driver.

Signed-off-by: Mike Looijmans <[email protected]>
---
v2: Don't touch val2 when returning IIO_VAL_INT
Only touch val when returning a value

drivers/iio/gyro/bmg160_core.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/iio/gyro/bmg160_core.c b/drivers/iio/gyro/bmg160_core.c
index 63ca316..92c07ab 100644
--- a/drivers/iio/gyro/bmg160_core.c
+++ b/drivers/iio/gyro/bmg160_core.c
@@ -582,11 +582,10 @@ static int bmg160_read_raw(struct iio_dev *indio_dev,
case IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY:
return bmg160_get_filter(data, val);
case IIO_CHAN_INFO_SCALE:
- *val = 0;
switch (chan->type) {
case IIO_TEMP:
- *val2 = 500000;
- return IIO_VAL_INT_PLUS_MICRO;
+ *val = 500;
+ return IIO_VAL_INT;
case IIO_ANGL_VEL:
{
int i;
@@ -594,6 +593,7 @@ static int bmg160_read_raw(struct iio_dev *indio_dev,
for (i = 0; i < ARRAY_SIZE(bmg160_scale_table); ++i) {
if (bmg160_scale_table[i].dps_range ==
data->dps_range) {
+ *val = 0;
*val2 = bmg160_scale_table[i].scale;
return IIO_VAL_INT_PLUS_MICRO;
}
--
1.9.1


2019-02-20 12:11:26

by Jonathan Cameron

[permalink] [raw]
Subject: Re: [PATCH v2] iio/gyro/bmg160: Use millidegrees for temperature scale

On Wed, 13 Feb 2019 08:41:47 +0100
Mike Looijmans <[email protected]> wrote:

> Standard unit for temperature is millidegrees Celcius, whereas this driver
> was reporting in degrees. Fix the scale factor in the driver.
>
> Signed-off-by: Mike Looijmans <[email protected]>
Applied to the fixes-togreg branch of iio.git and marked for stable.

Thanks,

Jonathan
> ---
> v2: Don't touch val2 when returning IIO_VAL_INT
> Only touch val when returning a value
>
> drivers/iio/gyro/bmg160_core.c | 6 +++---
> 1 file changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/iio/gyro/bmg160_core.c b/drivers/iio/gyro/bmg160_core.c
> index 63ca316..92c07ab 100644
> --- a/drivers/iio/gyro/bmg160_core.c
> +++ b/drivers/iio/gyro/bmg160_core.c
> @@ -582,11 +582,10 @@ static int bmg160_read_raw(struct iio_dev *indio_dev,
> case IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY:
> return bmg160_get_filter(data, val);
> case IIO_CHAN_INFO_SCALE:
> - *val = 0;
> switch (chan->type) {
> case IIO_TEMP:
> - *val2 = 500000;
> - return IIO_VAL_INT_PLUS_MICRO;
> + *val = 500;
> + return IIO_VAL_INT;
> case IIO_ANGL_VEL:
> {
> int i;
> @@ -594,6 +593,7 @@ static int bmg160_read_raw(struct iio_dev *indio_dev,
> for (i = 0; i < ARRAY_SIZE(bmg160_scale_table); ++i) {
> if (bmg160_scale_table[i].dps_range ==
> data->dps_range) {
> + *val = 0;
> *val2 = bmg160_scale_table[i].scale;
> return IIO_VAL_INT_PLUS_MICRO;
> }