All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v3] iio: gyro: mpu3050: Fix reported temperature value
@ 2021-04-23  2:09 Dmitry Osipenko
  2021-04-23 10:14 ` Jean-Baptiste Maneyrol
  0 siblings, 1 reply; 5+ messages in thread
From: Dmitry Osipenko @ 2021-04-23  2:09 UTC (permalink / raw)
  To: Linus Walleij, Jonathan Cameron, Lars-Peter Clausen,
	Andy Shevchenko, Maxim Schwalm, Svyatoslav Ryhel
  Cc: linux-iio, linux-kernel

The raw temperature value is a 16-bit signed integer. The sign casting
is missing in the code, which results in a wrong temperature reported
by userspace tools, fix it.

Cc: stable@vger.kernel.org
Fixes: 3904b28efb2c ("iio: gyro: Add driver for the MPU-3050 gyroscope")
Datasheet: https://www.cdiweb.com/datasheets/invensense/mpu-3000a.pdf
Tested-by: Maxim Schwalm <maxim.schwalm@gmail.com> # Asus TF700T
Tested-by: Svyatoslav Ryhel <clamor95@gmail.com> # Asus TF201
Reported-by: Svyatoslav Ryhel <clamor95@gmail.com>
Reviewed-by: Andy Shevchenko <Andy.Shevchenko@gmail.com>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Dmitry Osipenko <digetx@gmail.com>
---

v3: - Improved comment in the code, saying that the temperature range
      corresponds to the "best fit straight line" range where temperature
      is reported reliably, i.e. in accordance to the linear equation.

v2: - Replaced "signed 16bit integer" wording with "16-bit signed integer",
      replaced "Link" tag with the "Datasheet" and added "Fixes" tag as was
      suggested by Andy Shevchenko.

    - Added r-b from Andy Shevchenko and Linus Walleij.

 drivers/iio/gyro/mpu3050-core.c | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

diff --git a/drivers/iio/gyro/mpu3050-core.c b/drivers/iio/gyro/mpu3050-core.c
index ac90be03332a..f17a93519535 100644
--- a/drivers/iio/gyro/mpu3050-core.c
+++ b/drivers/iio/gyro/mpu3050-core.c
@@ -272,7 +272,16 @@ static int mpu3050_read_raw(struct iio_dev *indio_dev,
 	case IIO_CHAN_INFO_OFFSET:
 		switch (chan->type) {
 		case IIO_TEMP:
-			/* The temperature scaling is (x+23000)/280 Celsius */
+			/*
+			 * The temperature scaling is (x+23000)/280 Celsius
+			 * for the "best fit straight line" temperature range
+			 * of -30C..85C.  The 23000 includes room temperature
+			 * offset of +35C, 280 is the precision scale and x is
+			 * the 16-bit signed integer reported by hardware.
+			 *
+			 * Temperature value itself represents temperature of
+			 * the sensor die.
+			 */
 			*val = 23000;
 			return IIO_VAL_INT;
 		default:
@@ -329,7 +338,7 @@ static int mpu3050_read_raw(struct iio_dev *indio_dev,
 				goto out_read_raw_unlock;
 			}
 
-			*val = be16_to_cpu(raw_val);
+			*val = (s16)be16_to_cpu(raw_val);
 			ret = IIO_VAL_INT;
 
 			goto out_read_raw_unlock;
-- 
2.30.2


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH v3] iio: gyro: mpu3050: Fix reported temperature value
  2021-04-23  2:09 [PATCH v3] iio: gyro: mpu3050: Fix reported temperature value Dmitry Osipenko
@ 2021-04-23 10:14 ` Jean-Baptiste Maneyrol
  2021-04-24  4:58   ` Dmitry Osipenko
  0 siblings, 1 reply; 5+ messages in thread
From: Jean-Baptiste Maneyrol @ 2021-04-23 10:14 UTC (permalink / raw)
  To: Dmitry Osipenko, Linus Walleij, Jonathan Cameron,
	Lars-Peter Clausen, Andy Shevchenko, Maxim Schwalm,
	Svyatoslav Ryhel
  Cc: linux-iio, linux-kernel

Hello,

thanks for this work.

Temperature value should obviously be 16 bits signed, thanks for the fix. By looking at our internal datasheets, I can confirm the values for MPU-30x0 family (div by 280 and 23000 offset LSB).

I'm sorry I don't have access to these more than 1 decade old chips, so I cannot test on my side. But there is no reason it wouldn't be OK.

Acked-by: Jean-Baptiste Maneyrol <jmaneyrol@invensense.com>

Thanks,
JB

From: Dmitry Osipenko <digetx@gmail.com>
Sent: Friday, April 23, 2021 04:09
To: Linus Walleij <linus.walleij@linaro.org>; Jonathan Cameron <jic23@kernel.org>; Lars-Peter Clausen <lars@metafoo.de>; Andy Shevchenko <andy.shevchenko@gmail.com>; Maxim Schwalm <maxim.schwalm@gmail.com>; Svyatoslav Ryhel <clamor95@gmail.com>
Cc: linux-iio@vger.kernel.org <linux-iio@vger.kernel.org>; linux-kernel@vger.kernel.org <linux-kernel@vger.kernel.org>
Subject: [PATCH v3] iio: gyro: mpu3050: Fix reported temperature value 
 
 CAUTION: This email originated from outside of the organization. Please make sure the sender is who they say they are and do not click links or open attachments unless you recognize the sender and know the content is safe.

The raw temperature value is a 16-bit signed integer. The sign casting
is missing in the code, which results in a wrong temperature reported
by userspace tools, fix it.

Cc: stable@vger.kernel.org
Fixes: 3904b28efb2c ("iio: gyro: Add driver for the MPU-3050 gyroscope")
Datasheet: https://urldefense.com/v3/__https://www.cdiweb.com/datasheets/invensense/mpu-3000a.pdf__;!!As-oOPDlYaQ!RejqeP2WMYRtGXwerukURT11pBrLee8OdIBxdEPzcNdqyuOVrDeorUdlv7_pvdRarvk$ 
Tested-by: Maxim Schwalm <maxim.schwalm@gmail.com> # Asus TF700T
Tested-by: Svyatoslav Ryhel <clamor95@gmail.com> # Asus TF201
Reported-by: Svyatoslav Ryhel <clamor95@gmail.com>
Reviewed-by: Andy Shevchenko <Andy.Shevchenko@gmail.com>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Dmitry Osipenko <digetx@gmail.com>
---

v3: - Improved comment in the code, saying that the temperature range
      corresponds to the "best fit straight line" range where temperature
      is reported reliably, i.e. in accordance to the linear equation.

v2: - Replaced "signed 16bit integer" wording with "16-bit signed integer",
      replaced "Link" tag with the "Datasheet" and added "Fixes" tag as was
      suggested by Andy Shevchenko.

    - Added r-b from Andy Shevchenko and Linus Walleij.

 drivers/iio/gyro/mpu3050-core.c | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

diff --git a/drivers/iio/gyro/mpu3050-core.c b/drivers/iio/gyro/mpu3050-core.c
index ac90be03332a..f17a93519535 100644
--- a/drivers/iio/gyro/mpu3050-core.c
+++ b/drivers/iio/gyro/mpu3050-core.c
@@ -272,7 +272,16 @@ static int mpu3050_read_raw(struct iio_dev *indio_dev,
         case IIO_CHAN_INFO_OFFSET:
                 switch (chan->type) {
                 case IIO_TEMP:
-                       /* The temperature scaling is (x+23000)/280 Celsius */
+                       /*
+                        * The temperature scaling is (x+23000)/280 Celsius
+                        * for the "best fit straight line" temperature range
+                        * of -30C..85C.  The 23000 includes room temperature
+                        * offset of +35C, 280 is the precision scale and x is
+                        * the 16-bit signed integer reported by hardware.
+                        *
+                        * Temperature value itself represents temperature of
+                        * the sensor die.
+                        */
                         *val = 23000;
                         return IIO_VAL_INT;
                 default:
@@ -329,7 +338,7 @@ static int mpu3050_read_raw(struct iio_dev *indio_dev,
                                 goto out_read_raw_unlock;
                         }
 
-                       *val = be16_to_cpu(raw_val);
+                       *val = (s16)be16_to_cpu(raw_val);
                         ret = IIO_VAL_INT;
 
                         goto out_read_raw_unlock;
-- 
2.30.2

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH v3] iio: gyro: mpu3050: Fix reported temperature value
  2021-04-23 10:14 ` Jean-Baptiste Maneyrol
