diff mbox series

[v1] iio: st_gyro: Correct data for LSM9DS0 gyro

Message ID 20191217171038.17004-1-andriy.shevchenko@linux.intel.com (mailing list archive)
State New, archived
Headers show
Series [v1] iio: st_gyro: Correct data for LSM9DS0 gyro | expand

Commit Message

Andy Shevchenko Dec. 17, 2019, 5:10 p.m. UTC
The commit 41c128cb25ce ("iio: st_gyro: Add lsm9ds0-gyro support")
assumes that gyro in LSM9DS0 is the same as others with 0xd4 WAI ID,
but datasheet tells slight different story, i.e. the first scale factor
for the chip is 245 dps, and not 250 dps.

Correct this by introducing a separate settings for LSM9DS0.

Fixes: 41c128cb25ce ("iio: st_gyro: Add lsm9ds0-gyro support")
Depends-on: 45a4e4220bf4 ("iio: gyro: st_gyro: fix L3GD20H support")
Cc: Leonard Crestez <leonard.crestez@nxp.com>
Cc: Lorenzo Bianconi <lorenzo.bianconi83@gmail.com>
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 drivers/iio/gyro/st_gyro_core.c | 75 ++++++++++++++++++++++++++++++++-
 1 file changed, 74 insertions(+), 1 deletion(-)

Comments

Jonathan Cameron Dec. 23, 2019, 12:45 p.m. UTC | #1
On Tue, 17 Dec 2019 19:10:38 +0200
Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:

> The commit 41c128cb25ce ("iio: st_gyro: Add lsm9ds0-gyro support")
> assumes that gyro in LSM9DS0 is the same as others with 0xd4 WAI ID,
> but datasheet tells slight different story, i.e. the first scale factor
> for the chip is 245 dps, and not 250 dps.
> 
> Correct this by introducing a separate settings for LSM9DS0.
> 
> Fixes: 41c128cb25ce ("iio: st_gyro: Add lsm9ds0-gyro support")
> Depends-on: 45a4e4220bf4 ("iio: gyro: st_gyro: fix L3GD20H support")
> Cc: Leonard Crestez <leonard.crestez@nxp.com>
> Cc: Lorenzo Bianconi <lorenzo.bianconi83@gmail.com>
> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Looks good to me.  Will just leave it a bit longer to give others
time to check it.

Give me a shout if I seem to have missed this by about a week into the new
year (to let people get back from holidays etc).

Thanks,

Jonathan

