On Sun, 6 Oct 2019 15:21:59 +0200 Lorenzo Bianconi <lorenzo@xxxxxxxxxx> wrote: > Move bdu, boot and reset register definitions in hw_settings register > map since not all supported sensors (e.g lsm9ds1) rely on the same > definitions > > Fixes: 52f4b1f19679 ("iio: imu: st_lsm6dsx: add support for accel/gyro unit of lsm9ds1") > Signed-off-by: Lorenzo Bianconi <lorenzo@xxxxxxxxxx> Applied. Note that I'm applying this series to the togreg branch of iio.git simply to avoid the complexity of trying to unwind what should go to stable at this point and what should not. Not sure what else we can do with this driver as it is in a fairly large state of flux. You may need to do backports by hand to cover 5.4. Thanks, Jonathan > --- > drivers/iio/imu/st_lsm6dsx/st_lsm6dsx.h | 8 +- > drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_core.c | 113 +++++++++++++++---- > 2 files changed, 99 insertions(+), 22 deletions(-) > > diff --git a/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx.h b/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx.h > index 8e002a51595e..5692ea695f04 100644 > --- a/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx.h > +++ b/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx.h > @@ -236,7 +236,9 @@ struct st_lsm6dsx_ext_dev_settings { > /** > * struct st_lsm6dsx_settings - ST IMU sensor settings > * @wai: Sensor WhoAmI default value. > - * @reset_addr: register address for reset/reboot > + * @reset: register address for reset. > + * @boot: register address for boot. > + * @bdu: register address for Block Data Update. > * @max_fifo_size: Sensor max fifo length in FIFO words. > * @id: List of hw id/device name supported by the driver configuration. > * @channels: IIO channels supported by the device. > @@ -251,7 +253,9 @@ struct st_lsm6dsx_ext_dev_settings { > */ > struct st_lsm6dsx_settings { > u8 wai; > - u8 reset_addr; > + struct st_lsm6dsx_reg reset; > + struct st_lsm6dsx_reg boot; > + struct st_lsm6dsx_reg bdu; > u16 max_fifo_size; > struct { > enum st_lsm6dsx_hw_id hw_id; > diff --git a/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_core.c b/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_core.c > index a598cc8e9343..5df382b9d8f9 100644 > --- a/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_core.c > +++ b/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_core.c > @@ -62,10 +62,6 @@ > #include "st_lsm6dsx.h" > > #define ST_LSM6DSX_REG_WHOAMI_ADDR 0x0f > -#define ST_LSM6DSX_REG_RESET_MASK BIT(0) > -#define ST_LSM6DSX_REG_BOOT_MASK BIT(7) > -#define ST_LSM6DSX_REG_BDU_ADDR 0x12 > -#define ST_LSM6DSX_REG_BDU_MASK BIT(6) > > static const struct iio_chan_spec st_lsm6dsx_acc_channels[] = { > ST_LSM6DSX_CHANNEL_ACC(IIO_ACCEL, 0x28, IIO_MOD_X, 0), > @@ -91,7 +87,18 @@ static const struct iio_chan_spec st_lsm6ds0_gyro_channels[] = { > static const struct st_lsm6dsx_settings st_lsm6dsx_sensor_settings[] = { > { > .wai = 0x68, > - .reset_addr = 0x22, > + .reset = { > + .addr = 0x22, > + .mask = BIT(0), > + }, > + .boot = { > + .addr = 0x22, > + .mask = BIT(7), > + }, > + .bdu = { > + .addr = 0x22, > + .mask = BIT(6), > + }, > .max_fifo_size = 32, > .id = { > { > @@ -177,7 +184,18 @@ static const struct st_lsm6dsx_settings st_lsm6dsx_sensor_settings[] = { > }, > { > .wai = 0x69, > - .reset_addr = 0x12, > + .reset = { > + .addr = 0x12, > + .mask = BIT(0), > + }, > + .boot = { > + .addr = 0x12, > + .mask = BIT(7), > + }, > + .bdu = { > + .addr = 0x12, > + .mask = BIT(6), > + }, > .max_fifo_size = 1365, > .id = { > { > @@ -328,7 +346,18 @@ static const struct st_lsm6dsx_settings st_lsm6dsx_sensor_settings[] = { > }, > { > .wai = 0x69, > - .reset_addr = 0x12, > + .reset = { > + .addr = 0x12, > + .mask = BIT(0), > + }, > + .boot = { > + .addr = 0x12, > + .mask = BIT(7), > + }, > + .bdu = { > + .addr = 0x12, > + .mask = BIT(6), > + }, > .max_fifo_size = 682, > .id = { > { > @@ -479,7 +508,18 @@ static const struct st_lsm6dsx_settings st_lsm6dsx_sensor_settings[] = { > }, > { > .wai = 0x6a, > - .reset_addr = 0x12, > + .reset = { > + .addr = 0x12, > + .mask = BIT(0), > + }, > + .boot = { > + .addr = 0x12, > + .mask = BIT(7), > + }, > + .bdu = { > + .addr = 0x12, > + .mask = BIT(6), > + }, > .max_fifo_size = 682, > .id = { > { > @@ -643,7 +683,18 @@ static const struct st_lsm6dsx_settings st_lsm6dsx_sensor_settings[] = { > }, > { > .wai = 0x6c, > - .reset_addr = 0x12, > + .reset = { > + .addr = 0x12, > + .mask = BIT(0), > + }, > + .boot = { > + .addr = 0x12, > + .mask = BIT(7), > + }, > + .bdu = { > + .addr = 0x12, > + .mask = BIT(6), > + }, > .max_fifo_size = 512, > .id = { > { > @@ -800,7 +851,18 @@ static const struct st_lsm6dsx_settings st_lsm6dsx_sensor_settings[] = { > }, > { > .wai = 0x6b, > - .reset_addr = 0x12, > + .reset = { > + .addr = 0x12, > + .mask = BIT(0), > + }, > + .boot = { > + .addr = 0x12, > + .mask = BIT(7), > + }, > + .bdu = { > + .addr = 0x12, > + .mask = BIT(6), > + }, > .max_fifo_size = 512, > .id = { > { > @@ -951,7 +1013,18 @@ static const struct st_lsm6dsx_settings st_lsm6dsx_sensor_settings[] = { > }, > { > .wai = 0x6b, > - .reset_addr = 0x12, > + .reset = { > + .addr = 0x12, > + .mask = BIT(0), > + }, > + .boot = { > + .addr = 0x12, > + .mask = BIT(7), > + }, > + .bdu = { > + .addr = 0x12, > + .mask = BIT(6), > + }, > .max_fifo_size = 512, > .id = { > { > @@ -1778,27 +1851,27 @@ static int st_lsm6dsx_init_device(struct st_lsm6dsx_hw *hw) > int err; > > /* device sw reset */ > - err = regmap_update_bits(hw->regmap, hw->settings->reset_addr, > - ST_LSM6DSX_REG_RESET_MASK, > - FIELD_PREP(ST_LSM6DSX_REG_RESET_MASK, 1)); > + reg = &hw->settings->reset; > + err = regmap_update_bits(hw->regmap, reg->addr, reg->mask, > + ST_LSM6DSX_SHIFT_VAL(1, reg->mask)); > if (err < 0) > return err; > > msleep(50); > > /* reload trimming parameter */ > - err = regmap_update_bits(hw->regmap, hw->settings->reset_addr, > - ST_LSM6DSX_REG_BOOT_MASK, > - FIELD_PREP(ST_LSM6DSX_REG_BOOT_MASK, 1)); > + reg = &hw->settings->boot; > + err = regmap_update_bits(hw->regmap, reg->addr, reg->mask, > + ST_LSM6DSX_SHIFT_VAL(1, reg->mask)); > if (err < 0) > return err; > > msleep(50); > > /* enable Block Data Update */ > - err = regmap_update_bits(hw->regmap, ST_LSM6DSX_REG_BDU_ADDR, > - ST_LSM6DSX_REG_BDU_MASK, > - FIELD_PREP(ST_LSM6DSX_REG_BDU_MASK, 1)); > + reg = &hw->settings->bdu; > + err = regmap_update_bits(hw->regmap, reg->addr, reg->mask, > + ST_LSM6DSX_SHIFT_VAL(1, reg->mask)); > if (err < 0) > return err; >