@ 2021-04-24  4:58   ` Dmitry Osipenko
  2021-04-24 10:46     ` Jonathan Cameron
  0 siblings, 1 reply; 5+ messages in thread
From: Dmitry Osipenko @ 2021-04-24  4:58 UTC (permalink / raw)
  To: Jean-Baptiste Maneyrol, Linus Walleij, Jonathan Cameron,
	Lars-Peter Clausen, Andy Shevchenko, Maxim Schwalm,
	Svyatoslav Ryhel
  Cc: linux-iio, linux-kernel

23.04.2021 13:14, Jean-Baptiste Maneyrol пишет:
> Hello,
> 
> thanks for this work.
> 
> Temperature value should obviously be 16 bits signed, thanks for the fix. By looking at our internal datasheets, I can confirm the values for MPU-30x0 family (div by 280 and 23000 offset LSB).
> 
> I'm sorry I don't have access to these more than 1 decade old chips, so I cannot test on my side. But there is no reason it wouldn't be OK.
> 
> Acked-by: Jean-Baptiste Maneyrol <jmaneyrol@invensense.com>

Thank you very much for confirming that the equation is correct, very
appreciate that.

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v3] iio: gyro: mpu3050: Fix reported temperature value
  2021-04-24  4:58   ` Dmitry Osipenko
@ 2021-04-24 10:46     ` Jonathan Cameron
  2021-04-24 19:44       ` Dmitry Osipenko
  0 siblings, 1 reply; 5+ messages in thread
From: Jonathan Cameron @ 2021-04-24 10:46 UTC (permalink / raw)
  To: Dmitry Osipenko
  Cc: Jean-Baptiste Maneyrol, Linus Walleij, Lars-Peter Clausen,
	Andy Shevchenko, Maxim Schwalm, Svyatoslav Ryhel, linux-iio,
	linux-kernel

On Sat, 24 Apr 2021 07:58:08 +0300
Dmitry Osipenko <digetx@gmail.com> wrote:

> 23.04.2021 13:14, Jean-Baptiste Maneyrol пишет:
> > Hello,
> > 
> > thanks for this work.
> > 
> > Temperature value should obviously be 16 bits signed, thanks for the fix. By looking at our internal datasheets, I can confirm the values for MPU-30x0 family (div by 280 and 23000 offset LSB).
> > 
> > I'm sorry I don't have access to these more than 1 decade old chips, so I cannot test on my side. But there is no reason it wouldn't be OK.
> > 
> > Acked-by: Jean-Baptiste Maneyrol <jmaneyrol@invensense.com>  
> 
> Thank you very much for confirming that the equation is correct, very
> appreciate that.

Thanks. Applied to the fixes-togreg branch of iio.git.
Note these won't go upstream until after rc1 but hopefully will soon after
that.

Thanks for the detective work etc on this!

Jonathan

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v3] iio: gyro: mpu3050: Fix reported temperature value
  2021-04-24 10:46     ` Jonathan Cameron
