linux-iio.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Jean-Baptiste Maneyrol <JManeyrol@invensense.com>
To: Baptiste Mansuy <bmansuy@invensense.com>,
	"linux-iio@vger.kernel.org" <linux-iio@vger.kernel.org>
Subject: Re: --[[SPOOF or PHISHING]]--[PATCH] Add startup time for each chip using inv_mpu6050 driver
Date: Mon, 21 Jun 2021 09:16:30 +0000	[thread overview]
Message-ID: <BL0PR12MB5011C3AAC67AF825FAA86857C40A9@BL0PR12MB5011.namprd12.prod.outlook.com> (raw)
In-Reply-To: <20210621085731.9212-1-bmansuy@invensense.com>

Hello,

looks good for me, thanks for the patch.

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

Thanks,
JB

From: Baptiste Mansuy <bmansuy@invensense.com>
Sent: Monday, June 21, 2021 10:57
To: linux-iio@vger.kernel.org <linux-iio@vger.kernel.org>
Cc: Baptiste Mansuy <bmansuy@invensense.com>
Subject: --[[SPOOF or PHISHING]]--[PATCH] Add startup time for each chip using inv_mpu6050 driver 
 
 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.

Add startup time for each chip familly. This allows a better behaviour of 
the gyro and the accel. The gyro has now the time to stabilise itself 
thus making initial data discarding for gyro irrelevant.

Signed-off-by: Baptiste Mansuy <bmansuy@invensense.com>
---
 drivers/iio/imu/inv_mpu6050/inv_mpu_core.c    | 22 +++++++++++++++----
 drivers/iio/imu/inv_mpu6050/inv_mpu_iio.h     | 18 +++++++++++++--
 drivers/iio/imu/inv_mpu6050/inv_mpu_trigger.c | 15 ++-----------
 3 files changed, 36 insertions(+), 19 deletions(-)

