lkml.org 
[lkml]   [2019]   [Jul]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 1/3] iio: imu: st_lsm6sdx: move some register definitions to sensor_settings struct
    Date
    Move some register definitions to the per-device array of struct
    st_lsm6dsx_sensor_settings in order to simplify adding new sensor
    devices to the driver.

    Also, remove completely unused register definitions.

    Signed-off-by: Martin Kepplinger <martin.kepplinger@puri.sm>
    ---
    drivers/iio/imu/st_lsm6dsx/st_lsm6dsx.h | 6 ++++
    drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_core.c | 31 ++++++++++++++------
    2 files changed, 28 insertions(+), 9 deletions(-)

    diff --git a/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx.h b/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx.h
    index c14bf533b66b..f072ac14f213 100644
    --- a/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx.h
    +++ b/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx.h
    @@ -196,6 +196,9 @@ struct st_lsm6dsx_ext_dev_settings {
    /**
    * struct st_lsm6dsx_settings - ST IMU sensor settings
    * @wai: Sensor WhoAmI default value.
    + * @reg_int1_addr: Control Register address for INT1
    + * @reg_int2_addr: Control Register address for INT2
    + * @reg_reset_addr: register address for reset/reboot
    * @max_fifo_size: Sensor max fifo length in FIFO words.
    * @id: List of hw id/device name supported by the driver configuration.
    * @decimator: List of decimator register info (addr + mask).
    @@ -206,6 +209,9 @@ struct st_lsm6dsx_ext_dev_settings {
    */
    struct st_lsm6dsx_settings {
    u8 wai;
    + u8 reg_int1_addr;
    + u8 reg_int2_addr;
    + u8 reg_reset_addr;
    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 a6702a74570e..7a4fe70a8f20 100644
    --- a/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_core.c
    +++ b/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_core.c
    @@ -49,17 +49,12 @@

    #include "st_lsm6dsx.h"

    -#define ST_LSM6DSX_REG_INT1_ADDR 0x0d
    -#define ST_LSM6DSX_REG_INT2_ADDR 0x0e
    #define ST_LSM6DSX_REG_FIFO_FTH_IRQ_MASK BIT(3)
    #define ST_LSM6DSX_REG_WHOAMI_ADDR 0x0f
    -#define ST_LSM6DSX_REG_RESET_ADDR 0x12
    #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)
    -#define ST_LSM6DSX_REG_INT2_ON_INT1_ADDR 0x13
    -#define ST_LSM6DSX_REG_INT2_ON_INT1_MASK BIT(5)

    #define ST_LSM6DSX_REG_ACC_OUT_X_L_ADDR 0x28
    #define ST_LSM6DSX_REG_ACC_OUT_Y_L_ADDR 0x2a
    @@ -122,6 +117,9 @@ static const struct st_lsm6dsx_fs_table_entry st_lsm6dsx_fs_table[] = {
    static const struct st_lsm6dsx_settings st_lsm6dsx_sensor_settings[] = {
    {
    .wai = 0x69,
    + .reg_int1_addr = 0x0d,
    + .reg_int2_addr = 0x0e,
    + .reg_reset_addr = 0x12,
    .max_fifo_size = 1365,
    .id = {
    {
    @@ -172,6 +170,9 @@ static const struct st_lsm6dsx_settings st_lsm6dsx_sensor_settings[] = {
    },
    {
    .wai = 0x69,
    + .reg_int1_addr = 0x0d,
    + .reg_int2_addr = 0x0e,
    + .reg_reset_addr = 0x12,
    .max_fifo_size = 682,
    .id = {
    {
    @@ -222,6 +223,9 @@ static const struct st_lsm6dsx_settings st_lsm6dsx_sensor_settings[] = {
    },
    {
    .wai = 0x6a,
    + .reg_int1_addr = 0x0d,
    + .reg_int2_addr = 0x0e,
    + .reg_reset_addr = 0x12,
    .max_fifo_size = 682,
    .id = {
    {
    @@ -278,6 +282,9 @@ static const struct st_lsm6dsx_settings st_lsm6dsx_sensor_settings[] = {
    },
    {
    .wai = 0x6c,
    + .reg_int1_addr = 0x0d,
    + .reg_int2_addr = 0x0e,
    + .reg_reset_addr = 0x12,
    .max_fifo_size = 512,
    .id = {
    {
    @@ -349,6 +356,9 @@ static const struct st_lsm6dsx_settings st_lsm6dsx_sensor_settings[] = {
    },
    {
    .wai = 0x6b,
    + .reg_int1_addr = 0x0d,
    + .reg_int2_addr = 0x0e,
    + .reg_reset_addr = 0x12,
    .max_fifo_size = 512,
    .id = {
    {
    @@ -391,6 +401,9 @@ static const struct st_lsm6dsx_settings st_lsm6dsx_sensor_settings[] = {
    },
    {
    .wai = 0x6b,
    + .reg_int1_addr = 0x0d,
    + .reg_int2_addr = 0x0e,
    + .reg_reset_addr = 0x12,
    .max_fifo_size = 512,
    .id = {
    {
    @@ -873,10 +886,10 @@ static int st_lsm6dsx_get_drdy_reg(struct st_lsm6dsx_hw *hw, u8 *drdy_reg)

    switch (drdy_pin) {
    case 1:
    - *drdy_reg = ST_LSM6DSX_REG_INT1_ADDR;
    + *drdy_reg = hw->settings->reg_int1_addr;
    break;
    case 2:
    - *drdy_reg = ST_LSM6DSX_REG_INT2_ADDR;
    + *drdy_reg = hw->settings->reg_int2_addr;
    break;
    default:
    dev_err(hw->dev, "unsupported data ready pin\n");
    @@ -976,7 +989,7 @@ static int st_lsm6dsx_init_device(struct st_lsm6dsx_hw *hw)
    int err;

    /* device sw reset */
    - err = regmap_update_bits(hw->regmap, ST_LSM6DSX_REG_RESET_ADDR,
    + err = regmap_update_bits(hw->regmap, hw->settings->reg_reset_addr,
    ST_LSM6DSX_REG_RESET_MASK,
    FIELD_PREP(ST_LSM6DSX_REG_RESET_MASK, 1));
    if (err < 0)
    @@ -985,7 +998,7 @@ static int st_lsm6dsx_init_device(struct st_lsm6dsx_hw *hw)
    msleep(50);

    /* reload trimming parameter */
    - err = regmap_update_bits(hw->regmap, ST_LSM6DSX_REG_RESET_ADDR,
    + err = regmap_update_bits(hw->regmap, hw->settings->reg_reset_addr,
    ST_LSM6DSX_REG_BOOT_MASK,
    FIELD_PREP(ST_LSM6DSX_REG_BOOT_MASK, 1));
    if (err < 0)
    --
    2.20.1
    \
     
     \ /
      Last update: 2019-07-15 15:26    [W:3.001 / U:0.012 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site