Message ID | 7fbb267c585384fd39c2abe7e6250fd1c207bdd3.1576341963.git.lorenzo@kernel.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | introduce i2c master controller support for LSM6DSM | expand |
On Sat, 14 Dec 2019 17:52:56 +0100 Lorenzo Bianconi <lorenzo@kernel.org> wrote: > Check if the pull up register is located in the primary or in the > secondary memory page. This is a preliminary patch to support i2c master > controller on lsm6dsm devices > > Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org> Applied, Thanks, Jonathan > --- > drivers/iio/imu/st_lsm6dsx/st_lsm6dsx.h | 6 +++++- > drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_core.c | 13 +++++++++---- > 2 files changed, 14 insertions(+), 5 deletions(-) > > diff --git a/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx.h b/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx.h > index 0f8f3fbde67a..b4bd02df2900 100644 > --- a/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx.h > +++ b/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx.h > @@ -189,7 +189,11 @@ struct st_lsm6dsx_shub_settings { > u8 addr; > u8 mask; > } master_en; > - struct st_lsm6dsx_reg pullup_en; > + struct { > + bool sec_page; > + u8 addr; > + u8 mask; > + } pullup_en; > struct st_lsm6dsx_reg aux_sens; > struct st_lsm6dsx_reg wr_once; > u8 num_ext_dev; > diff --git a/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_core.c b/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_core.c > index fe1aaaf68a9b..6adfc53ef8d0 100644 > --- a/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_core.c > +++ b/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_core.c > @@ -872,6 +872,7 @@ static const struct st_lsm6dsx_settings st_lsm6dsx_sensor_settings[] = { > .mask = BIT(2), > }, > .pullup_en = { > + .sec_page = true, > .addr = 0x14, > .mask = BIT(3), > }, > @@ -1248,6 +1249,7 @@ static const struct st_lsm6dsx_settings st_lsm6dsx_sensor_settings[] = { > .mask = BIT(2), > }, > .pullup_en = { > + .sec_page = true, > .addr = 0x14, > .mask = BIT(3), > }, > @@ -1863,16 +1865,19 @@ static int st_lsm6dsx_init_shub(struct st_lsm6dsx_hw *hw) > pdata = (struct st_sensors_platform_data *)hw->dev->platform_data; > if ((np && of_property_read_bool(np, "st,pullups")) || > (pdata && pdata->pullups)) { > - err = st_lsm6dsx_set_page(hw, true); > - if (err < 0) > - return err; > + if (hub_settings->pullup_en.sec_page) { > + err = st_lsm6dsx_set_page(hw, true); > + if (err < 0) > + return err; > + } > > data = ST_LSM6DSX_SHIFT_VAL(1, hub_settings->pullup_en.mask); > err = regmap_update_bits(hw->regmap, > hub_settings->pullup_en.addr, > hub_settings->pullup_en.mask, data); > > - st_lsm6dsx_set_page(hw, false); > + if (hub_settings->pullup_en.sec_page) > + st_lsm6dsx_set_page(hw, false); > > if (err < 0) > return err;
On Sat, 14 Dec 2019 17:52:56 +0100 Lorenzo Bianconi <lorenzo@kernel.org> wrote: > Check if the pull up register is located in the primary or in the > secondary memory page. This is a preliminary patch to support i2c master > controller on lsm6dsm devices > > Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org> There was a bit of fuzz on this one given Andy's series merged in the meantime. Looks like it went on cleanly but please check. This has happened in this order because I got a bit swamped so it was easier to start at newest and go back in time (many older versions are already superceded). Sorry about that! Thanks, Jonathan > --- > drivers/iio/imu/st_lsm6dsx/st_lsm6dsx.h | 6 +++++- > drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_core.c | 13 +++++++++---- > 2 files changed, 14 insertions(+), 5 deletions(-) > > diff --git a/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx.h b/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx.h > index 0f8f3fbde67a..b4bd02df2900 100644 > --- a/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx.h > +++ b/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx.h > @@ -189,7 +189,11 @@ struct st_lsm6dsx_shub_settings { > u8 addr; > u8 mask; > } master_en; > - struct st_lsm6dsx_reg pullup_en; > + struct { > + bool sec_page; > + u8 addr; > + u8 mask; > + } pullup_en; > struct st_lsm6dsx_reg aux_sens; > struct st_lsm6dsx_reg wr_once; > u8 num_ext_dev; > diff --git a/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_core.c b/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_core.c > index fe1aaaf68a9b..6adfc53ef8d0 100644 > --- a/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_core.c > +++ b/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_core.c > @@ -872,6 +872,7 @@ static const struct st_lsm6dsx_settings st_lsm6dsx_sensor_settings[] = { > .mask = BIT(2), > }, > .pullup_en = { > + .sec_page = true, > .addr = 0x14, > .mask = BIT(3), > }, > @@ -1248,6 +1249,7 @@ static const struct st_lsm6dsx_settings st_lsm6dsx_sensor_settings[] = { > .mask = BIT(2), > }, > .pullup_en = { > + .sec_page = true, > .addr = 0x14, > .mask = BIT(3), > }, > @@ -1863,16 +1865,19 @@ static int st_lsm6dsx_init_shub(struct st_lsm6dsx_hw *hw) > pdata = (struct st_sensors_platform_data *)hw->dev->platform_data; > if ((np && of_property_read_bool(np, "st,pullups")) || > (pdata && pdata->pullups)) { > - err = st_lsm6dsx_set_page(hw, true); > - if (err < 0) > - return err; > + if (hub_settings->pullup_en.sec_page) { > + err = st_lsm6dsx_set_page(hw, true); > + if (err < 0) > + return err; > + } > > data = ST_LSM6DSX_SHIFT_VAL(1, hub_settings->pullup_en.mask); > err = regmap_update_bits(hw->regmap, > hub_settings->pullup_en.addr, > hub_settings->pullup_en.mask, data); > > - st_lsm6dsx_set_page(hw, false); > + if (hub_settings->pullup_en.sec_page) > + st_lsm6dsx_set_page(hw, false); > > if (err < 0) > return err;
diff --git a/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx.h b/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx.h index 0f8f3fbde67a..b4bd02df2900 100644 --- a/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx.h +++ b/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx.h @@ -189,7 +189,11 @@ struct st_lsm6dsx_shub_settings { u8 addr; u8 mask; } master_en; - struct st_lsm6dsx_reg pullup_en; + struct { + bool sec_page; + u8 addr; + u8 mask; + } pullup_en; struct st_lsm6dsx_reg aux_sens; struct st_lsm6dsx_reg wr_once; u8 num_ext_dev; diff --git a/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_core.c b/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_core.c index fe1aaaf68a9b..6adfc53ef8d0 100644 --- a/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_core.c +++ b/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_core.c @@ -872,6 +872,7 @@ static const struct st_lsm6dsx_settings st_lsm6dsx_sensor_settings[] = { .mask = BIT(2), }, .pullup_en = { + .sec_page = true, .addr = 0x14, .mask = BIT(3), }, @@ -1248,6 +1249,7 @@ static const struct st_lsm6dsx_settings st_lsm6dsx_sensor_settings[] = { .mask = BIT(2), }, .pullup_en = { + .sec_page = true, .addr = 0x14, .mask = BIT(3), }, @@ -1863,16 +1865,19 @@ static int st_lsm6dsx_init_shub(struct st_lsm6dsx_hw *hw) pdata = (struct st_sensors_platform_data *)hw->dev->platform_data; if ((np && of_property_read_bool(np, "st,pullups")) || (pdata && pdata->pullups)) { - err = st_lsm6dsx_set_page(hw, true); - if (err < 0) - return err; + if (hub_settings->pullup_en.sec_page) { + err = st_lsm6dsx_set_page(hw, true); + if (err < 0) + return err; + } data = ST_LSM6DSX_SHIFT_VAL(1, hub_settings->pullup_en.mask); err = regmap_update_bits(hw->regmap, hub_settings->pullup_en.addr, hub_settings->pullup_en.mask, data); - st_lsm6dsx_set_page(hw, false); + if (hub_settings->pullup_en.sec_page) + st_lsm6dsx_set_page(hw, false); if (err < 0) return err;
Check if the pull up register is located in the primary or in the secondary memory page. This is a preliminary patch to support i2c master controller on lsm6dsm devices Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org> --- drivers/iio/imu/st_lsm6dsx/st_lsm6dsx.h | 6 +++++- drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_core.c | 13 +++++++++---- 2 files changed, 14 insertions(+), 5 deletions(-)