diff --git a/drivers/iio/imu/inv_mpu6050/inv_mpu_core.c b/drivers/iio/imu/inv_mpu6050/inv_mpu_core.c
index 6244a07048df..50be32b60f19 100644
--- a/drivers/iio/imu/inv_mpu6050/inv_mpu_core.c
+++ b/drivers/iio/imu/inv_mpu6050/inv_mpu_core.c
@@ -143,6 +143,7 @@ static const struct inv_mpu6050_hw hw_info[] = {
                 .config = &chip_config_6050,
                 .fifo_size = 1024,
                 .temp = {INV_MPU6050_TEMP_OFFSET, INV_MPU6050_TEMP_SCALE},
+               .startup_time = {INV_MPU6050_GYRO_STARTUP_TIME, INV_MPU6050_ACCEL_STARTUP_TIME},
         },
         {
                 .whoami = INV_MPU6500_WHOAMI_VALUE,
@@ -151,6 +152,7 @@ static const struct inv_mpu6050_hw hw_info[] = {
                 .config = &chip_config_6500,
                 .fifo_size = 512,
                 .temp = {INV_MPU6500_TEMP_OFFSET, INV_MPU6500_TEMP_SCALE},
+               .startup_time = {INV_MPU6500_GYRO_STARTUP_TIME, INV_MPU6500_ACCEL_STARTUP_TIME},
         },
         {
                 .whoami = INV_MPU6515_WHOAMI_VALUE,
@@ -159,6 +161,7 @@ static const struct inv_mpu6050_hw hw_info[] = {
                 .config = &chip_config_6500,
                 .fifo_size = 512,
                 .temp = {INV_MPU6500_TEMP_OFFSET, INV_MPU6500_TEMP_SCALE},
+               .startup_time = {INV_MPU6500_GYRO_STARTUP_TIME, INV_MPU6500_ACCEL_STARTUP_TIME},
         },
         {
                 .whoami = INV_MPU6880_WHOAMI_VALUE,
@@ -167,6 +170,7 @@ static const struct inv_mpu6050_hw hw_info[] = {
                 .config = &chip_config_6500,
                 .fifo_size = 4096,
                 .temp = {INV_MPU6500_TEMP_OFFSET, INV_MPU6500_TEMP_SCALE},
+               .startup_time = {INV_MPU6500_GYRO_STARTUP_TIME, INV_MPU6500_ACCEL_STARTUP_TIME},
         },
         {
                 .whoami = INV_MPU6000_WHOAMI_VALUE,
@@ -175,6 +179,7 @@ static const struct inv_mpu6050_hw hw_info[] = {
                 .config = &chip_config_6050,
                 .fifo_size = 1024,
                 .temp = {INV_MPU6050_TEMP_OFFSET, INV_MPU6050_TEMP_SCALE},
+               .startup_time = {INV_MPU6050_GYRO_STARTUP_TIME, INV_MPU6050_ACCEL_STARTUP_TIME},
         },
         {
                 .whoami = INV_MPU9150_WHOAMI_VALUE,
@@ -183,6 +188,7 @@ static const struct inv_mpu6050_hw hw_info[] = {
                 .config = &chip_config_6050,
                 .fifo_size = 1024,
                 .temp = {INV_MPU6050_TEMP_OFFSET, INV_MPU6050_TEMP_SCALE},
+               .startup_time = {INV_MPU6050_GYRO_STARTUP_TIME, INV_MPU6050_ACCEL_STARTUP_TIME},
         },
         {
                 .whoami = INV_MPU9250_WHOAMI_VALUE,
@@ -191,6 +197,7 @@ static const struct inv_mpu6050_hw hw_info[] = {
                 .config = &chip_config_6500,
                 .fifo_size = 512,
                 .temp = {INV_MPU6500_TEMP_OFFSET, INV_MPU6500_TEMP_SCALE},
+               .startup_time = {INV_MPU6500_GYRO_STARTUP_TIME, INV_MPU6500_ACCEL_STARTUP_TIME},
         },
         {
                 .whoami = INV_MPU9255_WHOAMI_VALUE,
@@ -199,6 +206,7 @@ static const struct inv_mpu6050_hw hw_info[] = {
                 .config = &chip_config_6500,
                 .fifo_size = 512,
                 .temp = {INV_MPU6500_TEMP_OFFSET, INV_MPU6500_TEMP_SCALE},
+               .startup_time = {INV_MPU6500_GYRO_STARTUP_TIME, INV_MPU6500_ACCEL_STARTUP_TIME},
         },
         {
                 .whoami = INV_ICM20608_WHOAMI_VALUE,
@@ -207,6 +215,7 @@ static const struct inv_mpu6050_hw hw_info[] = {
                 .config = &chip_config_6500,
                 .fifo_size = 512,
                 .temp = {INV_ICM20608_TEMP_OFFSET, INV_ICM20608_TEMP_SCALE},
+               .startup_time = {INV_MPU6500_GYRO_STARTUP_TIME, INV_MPU6500_ACCEL_STARTUP_TIME},
         },
         {
                 .whoami = INV_ICM20609_WHOAMI_VALUE,
@@ -215,6 +224,7 @@ static const struct inv_mpu6050_hw hw_info[] = {
                 .config = &chip_config_6500,
                 .fifo_size = 4 * 1024,
                 .temp = {INV_ICM20608_TEMP_OFFSET, INV_ICM20608_TEMP_SCALE},
+               .startup_time = {INV_MPU6500_GYRO_STARTUP_TIME, INV_MPU6500_ACCEL_STARTUP_TIME},
         },
         {
                 .whoami = INV_ICM20689_WHOAMI_VALUE,
@@ -223,6 +233,7 @@ static const struct inv_mpu6050_hw hw_info[] = {
                 .config = &chip_config_6500,
                 .fifo_size = 4 * 1024,
                 .temp = {INV_ICM20608_TEMP_OFFSET, INV_ICM20608_TEMP_SCALE},
+               .startup_time = {INV_MPU6500_GYRO_STARTUP_TIME, INV_MPU6500_ACCEL_STARTUP_TIME},
         },
         {
                 .whoami = INV_ICM20602_WHOAMI_VALUE,
@@ -231,6 +242,7 @@ static const struct inv_mpu6050_hw hw_info[] = {
                 .config = &chip_config_6500,
                 .fifo_size = 1008,
                 .temp = {INV_ICM20608_TEMP_OFFSET, INV_ICM20608_TEMP_SCALE},
+               .startup_time = {INV_ICM20602_GYRO_STARTUP_TIME, INV_ICM20602_ACCEL_STARTUP_TIME},
         },
         {
                 .whoami = INV_ICM20690_WHOAMI_VALUE,
@@ -239,6 +251,7 @@ static const struct inv_mpu6050_hw hw_info[] = {
                 .config = &chip_config_6500,
                 .fifo_size = 1024,
                 .temp = {INV_ICM20608_TEMP_OFFSET, INV_ICM20608_TEMP_SCALE},
+               .startup_time = {INV_ICM20690_GYRO_STARTUP_TIME, INV_ICM20690_ACCEL_STARTUP_TIME},
         },
         {
                 .whoami = INV_IAM20680_WHOAMI_VALUE,
@@ -247,6 +260,7 @@ static const struct inv_mpu6050_hw hw_info[] = {
                 .config = &chip_config_6500,
                 .fifo_size = 512,
                 .temp = {INV_ICM20608_TEMP_OFFSET, INV_ICM20608_TEMP_SCALE},
+               .startup_time = {INV_MPU6500_GYRO_STARTUP_TIME, INV_MPU6500_ACCEL_STARTUP_TIME},
         },
 };
 
@@ -379,12 +393,12 @@ int inv_mpu6050_switch_engine(struct inv_mpu6050_state *st, bool en,
                 sleep = 0;
                 if (en) {
                         if (mask & INV_MPU6050_SENSOR_ACCL) {
-                               if (sleep < INV_MPU6050_ACCEL_UP_TIME)
-                                       sleep = INV_MPU6050_ACCEL_UP_TIME;
+                               if (sleep < st->hw->startup_time.accel)
+                                       sleep = st->hw->startup_time.accel;
                         }
                         if (mask & INV_MPU6050_SENSOR_GYRO) {
-                               if (sleep < INV_MPU6050_GYRO_UP_TIME)
-                                       sleep = INV_MPU6050_GYRO_UP_TIME;
+                               if (sleep < st->hw->startup_time.gyro)
+                                       sleep = st->hw->startup_time.gyro;
                         }
                 } else {
                         if (mask & INV_MPU6050_SENSOR_GYRO) {
diff --git a/drivers/iio/imu/inv_mpu6050/inv_mpu_iio.h b/drivers/iio/imu/inv_mpu6050/inv_mpu_iio.h
index 58188dc0dd13..c6aa36ee966a 100644
--- a/drivers/iio/imu/inv_mpu6050/inv_mpu_iio.h
+++ b/drivers/iio/imu/inv_mpu6050/inv_mpu_iio.h
@@ -149,6 +149,10 @@ struct inv_mpu6050_hw {
                 int offset;
                 int scale;
         } temp;
+       struct {
+               unsigned int accel;
+               unsigned int gyro;
+       } startup_time;
 };
 
 /*
@@ -320,11 +324,21 @@ struct inv_mpu6050_state {
 /* delay time in milliseconds */
 #define INV_MPU6050_POWER_UP_TIME            100
 #define INV_MPU6050_TEMP_UP_TIME             100
-#define INV_MPU6050_ACCEL_UP_TIME            20
-#define INV_MPU6050_GYRO_UP_TIME             35
+#define INV_MPU6050_ACCEL_STARTUP_TIME       20
+#define INV_MPU6050_GYRO_STARTUP_TIME        60
 #define INV_MPU6050_GYRO_DOWN_TIME           150
 #define INV_MPU6050_SUSPEND_DELAY_MS         2000
 
+#define INV_MPU6500_GYRO_STARTUP_TIME        70
+#define INV_MPU6500_ACCEL_STARTUP_TIME       30
+
+#define INV_ICM20602_GYRO_STARTUP_TIME       100
+#define INV_ICM20602_ACCEL_STARTUP_TIME      20
+
+#define INV_ICM20690_GYRO_STARTUP_TIME       80
+#define INV_ICM20690_ACCEL_STARTUP_TIME      10
+
+
 /* delay time in microseconds */
 #define INV_MPU6050_REG_UP_TIME_MIN          5000
 #define INV_MPU6050_REG_UP_TIME_MAX          10000
diff --git a/drivers/iio/imu/inv_mpu6050/inv_mpu_trigger.c b/drivers/iio/imu/inv_mpu6050/inv_mpu_trigger.c
index e21ba778595a..28416a09c462 100644
--- a/drivers/iio/imu/inv_mpu6050/inv_mpu_trigger.c
+++ b/drivers/iio/imu/inv_mpu6050/inv_mpu_trigger.c
@@ -91,22 +91,11 @@ static unsigned int inv_scan_query(struct iio_dev *indio_dev)
 
 static unsigned int inv_compute_skip_samples(const struct inv_mpu6050_state *st)
 {
-       unsigned int gyro_skip = 0;
-       unsigned int magn_skip = 0;
-       unsigned int skip_samples;
-
-       /* gyro first sample is out of specs, skip it */
-       if (st->chip_config.gyro_fifo_enable)
-               gyro_skip = 1;
+       unsigned int skip_samples = 0;
 
         /* mag first sample is always not ready, skip it */
         if (st->chip_config.magn_fifo_enable)
-               magn_skip = 1;
-
-       /* compute first samples to skip */
-       skip_samples = gyro_skip;
-       if (magn_skip > skip_samples)
-               skip_samples = magn_skip;
+               skip_samples = 1;
 
         return skip_samples;
 }
-- 
2.25.1

  reply	other threads:[~2021-06-21  9:40 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-06-21  8:57 [PATCH] Add startup time for each chip using inv_mpu6050 driver Baptiste Mansuy
2021-06-21  9:16 ` Jean-Baptiste Maneyrol [this message]
2021-07-01  7:43   ` --[[SPOOF or PHISHING]]--Re: --[[SPOOF or PHISHING]]--[PATCH] " Jean-Baptiste Maneyrol
2021-07-04 17:32     ` Jonathan Cameron
2021-07-18 14:41       ` Jonathan Cameron

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=BL0PR12MB5011C3AAC67AF825FAA86857C40A9@BL0PR12MB5011.namprd12.prod.outlook.com \
    --to=jmaneyrol@invensense.com \
    --cc=bmansuy@invensense.com \
    --cc=linux-iio@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).