diff mbox series

[2/4] iio: move inv_icm42600 timestamp module in common

Message ID 20230531142513.48507-3-inv.git-commit@tdk.com (mailing list archive)
State Changes Requested
Headers show
Series Factorize timestamp module | expand

Commit Message

inv.git-commit@tdk.com May 31, 2023, 2:25 p.m. UTC
From: Jean-Baptiste Maneyrol <jean-baptiste.maneyrol@tdk.com>

Create new inv_sensors common modules and move inv_icm42600
timestamp module inside.
Modify inv_icm42600 driver to use timestamp module.

Signed-off-by: Jean-Baptiste Maneyrol <jean-baptiste.maneyrol@tdk.com>
---
 drivers/iio/common/Kconfig                           |  1 +
 drivers/iio/common/Makefile                          |  1 +
 drivers/iio/common/inv_sensors/Kconfig               |  7 +++++++
 drivers/iio/common/inv_sensors/Makefile              |  6 ++++++
 .../inv_sensors}/inv_icm42600_timestamp.c            | 12 ++++++++++--
 drivers/iio/imu/inv_icm42600/Kconfig                 |  1 +
 drivers/iio/imu/inv_icm42600/Makefile                |  1 -
 drivers/iio/imu/inv_icm42600/inv_icm42600_accel.c    |  2 +-
 drivers/iio/imu/inv_icm42600/inv_icm42600_buffer.c   |  2 +-
 drivers/iio/imu/inv_icm42600/inv_icm42600_core.c     |  3 ++-
 drivers/iio/imu/inv_icm42600/inv_icm42600_gyro.c     |  2 +-
 .../linux/iio/common}/inv_icm42600_timestamp.h       |  0
 12 files changed, 31 insertions(+), 7 deletions(-)
 create mode 100644 drivers/iio/common/inv_sensors/Kconfig
 create mode 100644 drivers/iio/common/inv_sensors/Makefile
 rename drivers/iio/{imu/inv_icm42600 => common/inv_sensors}/inv_icm42600_timestamp.c (91%)
 rename {drivers/iio/imu/inv_icm42600 => include/linux/iio/common}/inv_icm42600_timestamp.h (100%)

Comments

Andy Shevchenko June 3, 2023, 11:13 a.m. UTC | #1
Wed, May 31, 2023 at 02:25:11PM +0000, inv.git-commit@tdk.com kirjoitti:
> From: Jean-Baptiste Maneyrol <jean-baptiste.maneyrol@tdk.com>
> 
> Create new inv_sensors common modules and move inv_icm42600
> timestamp module inside.
> Modify inv_icm42600 driver to use timestamp module.

...

>  #include <linux/kernel.h>
>  #include <linux/math64.h>
> +#include <linux/module.h>
>  #include <linux/errno.h>

> -

Leave this blank line. It helps to divide generic headers and IIO (subsystem)
related.

> -#include "inv_icm42600_timestamp.h"
> +#include <linux/iio/common/inv_icm42600_timestamp.h>

...

>  #include <linux/delay.h>

+ Blank line?

>  #include <linux/iio/iio.h>

Keep it ordered? (But yeah, this one probably out of scope of the series.)

>  #include <linux/iio/buffer.h>
> +#include <linux/iio/common/inv_icm42600_timestamp.h>

>  #include "inv_icm42600.h"
> -#include "inv_icm42600_timestamp.h"
>  #include "inv_icm42600_buffer.h"

...

>  #include <linux/property.h>
>  #include <linux/regmap.h>

+ Blank line?

>  #include <linux/iio/iio.h>
> +#include <linux/iio/common/inv_icm42600_timestamp.h>

Keep it ordered?

>  
>  #include "inv_icm42600.h"
>  #include "inv_icm42600_buffer.h"
> -#include "inv_icm42600_timestamp.h"

...

>  #include <linux/math64.h>
>  #include <linux/iio/iio.h>
>  #include <linux/iio/buffer.h>
> +#include <linux/iio/common/inv_icm42600_timestamp.h>
>  #include <linux/iio/kfifo_buf.h>
>  
>  #include "inv_icm42600.h"
>  #include "inv_icm42600_temp.h"
>  #include "inv_icm42600_buffer.h"
> -#include "inv_icm42600_timestamp.h"

As per above comments.
Jonathan Cameron June 4, 2023, 10:58 a.m. UTC | #2
On Wed, 31 May 2023 14:25:11 +0000
inv.git-commit@tdk.com wrote:

> From: Jean-Baptiste Maneyrol <jean-baptiste.maneyrol@tdk.com>
> 
> Create new inv_sensors common modules and move inv_icm42600
> timestamp module inside.
> Modify inv_icm42600 driver to use timestamp module.
> 
> Signed-off-by: Jean-Baptiste Maneyrol <jean-baptiste.maneyrol@tdk.com>
Hi Jean-Baptiste,

Any plan to use this outside of IMU drivers?  If not I'd be tempted
to keep it more local.

drivers/iio/imu/inv_common/ or similar and avoid the global
header by using a "../inv_common/" include path.

Changes themselves look fine to me.

Jonathan

