Support for sensor with up to 8 different ODR settings. Required for supporting LIS3MDL as sensor hub slave device. Signed-off-by: Jimmy Assarsson <jimmyassarsson@gmail.com> --- drivers/iio/imu/st_lsm6dsx/st_lsm6dsx.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx.h b/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx.h index f2113a63721a..38b613072da2 100644 --- a/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx.h +++ b/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx.h @@ -111,7 +111,7 @@ struct st_lsm6dsx_odr { u8 val; }; -#define ST_LSM6DSX_ODR_LIST_SIZE 6 +#define ST_LSM6DSX_ODR_LIST_SIZE 8 struct st_lsm6dsx_odr_table_entry { struct st_lsm6dsx_reg reg; -- 2.25.0
Add LIS3MDL register map to sensor hub device table. Tested with LSM6DSM. Signed-off-by: Jimmy Assarsson <jimmyassarsson@gmail.com> --- drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_shub.c | 63 ++++++++++++++++++++ 1 file changed, 63 insertions(+) diff --git a/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_shub.c b/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_shub.c index 95ddd19d1aa7..20fdef7a6ea2 100644 --- a/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_shub.c +++ b/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_shub.c @@ -88,6 +88,69 @@ static const struct st_lsm6dsx_ext_dev_settings st_lsm6dsx_ext_dev_table[] = { .len = 6, }, }, + /* LIS3MDL */ + { + .i2c_addr = { 0x1e }, + .wai = { + .addr = 0x0f, + .val = 0x3d, + }, + .id = ST_LSM6DSX_ID_MAGN, + .odr_table = { + .reg = { + .addr = 0x20, + .mask = GENMASK(4, 2), + }, + .odr_avl[0] = { 1000, 0x0 }, + .odr_avl[1] = { 2000, 0x1 }, + .odr_avl[2] = { 3000, 0x2 }, + .odr_avl[3] = { 5000, 0x3 }, + .odr_avl[4] = { 10000, 0x4 }, + .odr_avl[5] = { 20000, 0x5 }, + .odr_avl[6] = { 40000, 0x6 }, + .odr_avl[7] = { 80000, 0x7 }, + .odr_len = 8, + }, + .fs_table = { + .reg = { + .addr = 0x21, + .mask = GENMASK(6, 5), + }, + .fs_avl[0] = { + .gain = 146, + .val = 0x00, + }, /* 4000 uG/LSB */ + .fs_avl[1] = { + .gain = 292, + .val = 0x01, + }, /* 8000 uG/LSB */ + .fs_avl[2] = { + .gain = 438, + .val = 0x02, + }, /* 12000 uG/LSB */ + .fs_avl[3] = { + .gain = 584, + .val = 0x03, + }, /* 16000 uG/LSB */ + .fs_len = 4, + }, + .pwr_table = { + .reg = { + .addr = 0x22, + .mask = GENMASK(1, 0), + }, + .off_val = 0x2, + .on_val = 0x0, + }, + .bdu = { + .addr = 0x24, + .mask = BIT(6), + }, + .out = { + .addr = 0x28, + .len = 6, + }, + }, }; static void st_lsm6dsx_shub_wait_complete(struct st_lsm6dsx_hw *hw) -- 2.25.0
On 2020-03-24 22:52, Jimmy Assarsson wrote: > Add LIS3MDL register map to sensor hub device table. > Tested with LSM6DSM. > > Signed-off-by: Jimmy Assarsson <jimmyassarsson@gmail.com> > --- > drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_shub.c | 63 ++++++++++++++++++++ > 1 file changed, 63 insertions(+) > > diff --git a/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_shub.c b/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_shub.c > index 95ddd19d1aa7..20fdef7a6ea2 100644 > --- a/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_shub.c > +++ b/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_shub.c > @@ -88,6 +88,69 @@ static const struct st_lsm6dsx_ext_dev_settings st_lsm6dsx_ext_dev_table[] = { > .len = 6, > }, > }, > + /* LIS3MDL */ > + { > + .i2c_addr = { 0x1e }, > + .wai = { > + .addr = 0x0f, In st_magn_core.c this is ST_SENSORS_DEFAULT_WAI_ADDRESS (from linux/iio/common/st_sensors.h). Is this OK, our should I change it? > + .val = 0x3d, > + }, > + .id = ST_LSM6DSX_ID_MAGN, > + .odr_table = { > + .reg = { > + .addr = 0x20, > + .mask = GENMASK(4, 2), > + }, > + .odr_avl[0] = { 1000, 0x0 }, > + .odr_avl[1] = { 2000, 0x1 }, > + .odr_avl[2] = { 3000, 0x2 }, > + .odr_avl[3] = { 5000, 0x3 }, > + .odr_avl[4] = { 10000, 0x4 }, > + .odr_avl[5] = { 20000, 0x5 }, > + .odr_avl[6] = { 40000, 0x6 }, > + .odr_avl[7] = { 80000, 0x7 }, > + .odr_len = 8, > + }, > + .fs_table = { > + .reg = { > + .addr = 0x21, > + .mask = GENMASK(6, 5), > + }, > + .fs_avl[0] = { > + .gain = 146, > + .val = 0x00, > + }, /* 4000 uG/LSB */ > + .fs_avl[1] = { > + .gain = 292, > + .val = 0x01, > + }, /* 8000 uG/LSB */ > + .fs_avl[2] = { > + .gain = 438, > + .val = 0x02, > + }, /* 12000 uG/LSB */ > + .fs_avl[3] = { > + .gain = 584, > + .val = 0x03, > + }, /* 16000 uG/LSB */ > + .fs_len = 4, > + }, > + .pwr_table = { > + .reg = { > + .addr = 0x22, > + .mask = GENMASK(1, 0), > + }, > + .off_val = 0x2, > + .on_val = 0x0, > + }, > + .bdu = { > + .addr = 0x24, > + .mask = BIT(6), > + }, > + .out = { > + .addr = 0x28, > + .len = 6, > + }, > + }, > }; > > static void st_lsm6dsx_shub_wait_complete(struct st_lsm6dsx_hw *hw) >
On Tue, Mar 24, 2020 at 11:59 PM Jimmy Assarsson <jimmyassarsson@gmail.com> wrote: > On 2020-03-24 22:52, Jimmy Assarsson wrote: ... > > + .wai = { > > + .addr = 0x0f, > > In st_magn_core.c this is ST_SENSORS_DEFAULT_WAI_ADDRESS > (from linux/iio/common/st_sensors.h). Is this OK, our should I change it? I would rather use macro, Easier to grep what is being used with ST sensors. > > > + .val = 0x3d, > > + }, -- With Best Regards, Andy Shevchenko
On 2020-03-25 12:02, Andy Shevchenko wrote: > On Tue, Mar 24, 2020 at 11:59 PM Jimmy Assarsson > <jimmyassarsson@gmail.com> wrote: >> On 2020-03-24 22:52, Jimmy Assarsson wrote: > > ... > >>> + .wai = { >>> + .addr = 0x0f, >> >> In st_magn_core.c this is ST_SENSORS_DEFAULT_WAI_ADDRESS >> (from linux/iio/common/st_sensors.h). Is this OK, our should I change it? > > I would rather use macro, Easier to grep what is being used with ST sensors. Sure, will fix it in v2. >> >>> + .val = 0x3d, >>> + },
On Tue, 24 Mar 2020 22:52:25 +0100 Jimmy Assarsson <jimmyassarsson@gmail.com> wrote: > Support for sensor with up to 8 different ODR settings. > Required for supporting LIS3MDL as sensor hub slave device. > > Signed-off-by: Jimmy Assarsson <jimmyassarsson@gmail.com> Applied to the togreg branch of iio.git and pushed out as testing for the autobuilders to poke at it. Thanks, Jonathan > --- > drivers/iio/imu/st_lsm6dsx/st_lsm6dsx.h | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx.h b/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx.h > index f2113a63721a..38b613072da2 100644 > --- a/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx.h > +++ b/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx.h > @@ -111,7 +111,7 @@ struct st_lsm6dsx_odr { > u8 val; > }; > > -#define ST_LSM6DSX_ODR_LIST_SIZE 6 > +#define ST_LSM6DSX_ODR_LIST_SIZE 8 > struct st_lsm6dsx_odr_table_entry { > struct st_lsm6dsx_reg reg; >