@ 2021-04-24 19:44       ` Dmitry Osipenko
  0 siblings, 0 replies; 5+ messages in thread
From: Dmitry Osipenko @ 2021-04-24 19:44 UTC (permalink / raw)
  To: Jonathan Cameron
  Cc: Jean-Baptiste Maneyrol, Linus Walleij, Lars-Peter Clausen,
	Andy Shevchenko, Maxim Schwalm, Svyatoslav Ryhel, linux-iio,
	linux-kernel

24.04.2021 13:46, Jonathan Cameron пишет:
> On Sat, 24 Apr 2021 07:58:08 +0300
> Dmitry Osipenko <digetx@gmail.com> wrote:
> 
>> 23.04.2021 13:14, Jean-Baptiste Maneyrol пишет:
>>> Hello,
>>>
>>> thanks for this work.
>>>
>>> Temperature value should obviously be 16 bits signed, thanks for the fix. By looking at our internal datasheets, I can confirm the values for MPU-30x0 family (div by 280 and 23000 offset LSB).
>>>
>>> I'm sorry I don't have access to these more than 1 decade old chips, so I cannot test on my side. But there is no reason it wouldn't be OK.
>>>
>>> Acked-by: Jean-Baptiste Maneyrol <jmaneyrol@invensense.com>  
>>
>> Thank you very much for confirming that the equation is correct, very
>> appreciate that.
> 
> Thanks. Applied to the fixes-togreg branch of iio.git.
> Note these won't go upstream until after rc1 but hopefully will soon after
> that.
> 
> Thanks for the detective work etc on this!

Thank you.

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2021-04-24 19:44 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-04-23  2:09 [PATCH v3] iio: gyro: mpu3050: Fix reported temperature value Dmitry Osipenko
2021-04-23 10:14 ` Jean-Baptiste Maneyrol
2021-04-24  4:58   ` Dmitry Osipenko
2021-04-24 10:46     ` Jonathan Cameron
2021-04-24 19:44       ` Dmitry Osipenko

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.