iio: st_gyro: Correct data for LSM9DS0 gyro
authorAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Tue, 17 Dec 2019 17:10:38 +0000 (19:10 +0200)
committerJonathan Cameron <Jonathan.Cameron@huawei.com>
Mon, 13 Jan 2020 21:49:20 +0000 (21:49 +0000)
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>
Cc: <Stable@vger.kernel.org>
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
drivers/iio/gyro/st_gyro_core.c

index 57be68b..26c50b2 100644 (file)
@@ -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 = {
@@ -209,6 +208,80 @@ static const struct st_sensor_settings st_gyro_sensors_settings[] = {
                .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,
                .sensors_supported = {