RE: [PATCH v2 1/4] iio: bmc150: Use i2c regmap
> -Original Message- > From: Markus Pargmann [mailto:m...@pengutronix.de] > Sent: 20 August, 2015 15:50 > To: Jonathan Cameron > Cc: Srinivas Pandruvada; Tirdea, Irina; Lars-Peter Clausen; > linux-...@vger.kernel.org; linux-kernel@vger.kernel.org; > ker...@pengutronix.de; Markus Pargmann > Subject: [PATCH v2 1/4] iio: bmc150: Use i2c regmap > > This replaces all usage of direct i2c accesses with regmap accesses. > > Signed-off-by: Markus Pargmann > --- This patch works, but I would wait for the rebased version and check again. One minor comment below. > drivers/iio/accel/Kconfig| 2 + > drivers/iio/accel/bmc150-accel.c | 219 > +-- > 2 files changed, 95 insertions(+), 126 deletions(-) > > diff --git a/drivers/iio/accel/Kconfig b/drivers/iio/accel/Kconfig > index 00e7bcbdbe24..01dd03d194d1 100644 > --- a/drivers/iio/accel/Kconfig > +++ b/drivers/iio/accel/Kconfig > @@ -22,6 +22,8 @@ config BMC150_ACCEL > depends on I2C > select IIO_BUFFER > select IIO_TRIGGERED_BUFFER > + select REGMAP > + select REGMAP_I2C > help > Say yes here to build support for the following Bosch accelerometers: > BMC150, BMI055, BMA250E, BMA222E, BMA255, BMA280. > diff --git a/drivers/iio/accel/bmc150-accel.c > b/drivers/iio/accel/bmc150-accel.c > index 55751d9e1ade..c5c773e75173 100644 > --- a/drivers/iio/accel/bmc150-accel.c > +++ b/drivers/iio/accel/bmc150-accel.c > @@ -35,6 +35,7 @@ > #include > #include > #include > +#include > > #define BMC150_ACCEL_DRV_NAME"bmc150_accel" > #define BMC150_ACCEL_IRQ_NAME"bmc150_accel_event" > @@ -185,6 +186,8 @@ enum bmc150_accel_trigger_id { > > struct bmc150_accel_data { > struct i2c_client *client; > + struct regmap *regmap; > + struct device *dev; > struct bmc150_accel_interrupt interrupts[BMC150_ACCEL_INTERRUPTS]; > atomic_t active_intr; > struct bmc150_accel_trigger triggers[BMC150_ACCEL_TRIGGERS]; > @@ -241,6 +244,11 @@ static const struct { > {50, BMC150_ACCEL_SLEEP_500_MS}, > {100, BMC150_ACCEL_SLEEP_1_SEC} }; > > +static const struct regmap_config bmc150_i2c_regmap_conf = { > + .reg_bits = 8, > + .val_bits = 8, > + .max_register = 0x3f, > +}; > > static int bmc150_accel_set_mode(struct bmc150_accel_data *data, >enum bmc150_power_modes mode, > @@ -270,8 +278,7 @@ static int bmc150_accel_set_mode(struct bmc150_accel_data > *data, > > dev_dbg(>client->dev, "Set Mode bits %x\n", lpw_bits); > > - ret = i2c_smbus_write_byte_data(data->client, > - BMC150_ACCEL_REG_PMU_LPW, lpw_bits); > + ret = regmap_write(data->regmap, BMC150_ACCEL_REG_PMU_LPW, lpw_bits); > if (ret < 0) { > dev_err(>client->dev, "Error writing reg_pmu_lpw\n"); > return ret; > @@ -289,8 +296,7 @@ static int bmc150_accel_set_bw(struct bmc150_accel_data > *data, int val, > for (i = 0; i < ARRAY_SIZE(bmc150_accel_samp_freq_table); ++i) { > if (bmc150_accel_samp_freq_table[i].val == val && > bmc150_accel_samp_freq_table[i].val2 == val2) { > - ret = i2c_smbus_write_byte_data( > - data->client, > + ret = regmap_write(data->regmap, > BMC150_ACCEL_REG_PMU_BW, > bmc150_accel_samp_freq_table[i].bw_bits); > if (ret < 0) > @@ -307,26 +313,19 @@ static int bmc150_accel_set_bw(struct bmc150_accel_data > *data, int val, > > static int bmc150_accel_update_slope(struct bmc150_accel_data *data) > { > - int ret, val; > + int ret; > > - ret = i2c_smbus_write_byte_data(data->client, BMC150_ACCEL_REG_INT_6, > + ret = regmap_write(data->regmap, BMC150_ACCEL_REG_INT_6, > data->slope_thres); > if (ret < 0) { > dev_err(>client->dev, "Error writing reg_int_6\n"); > return ret; > } > > - ret = i2c_smbus_read_byte_data(data->client, BMC150_ACCEL_REG_INT_5); > + ret = regmap_update_bits(data->regmap, BMC150_ACCEL_REG_INT_5, > + BMC150_ACCEL_SLOPE_DUR_MASK, data->slope_dur); > if (ret < 0) { > - dev_err(>client->dev, "Error reading reg_int_5\n"); > - return ret; > - } > - > - val = (ret & ~BMC150_ACCEL_SLOPE_DUR_MASK) | data->slope_dur; > - ret = i2c_smbus_write_byte_data(data->client, BMC150_ACCEL_REG_INT_5, > - val); > - if (ret < 0) { > - dev_err(>client->dev, "Error write reg_int_5\n"); > + dev_err(>client->dev, "Error updating reg_int_5\n"); > return ret; > } > > @@ -348,17
RE: [PATCH v2 1/4] iio: bmc150: Use i2c regmap
> -Original Message- > From: Markus Pargmann [mailto:m...@pengutronix.de] > Sent: 20 August, 2015 15:50 > To: Jonathan Cameron > Cc: Srinivas Pandruvada; Tirdea, Irina; Lars-Peter Clausen; > linux-...@vger.kernel.org; linux-kernel@vger.kernel.org; > ker...@pengutronix.de; Markus Pargmann > Subject: [PATCH v2 1/4] iio: bmc150: Use i2c regmap > > This replaces all usage of direct i2c accesses with regmap accesses. > > Signed-off-by: Markus Pargmann> --- This patch works, but I would wait for the rebased version and check again. One minor comment below. > drivers/iio/accel/Kconfig| 2 + > drivers/iio/accel/bmc150-accel.c | 219 > +-- > 2 files changed, 95 insertions(+), 126 deletions(-) > > diff --git a/drivers/iio/accel/Kconfig b/drivers/iio/accel/Kconfig > index 00e7bcbdbe24..01dd03d194d1 100644 > --- a/drivers/iio/accel/Kconfig > +++ b/drivers/iio/accel/Kconfig > @@ -22,6 +22,8 @@ config BMC150_ACCEL > depends on I2C > select IIO_BUFFER > select IIO_TRIGGERED_BUFFER > + select REGMAP > + select REGMAP_I2C > help > Say yes here to build support for the following Bosch accelerometers: > BMC150, BMI055, BMA250E, BMA222E, BMA255, BMA280. > diff --git a/drivers/iio/accel/bmc150-accel.c > b/drivers/iio/accel/bmc150-accel.c > index 55751d9e1ade..c5c773e75173 100644 > --- a/drivers/iio/accel/bmc150-accel.c > +++ b/drivers/iio/accel/bmc150-accel.c > @@ -35,6 +35,7 @@ > #include > #include > #include > +#include > > #define BMC150_ACCEL_DRV_NAME"bmc150_accel" > #define BMC150_ACCEL_IRQ_NAME"bmc150_accel_event" > @@ -185,6 +186,8 @@ enum bmc150_accel_trigger_id { > > struct bmc150_accel_data { > struct i2c_client *client; > + struct regmap *regmap; > + struct device *dev; > struct bmc150_accel_interrupt interrupts[BMC150_ACCEL_INTERRUPTS]; > atomic_t active_intr; > struct bmc150_accel_trigger triggers[BMC150_ACCEL_TRIGGERS]; > @@ -241,6 +244,11 @@ static const struct { > {50, BMC150_ACCEL_SLEEP_500_MS}, > {100, BMC150_ACCEL_SLEEP_1_SEC} }; > > +static const struct regmap_config bmc150_i2c_regmap_conf = { > + .reg_bits = 8, > + .val_bits = 8, > + .max_register = 0x3f, > +}; > > static int bmc150_accel_set_mode(struct bmc150_accel_data *data, >enum bmc150_power_modes mode, > @@ -270,8 +278,7 @@ static int bmc150_accel_set_mode(struct bmc150_accel_data > *data, > > dev_dbg(>client->dev, "Set Mode bits %x\n", lpw_bits); > > - ret = i2c_smbus_write_byte_data(data->client, > - BMC150_ACCEL_REG_PMU_LPW, lpw_bits); > + ret = regmap_write(data->regmap, BMC150_ACCEL_REG_PMU_LPW, lpw_bits); > if (ret < 0) { > dev_err(>client->dev, "Error writing reg_pmu_lpw\n"); > return ret; > @@ -289,8 +296,7 @@ static int bmc150_accel_set_bw(struct bmc150_accel_data > *data, int val, > for (i = 0; i < ARRAY_SIZE(bmc150_accel_samp_freq_table); ++i) { > if (bmc150_accel_samp_freq_table[i].val == val && > bmc150_accel_samp_freq_table[i].val2 == val2) { > - ret = i2c_smbus_write_byte_data( > - data->client, > + ret = regmap_write(data->regmap, > BMC150_ACCEL_REG_PMU_BW, > bmc150_accel_samp_freq_table[i].bw_bits); > if (ret < 0) > @@ -307,26 +313,19 @@ static int bmc150_accel_set_bw(struct bmc150_accel_data > *data, int val, > > static int bmc150_accel_update_slope(struct bmc150_accel_data *data) > { > - int ret, val; > + int ret; > > - ret = i2c_smbus_write_byte_data(data->client, BMC150_ACCEL_REG_INT_6, > + ret = regmap_write(data->regmap, BMC150_ACCEL_REG_INT_6, > data->slope_thres); > if (ret < 0) { > dev_err(>client->dev, "Error writing reg_int_6\n"); > return ret; > } > > - ret = i2c_smbus_read_byte_data(data->client, BMC150_ACCEL_REG_INT_5); > + ret = regmap_update_bits(data->regmap, BMC150_ACCEL_REG_INT_5, > + BMC150_ACCEL_SLOPE_DUR_MASK, data->slope_dur); > if (ret < 0) { > - dev_err(>client->dev, "Error reading reg_int_5\n"); > - return ret; > - } > - > - val = (ret & ~BMC150_ACCEL_SLOPE_DUR_MASK) | data->slope_dur; > - ret = i2c_smbus_write_byte_data(data->client, BMC150_ACCEL_REG_INT_5, > - val); > - if (ret < 0) { > - dev_err(>client->dev, "Error write reg_int_5\n"); > + dev_err(>client->dev, "Error updating reg_int_5\n"); > return ret; > } >
RE: [PATCH v2 1/4] iio: bmc150: Use i2c regmap
> -Original Message- > From: Srinivas Pandruvada [mailto:srinivas.pandruv...@linux.intel.com] > Sent: 31 August, 2015 22:39 > To: Jonathan Cameron; Markus Pargmann; Tirdea, Irina > Cc: Lars-Peter Clausen; linux-...@vger.kernel.org; > linux-kernel@vger.kernel.org; ker...@pengutronix.de > Subject: Re: [PATCH v2 1/4] iio: bmc150: Use i2c regmap > > Hi Irina, > Hi Srinivas, > Is it possible for you to test this patchset? I don't have platform to > test with me now (working remotely for couple of weeks). > Sure, I'll test this patch set today. Sorry for the late response, seems I somehow missed your e-mail. Regards, Irina > Thanks, > Srinivas > > On Mon, 2015-08-31 at 17:11 +0100, Jonathan Cameron wrote: > > On 20/08/15 13:49, Markus Pargmann wrote: > > > This replaces all usage of direct i2c accesses with regmap > > > accesses. > > > > > > Signed-off-by: Markus Pargmann > > Looks fine to me, but I will be wanting an Ack / reviewed-by > > and preferably a tested by from Srinivas. > > > > Thanks, > > > > Jonathan > > > --- > > > drivers/iio/accel/Kconfig| 2 + > > > drivers/iio/accel/bmc150-accel.c | 219 +-- > > > > > > 2 files changed, 95 insertions(+), 126 deletions(-) > > > > > > diff --git a/drivers/iio/accel/Kconfig b/drivers/iio/accel/Kconfig > > > index 00e7bcbdbe24..01dd03d194d1 100644 > > > --- a/drivers/iio/accel/Kconfig > > > +++ b/drivers/iio/accel/Kconfig > > > @@ -22,6 +22,8 @@ config BMC150_ACCEL > > > depends on I2C > > > select IIO_BUFFER > > > select IIO_TRIGGERED_BUFFER > > > + select REGMAP > > > + select REGMAP_I2C > > > help > > > Say yes here to build support for the following Bosch > > > accelerometers: > > > BMC150, BMI055, BMA250E, BMA222E, BMA255, BMA280. > > > diff --git a/drivers/iio/accel/bmc150-accel.c > > > b/drivers/iio/accel/bmc150-accel.c > > > index 55751d9e1ade..c5c773e75173 100644 > > > --- a/drivers/iio/accel/bmc150-accel.c > > > +++ b/drivers/iio/accel/bmc150-accel.c > > > @@ -35,6 +35,7 @@ > > > #include > > > #include > > > #include > > > +#include > > > > > > #define BMC150_ACCEL_DRV_NAME"bmc150_accel > > > " > > > #define BMC150_ACCEL_IRQ_NAME"bmc150_accel > > > _event" > > > @@ -185,6 +186,8 @@ enum bmc150_accel_trigger_id { > > > > > > struct bmc150_accel_data { > > > struct i2c_client *client; > > > + struct regmap *regmap; > > > + struct device *dev; > > > struct bmc150_accel_interrupt > > > interrupts[BMC150_ACCEL_INTERRUPTS]; > > > atomic_t active_intr; > > > struct bmc150_accel_trigger > > > triggers[BMC150_ACCEL_TRIGGERS]; > > > @@ -241,6 +244,11 @@ static const struct { > > > {50, > > > BMC150_ACCEL_SLEEP_500_MS}, > > > {100, > > > BMC150_ACCEL_SLEEP_1_SEC} }; > > > > > > +static const struct regmap_config bmc150_i2c_regmap_conf = { > > > + .reg_bits = 8, > > > + .val_bits = 8, > > > + .max_register = 0x3f, > > > +}; > > > > > > static int bmc150_accel_set_mode(struct bmc150_accel_data *data, > > >enum bmc150_power_modes mode, > > > @@ -270,8 +278,7 @@ static int bmc150_accel_set_mode(struct > > > bmc150_accel_data *data, > > > > > > dev_dbg(>client->dev, "Set Mode bits %x\n", > > > lpw_bits); > > > > > > - ret = i2c_smbus_write_byte_data(data->client, > > > - BMC150_ACCEL_REG_PMU_LPW, > > > lpw_bits); > > > + ret = regmap_write(data->regmap, BMC150_ACCEL_REG_PMU_LPW, > > > lpw_bits); > > > if (ret < 0) { > > > dev_err(>client->dev, "Error writing > > > reg_pmu_lpw\n"); > > > return ret; > > > @@ -289,8 +296,7 @@ static int bmc150_accel_set_bw(struct > > > bmc150_accel_data *data, int val, > > > for (i = 0; i < ARRAY_SIZE(bmc150_accel_samp_freq_table); > > > ++i) { > > > if (bmc150_accel_samp_freq_table[i].val == val && > > > bmc150_accel_samp_freq_table[i].va > > > l2 == val2) { >
RE: [PATCH v2 1/4] iio: bmc150: Use i2c regmap
> -Original Message- > From: Srinivas Pandruvada [mailto:srinivas.pandruv...@linux.intel.com] > Sent: 31 August, 2015 22:39 > To: Jonathan Cameron; Markus Pargmann; Tirdea, Irina > Cc: Lars-Peter Clausen; linux-...@vger.kernel.org; > linux-kernel@vger.kernel.org; ker...@pengutronix.de > Subject: Re: [PATCH v2 1/4] iio: bmc150: Use i2c regmap > > Hi Irina, > Hi Srinivas, > Is it possible for you to test this patchset? I don't have platform to > test with me now (working remotely for couple of weeks). > Sure, I'll test this patch set today. Sorry for the late response, seems I somehow missed your e-mail. Regards, Irina > Thanks, > Srinivas > > On Mon, 2015-08-31 at 17:11 +0100, Jonathan Cameron wrote: > > On 20/08/15 13:49, Markus Pargmann wrote: > > > This replaces all usage of direct i2c accesses with regmap > > > accesses. > > > > > > Signed-off-by: Markus Pargmann <m...@pengutronix.de> > > Looks fine to me, but I will be wanting an Ack / reviewed-by > > and preferably a tested by from Srinivas. > > > > Thanks, > > > > Jonathan > > > --- > > > drivers/iio/accel/Kconfig| 2 + > > > drivers/iio/accel/bmc150-accel.c | 219 +-- > > > > > > 2 files changed, 95 insertions(+), 126 deletions(-) > > > > > > diff --git a/drivers/iio/accel/Kconfig b/drivers/iio/accel/Kconfig > > > index 00e7bcbdbe24..01dd03d194d1 100644 > > > --- a/drivers/iio/accel/Kconfig > > > +++ b/drivers/iio/accel/Kconfig > > > @@ -22,6 +22,8 @@ config BMC150_ACCEL > > > depends on I2C > > > select IIO_BUFFER > > > select IIO_TRIGGERED_BUFFER > > > + select REGMAP > > > + select REGMAP_I2C > > > help > > > Say yes here to build support for the following Bosch > > > accelerometers: > > > BMC150, BMI055, BMA250E, BMA222E, BMA255, BMA280. > > > diff --git a/drivers/iio/accel/bmc150-accel.c > > > b/drivers/iio/accel/bmc150-accel.c > > > index 55751d9e1ade..c5c773e75173 100644 > > > --- a/drivers/iio/accel/bmc150-accel.c > > > +++ b/drivers/iio/accel/bmc150-accel.c > > > @@ -35,6 +35,7 @@ > > > #include > > > #include > > > #include > > > +#include > > > > > > #define BMC150_ACCEL_DRV_NAME"bmc150_accel > > > " > > > #define BMC150_ACCEL_IRQ_NAME"bmc150_accel > > > _event" > > > @@ -185,6 +186,8 @@ enum bmc150_accel_trigger_id { > > > > > > struct bmc150_accel_data { > > > struct i2c_client *client; > > > + struct regmap *regmap; > > > + struct device *dev; > > > struct bmc150_accel_interrupt > > > interrupts[BMC150_ACCEL_INTERRUPTS]; > > > atomic_t active_intr; > > > struct bmc150_accel_trigger > > > triggers[BMC150_ACCEL_TRIGGERS]; > > > @@ -241,6 +244,11 @@ static const struct { > > > {50, > > > BMC150_ACCEL_SLEEP_500_MS}, > > > {100, > > > BMC150_ACCEL_SLEEP_1_SEC} }; > > > > > > +static const struct regmap_config bmc150_i2c_regmap_conf = { > > > + .reg_bits = 8, > > > + .val_bits = 8, > > > + .max_register = 0x3f, > > > +}; > > > > > > static int bmc150_accel_set_mode(struct bmc150_accel_data *data, > > >enum bmc150_power_modes mode, > > > @@ -270,8 +278,7 @@ static int bmc150_accel_set_mode(struct > > > bmc150_accel_data *data, > > > > > > dev_dbg(>client->dev, "Set Mode bits %x\n", > > > lpw_bits); > > > > > > - ret = i2c_smbus_write_byte_data(data->client, > > > - BMC150_ACCEL_REG_PMU_LPW, > > > lpw_bits); > > > + ret = regmap_write(data->regmap, BMC150_ACCEL_REG_PMU_LPW, > > > lpw_bits); > > > if (ret < 0) { > > > dev_err(>client->dev, "Error writing > > > reg_pmu_lpw\n"); > > > return ret; > > > @@ -289,8 +296,7 @@ static int bmc150_accel_set_bw(struct > > > bmc150_accel_data *data, int val, > > > for (i = 0; i < ARRAY_SIZE(bmc150_accel_samp_freq_table); > > > ++i) { > > > if (bmc150_accel_samp_freq_table[i].val == val && > > > bmc150_accel_samp_freq_table[i].va
Re: [PATCH v2 1/4] iio: bmc150: Use i2c regmap
On Mon, 2015-08-31 at 17:11 +0100, Jonathan Cameron wrote: > On 20/08/15 13:49, Markus Pargmann wrote: > > This replaces all usage of direct i2c accesses with regmap > > accesses. > > > > Signed-off-by: Markus Pargmann > Looks fine to me, but I will be wanting an Ack / reviewed-by > and preferably a tested by from Srinivas. Reviewed-by: Srinivas Pandruvada I requested Irina, if she can test this patch. Thanks, Srinivas > > Thanks, > > Jonathan > > --- > > drivers/iio/accel/Kconfig| 2 + > > drivers/iio/accel/bmc150-accel.c | 219 +-- > > > > 2 files changed, 95 insertions(+), 126 deletions(-) > > > > diff --git a/drivers/iio/accel/Kconfig b/drivers/iio/accel/Kconfig > > index 00e7bcbdbe24..01dd03d194d1 100644 > > --- a/drivers/iio/accel/Kconfig > > +++ b/drivers/iio/accel/Kconfig > > @@ -22,6 +22,8 @@ config BMC150_ACCEL > > depends on I2C > > select IIO_BUFFER > > select IIO_TRIGGERED_BUFFER > > + select REGMAP > > + select REGMAP_I2C > > help > > Say yes here to build support for the following Bosch > > accelerometers: > > BMC150, BMI055, BMA250E, BMA222E, BMA255, BMA280. > > diff --git a/drivers/iio/accel/bmc150-accel.c > > b/drivers/iio/accel/bmc150-accel.c > > index 55751d9e1ade..c5c773e75173 100644 > > --- a/drivers/iio/accel/bmc150-accel.c > > +++ b/drivers/iio/accel/bmc150-accel.c > > @@ -35,6 +35,7 @@ > > #include > > #include > > #include > > +#include > > > > #define BMC150_ACCEL_DRV_NAME "bmc150_accel > > " > > #define BMC150_ACCEL_IRQ_NAME "bmc150_accel > > _event" > > @@ -185,6 +186,8 @@ enum bmc150_accel_trigger_id { > > > > struct bmc150_accel_data { > > struct i2c_client *client; > > + struct regmap *regmap; > > + struct device *dev; > > struct bmc150_accel_interrupt > > interrupts[BMC150_ACCEL_INTERRUPTS]; > > atomic_t active_intr; > > struct bmc150_accel_trigger > > triggers[BMC150_ACCEL_TRIGGERS]; > > @@ -241,6 +244,11 @@ static const struct { > >{50, > > BMC150_ACCEL_SLEEP_500_MS}, > >{100, > > BMC150_ACCEL_SLEEP_1_SEC} }; > > > > +static const struct regmap_config bmc150_i2c_regmap_conf = { > > + .reg_bits = 8, > > + .val_bits = 8, > > + .max_register = 0x3f, > > +}; > > > > static int bmc150_accel_set_mode(struct bmc150_accel_data *data, > > enum bmc150_power_modes mode, > > @@ -270,8 +278,7 @@ static int bmc150_accel_set_mode(struct > > bmc150_accel_data *data, > > > > dev_dbg(>client->dev, "Set Mode bits %x\n", > > lpw_bits); > > > > - ret = i2c_smbus_write_byte_data(data->client, > > - BMC150_ACCEL_REG_PMU_LPW, > > lpw_bits); > > + ret = regmap_write(data->regmap, BMC150_ACCEL_REG_PMU_LPW, > > lpw_bits); > > if (ret < 0) { > > dev_err(>client->dev, "Error writing > > reg_pmu_lpw\n"); > > return ret; > > @@ -289,8 +296,7 @@ static int bmc150_accel_set_bw(struct > > bmc150_accel_data *data, int val, > > for (i = 0; i < ARRAY_SIZE(bmc150_accel_samp_freq_table); > > ++i) { > > if (bmc150_accel_samp_freq_table[i].val == val && > > bmc150_accel_samp_freq_table[i].va > > l2 == val2) { > > - ret = i2c_smbus_write_byte_data( > > - data->client, > > + ret = regmap_write(data->regmap, > > BMC150_ACCEL_REG_PMU_BW, > > bmc150_accel_samp_freq_table[i].bw > > _bits); > > if (ret < 0) > > @@ -307,26 +313,19 @@ static int bmc150_accel_set_bw(struct > > bmc150_accel_data *data, int val, > > > > static int bmc150_accel_update_slope(struct bmc150_accel_data > > *data) > > { > > - int ret, val; > > + int ret; > > > > - ret = i2c_smbus_write_byte_data(data->client, > > BMC150_ACCEL_REG_INT_6, > > + ret = regmap_write(data->regmap, BMC150_ACCEL_REG_INT_6, > > data->slope_thres); > > if (ret < 0) { > > dev_err(>client->dev, "Error writing > > reg_int_6\n"); > > return ret; > > } > > > > - ret = i2c_smbus_read_byte_data(data->client, > > BMC150_ACCEL_REG_INT_5); > > + ret = regmap_update_bits(data->regmap, > > BMC150_ACCEL_REG_INT_5, > > +BMC150_ACCEL_SLOPE_DUR_MASK, data > > ->slope_dur); > > if (ret < 0) { > > - dev_err(>client->dev, "Error reading > > reg_int_5\n"); > > - return ret; > > - } > > - > > - val = (ret & ~BMC150_ACCEL_SLOPE_DUR_MASK) | data > > ->slope_dur; > > - ret = i2c_smbus_write_byte_data(data->client, > > BMC150_ACCEL_REG_INT_5, > > - val); > > - if (ret < 0) { > > - dev_err(>client->dev, "Error write > > reg_int_5\n"); > > +
Re: [PATCH v2 1/4] iio: bmc150: Use i2c regmap
On Mon, 2015-08-31 at 17:11 +0100, Jonathan Cameron wrote: > On 20/08/15 13:49, Markus Pargmann wrote: > > This replaces all usage of direct i2c accesses with regmap > > accesses. > > > > Signed-off-by: Markus Pargmann> Looks fine to me, but I will be wanting an Ack / reviewed-by > and preferably a tested by from Srinivas. Reviewed-by: Srinivas Pandruvada I requested Irina, if she can test this patch. Thanks, Srinivas > > Thanks, > > Jonathan > > --- > > drivers/iio/accel/Kconfig| 2 + > > drivers/iio/accel/bmc150-accel.c | 219 +-- > > > > 2 files changed, 95 insertions(+), 126 deletions(-) > > > > diff --git a/drivers/iio/accel/Kconfig b/drivers/iio/accel/Kconfig > > index 00e7bcbdbe24..01dd03d194d1 100644 > > --- a/drivers/iio/accel/Kconfig > > +++ b/drivers/iio/accel/Kconfig > > @@ -22,6 +22,8 @@ config BMC150_ACCEL > > depends on I2C > > select IIO_BUFFER > > select IIO_TRIGGERED_BUFFER > > + select REGMAP > > + select REGMAP_I2C > > help > > Say yes here to build support for the following Bosch > > accelerometers: > > BMC150, BMI055, BMA250E, BMA222E, BMA255, BMA280. > > diff --git a/drivers/iio/accel/bmc150-accel.c > > b/drivers/iio/accel/bmc150-accel.c > > index 55751d9e1ade..c5c773e75173 100644 > > --- a/drivers/iio/accel/bmc150-accel.c > > +++ b/drivers/iio/accel/bmc150-accel.c > > @@ -35,6 +35,7 @@ > > #include > > #include > > #include > > +#include > > > > #define BMC150_ACCEL_DRV_NAME "bmc150_accel > > " > > #define BMC150_ACCEL_IRQ_NAME "bmc150_accel > > _event" > > @@ -185,6 +186,8 @@ enum bmc150_accel_trigger_id { > > > > struct bmc150_accel_data { > > struct i2c_client *client; > > + struct regmap *regmap; > > + struct device *dev; > > struct bmc150_accel_interrupt > > interrupts[BMC150_ACCEL_INTERRUPTS]; > > atomic_t active_intr; > > struct bmc150_accel_trigger > > triggers[BMC150_ACCEL_TRIGGERS]; > > @@ -241,6 +244,11 @@ static const struct { > >{50, > > BMC150_ACCEL_SLEEP_500_MS}, > >{100, > > BMC150_ACCEL_SLEEP_1_SEC} }; > > > > +static const struct regmap_config bmc150_i2c_regmap_conf = { > > + .reg_bits = 8, > > + .val_bits = 8, > > + .max_register = 0x3f, > > +}; > > > > static int bmc150_accel_set_mode(struct bmc150_accel_data *data, > > enum bmc150_power_modes mode, > > @@ -270,8 +278,7 @@ static int bmc150_accel_set_mode(struct > > bmc150_accel_data *data, > > > > dev_dbg(>client->dev, "Set Mode bits %x\n", > > lpw_bits); > > > > - ret = i2c_smbus_write_byte_data(data->client, > > - BMC150_ACCEL_REG_PMU_LPW, > > lpw_bits); > > + ret = regmap_write(data->regmap, BMC150_ACCEL_REG_PMU_LPW, > > lpw_bits); > > if (ret < 0) { > > dev_err(>client->dev, "Error writing > > reg_pmu_lpw\n"); > > return ret; > > @@ -289,8 +296,7 @@ static int bmc150_accel_set_bw(struct > > bmc150_accel_data *data, int val, > > for (i = 0; i < ARRAY_SIZE(bmc150_accel_samp_freq_table); > > ++i) { > > if (bmc150_accel_samp_freq_table[i].val == val && > > bmc150_accel_samp_freq_table[i].va > > l2 == val2) { > > - ret = i2c_smbus_write_byte_data( > > - data->client, > > + ret = regmap_write(data->regmap, > > BMC150_ACCEL_REG_PMU_BW, > > bmc150_accel_samp_freq_table[i].bw > > _bits); > > if (ret < 0) > > @@ -307,26 +313,19 @@ static int bmc150_accel_set_bw(struct > > bmc150_accel_data *data, int val, > > > > static int bmc150_accel_update_slope(struct bmc150_accel_data > > *data) > > { > > - int ret, val; > > + int ret; > > > > - ret = i2c_smbus_write_byte_data(data->client, > > BMC150_ACCEL_REG_INT_6, > > + ret = regmap_write(data->regmap, BMC150_ACCEL_REG_INT_6, > > data->slope_thres); > > if (ret < 0) { > > dev_err(>client->dev, "Error writing > > reg_int_6\n"); > > return ret; > > } > > > > - ret = i2c_smbus_read_byte_data(data->client, > > BMC150_ACCEL_REG_INT_5); > > + ret = regmap_update_bits(data->regmap, > > BMC150_ACCEL_REG_INT_5, > > +BMC150_ACCEL_SLOPE_DUR_MASK, data > > ->slope_dur); > > if (ret < 0) { > > - dev_err(>client->dev, "Error reading > > reg_int_5\n"); > > - return ret; > > - } > > - > > - val = (ret & ~BMC150_ACCEL_SLOPE_DUR_MASK) | data > > ->slope_dur; > > - ret = i2c_smbus_write_byte_data(data->client, > > BMC150_ACCEL_REG_INT_5, > > - val); > > - if (ret < 0) { > > -
Re: [PATCH v2 1/4] iio: bmc150: Use i2c regmap
Hi Irina, Is it possible for you to test this patchset? I don't have platform to test with me now (working remotely for couple of weeks). Thanks, Srinivas On Mon, 2015-08-31 at 17:11 +0100, Jonathan Cameron wrote: > On 20/08/15 13:49, Markus Pargmann wrote: > > This replaces all usage of direct i2c accesses with regmap > > accesses. > > > > Signed-off-by: Markus Pargmann > Looks fine to me, but I will be wanting an Ack / reviewed-by > and preferably a tested by from Srinivas. > > Thanks, > > Jonathan > > --- > > drivers/iio/accel/Kconfig| 2 + > > drivers/iio/accel/bmc150-accel.c | 219 +-- > > > > 2 files changed, 95 insertions(+), 126 deletions(-) > > > > diff --git a/drivers/iio/accel/Kconfig b/drivers/iio/accel/Kconfig > > index 00e7bcbdbe24..01dd03d194d1 100644 > > --- a/drivers/iio/accel/Kconfig > > +++ b/drivers/iio/accel/Kconfig > > @@ -22,6 +22,8 @@ config BMC150_ACCEL > > depends on I2C > > select IIO_BUFFER > > select IIO_TRIGGERED_BUFFER > > + select REGMAP > > + select REGMAP_I2C > > help > > Say yes here to build support for the following Bosch > > accelerometers: > > BMC150, BMI055, BMA250E, BMA222E, BMA255, BMA280. > > diff --git a/drivers/iio/accel/bmc150-accel.c > > b/drivers/iio/accel/bmc150-accel.c > > index 55751d9e1ade..c5c773e75173 100644 > > --- a/drivers/iio/accel/bmc150-accel.c > > +++ b/drivers/iio/accel/bmc150-accel.c > > @@ -35,6 +35,7 @@ > > #include > > #include > > #include > > +#include > > > > #define BMC150_ACCEL_DRV_NAME "bmc150_accel > > " > > #define BMC150_ACCEL_IRQ_NAME "bmc150_accel > > _event" > > @@ -185,6 +186,8 @@ enum bmc150_accel_trigger_id { > > > > struct bmc150_accel_data { > > struct i2c_client *client; > > + struct regmap *regmap; > > + struct device *dev; > > struct bmc150_accel_interrupt > > interrupts[BMC150_ACCEL_INTERRUPTS]; > > atomic_t active_intr; > > struct bmc150_accel_trigger > > triggers[BMC150_ACCEL_TRIGGERS]; > > @@ -241,6 +244,11 @@ static const struct { > >{50, > > BMC150_ACCEL_SLEEP_500_MS}, > >{100, > > BMC150_ACCEL_SLEEP_1_SEC} }; > > > > +static const struct regmap_config bmc150_i2c_regmap_conf = { > > + .reg_bits = 8, > > + .val_bits = 8, > > + .max_register = 0x3f, > > +}; > > > > static int bmc150_accel_set_mode(struct bmc150_accel_data *data, > > enum bmc150_power_modes mode, > > @@ -270,8 +278,7 @@ static int bmc150_accel_set_mode(struct > > bmc150_accel_data *data, > > > > dev_dbg(>client->dev, "Set Mode bits %x\n", > > lpw_bits); > > > > - ret = i2c_smbus_write_byte_data(data->client, > > - BMC150_ACCEL_REG_PMU_LPW, > > lpw_bits); > > + ret = regmap_write(data->regmap, BMC150_ACCEL_REG_PMU_LPW, > > lpw_bits); > > if (ret < 0) { > > dev_err(>client->dev, "Error writing > > reg_pmu_lpw\n"); > > return ret; > > @@ -289,8 +296,7 @@ static int bmc150_accel_set_bw(struct > > bmc150_accel_data *data, int val, > > for (i = 0; i < ARRAY_SIZE(bmc150_accel_samp_freq_table); > > ++i) { > > if (bmc150_accel_samp_freq_table[i].val == val && > > bmc150_accel_samp_freq_table[i].va > > l2 == val2) { > > - ret = i2c_smbus_write_byte_data( > > - data->client, > > + ret = regmap_write(data->regmap, > > BMC150_ACCEL_REG_PMU_BW, > > bmc150_accel_samp_freq_table[i].bw > > _bits); > > if (ret < 0) > > @@ -307,26 +313,19 @@ static int bmc150_accel_set_bw(struct > > bmc150_accel_data *data, int val, > > > > static int bmc150_accel_update_slope(struct bmc150_accel_data > > *data) > > { > > - int ret, val; > > + int ret; > > > > - ret = i2c_smbus_write_byte_data(data->client, > > BMC150_ACCEL_REG_INT_6, > > + ret = regmap_write(data->regmap, BMC150_ACCEL_REG_INT_6, > > data->slope_thres); > > if (ret < 0) { > > dev_err(>client->dev, "Error writing > > reg_int_6\n"); > > return ret; > > } > > > > - ret = i2c_smbus_read_byte_data(data->client, > > BMC150_ACCEL_REG_INT_5); > > + ret = regmap_update_bits(data->regmap, > > BMC150_ACCEL_REG_INT_5, > > +BMC150_ACCEL_SLOPE_DUR_MASK, data > > ->slope_dur); > > if (ret < 0) { > > - dev_err(>client->dev, "Error reading > > reg_int_5\n"); > > - return ret; > > - } > > - > > - val = (ret & ~BMC150_ACCEL_SLOPE_DUR_MASK) | data > > ->slope_dur; > > - ret = i2c_smbus_write_byte_data(data->client, > > BMC150_ACCEL_REG_INT_5, > > - val); > > - if (ret < 0) { > > -
Re: [PATCH v2 1/4] iio: bmc150: Use i2c regmap
On 20/08/15 13:49, Markus Pargmann wrote: > This replaces all usage of direct i2c accesses with regmap accesses. > > Signed-off-by: Markus Pargmann Looks fine to me, but I will be wanting an Ack / reviewed-by and preferably a tested by from Srinivas. Thanks, Jonathan > --- > drivers/iio/accel/Kconfig| 2 + > drivers/iio/accel/bmc150-accel.c | 219 > +-- > 2 files changed, 95 insertions(+), 126 deletions(-) > > diff --git a/drivers/iio/accel/Kconfig b/drivers/iio/accel/Kconfig > index 00e7bcbdbe24..01dd03d194d1 100644 > --- a/drivers/iio/accel/Kconfig > +++ b/drivers/iio/accel/Kconfig > @@ -22,6 +22,8 @@ config BMC150_ACCEL > depends on I2C > select IIO_BUFFER > select IIO_TRIGGERED_BUFFER > + select REGMAP > + select REGMAP_I2C > help > Say yes here to build support for the following Bosch accelerometers: > BMC150, BMI055, BMA250E, BMA222E, BMA255, BMA280. > diff --git a/drivers/iio/accel/bmc150-accel.c > b/drivers/iio/accel/bmc150-accel.c > index 55751d9e1ade..c5c773e75173 100644 > --- a/drivers/iio/accel/bmc150-accel.c > +++ b/drivers/iio/accel/bmc150-accel.c > @@ -35,6 +35,7 @@ > #include > #include > #include > +#include > > #define BMC150_ACCEL_DRV_NAME"bmc150_accel" > #define BMC150_ACCEL_IRQ_NAME"bmc150_accel_event" > @@ -185,6 +186,8 @@ enum bmc150_accel_trigger_id { > > struct bmc150_accel_data { > struct i2c_client *client; > + struct regmap *regmap; > + struct device *dev; > struct bmc150_accel_interrupt interrupts[BMC150_ACCEL_INTERRUPTS]; > atomic_t active_intr; > struct bmc150_accel_trigger triggers[BMC150_ACCEL_TRIGGERS]; > @@ -241,6 +244,11 @@ static const struct { > {50, BMC150_ACCEL_SLEEP_500_MS}, > {100, BMC150_ACCEL_SLEEP_1_SEC} }; > > +static const struct regmap_config bmc150_i2c_regmap_conf = { > + .reg_bits = 8, > + .val_bits = 8, > + .max_register = 0x3f, > +}; > > static int bmc150_accel_set_mode(struct bmc150_accel_data *data, >enum bmc150_power_modes mode, > @@ -270,8 +278,7 @@ static int bmc150_accel_set_mode(struct bmc150_accel_data > *data, > > dev_dbg(>client->dev, "Set Mode bits %x\n", lpw_bits); > > - ret = i2c_smbus_write_byte_data(data->client, > - BMC150_ACCEL_REG_PMU_LPW, lpw_bits); > + ret = regmap_write(data->regmap, BMC150_ACCEL_REG_PMU_LPW, lpw_bits); > if (ret < 0) { > dev_err(>client->dev, "Error writing reg_pmu_lpw\n"); > return ret; > @@ -289,8 +296,7 @@ static int bmc150_accel_set_bw(struct bmc150_accel_data > *data, int val, > for (i = 0; i < ARRAY_SIZE(bmc150_accel_samp_freq_table); ++i) { > if (bmc150_accel_samp_freq_table[i].val == val && > bmc150_accel_samp_freq_table[i].val2 == val2) { > - ret = i2c_smbus_write_byte_data( > - data->client, > + ret = regmap_write(data->regmap, > BMC150_ACCEL_REG_PMU_BW, > bmc150_accel_samp_freq_table[i].bw_bits); > if (ret < 0) > @@ -307,26 +313,19 @@ static int bmc150_accel_set_bw(struct bmc150_accel_data > *data, int val, > > static int bmc150_accel_update_slope(struct bmc150_accel_data *data) > { > - int ret, val; > + int ret; > > - ret = i2c_smbus_write_byte_data(data->client, BMC150_ACCEL_REG_INT_6, > + ret = regmap_write(data->regmap, BMC150_ACCEL_REG_INT_6, > data->slope_thres); > if (ret < 0) { > dev_err(>client->dev, "Error writing reg_int_6\n"); > return ret; > } > > - ret = i2c_smbus_read_byte_data(data->client, BMC150_ACCEL_REG_INT_5); > + ret = regmap_update_bits(data->regmap, BMC150_ACCEL_REG_INT_5, > + BMC150_ACCEL_SLOPE_DUR_MASK, data->slope_dur); > if (ret < 0) { > - dev_err(>client->dev, "Error reading reg_int_5\n"); > - return ret; > - } > - > - val = (ret & ~BMC150_ACCEL_SLOPE_DUR_MASK) | data->slope_dur; > - ret = i2c_smbus_write_byte_data(data->client, BMC150_ACCEL_REG_INT_5, > - val); > - if (ret < 0) { > - dev_err(>client->dev, "Error write reg_int_5\n"); > + dev_err(>client->dev, "Error updating reg_int_5\n"); > return ret; > } > > @@ -348,17 +347,18 @@ static int bmc150_accel_any_motion_setup(struct > bmc150_accel_trigger *t, > static int bmc150_accel_chip_init(struct bmc150_accel_data *data) > { > int ret; > + unsigned int val; > > - ret = i2c_smbus_read_byte_data(data->client, BMC150_ACCEL_REG_CHIP_ID); > +
Re: [PATCH v2 1/4] iio: bmc150: Use i2c regmap
On 20/08/15 13:49, Markus Pargmann wrote: > This replaces all usage of direct i2c accesses with regmap accesses. > > Signed-off-by: Markus PargmannLooks fine to me, but I will be wanting an Ack / reviewed-by and preferably a tested by from Srinivas. Thanks, Jonathan > --- > drivers/iio/accel/Kconfig| 2 + > drivers/iio/accel/bmc150-accel.c | 219 > +-- > 2 files changed, 95 insertions(+), 126 deletions(-) > > diff --git a/drivers/iio/accel/Kconfig b/drivers/iio/accel/Kconfig > index 00e7bcbdbe24..01dd03d194d1 100644 > --- a/drivers/iio/accel/Kconfig > +++ b/drivers/iio/accel/Kconfig > @@ -22,6 +22,8 @@ config BMC150_ACCEL > depends on I2C > select IIO_BUFFER > select IIO_TRIGGERED_BUFFER > + select REGMAP > + select REGMAP_I2C > help > Say yes here to build support for the following Bosch accelerometers: > BMC150, BMI055, BMA250E, BMA222E, BMA255, BMA280. > diff --git a/drivers/iio/accel/bmc150-accel.c > b/drivers/iio/accel/bmc150-accel.c > index 55751d9e1ade..c5c773e75173 100644 > --- a/drivers/iio/accel/bmc150-accel.c > +++ b/drivers/iio/accel/bmc150-accel.c > @@ -35,6 +35,7 @@ > #include > #include > #include > +#include > > #define BMC150_ACCEL_DRV_NAME"bmc150_accel" > #define BMC150_ACCEL_IRQ_NAME"bmc150_accel_event" > @@ -185,6 +186,8 @@ enum bmc150_accel_trigger_id { > > struct bmc150_accel_data { > struct i2c_client *client; > + struct regmap *regmap; > + struct device *dev; > struct bmc150_accel_interrupt interrupts[BMC150_ACCEL_INTERRUPTS]; > atomic_t active_intr; > struct bmc150_accel_trigger triggers[BMC150_ACCEL_TRIGGERS]; > @@ -241,6 +244,11 @@ static const struct { > {50, BMC150_ACCEL_SLEEP_500_MS}, > {100, BMC150_ACCEL_SLEEP_1_SEC} }; > > +static const struct regmap_config bmc150_i2c_regmap_conf = { > + .reg_bits = 8, > + .val_bits = 8, > + .max_register = 0x3f, > +}; > > static int bmc150_accel_set_mode(struct bmc150_accel_data *data, >enum bmc150_power_modes mode, > @@ -270,8 +278,7 @@ static int bmc150_accel_set_mode(struct bmc150_accel_data > *data, > > dev_dbg(>client->dev, "Set Mode bits %x\n", lpw_bits); > > - ret = i2c_smbus_write_byte_data(data->client, > - BMC150_ACCEL_REG_PMU_LPW, lpw_bits); > + ret = regmap_write(data->regmap, BMC150_ACCEL_REG_PMU_LPW, lpw_bits); > if (ret < 0) { > dev_err(>client->dev, "Error writing reg_pmu_lpw\n"); > return ret; > @@ -289,8 +296,7 @@ static int bmc150_accel_set_bw(struct bmc150_accel_data > *data, int val, > for (i = 0; i < ARRAY_SIZE(bmc150_accel_samp_freq_table); ++i) { > if (bmc150_accel_samp_freq_table[i].val == val && > bmc150_accel_samp_freq_table[i].val2 == val2) { > - ret = i2c_smbus_write_byte_data( > - data->client, > + ret = regmap_write(data->regmap, > BMC150_ACCEL_REG_PMU_BW, > bmc150_accel_samp_freq_table[i].bw_bits); > if (ret < 0) > @@ -307,26 +313,19 @@ static int bmc150_accel_set_bw(struct bmc150_accel_data > *data, int val, > > static int bmc150_accel_update_slope(struct bmc150_accel_data *data) > { > - int ret, val; > + int ret; > > - ret = i2c_smbus_write_byte_data(data->client, BMC150_ACCEL_REG_INT_6, > + ret = regmap_write(data->regmap, BMC150_ACCEL_REG_INT_6, > data->slope_thres); > if (ret < 0) { > dev_err(>client->dev, "Error writing reg_int_6\n"); > return ret; > } > > - ret = i2c_smbus_read_byte_data(data->client, BMC150_ACCEL_REG_INT_5); > + ret = regmap_update_bits(data->regmap, BMC150_ACCEL_REG_INT_5, > + BMC150_ACCEL_SLOPE_DUR_MASK, data->slope_dur); > if (ret < 0) { > - dev_err(>client->dev, "Error reading reg_int_5\n"); > - return ret; > - } > - > - val = (ret & ~BMC150_ACCEL_SLOPE_DUR_MASK) | data->slope_dur; > - ret = i2c_smbus_write_byte_data(data->client, BMC150_ACCEL_REG_INT_5, > - val); > - if (ret < 0) { > - dev_err(>client->dev, "Error write reg_int_5\n"); > + dev_err(>client->dev, "Error updating reg_int_5\n"); > return ret; > } > > @@ -348,17 +347,18 @@ static int bmc150_accel_any_motion_setup(struct > bmc150_accel_trigger *t, > static int bmc150_accel_chip_init(struct bmc150_accel_data *data) > { > int ret; > + unsigned int val; > > - ret = i2c_smbus_read_byte_data(data->client,
Re: [PATCH v2 1/4] iio: bmc150: Use i2c regmap
Hi Irina, Is it possible for you to test this patchset? I don't have platform to test with me now (working remotely for couple of weeks). Thanks, Srinivas On Mon, 2015-08-31 at 17:11 +0100, Jonathan Cameron wrote: > On 20/08/15 13:49, Markus Pargmann wrote: > > This replaces all usage of direct i2c accesses with regmap > > accesses. > > > > Signed-off-by: Markus Pargmann> Looks fine to me, but I will be wanting an Ack / reviewed-by > and preferably a tested by from Srinivas. > > Thanks, > > Jonathan > > --- > > drivers/iio/accel/Kconfig| 2 + > > drivers/iio/accel/bmc150-accel.c | 219 +-- > > > > 2 files changed, 95 insertions(+), 126 deletions(-) > > > > diff --git a/drivers/iio/accel/Kconfig b/drivers/iio/accel/Kconfig > > index 00e7bcbdbe24..01dd03d194d1 100644 > > --- a/drivers/iio/accel/Kconfig > > +++ b/drivers/iio/accel/Kconfig > > @@ -22,6 +22,8 @@ config BMC150_ACCEL > > depends on I2C > > select IIO_BUFFER > > select IIO_TRIGGERED_BUFFER > > + select REGMAP > > + select REGMAP_I2C > > help > > Say yes here to build support for the following Bosch > > accelerometers: > > BMC150, BMI055, BMA250E, BMA222E, BMA255, BMA280. > > diff --git a/drivers/iio/accel/bmc150-accel.c > > b/drivers/iio/accel/bmc150-accel.c > > index 55751d9e1ade..c5c773e75173 100644 > > --- a/drivers/iio/accel/bmc150-accel.c > > +++ b/drivers/iio/accel/bmc150-accel.c > > @@ -35,6 +35,7 @@ > > #include > > #include > > #include > > +#include > > > > #define BMC150_ACCEL_DRV_NAME "bmc150_accel > > " > > #define BMC150_ACCEL_IRQ_NAME "bmc150_accel > > _event" > > @@ -185,6 +186,8 @@ enum bmc150_accel_trigger_id { > > > > struct bmc150_accel_data { > > struct i2c_client *client; > > + struct regmap *regmap; > > + struct device *dev; > > struct bmc150_accel_interrupt > > interrupts[BMC150_ACCEL_INTERRUPTS]; > > atomic_t active_intr; > > struct bmc150_accel_trigger > > triggers[BMC150_ACCEL_TRIGGERS]; > > @@ -241,6 +244,11 @@ static const struct { > >{50, > > BMC150_ACCEL_SLEEP_500_MS}, > >{100, > > BMC150_ACCEL_SLEEP_1_SEC} }; > > > > +static const struct regmap_config bmc150_i2c_regmap_conf = { > > + .reg_bits = 8, > > + .val_bits = 8, > > + .max_register = 0x3f, > > +}; > > > > static int bmc150_accel_set_mode(struct bmc150_accel_data *data, > > enum bmc150_power_modes mode, > > @@ -270,8 +278,7 @@ static int bmc150_accel_set_mode(struct > > bmc150_accel_data *data, > > > > dev_dbg(>client->dev, "Set Mode bits %x\n", > > lpw_bits); > > > > - ret = i2c_smbus_write_byte_data(data->client, > > - BMC150_ACCEL_REG_PMU_LPW, > > lpw_bits); > > + ret = regmap_write(data->regmap, BMC150_ACCEL_REG_PMU_LPW, > > lpw_bits); > > if (ret < 0) { > > dev_err(>client->dev, "Error writing > > reg_pmu_lpw\n"); > > return ret; > > @@ -289,8 +296,7 @@ static int bmc150_accel_set_bw(struct > > bmc150_accel_data *data, int val, > > for (i = 0; i < ARRAY_SIZE(bmc150_accel_samp_freq_table); > > ++i) { > > if (bmc150_accel_samp_freq_table[i].val == val && > > bmc150_accel_samp_freq_table[i].va > > l2 == val2) { > > - ret = i2c_smbus_write_byte_data( > > - data->client, > > + ret = regmap_write(data->regmap, > > BMC150_ACCEL_REG_PMU_BW, > > bmc150_accel_samp_freq_table[i].bw > > _bits); > > if (ret < 0) > > @@ -307,26 +313,19 @@ static int bmc150_accel_set_bw(struct > > bmc150_accel_data *data, int val, > > > > static int bmc150_accel_update_slope(struct bmc150_accel_data > > *data) > > { > > - int ret, val; > > + int ret; > > > > - ret = i2c_smbus_write_byte_data(data->client, > > BMC150_ACCEL_REG_INT_6, > > + ret = regmap_write(data->regmap, BMC150_ACCEL_REG_INT_6, > > data->slope_thres); > > if (ret < 0) { > > dev_err(>client->dev, "Error writing > > reg_int_6\n"); > > return ret; > > } > > > > - ret = i2c_smbus_read_byte_data(data->client, > > BMC150_ACCEL_REG_INT_5); > > + ret = regmap_update_bits(data->regmap, > > BMC150_ACCEL_REG_INT_5, > > +BMC150_ACCEL_SLOPE_DUR_MASK, data > > ->slope_dur); > > if (ret < 0) { > > - dev_err(>client->dev, "Error reading > > reg_int_5\n"); > > - return ret; > > - } > > - > > - val = (ret & ~BMC150_ACCEL_SLOPE_DUR_MASK) | data > > ->slope_dur; > > - ret = i2c_smbus_write_byte_data(data->client, > > BMC150_ACCEL_REG_INT_5, > > - val); > > - if (ret < 0) { > > -