> ---
>  drivers/iio/gyro/st_gyro_core.c | 75 ++++++++++++++++++++++++++++++++-
>  1 file changed, 74 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/iio/gyro/st_gyro_core.c b/drivers/iio/gyro/st_gyro_core.c
> index 57be68b291fa..26c50b24bc08 100644
> --- a/drivers/iio/gyro/st_gyro_core.c
> +++ b/drivers/iio/gyro/st_gyro_core.c
> @@ -138,7 +138,6 @@ static const struct st_sensor_settings st_gyro_sensors_settings[] = {
>  			[2] = LSM330DLC_GYRO_DEV_NAME,
>  			[3] = L3G4IS_GYRO_DEV_NAME,
>  			[4] = LSM330_GYRO_DEV_NAME,
> -			[5] = LSM9DS0_GYRO_DEV_NAME,
>  		},
>  		.ch = (struct iio_chan_spec *)st_gyro_16bit_channels,
>  		.odr = {
> @@ -208,6 +207,80 @@ static const struct st_sensor_settings st_gyro_sensors_settings[] = {
>  		.multi_read_bit = true,
>  		.bootime = 2,
>  	},
> +	{
> +		.wai = 0xd4,
> +		.wai_addr = ST_SENSORS_DEFAULT_WAI_ADDRESS,
> +		.sensors_supported = {
> +			[0] = LSM9DS0_GYRO_DEV_NAME,
> +		},
> +		.ch = (struct iio_chan_spec *)st_gyro_16bit_channels,
> +		.odr = {
> +			.addr = 0x20,
> +			.mask = GENMASK(7, 6),
> +			.odr_avl = {
> +				{ .hz = 95, .value = 0x00, },
> +				{ .hz = 190, .value = 0x01, },
> +				{ .hz = 380, .value = 0x02, },
> +				{ .hz = 760, .value = 0x03, },
> +			},
> +		},
> +		.pw = {
> +			.addr = 0x20,
> +			.mask = BIT(3),
> +			.value_on = ST_SENSORS_DEFAULT_POWER_ON_VALUE,
> +			.value_off = ST_SENSORS_DEFAULT_POWER_OFF_VALUE,
> +		},
> +		.enable_axis = {
> +			.addr = ST_SENSORS_DEFAULT_AXIS_ADDR,
> +			.mask = ST_SENSORS_DEFAULT_AXIS_MASK,
> +		},
> +		.fs = {
> +			.addr = 0x23,
> +			.mask = GENMASK(5, 4),
> +			.fs_avl = {
> +				[0] = {
> +					.num = ST_GYRO_FS_AVL_245DPS,
> +					.value = 0x00,
> +					.gain = IIO_DEGREE_TO_RAD(8750),
> +				},
> +				[1] = {
> +					.num = ST_GYRO_FS_AVL_500DPS,
> +					.value = 0x01,
> +					.gain = IIO_DEGREE_TO_RAD(17500),
> +				},
> +				[2] = {
> +					.num = ST_GYRO_FS_AVL_2000DPS,
> +					.value = 0x02,
> +					.gain = IIO_DEGREE_TO_RAD(70000),
> +				},
> +			},
> +		},
> +		.bdu = {
> +			.addr = 0x23,
> +			.mask = BIT(7),
> +		},
> +		.drdy_irq = {
> +			.int2 = {
> +				.addr = 0x22,
> +				.mask = BIT(3),
> +			},
> +			/*
> +			 * The sensor has IHL (active low) and open
> +			 * drain settings, but only for INT1 and not
> +			 * for the DRDY line on INT2.
> +			 */
> +			.stat_drdy = {
> +				.addr = ST_SENSORS_DEFAULT_STAT_ADDR,
> +				.mask = GENMASK(2, 0),
> +			},
> +		},
> +		.sim = {
> +			.addr = 0x23,
> +			.value = BIT(0),
> +		},
> +		.multi_read_bit = true,
> +		.bootime = 2,
> +	},
>  	{
>  		.wai = 0xd7,
>  		.wai_addr = ST_SENSORS_DEFAULT_WAI_ADDRESS,
Andy Shevchenko Jan. 13, 2020, 1:57 p.m. UTC | #2
On Mon, Dec 23, 2019 at 12:45:34PM +0000, Jonathan Cameron wrote:
> On Tue, 17 Dec 2019 19:10:38 +0200
> Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
> 
> > The commit 41c128cb25ce ("iio: st_gyro: Add lsm9ds0-gyro support")
> > assumes that gyro in LSM9DS0 is the same as others with 0xd4 WAI ID,
> > but datasheet tells slight different story, i.e. the first scale factor
> > for the chip is 245 dps, and not 250 dps.
> > 
> > Correct this by introducing a separate settings for LSM9DS0.
> > 
> > Fixes: 41c128cb25ce ("iio: st_gyro: Add lsm9ds0-gyro support")
> > Depends-on: 45a4e4220bf4 ("iio: gyro: st_gyro: fix L3GD20H support")
> > Cc: Leonard Crestez <leonard.crestez@nxp.com>
> > Cc: Lorenzo Bianconi <lorenzo.bianconi83@gmail.com>
> > Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> Looks good to me.  Will just leave it a bit longer to give others
> time to check it.
> 
> Give me a shout if I seem to have missed this by about a week into the new
> year (to let people get back from holidays etc).

Gentle ping.
Jonathan Cameron Jan. 13, 2020, 9:49 p.m. UTC | #3
On Mon, 13 Jan 2020 15:57:39 +0200
Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:

> On Mon, Dec 23, 2019 at 12:45:34PM +0000, Jonathan Cameron wrote:
> > On Tue, 17 Dec 2019 19:10:38 +0200
> > Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
> >   
> > > The commit 41c128cb25ce ("iio: st_gyro: Add lsm9ds0-gyro support")
> > > assumes that gyro in LSM9DS0 is the same as others with 0xd4 WAI ID,
> > > but datasheet tells slight different story, i.e. the first scale factor
> > > for the chip is 245 dps, and not 250 dps.
> > > 
> > > Correct this by introducing a separate settings for LSM9DS0.
> > > 
> > > Fixes: 41c128cb25ce ("iio: st_gyro: Add lsm9ds0-gyro support")
> > > Depends-on: 45a4e4220bf4 ("iio: gyro: st_gyro: fix L3GD20H support")
> > > Cc: Leonard Crestez <leonard.crestez@nxp.com>
> > > Cc: Lorenzo Bianconi <lorenzo.bianconi83@gmail.com>
> > > Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>  
> > Looks good to me.  Will just leave it a bit longer to give others
> > time to check it.
> > 
> > Give me a shout if I seem to have missed this by about a week into the new
> > year (to let people get back from holidays etc).  
> 
> Gentle ping.
> 
Thanks.  Given timing and the fact the bug is old, I'll pull this into
the togreg branch and hopefully get it lined up for the coming merge window.

Thanks and sorry for the delay.

Jonathan
diff mbox series

Patch

diff --git a/drivers/iio/gyro/st_gyro_core.c b/drivers/iio/gyro/st_gyro_core.c
index 57be68b291fa..26c50b24bc08 100644
--- a/drivers/iio/gyro/st_gyro_core.c
+++ b/drivers/iio/gyro/st_gyro_core.c
@@ -138,7 +138,6 @@  static const struct st_sensor_settings st_gyro_sensors_settings[] = {
 			[2] = LSM330DLC_GYRO_DEV_NAME,
 			[3] = L3G4IS_GYRO_DEV_NAME,
 			[4] = LSM330_GYRO_DEV_NAME,
-			[5] = LSM9DS0_GYRO_DEV_NAME,
 		},
 		.ch = (struct iio_chan_spec *)st_gyro_16bit_channels,
 		.odr = {
@@ -208,6 +207,80 @@  static const struct st_sensor_settings st_gyro_sensors_settings[] = {
 		.multi_read_bit = true,
 		.bootime = 2,
 	},
+	{
+		.wai = 0xd4,
+		.wai_addr = ST_SENSORS_DEFAULT_WAI_ADDRESS,
+		.sensors_supported = {
+			[0] = LSM9DS0_GYRO_DEV_NAME,
+		},
+		.ch = (struct iio_chan_spec *)st_gyro_16bit_channels,
+		.odr = {
+			.addr = 0x20,
+			.mask = GENMASK(7, 6),
+			.odr_avl = {
+				{ .hz = 95, .value = 0x00, },
+				{ .hz = 190, .value = 0x01, },
+				{ .hz = 380, .value = 0x02, },
+				{ .hz = 760, .value = 0x03, },
+			},
+		},
+		.pw = {
+			.addr = 0x20,
+			.mask = BIT(3),
+			.value_on = ST_SENSORS_DEFAULT_POWER_ON_VALUE,
+			.value_off = ST_SENSORS_DEFAULT_POWER_OFF_VALUE,
+		},
+		.enable_axis = {
+			.addr = ST_SENSORS_DEFAULT_AXIS_ADDR,
+			.mask = ST_SENSORS_DEFAULT_AXIS_MASK,
+		},
+		.fs = {
+			.addr = 0x23,
+			.mask = GENMASK(5, 4),
+			.fs_avl = {
+				[0] = {
+					.num = ST_GYRO_FS_AVL_245DPS,
+					.value = 0x00,
+					.gain = IIO_DEGREE_TO_RAD(8750),
+				},
+				[1] = {
+					.num = ST_GYRO_FS_AVL_500DPS,
+					.value = 0x01,
+					.gain = IIO_DEGREE_TO_RAD(17500),
+				},
+				[2] = {
+					.num = ST_GYRO_FS_AVL_2000DPS,
+					.value = 0x02,
+					.gain = IIO_DEGREE_TO_RAD(70000),
+				},
+			},
+		},
+		.bdu = {
+			.addr = 0x23,
+			.mask = BIT(7),
+		},
+		.drdy_irq = {
+			.int2 = {
+				.addr = 0x22,
+				.mask = BIT(3),
+			},
+			/*
+			 * The sensor has IHL (active low) and open
+			 * drain settings, but only for INT1 and not
+			 * for the DRDY line on INT2.
+			 */
+			.stat_drdy = {
+				.addr = ST_SENSORS_DEFAULT_STAT_ADDR,
+				.mask = GENMASK(2, 0),
+			},
+		},
+		.sim = {
+			.addr = 0x23,
+			.value = BIT(0),
+		},
+		.multi_read_bit = true,
+		.bootime = 2,
+	},
 	{
 		.wai = 0xd7,
 		.wai_addr = ST_SENSORS_DEFAULT_WAI_ADDRESS,