> ---
>  drivers/iio/common/Kconfig                           |  1 +
>  drivers/iio/common/Makefile                          |  1 +
>  drivers/iio/common/inv_sensors/Kconfig               |  7 +++++++
>  drivers/iio/common/inv_sensors/Makefile              |  6 ++++++
>  .../inv_sensors}/inv_icm42600_timestamp.c            | 12 ++++++++++--
>  drivers/iio/imu/inv_icm42600/Kconfig                 |  1 +
>  drivers/iio/imu/inv_icm42600/Makefile                |  1 -
>  drivers/iio/imu/inv_icm42600/inv_icm42600_accel.c    |  2 +-
>  drivers/iio/imu/inv_icm42600/inv_icm42600_buffer.c   |  2 +-
>  drivers/iio/imu/inv_icm42600/inv_icm42600_core.c     |  3 ++-
>  drivers/iio/imu/inv_icm42600/inv_icm42600_gyro.c     |  2 +-
>  .../linux/iio/common}/inv_icm42600_timestamp.h       |  0
>  12 files changed, 31 insertions(+), 7 deletions(-)
>  create mode 100644 drivers/iio/common/inv_sensors/Kconfig
>  create mode 100644 drivers/iio/common/inv_sensors/Makefile
>  rename drivers/iio/{imu/inv_icm42600 => common/inv_sensors}/inv_icm42600_timestamp.c (91%)
>  rename {drivers/iio/imu/inv_icm42600 => include/linux/iio/common}/inv_icm42600_timestamp.h (100%)
> 
> diff --git a/drivers/iio/common/Kconfig b/drivers/iio/common/Kconfig
> index 0334b4954773..1ccb5ccf3706 100644
> --- a/drivers/iio/common/Kconfig
> +++ b/drivers/iio/common/Kconfig
> @@ -5,6 +5,7 @@
>  
>  source "drivers/iio/common/cros_ec_sensors/Kconfig"
>  source "drivers/iio/common/hid-sensors/Kconfig"
> +source "drivers/iio/common/inv_sensors/Kconfig"
>  source "drivers/iio/common/ms_sensors/Kconfig"
>  source "drivers/iio/common/scmi_sensors/Kconfig"
>  source "drivers/iio/common/ssp_sensors/Kconfig"
> diff --git a/drivers/iio/common/Makefile b/drivers/iio/common/Makefile
> index fad40e1e1718..d3e952239a62 100644
> --- a/drivers/iio/common/Makefile
> +++ b/drivers/iio/common/Makefile
> @@ -10,6 +10,7 @@
>  # When adding new entries keep the list in alphabetical order
>  obj-y += cros_ec_sensors/
>  obj-y += hid-sensors/
> +obj-y += inv_sensors/
>  obj-y += ms_sensors/
>  obj-y += scmi_sensors/
>  obj-y += ssp_sensors/
> diff --git a/drivers/iio/common/inv_sensors/Kconfig b/drivers/iio/common/inv_sensors/Kconfig
> new file mode 100644
> index 000000000000..28815fb43157
> --- /dev/null
> +++ b/drivers/iio/common/inv_sensors/Kconfig
> @@ -0,0 +1,7 @@
> +# SPDX-License-Identifier: GPL-2.0-only
> +#
> +# TDK-InvenSense sensors common library
> +#
> +
> +config IIO_INV_SENSORS_TIMESTAMP
> +	tristate
> diff --git a/drivers/iio/common/inv_sensors/Makefile b/drivers/iio/common/inv_sensors/Makefile
> new file mode 100644
> index 000000000000..93bddb9356b8
> --- /dev/null
> +++ b/drivers/iio/common/inv_sensors/Makefile
> @@ -0,0 +1,6 @@
> +# SPDX-License-Identifier: GPL-2.0
> +#
> +# Makefile for TDK-InvenSense sensors module.
> +#
> +
> +obj-$(CONFIG_IIO_INV_SENSORS_TIMESTAMP) += inv_icm42600_timestamp.o
> diff --git a/drivers/iio/imu/inv_icm42600/inv_icm42600_timestamp.c b/drivers/iio/common/inv_sensors/inv_icm42600_timestamp.c
> similarity index 91%
> rename from drivers/iio/imu/inv_icm42600/inv_icm42600_timestamp.c
> rename to drivers/iio/common/inv_sensors/inv_icm42600_timestamp.c
> index ceae8ccb1747..411f561e1a24 100644
> --- a/drivers/iio/imu/inv_icm42600/inv_icm42600_timestamp.c
> +++ b/drivers/iio/common/inv_sensors/inv_icm42600_timestamp.c
> @@ -5,9 +5,9 @@
>  
>  #include <linux/kernel.h>
>  #include <linux/math64.h>
> +#include <linux/module.h>
>  #include <linux/errno.h>
> -
> -#include "inv_icm42600_timestamp.h"
> +#include <linux/iio/common/inv_icm42600_timestamp.h>
>  
>  /* internal chip period is 32kHz, 31250ns */
>  #define INV_ICM42600_TIMESTAMP_PERIOD		31250
> @@ -54,6 +54,7 @@ void inv_icm42600_timestamp_init(struct inv_icm42600_timestamp *ts,
>  	/* use theoretical value for chip period */
>  	inv_update_acc(&ts->chip_period, INV_ICM42600_TIMESTAMP_PERIOD);
>  }
> +EXPORT_SYMBOL_NS_GPL(inv_icm42600_timestamp_init, IIO_INV_SENSORS_TIMESTAMP);
>  
>  int inv_icm42600_timestamp_update_odr(struct inv_icm42600_timestamp *ts,
>  				      uint32_t period, bool fifo)
> @@ -66,6 +67,7 @@ int inv_icm42600_timestamp_update_odr(struct inv_icm42600_timestamp *ts,
>  
>  	return 0;
>  }
> +EXPORT_SYMBOL_NS_GPL(inv_icm42600_timestamp_update_odr, IIO_INV_SENSORS_TIMESTAMP);
>  
>  static bool inv_validate_period(uint32_t period, uint32_t mult)
>  {
> @@ -153,6 +155,7 @@ void inv_icm42600_timestamp_interrupt(struct inv_icm42600_timestamp *ts,
>  	if (valid)
>  		inv_align_timestamp_it(ts);
>  }
> +EXPORT_SYMBOL_NS_GPL(inv_icm42600_timestamp_interrupt, IIO_INV_SENSORS_TIMESTAMP);
>  
>  void inv_icm42600_timestamp_apply_odr(struct inv_icm42600_timestamp *ts,
>  				      uint32_t fifo_period, size_t fifo_nb,
> @@ -184,3 +187,8 @@ void inv_icm42600_timestamp_apply_odr(struct inv_icm42600_timestamp *ts,
>  		ts->timestamp = ts->it.up - interval;
>  	}
>  }
> +EXPORT_SYMBOL_NS_GPL(inv_icm42600_timestamp_apply_odr, IIO_INV_SENSORS_TIMESTAMP);
> +
> +MODULE_AUTHOR("InvenSense, Inc.");
> +MODULE_DESCRIPTION("InvenSense sensors timestamp module");
> +MODULE_LICENSE("GPL");
> diff --git a/drivers/iio/imu/inv_icm42600/Kconfig b/drivers/iio/imu/inv_icm42600/Kconfig
> index 50cbcfcb6cf1..f56b0816cc4d 100644
> --- a/drivers/iio/imu/inv_icm42600/Kconfig
> +++ b/drivers/iio/imu/inv_icm42600/Kconfig
> @@ -3,6 +3,7 @@
>  config INV_ICM42600
>  	tristate
>  	select IIO_BUFFER
> +	select IIO_INV_SENSORS_TIMESTAMP
>  
>  config INV_ICM42600_I2C
>  	tristate "InvenSense ICM-426xx I2C driver"
> diff --git a/drivers/iio/imu/inv_icm42600/Makefile b/drivers/iio/imu/inv_icm42600/Makefile
> index 291714d9aa54..0f49f6df3647 100644
> --- a/drivers/iio/imu/inv_icm42600/Makefile
> +++ b/drivers/iio/imu/inv_icm42600/Makefile
> @@ -6,7 +6,6 @@ inv-icm42600-y += inv_icm42600_gyro.o
>  inv-icm42600-y += inv_icm42600_accel.o
>  inv-icm42600-y += inv_icm42600_temp.o
>  inv-icm42600-y += inv_icm42600_buffer.o
> -inv-icm42600-y += inv_icm42600_timestamp.o
>  
>  obj-$(CONFIG_INV_ICM42600_I2C) += inv-icm42600-i2c.o
>  inv-icm42600-i2c-y += inv_icm42600_i2c.o
> diff --git a/drivers/iio/imu/inv_icm42600/inv_icm42600_accel.c b/drivers/iio/imu/inv_icm42600/inv_icm42600_accel.c
> index c3f433ad3af6..1015de636a94 100644
> --- a/drivers/iio/imu/inv_icm42600/inv_icm42600_accel.c
> +++ b/drivers/iio/imu/inv_icm42600/inv_icm42600_accel.c
> @@ -12,12 +12,12 @@
>  #include <linux/math64.h>
>  #include <linux/iio/iio.h>
>  #include <linux/iio/buffer.h>
> +#include <linux/iio/common/inv_icm42600_timestamp.h>
>  #include <linux/iio/kfifo_buf.h>
>  
>  #include "inv_icm42600.h"
>  #include "inv_icm42600_temp.h"
>  #include "inv_icm42600_buffer.h"
> -#include "inv_icm42600_timestamp.h"
>  
>  #define INV_ICM42600_ACCEL_CHAN(_modifier, _index, _ext_info)		\
>  	{								\
> diff --git a/drivers/iio/imu/inv_icm42600/inv_icm42600_buffer.c b/drivers/iio/imu/inv_icm42600/inv_icm42600_buffer.c
> index 32d7f8364230..4a39d31e911f 100644
> --- a/drivers/iio/imu/inv_icm42600/inv_icm42600_buffer.c
> +++ b/drivers/iio/imu/inv_icm42600/inv_icm42600_buffer.c
> @@ -11,9 +11,9 @@
>  #include <linux/delay.h>
>  #include <linux/iio/iio.h>
>  #include <linux/iio/buffer.h>
> +#include <linux/iio/common/inv_icm42600_timestamp.h>
>  
>  #include "inv_icm42600.h"
> -#include "inv_icm42600_timestamp.h"
>  #include "inv_icm42600_buffer.h"
>  
>  /* FIFO header: 1 byte */
> diff --git a/drivers/iio/imu/inv_icm42600/inv_icm42600_core.c b/drivers/iio/imu/inv_icm42600/inv_icm42600_core.c
> index c34735b05830..f3e379f9733d 100644
> --- a/drivers/iio/imu/inv_icm42600/inv_icm42600_core.c
> +++ b/drivers/iio/imu/inv_icm42600/inv_icm42600_core.c
> @@ -16,10 +16,10 @@
>  #include <linux/property.h>
>  #include <linux/regmap.h>
>  #include <linux/iio/iio.h>
> +#include <linux/iio/common/inv_icm42600_timestamp.h>
>  
>  #include "inv_icm42600.h"
>  #include "inv_icm42600_buffer.h"
> -#include "inv_icm42600_timestamp.h"
>  
>  static const struct regmap_range_cfg inv_icm42600_regmap_ranges[] = {
>  	{
> @@ -799,3 +799,4 @@ EXPORT_NS_GPL_DEV_PM_OPS(inv_icm42600_pm_ops, IIO_ICM42600) = {
>  MODULE_AUTHOR("InvenSense, Inc.");
>  MODULE_DESCRIPTION("InvenSense ICM-426xx device driver");
>  MODULE_LICENSE("GPL");
> +MODULE_IMPORT_NS(IIO_INV_SENSORS_TIMESTAMP);
> diff --git a/drivers/iio/imu/inv_icm42600/inv_icm42600_gyro.c b/drivers/iio/imu/inv_icm42600/inv_icm42600_gyro.c
> index 9d94a8518e3c..6caea7b8a344 100644
> --- a/drivers/iio/imu/inv_icm42600/inv_icm42600_gyro.c
> +++ b/drivers/iio/imu/inv_icm42600/inv_icm42600_gyro.c
> @@ -12,12 +12,12 @@
>  #include <linux/math64.h>
>  #include <linux/iio/iio.h>
>  #include <linux/iio/buffer.h>
> +#include <linux/iio/common/inv_icm42600_timestamp.h>
>  #include <linux/iio/kfifo_buf.h>
>  
>  #include "inv_icm42600.h"
>  #include "inv_icm42600_temp.h"
>  #include "inv_icm42600_buffer.h"
> -#include "inv_icm42600_timestamp.h"
>  
>  #define INV_ICM42600_GYRO_CHAN(_modifier, _index, _ext_info)		\
>  	{								\
> diff --git a/drivers/iio/imu/inv_icm42600/inv_icm42600_timestamp.h b/include/linux/iio/common/inv_icm42600_timestamp.h
> similarity index 100%
> rename from drivers/iio/imu/inv_icm42600/inv_icm42600_timestamp.h
> rename to include/linux/iio/common/inv_icm42600_timestamp.h
Jean-Baptiste Maneyrol June 5, 2023, 7:07 p.m. UTC | #3
Hello Jonathan,

currently only IMU drivers will be using this timestamp module. But we have other new chips (pressure sensor for example) that could use it in the future.

So I prefer keeping this module more general to avoid being obliged to move it in the future.

Thanks,
JB


From: Jonathan Cameron <jic23@kernel.org>
Sent: Sunday, June 4, 2023 12:58
To: INV Git Commit <INV.git-commit@tdk.com>
Cc: linux-iio@vger.kernel.org <linux-iio@vger.kernel.org>; lars@metafoo.de <lars@metafoo.de>; Jean-Baptiste Maneyrol <Jean-Baptiste.Maneyrol@tdk.com>
Subject: Re: [PATCH 2/4] iio: move inv_icm42600 timestamp module in common 
 
[CAUTION] This is an EXTERNAL email. Do not click links or open attachments unless you recognize the sender and know the content is safe.

======================================================================
On Wed, 31 May 2023 14:25:11 +0000
inv.git-commit@tdk.com wrote:

> From: Jean-Baptiste Maneyrol <jean-baptiste.maneyrol@tdk.com>
> 
> Create new inv_sensors common modules and move inv_icm42600
> timestamp module inside.
> Modify inv_icm42600 driver to use timestamp module.
> 
> Signed-off-by: Jean-Baptiste Maneyrol <jean-baptiste.maneyrol@tdk.com>
Hi Jean-Baptiste,

Any plan to use this outside of IMU drivers?  If not I'd be tempted
to keep it more local.

drivers/iio/imu/inv_common/ or similar and avoid the global
header by using a "../inv_common/" include path.

Changes themselves look fine to me.

Jonathan

> ---
>  drivers/iio/common/Kconfig                           |  1 +
>  drivers/iio/common/Makefile                          |  1 +
>  drivers/iio/common/inv_sensors/Kconfig               |  7 +++++++
>  drivers/iio/common/inv_sensors/Makefile              |  6 ++++++
>  .../inv_sensors}/inv_icm42600_timestamp.c            | 12 ++++++++++--
>  drivers/iio/imu/inv_icm42600/Kconfig                 |  1 +
>  drivers/iio/imu/inv_icm42600/Makefile                |  1 -
>  drivers/iio/imu/inv_icm42600/inv_icm42600_accel.c    |  2 +-
>  drivers/iio/imu/inv_icm42600/inv_icm42600_buffer.c   |  2 +-
>  drivers/iio/imu/inv_icm42600/inv_icm42600_core.c     |  3 ++-
>  drivers/iio/imu/inv_icm42600/inv_icm42600_gyro.c     |  2 +-
>  .../linux/iio/common}/inv_icm42600_timestamp.h       |  0
>  12 files changed, 31 insertions(+), 7 deletions(-)
>  create mode 100644 drivers/iio/common/inv_sensors/Kconfig
>  create mode 100644 drivers/iio/common/inv_sensors/Makefile
>  rename drivers/iio/{imu/inv_icm42600 => common/inv_sensors}/inv_icm42600_timestamp.c (91%)
>  rename {drivers/iio/imu/inv_icm42600 => include/linux/iio/common}/inv_icm42600_timestamp.h (100%)
> 
> diff --git a/drivers/iio/common/Kconfig b/drivers/iio/common/Kconfig
> index 0334b4954773..1ccb5ccf3706 100644
> --- a/drivers/iio/common/Kconfig
> +++ b/drivers/iio/common/Kconfig
> @@ -5,6 +5,7 @@

>  source "drivers/iio/common/cros_ec_sensors/Kconfig"
>  source "drivers/iio/common/hid-sensors/Kconfig"
> +source "drivers/iio/common/inv_sensors/Kconfig"
>  source "drivers/iio/common/ms_sensors/Kconfig"
>  source "drivers/iio/common/scmi_sensors/Kconfig"
>  source "drivers/iio/common/ssp_sensors/Kconfig"
> diff --git a/drivers/iio/common/Makefile b/drivers/iio/common/Makefile
> index fad40e1e1718..d3e952239a62 100644
> --- a/drivers/iio/common/Makefile
> +++ b/drivers/iio/common/Makefile
> @@ -10,6 +10,7 @@
>  # When adding new entries keep the list in alphabetical order
>  obj-y += cros_ec_sensors/
>  obj-y += hid-sensors/
> +obj-y += inv_sensors/
>  obj-y += ms_sensors/
>  obj-y += scmi_sensors/
>  obj-y += ssp_sensors/
> diff --git a/drivers/iio/common/inv_sensors/Kconfig b/drivers/iio/common/inv_sensors/Kconfig
> new file mode 100644
> index 000000000000..28815fb43157
> --- /dev/null
> +++ b/drivers/iio/common/inv_sensors/Kconfig
> @@ -0,0 +1,7 @@
> +# SPDX-License-Identifier: GPL-2.0-only
> +#
> +# TDK-InvenSense sensors common library
> +#
> +
> +config IIO_INV_SENSORS_TIMESTAMP
> +     tristate
> diff --git a/drivers/iio/common/inv_sensors/Makefile b/drivers/iio/common/inv_sensors/Makefile
> new file mode 100644
> index 000000000000..93bddb9356b8
> --- /dev/null
> +++ b/drivers/iio/common/inv_sensors/Makefile
> @@ -0,0 +1,6 @@
> +# SPDX-License-Identifier: GPL-2.0
> +#
> +# Makefile for TDK-InvenSense sensors module.
> +#
> +
> +obj-$(CONFIG_IIO_INV_SENSORS_TIMESTAMP) += inv_icm42600_timestamp.o
> diff --git a/drivers/iio/imu/inv_icm42600/inv_icm42600_timestamp.c b/drivers/iio/common/inv_sensors/inv_icm42600_timestamp.c
> similarity index 91%
> rename from drivers/iio/imu/inv_icm42600/inv_icm42600_timestamp.c
> rename to drivers/iio/common/inv_sensors/inv_icm42600_timestamp.c
> index ceae8ccb1747..411f561e1a24 100644
> --- a/drivers/iio/imu/inv_icm42600/inv_icm42600_timestamp.c
> +++ b/drivers/iio/common/inv_sensors/inv_icm42600_timestamp.c
> @@ -5,9 +5,9 @@

>  #include <linux/kernel.h>
>  #include <linux/math64.h>
> +#include <linux/module.h>
>  #include <linux/errno.h>
> -
> -#include "inv_icm42600_timestamp.h"
> +#include <linux/iio/common/inv_icm42600_timestamp.h>

>  /* internal chip period is 32kHz, 31250ns */
>  #define INV_ICM42600_TIMESTAMP_PERIOD                31250
> @@ -54,6 +54,7 @@ void inv_icm42600_timestamp_init(struct inv_icm42600_timestamp *ts,
>        /* use theoretical value for chip period */
>        inv_update_acc(&ts->chip_period, INV_ICM42600_TIMESTAMP_PERIOD);
>  }
> +EXPORT_SYMBOL_NS_GPL(inv_icm42600_timestamp_init, IIO_INV_SENSORS_TIMESTAMP);

>  int inv_icm42600_timestamp_update_odr(struct inv_icm42600_timestamp *ts,
>                                      uint32_t period, bool fifo)
> @@ -66,6 +67,7 @@ int inv_icm42600_timestamp_update_odr(struct inv_icm42600_timestamp *ts,

>        return 0;
>  }
> +EXPORT_SYMBOL_NS_GPL(inv_icm42600_timestamp_update_odr, IIO_INV_SENSORS_TIMESTAMP);

>  static bool inv_validate_period(uint32_t period, uint32_t mult)
>  {
> @@ -153,6 +155,7 @@ void inv_icm42600_timestamp_interrupt(struct inv_icm42600_timestamp *ts,
>        if (valid)
>                inv_align_timestamp_it(ts);
>  }
> +EXPORT_SYMBOL_NS_GPL(inv_icm42600_timestamp_interrupt, IIO_INV_SENSORS_TIMESTAMP);

>  void inv_icm42600_timestamp_apply_odr(struct inv_icm42600_timestamp *ts,
>                                      uint32_t fifo_period, size_t fifo_nb,
> @@ -184,3 +187,8 @@ void inv_icm42600_timestamp_apply_odr(struct inv_icm42600_timestamp *ts,
>                ts->timestamp = ts->it.up - interval;
>        }
>  }
> +EXPORT_SYMBOL_NS_GPL(inv_icm42600_timestamp_apply_odr, IIO_INV_SENSORS_TIMESTAMP);
> +
> +MODULE_AUTHOR("InvenSense, Inc.");
> +MODULE_DESCRIPTION("InvenSense sensors timestamp module");
> +MODULE_LICENSE("GPL");
> diff --git a/drivers/iio/imu/inv_icm42600/Kconfig b/drivers/iio/imu/inv_icm42600/Kconfig
> index 50cbcfcb6cf1..f56b0816cc4d 100644
> --- a/drivers/iio/imu/inv_icm42600/Kconfig
> +++ b/drivers/iio/imu/inv_icm42600/Kconfig
> @@ -3,6 +3,7 @@
>  config INV_ICM42600
>        tristate
>        select IIO_BUFFER
> +     select IIO_INV_SENSORS_TIMESTAMP

>  config INV_ICM42600_I2C
>        tristate "InvenSense ICM-426xx I2C driver"
> diff --git a/drivers/iio/imu/inv_icm42600/Makefile b/drivers/iio/imu/inv_icm42600/Makefile
> index 291714d9aa54..0f49f6df3647 100644
> --- a/drivers/iio/imu/inv_icm42600/Makefile
> +++ b/drivers/iio/imu/inv_icm42600/Makefile
> @@ -6,7 +6,6 @@ inv-icm42600-y += inv_icm42600_gyro.o
>  inv-icm42600-y += inv_icm42600_accel.o
>  inv-icm42600-y += inv_icm42600_temp.o
>  inv-icm42600-y += inv_icm42600_buffer.o
> -inv-icm42600-y += inv_icm42600_timestamp.o

>  obj-$(CONFIG_INV_ICM42600_I2C) += inv-icm42600-i2c.o
>  inv-icm42600-i2c-y += inv_icm42600_i2c.o
> diff --git a/drivers/iio/imu/inv_icm42600/inv_icm42600_accel.c b/drivers/iio/imu/inv_icm42600/inv_icm42600_accel.c
> index c3f433ad3af6..1015de636a94 100644
> --- a/drivers/iio/imu/inv_icm42600/inv_icm42600_accel.c
> +++ b/drivers/iio/imu/inv_icm42600/inv_icm42600_accel.c
> @@ -12,12 +12,12 @@
>  #include <linux/math64.h>
>  #include <linux/iio/iio.h>
>  #include <linux/iio/buffer.h>
> +#include <linux/iio/common/inv_icm42600_timestamp.h>
>  #include <linux/iio/kfifo_buf.h>

>  #include "inv_icm42600.h"
>  #include "inv_icm42600_temp.h"
>  #include "inv_icm42600_buffer.h"
> -#include "inv_icm42600_timestamp.h"

>  #define INV_ICM42600_ACCEL_CHAN(_modifier, _index, _ext_info)                \
>        {                                                               \
> diff --git a/drivers/iio/imu/inv_icm42600/inv_icm42600_buffer.c b/drivers/iio/imu/inv_icm42600/inv_icm42600_buffer.c
> index 32d7f8364230..4a39d31e911f 100644
> --- a/drivers/iio/imu/inv_icm42600/inv_icm42600_buffer.c
> +++ b/drivers/iio/imu/inv_icm42600/inv_icm42600_buffer.c
> @@ -11,9 +11,9 @@
>  #include <linux/delay.h>
>  #include <linux/iio/iio.h>
>  #include <linux/iio/buffer.h>
> +#include <linux/iio/common/inv_icm42600_timestamp.h>

>  #include "inv_icm42600.h"
> -#include "inv_icm42600_timestamp.h"
>  #include "inv_icm42600_buffer.h"

>  /* FIFO header: 1 byte */
> diff --git a/drivers/iio/imu/inv_icm42600/inv_icm42600_core.c b/drivers/iio/imu/inv_icm42600/inv_icm42600_core.c
> index c34735b05830..f3e379f9733d 100644
> --- a/drivers/iio/imu/inv_icm42600/inv_icm42600_core.c
> +++ b/drivers/iio/imu/inv_icm42600/inv_icm42600_core.c
> @@ -16,10 +16,10 @@
>  #include <linux/property.h>
>  #include <linux/regmap.h>
>  #include <linux/iio/iio.h>
> +#include <linux/iio/common/inv_icm42600_timestamp.h>

>  #include "inv_icm42600.h"
>  #include "inv_icm42600_buffer.h"
> -#include "inv_icm42600_timestamp.h"

>  static const struct regmap_range_cfg inv_icm42600_regmap_ranges[] = {
>        {
> @@ -799,3 +799,4 @@ EXPORT_NS_GPL_DEV_PM_OPS(inv_icm42600_pm_ops, IIO_ICM42600) = {
>  MODULE_AUTHOR("InvenSense, Inc.");
>  MODULE_DESCRIPTION("InvenSense ICM-426xx device driver");
>  MODULE_LICENSE("GPL");
> +MODULE_IMPORT_NS(IIO_INV_SENSORS_TIMESTAMP);
> diff --git a/drivers/iio/imu/inv_icm42600/inv_icm42600_gyro.c b/drivers/iio/imu/inv_icm42600/inv_icm42600_gyro.c
> index 9d94a8518e3c..6caea7b8a344 100644
> --- a/drivers/iio/imu/inv_icm42600/inv_icm42600_gyro.c
> +++ b/drivers/iio/imu/inv_icm42600/inv_icm42600_gyro.c
> @@ -12,12 +12,12 @@
>  #include <linux/math64.h>
>  #include <linux/iio/iio.h>
>  #include <linux/iio/buffer.h>
> +#include <linux/iio/common/inv_icm42600_timestamp.h>
>  #include <linux/iio/kfifo_buf.h>

>  #include "inv_icm42600.h"
>  #include "inv_icm42600_temp.h"
>  #include "inv_icm42600_buffer.h"
> -#include "inv_icm42600_timestamp.h"

>  #define INV_ICM42600_GYRO_CHAN(_modifier, _index, _ext_info)         \
>        {                                                               \
> diff --git a/drivers/iio/imu/inv_icm42600/inv_icm42600_timestamp.h b/include/linux/iio/common/inv_icm42600_timestamp.h
> similarity index 100%
> rename from drivers/iio/imu/inv_icm42600/inv_icm42600_timestamp.h
> rename to include/linux/iio/common/inv_icm42600_timestamp.h
Jonathan Cameron June 5, 2023, 7:25 p.m. UTC | #4
On Mon, 5 Jun 2023 19:07:38 +0000
Jean-Baptiste Maneyrol <Jean-Baptiste.Maneyrol@tdk.com> wrote:

> Hello Jonathan,
> 
> currently only IMU drivers will be using this timestamp module. But we have other new chips (pressure sensor for example) that could use it in the future.
> 
> So I prefer keeping this module more general to avoid being obliged to move it in the future.

Fair enough.  Perhaps add a note on that to the patch description.

Jonathan

> 
> Thanks,
> JB
> 
> 
> From: Jonathan Cameron <jic23@kernel.org>
> Sent: Sunday, June 4, 2023 12:58
> To: INV Git Commit <INV.git-commit@tdk.com>
> Cc: linux-iio@vger.kernel.org <linux-iio@vger.kernel.org>; lars@metafoo.de <lars@metafoo.de>; Jean-Baptiste Maneyrol <Jean-Baptiste.Maneyrol@tdk.com>
> Subject: Re: [PATCH 2/4] iio: move inv_icm42600 timestamp module in common 
>  
> [CAUTION] This is an EXTERNAL email. Do not click links or open attachments unless you recognize the sender and know the content is safe.
> 
> ======================================================================
> On Wed, 31 May 2023 14:25:11 +0000
> inv.git-commit@tdk.com wrote:
> 
> > From: Jean-Baptiste Maneyrol <jean-baptiste.maneyrol@tdk.com>
> > 
> > Create new inv_sensors common modules and move inv_icm42600
> > timestamp module inside.
> > Modify inv_icm42600 driver to use timestamp module.
> > 
> > Signed-off-by: Jean-Baptiste Maneyrol <jean-baptiste.maneyrol@tdk.com>  
> Hi Jean-Baptiste,
> 
> Any plan to use this outside of IMU drivers?  If not I'd be tempted
> to keep it more local.
> 
> drivers/iio/imu/inv_common/ or similar and avoid the global
> header by using a "../inv_common/" include path.
> 
> Changes themselves look fine to me.
> 
> Jonathan
> 
> > ---
> >  drivers/iio/common/Kconfig                           |  1 +
> >  drivers/iio/common/Makefile                          |  1 +
> >  drivers/iio/common/inv_sensors/Kconfig               |  7 +++++++
> >  drivers/iio/common/inv_sensors/Makefile              |  6 ++++++
> >  .../inv_sensors}/inv_icm42600_timestamp.c            | 12 ++++++++++--
> >  drivers/iio/imu/inv_icm42600/Kconfig                 |  1 +
> >  drivers/iio/imu/inv_icm42600/Makefile                |  1 -
> >  drivers/iio/imu/inv_icm42600/inv_icm42600_accel.c    |  2 +-
> >  drivers/iio/imu/inv_icm42600/inv_icm42600_buffer.c   |  2 +-
> >  drivers/iio/imu/inv_icm42600/inv_icm42600_core.c     |  3 ++-
> >  drivers/iio/imu/inv_icm42600/inv_icm42600_gyro.c     |  2 +-
> >  .../linux/iio/common}/inv_icm42600_timestamp.h       |  0
> >  12 files changed, 31 insertions(+), 7 deletions(-)
> >  create mode 100644 drivers/iio/common/inv_sensors/Kconfig
> >  create mode 100644 drivers/iio/common/inv_sensors/Makefile
> >  rename drivers/iio/{imu/inv_icm42600 => common/inv_sensors}/inv_icm42600_timestamp.c (91%)
> >  rename {drivers/iio/imu/inv_icm42600 => include/linux/iio/common}/inv_icm42600_timestamp.h (100%)
> > 
> > diff --git a/drivers/iio/common/Kconfig b/drivers/iio/common/Kconfig
> > index 0334b4954773..1ccb5ccf3706 100644
> > --- a/drivers/iio/common/Kconfig
> > +++ b/drivers/iio/common/Kconfig
> > @@ -5,6 +5,7 @@
> >  
> >  source "drivers/iio/common/cros_ec_sensors/Kconfig"
> >  source "drivers/iio/common/hid-sensors/Kconfig"
> > +source "drivers/iio/common/inv_sensors/Kconfig"
> >  source "drivers/iio/common/ms_sensors/Kconfig"
> >  source "drivers/iio/common/scmi_sensors/Kconfig"
> >  source "drivers/iio/common/ssp_sensors/Kconfig"
> > diff --git a/drivers/iio/common/Makefile b/drivers/iio/common/Makefile
> > index fad40e1e1718..d3e952239a62 100644
> > --- a/drivers/iio/common/Makefile
> > +++ b/drivers/iio/common/Makefile
> > @@ -10,6 +10,7 @@
> >  # When adding new entries keep the list in alphabetical order
> >  obj-y += cros_ec_sensors/
> >  obj-y += hid-sensors/
> > +obj-y += inv_sensors/
> >  obj-y += ms_sensors/
> >  obj-y += scmi_sensors/
> >  obj-y += ssp_sensors/
> > diff --git a/drivers/iio/common/inv_sensors/Kconfig b/drivers/iio/common/inv_sensors/Kconfig
> > new file mode 100644
> > index 000000000000..28815fb43157
> > --- /dev/null
> > +++ b/drivers/iio/common/inv_sensors/Kconfig
> > @@ -0,0 +1,7 @@
> > +# SPDX-License-Identifier: GPL-2.0-only
> > +#
> > +# TDK-InvenSense sensors common library
> > +#
> > +
> > +config IIO_INV_SENSORS_TIMESTAMP
> > +     tristate
> > diff --git a/drivers/iio/common/inv_sensors/Makefile b/drivers/iio/common/inv_sensors/Makefile
> > new file mode 100644
> > index 000000000000..93bddb9356b8
> > --- /dev/null
> > +++ b/drivers/iio/common/inv_sensors/Makefile
> > @@ -0,0 +1,6 @@
> > +# SPDX-License-Identifier: GPL-2.0
> > +#
> > +# Makefile for TDK-InvenSense sensors module.
> > +#
> > +
> > +obj-$(CONFIG_IIO_INV_SENSORS_TIMESTAMP) += inv_icm42600_timestamp.o
> > diff --git a/drivers/iio/imu/inv_icm42600/inv_icm42600_timestamp.c b/drivers/iio/common/inv_sensors/inv_icm42600_timestamp.c
> > similarity index 91%
> > rename from drivers/iio/imu/inv_icm42600/inv_icm42600_timestamp.c
> > rename to drivers/iio/common/inv_sensors/inv_icm42600_timestamp.c
> > index ceae8ccb1747..411f561e1a24 100644
> > --- a/drivers/iio/imu/inv_icm42600/inv_icm42600_timestamp.c
> > +++ b/drivers/iio/common/inv_sensors/inv_icm42600_timestamp.c
> > @@ -5,9 +5,9 @@
> >  
> >  #include <linux/kernel.h>
> >  #include <linux/math64.h>
> > +#include <linux/module.h>
> >  #include <linux/errno.h>
> > -
> > -#include "inv_icm42600_timestamp.h"
> > +#include <linux/iio/common/inv_icm42600_timestamp.h>
> >  
> >  /* internal chip period is 32kHz, 31250ns */
> >  #define INV_ICM42600_TIMESTAMP_PERIOD                31250
> > @@ -54,6 +54,7 @@ void inv_icm42600_timestamp_init(struct inv_icm42600_timestamp *ts,
> >        /* use theoretical value for chip period */
> >        inv_update_acc(&ts->chip_period, INV_ICM42600_TIMESTAMP_PERIOD);
> >  }
> > +EXPORT_SYMBOL_NS_GPL(inv_icm42600_timestamp_init, IIO_INV_SENSORS_TIMESTAMP);
> >  
> >  int inv_icm42600_timestamp_update_odr(struct inv_icm42600_timestamp *ts,
> >                                      uint32_t period, bool fifo)
> > @@ -66,6 +67,7 @@ int inv_icm42600_timestamp_update_odr(struct inv_icm42600_timestamp *ts,
> >  
> >        return 0;
> >  }
> > +EXPORT_SYMBOL_NS_GPL(inv_icm42600_timestamp_update_odr, IIO_INV_SENSORS_TIMESTAMP);
> >  
> >  static bool inv_validate_period(uint32_t period, uint32_t mult)
> >  {
> > @@ -153,6 +155,7 @@ void inv_icm42600_timestamp_interrupt(struct inv_icm42600_timestamp *ts,
> >        if (valid)
> >                inv_align_timestamp_it(ts);
> >  }
> > +EXPORT_SYMBOL_NS_GPL(inv_icm42600_timestamp_interrupt, IIO_INV_SENSORS_TIMESTAMP);
> >  
> >  void inv_icm42600_timestamp_apply_odr(struct inv_icm42600_timestamp *ts,
> >                                      uint32_t fifo_period, size_t fifo_nb,
> > @@ -184,3 +187,8 @@ void inv_icm42600_timestamp_apply_odr(struct inv_icm42600_timestamp *ts,
> >                ts->timestamp = ts->it.up - interval;
> >        }
> >  }
> > +EXPORT_SYMBOL_NS_GPL(inv_icm42600_timestamp_apply_odr, IIO_INV_SENSORS_TIMESTAMP);
> > +
> > +MODULE_AUTHOR("InvenSense, Inc.");
> > +MODULE_DESCRIPTION("InvenSense sensors timestamp module");
> > +MODULE_LICENSE("GPL");
> > diff --git a/drivers/iio/imu/inv_icm42600/Kconfig b/drivers/iio/imu/inv_icm42600/Kconfig
> > index 50cbcfcb6cf1..f56b0816cc4d 100644
> > --- a/drivers/iio/imu/inv_icm42600/Kconfig
> > +++ b/drivers/iio/imu/inv_icm42600/Kconfig
> > @@ -3,6 +3,7 @@
> >  config INV_ICM42600
> >        tristate
> >        select IIO_BUFFER
> > +     select IIO_INV_SENSORS_TIMESTAMP
> >  
> >  config INV_ICM42600_I2C
> >        tristate "InvenSense ICM-426xx I2C driver"
> > diff --git a/drivers/iio/imu/inv_icm42600/Makefile b/drivers/iio/imu/inv_icm42600/Makefile
> > index 291714d9aa54..0f49f6df3647 100644
> > --- a/drivers/iio/imu/inv_icm42600/Makefile
> > +++ b/drivers/iio/imu/inv_icm42600/Makefile
> > @@ -6,7 +6,6 @@ inv-icm42600-y += inv_icm42600_gyro.o
> >  inv-icm42600-y += inv_icm42600_accel.o
> >  inv-icm42600-y += inv_icm42600_temp.o
> >  inv-icm42600-y += inv_icm42600_buffer.o
> > -inv-icm42600-y += inv_icm42600_timestamp.o
> >  
> >  obj-$(CONFIG_INV_ICM42600_I2C) += inv-icm42600-i2c.o
> >  inv-icm42600-i2c-y += inv_icm42600_i2c.o
> > diff --git a/drivers/iio/imu/inv_icm42600/inv_icm42600_accel.c b/drivers/iio/imu/inv_icm42600/inv_icm42600_accel.c
> > index c3f433ad3af6..1015de636a94 100644
> > --- a/drivers/iio/imu/inv_icm42600/inv_icm42600_accel.c
> > +++ b/drivers/iio/imu/inv_icm42600/inv_icm42600_accel.c
> > @@ -12,12 +12,12 @@
> >  #include <linux/math64.h>
> >  #include <linux/iio/iio.h>
> >  #include <linux/iio/buffer.h>
> > +#include <linux/iio/common/inv_icm42600_timestamp.h>
> >  #include <linux/iio/kfifo_buf.h>
> >  
> >  #include "inv_icm42600.h"
> >  #include "inv_icm42600_temp.h"
> >  #include "inv_icm42600_buffer.h"
> > -#include "inv_icm42600_timestamp.h"
> >  
> >  #define INV_ICM42600_ACCEL_CHAN(_modifier, _index, _ext_info)                \
> >        {                                                               \
> > diff --git a/drivers/iio/imu/inv_icm42600/inv_icm42600_buffer.c b/drivers/iio/imu/inv_icm42600/inv_icm42600_buffer.c
> > index 32d7f8364230..4a39d31e911f 100644
> > --- a/drivers/iio/imu/inv_icm42600/inv_icm42600_buffer.c
> > +++ b/drivers/iio/imu/inv_icm42600/inv_icm42600_buffer.c
> > @@ -11,9 +11,9 @@
> >  #include <linux/delay.h>
> >  #include <linux/iio/iio.h>
> >  #include <linux/iio/buffer.h>
> > +#include <linux/iio/common/inv_icm42600_timestamp.h>
> >  
> >  #include "inv_icm42600.h"
> > -#include "inv_icm42600_timestamp.h"
> >  #include "inv_icm42600_buffer.h"
> >  
> >  /* FIFO header: 1 byte */
> > diff --git a/drivers/iio/imu/inv_icm42600/inv_icm42600_core.c b/drivers/iio/imu/inv_icm42600/inv_icm42600_core.c
> > index c34735b05830..f3e379f9733d 100644
> > --- a/drivers/iio/imu/inv_icm42600/inv_icm42600_core.c
> > +++ b/drivers/iio/imu/inv_icm42600/inv_icm42600_core.c
> > @@ -16,10 +16,10 @@
> >  #include <linux/property.h>
> >  #include <linux/regmap.h>
> >  #include <linux/iio/iio.h>
> > +#include <linux/iio/common/inv_icm42600_timestamp.h>
> >  
> >  #include "inv_icm42600.h"
> >  #include "inv_icm42600_buffer.h"
> > -#include "inv_icm42600_timestamp.h"
> >  
> >  static const struct regmap_range_cfg inv_icm42600_regmap_ranges[] = {
> >        {
> > @@ -799,3 +799,4 @@ EXPORT_NS_GPL_DEV_PM_OPS(inv_icm42600_pm_ops, IIO_ICM42600) = {
> >  MODULE_AUTHOR("InvenSense, Inc.");
> >  MODULE_DESCRIPTION("InvenSense ICM-426xx device driver");
> >  MODULE_LICENSE("GPL");
> > +MODULE_IMPORT_NS(IIO_INV_SENSORS_TIMESTAMP);
> > diff --git a/drivers/iio/imu/inv_icm42600/inv_icm42600_gyro.c b/drivers/iio/imu/inv_icm42600/inv_icm42600_gyro.c
> > index 9d94a8518e3c..6caea7b8a344 100644
> > --- a/drivers/iio/imu/inv_icm42600/inv_icm42600_gyro.c
> > +++ b/drivers/iio/imu/inv_icm42600/inv_icm42600_gyro.c
> > @@ -12,12 +12,12 @@
> >  #include <linux/math64.h>
> >  #include <linux/iio/iio.h>
> >  #include <linux/iio/buffer.h>
> > +#include <linux/iio/common/inv_icm42600_timestamp.h>
> >  #include <linux/iio/kfifo_buf.h>
> >  
> >  #include "inv_icm42600.h"
> >  #include "inv_icm42600_temp.h"
> >  #include "inv_icm42600_buffer.h"
> > -#include "inv_icm42600_timestamp.h"
> >  
> >  #define INV_ICM42600_GYRO_CHAN(_modifier, _index, _ext_info)         \
> >        {                                                               \
> > diff --git a/drivers/iio/imu/inv_icm42600/inv_icm42600_timestamp.h b/include/linux/iio/common/inv_icm42600_timestamp.h
> > similarity index 100%
> > rename from drivers/iio/imu/inv_icm42600/inv_icm42600_timestamp.h
> > rename to include/linux/iio/common/inv_icm42600_timestamp.h
diff mbox series

Patch

diff --git a/drivers/iio/common/Kconfig b/drivers/iio/common/Kconfig
index 0334b4954773..1ccb5ccf3706 100644
--- a/drivers/iio/common/Kconfig
+++ b/drivers/iio/common/Kconfig
@@ -5,6 +5,7 @@ 
 
 source "drivers/iio/common/cros_ec_sensors/Kconfig"
 source "drivers/iio/common/hid-sensors/Kconfig"
+source "drivers/iio/common/inv_sensors/Kconfig"
 source "drivers/iio/common/ms_sensors/Kconfig"
 source "drivers/iio/common/scmi_sensors/Kconfig"
 source "drivers/iio/common/ssp_sensors/Kconfig"
diff --git a/drivers/iio/common/Makefile b/drivers/iio/common/Makefile
index fad40e1e1718..d3e952239a62 100644
--- a/drivers/iio/common/Makefile
+++ b/drivers/iio/common/Makefile
@@ -10,6 +10,7 @@ 
 # When adding new entries keep the list in alphabetical order
 obj-y += cros_ec_sensors/
 obj-y += hid-sensors/
+obj-y += inv_sensors/
 obj-y += ms_sensors/
 obj-y += scmi_sensors/
 obj-y += ssp_sensors/
diff --git a/drivers/iio/common/inv_sensors/Kconfig b/drivers/iio/common/inv_sensors/Kconfig
new file mode 100644
index 000000000000..28815fb43157
--- /dev/null
+++ b/drivers/iio/common/inv_sensors/Kconfig
@@ -0,0 +1,7 @@ 
+# SPDX-License-Identifier: GPL-2.0-only
+#
+# TDK-InvenSense sensors common library
+#
+
+config IIO_INV_SENSORS_TIMESTAMP
+	tristate
diff --git a/drivers/iio/common/inv_sensors/Makefile b/drivers/iio/common/inv_sensors/Makefile
new file mode 100644
index 000000000000..93bddb9356b8
--- /dev/null
+++ b/drivers/iio/common/inv_sensors/Makefile
@@ -0,0 +1,6 @@ 
+# SPDX-License-Identifier: GPL-2.0
+#
+# Makefile for TDK-InvenSense sensors module.
+#
+
+obj-$(CONFIG_IIO_INV_SENSORS_TIMESTAMP) += inv_icm42600_timestamp.o
diff --git a/drivers/iio/imu/inv_icm42600/inv_icm42600_timestamp.c b/drivers/iio/common/inv_sensors/inv_icm42600_timestamp.c
similarity index 91%
rename from drivers/iio/imu/inv_icm42600/inv_icm42600_timestamp.c
rename to drivers/iio/common/inv_sensors/inv_icm42600_timestamp.c
index ceae8ccb1747..411f561e1a24 100644
--- a/drivers/iio/imu/inv_icm42600/inv_icm42600_timestamp.c
+++ b/drivers/iio/common/inv_sensors/inv_icm42600_timestamp.c
@@ -5,9 +5,9 @@ 
 
 #include <linux/kernel.h>
 #include <linux/math64.h>
+#include <linux/module.h>
 #include <linux/errno.h>
-
-#include "inv_icm42600_timestamp.h"
+#include <linux/iio/common/inv_icm42600_timestamp.h>
 
 /* internal chip period is 32kHz, 31250ns */
 #define INV_ICM42600_TIMESTAMP_PERIOD		31250
@@ -54,6 +54,7 @@  void inv_icm42600_timestamp_init(struct inv_icm42600_timestamp *ts,
 	/* use theoretical value for chip period */
 	inv_update_acc(&ts->chip_period, INV_ICM42600_TIMESTAMP_PERIOD);
 }
+EXPORT_SYMBOL_NS_GPL(inv_icm42600_timestamp_init, IIO_INV_SENSORS_TIMESTAMP);
 
 int inv_icm42600_timestamp_update_odr(struct inv_icm42600_timestamp *ts,
 				      uint32_t period, bool fifo)
@@ -66,6 +67,7 @@  int inv_icm42600_timestamp_update_odr(struct inv_icm42600_timestamp *ts,
 
 	return 0;
 }
+EXPORT_SYMBOL_NS_GPL(inv_icm42600_timestamp_update_odr, IIO_INV_SENSORS_TIMESTAMP);
 
 static bool inv_validate_period(uint32_t period, uint32_t mult)
 {
@@ -153,6 +155,7 @@  void inv_icm42600_timestamp_interrupt(struct inv_icm42600_timestamp *ts,
 	if (valid)
 		inv_align_timestamp_it(ts);
 }
+EXPORT_SYMBOL_NS_GPL(inv_icm42600_timestamp_interrupt, IIO_INV_SENSORS_TIMESTAMP);
 
 void inv_icm42600_timestamp_apply_odr(struct inv_icm42600_timestamp *ts,
 				      uint32_t fifo_period, size_t fifo_nb,
@@ -184,3 +187,8 @@  void inv_icm42600_timestamp_apply_odr(struct inv_icm42600_timestamp *ts,
 		ts->timestamp = ts->it.up - interval;
 	}
 }
+EXPORT_SYMBOL_NS_GPL(inv_icm42600_timestamp_apply_odr, IIO_INV_SENSORS_TIMESTAMP);
+
+MODULE_AUTHOR("InvenSense, Inc.");
+MODULE_DESCRIPTION("InvenSense sensors timestamp module");
+MODULE_LICENSE("GPL");
diff --git a/drivers/iio/imu/inv_icm42600/Kconfig b/drivers/iio/imu/inv_icm42600/Kconfig
index 50cbcfcb6cf1..f56b0816cc4d 100644
--- a/drivers/iio/imu/inv_icm42600/Kconfig
+++ b/drivers/iio/imu/inv_icm42600/Kconfig
@@ -3,6 +3,7 @@ 
 config INV_ICM42600
 	tristate
 	select IIO_BUFFER
+	select IIO_INV_SENSORS_TIMESTAMP
 
 config INV_ICM42600_I2C
 	tristate "InvenSense ICM-426xx I2C driver"
diff --git a/drivers/iio/imu/inv_icm42600/Makefile b/drivers/iio/imu/inv_icm42600/Makefile
index 291714d9aa54..0f49f6df3647 100644
--- a/drivers/iio/imu/inv_icm42600/Makefile
+++ b/drivers/iio/imu/inv_icm42600/Makefile
@@ -6,7 +6,6 @@  inv-icm42600-y += inv_icm42600_gyro.o
 inv-icm42600-y += inv_icm42600_accel.o
 inv-icm42600-y += inv_icm42600_temp.o
 inv-icm42600-y += inv_icm42600_buffer.o
-inv-icm42600-y += inv_icm42600_timestamp.o
 
 obj-$(CONFIG_INV_ICM42600_I2C) += inv-icm42600-i2c.o
 inv-icm42600-i2c-y += inv_icm42600_i2c.o
diff --git a/drivers/iio/imu/inv_icm42600/inv_icm42600_accel.c b/drivers/iio/imu/inv_icm42600/inv_icm42600_accel.c
index c3f433ad3af6..1015de636a94 100644
--- a/drivers/iio/imu/inv_icm42600/inv_icm42600_accel.c
+++ b/drivers/iio/imu/inv_icm42600/inv_icm42600_accel.c
@@ -12,12 +12,12 @@ 
 #include <linux/math64.h>
 #include <linux/iio/iio.h>
 #include <linux/iio/buffer.h>
+#include <linux/iio/common/inv_icm42600_timestamp.h>
 #include <linux/iio/kfifo_buf.h>
 
 #include "inv_icm42600.h"
 #include "inv_icm42600_temp.h"
 #include "inv_icm42600_buffer.h"
-#include "inv_icm42600_timestamp.h"
 
 #define INV_ICM42600_ACCEL_CHAN(_modifier, _index, _ext_info)		\
 	{								\
diff --git a/drivers/iio/imu/inv_icm42600/inv_icm42600_buffer.c b/drivers/iio/imu/inv_icm42600/inv_icm42600_buffer.c
index 32d7f8364230..4a39d31e911f 100644
--- a/drivers/iio/imu/inv_icm42600/inv_icm42600_buffer.c
+++ b/drivers/iio/imu/inv_icm42600/inv_icm42600_buffer.c
@@ -11,9 +11,9 @@ 
 #include <linux/delay.h>
 #include <linux/iio/iio.h>
 #include <linux/iio/buffer.h>
+#include <linux/iio/common/inv_icm42600_timestamp.h>
 
 #include "inv_icm42600.h"
-#include "inv_icm42600_timestamp.h"
 #include "inv_icm42600_buffer.h"
 
 /* FIFO header: 1 byte */
diff --git a/drivers/iio/imu/inv_icm42600/inv_icm42600_core.c b/drivers/iio/imu/inv_icm42600/inv_icm42600_core.c
index c34735b05830..f3e379f9733d 100644
--- a/drivers/iio/imu/inv_icm42600/inv_icm42600_core.c
+++ b/drivers/iio/imu/inv_icm42600/inv_icm42600_core.c
@@ -16,10 +16,10 @@ 
 #include <linux/property.h>
 #include <linux/regmap.h>
 #include <linux/iio/iio.h>
+#include <linux/iio/common/inv_icm42600_timestamp.h>
 
 #include "inv_icm42600.h"
 #include "inv_icm42600_buffer.h"
-#include "inv_icm42600_timestamp.h"
 
 static const struct regmap_range_cfg inv_icm42600_regmap_ranges[] = {
 	{
@@ -799,3 +799,4 @@  EXPORT_NS_GPL_DEV_PM_OPS(inv_icm42600_pm_ops, IIO_ICM42600) = {
 MODULE_AUTHOR("InvenSense, Inc.");
 MODULE_DESCRIPTION("InvenSense ICM-426xx device driver");
 MODULE_LICENSE("GPL");
+MODULE_IMPORT_NS(IIO_INV_SENSORS_TIMESTAMP);
diff --git a/drivers/iio/imu/inv_icm42600/inv_icm42600_gyro.c b/drivers/iio/imu/inv_icm42600/inv_icm42600_gyro.c
index 9d94a8518e3c..6caea7b8a344 100644
--- a/drivers/iio/imu/inv_icm42600/inv_icm42600_gyro.c
+++ b/drivers/iio/imu/inv_icm42600/inv_icm42600_gyro.c
@@ -12,12 +12,12 @@ 
 #include <linux/math64.h>
 #include <linux/iio/iio.h>
 #include <linux/iio/buffer.h>
+#include <linux/iio/common/inv_icm42600_timestamp.h>
 #include <linux/iio/kfifo_buf.h>
 
 #include "inv_icm42600.h"
 #include "inv_icm42600_temp.h"
 #include "inv_icm42600_buffer.h"
-#include "inv_icm42600_timestamp.h"
 
 #define INV_ICM42600_GYRO_CHAN(_modifier, _index, _ext_info)		\
 	{								\
diff --git a/drivers/iio/imu/inv_icm42600/inv_icm42600_timestamp.h b/include/linux/iio/common/inv_icm42600_timestamp.h
similarity index 100%
rename from drivers/iio/imu/inv_icm42600/inv_icm42600_timestamp.h
rename to include/linux/iio/common/inv_icm42600_timestamp.h