Re: [PATCH] iio: accel: mma8452: convert to regmap

2021-03-06 Thread Jonathan Cameron
On Wed,  3 Mar 2021 13:47:24 +0100
Sean Nyekjaer  wrote:

> It will be easier to configure various device registers.
What do you mean by this?  I'm not against regmap, but I think
a stronger rational for the change is needed.

A few specific comments inline, but nothing major.

Jonathan

> 
> No functional change.
> 
> Signed-off-by: Sean Nyekjaer 
> ---
>  drivers/iio/accel/mma8452.c | 291 +++-
>  1 file changed, 156 insertions(+), 135 deletions(-)
> 
> diff --git a/drivers/iio/accel/mma8452.c b/drivers/iio/accel/mma8452.c
> index 33f0c419d8ff..fc29a6e16428 100644
> --- a/drivers/iio/accel/mma8452.c
> +++ b/drivers/iio/accel/mma8452.c
> @@ -32,6 +32,7 @@
>  #include 
>  #include 
>  #include 
> +#include 
>  
>  #define MMA8452_STATUS   0x00
>  #define  MMA8452_STATUS_DRDY (BIT(2) | BIT(1) | BIT(0))
> @@ -102,7 +103,8 @@
>  #define MMA8452_AUTO_SUSPEND_DELAY_MS2000
>  
>  struct mma8452_data {
> - struct i2c_client *client;
> + struct regmap *regmap;
> + struct device *dev;
>   struct mutex lock;
>   u8 ctrl_reg1;
>   u8 data_cfg;
> @@ -163,6 +165,11 @@ static const struct mma8452_event_regs trans_ev_regs = {
>   .ev_count = MMA8452_TRANSIENT_COUNT,
>  };
>  
> +static const struct regmap_config mma8452_regmap_config = {
> + .reg_bits = 8,
> + .val_bits = 8,
> +};
> +
>  /**
>   * struct mma_chip_info - chip specific data
>   * @chip_id: WHO_AM_I register's value
> @@ -194,13 +201,14 @@ enum {
>  static int mma8452_drdy(struct mma8452_data *data)
>  {
>   int tries = 150;
> + unsigned int reg;
>  
>   while (tries-- > 0) {
> - int ret = i2c_smbus_read_byte_data(data->client,
> - MMA8452_STATUS);
> + int ret = regmap_read(data->regmap, MMA8452_STATUS, );
>   if (ret < 0)
>   return ret;
> - if ((ret & MMA8452_STATUS_DRDY) == MMA8452_STATUS_DRDY)
> +
> + if ((reg & MMA8452_STATUS_DRDY) == MMA8452_STATUS_DRDY)
>   return 0;
>  
>   if (data->sleep_val <= 20)
> @@ -210,28 +218,28 @@ static int mma8452_drdy(struct mma8452_data *data)
>   msleep(20);
>   }
>  
> - dev_err(>client->dev, "data not ready\n");
> + dev_err(data->dev, "data not ready\n");
>  
>   return -EIO;
>  }
>  
> -static int mma8452_set_runtime_pm_state(struct i2c_client *client, bool on)
> +static int mma8452_set_runtime_pm_state(struct device *dev, bool on)
>  {
>  #ifdef CONFIG_PM
>   int ret;
>  
>   if (on) {
> - ret = pm_runtime_get_sync(>dev);
> + ret = pm_runtime_get_sync(dev);
>   } else {
> - pm_runtime_mark_last_busy(>dev);
> - ret = pm_runtime_put_autosuspend(>dev);
> + pm_runtime_mark_last_busy(dev);
> + ret = pm_runtime_put_autosuspend(dev);
>   }
>  
>   if (ret < 0) {
> - dev_err(>dev,
> + dev_err(dev,
>   "failed to change power state to %d\n", on);
>   if (on)
> - pm_runtime_put_noidle(>dev);
> + pm_runtime_put_noidle(dev);
>  
>   return ret;
>   }
> @@ -247,14 +255,17 @@ static int mma8452_read(struct mma8452_data *data, 
> __be16 buf[3])
>   if (ret < 0)
>   return ret;
>  
> - ret = mma8452_set_runtime_pm_state(data->client, true);
> + ret = mma8452_set_runtime_pm_state(data->dev, true);
>   if (ret)
>   return ret;
>  
> - ret = i2c_smbus_read_i2c_block_data(data->client, MMA8452_OUT_X,
> - 3 * sizeof(__be16), (u8 *)buf);
> + ret = regmap_bulk_read(data->regmap, MMA8452_OUT_X, (u8 *)buf, 3 * 
> sizeof(__be16));
> + if (ret < 0) {
> + dev_err(data->dev, "failed to read axes\n");
> + return ret;
> + }
>  
> - ret = mma8452_set_runtime_pm_state(data->client, false);
> + ret = mma8452_set_runtime_pm_state(data->dev, false);
>  
>   return ret;
>  }
> @@ -358,12 +369,12 @@ static const u16 mma8452_os_ratio[4][8] = {
>  
>  static int mma8452_get_power_mode(struct mma8452_data *data)
>  {
> - int reg;
> + int ret;
> + unsigned int reg;
>  
> - reg = i2c_smbus_read_byte_data(data->client,
> -MMA8452_CTRL_REG2);
> - if (reg < 0)
> - return reg;
> + ret = regmap_read(data->regmap, MMA8452_CTRL_REG2, );
> + if (ret < 0)
> + return ret;
>  
>   return ((reg & MMA8452_CTRL_REG2_MODS_MASK) >>
>   MMA8452_CTRL_REG2_MODS_SHIFT);
> @@ -468,8 +479,9 @@ static int mma8452_get_hp_filter_index(struct 
> mma8452_data *data,
>  static int mma8452_read_hp_filter(struct mma8452_data *data, int *hz, int 
> *uHz)
>  {
>   int j, i, ret;
> + unsigned int reg;
>  
> - ret = 

[PATCH] iio: accel: mma8452: convert to regmap

2021-03-03 Thread Sean Nyekjaer
It will be easier to configure various device registers.

No functional change.

Signed-off-by: Sean Nyekjaer 
---
 drivers/iio/accel/mma8452.c | 291 +++-
 1 file changed, 156 insertions(+), 135 deletions(-)

diff --git a/drivers/iio/accel/mma8452.c b/drivers/iio/accel/mma8452.c
index 33f0c419d8ff..fc29a6e16428 100644
--- a/drivers/iio/accel/mma8452.c
+++ b/drivers/iio/accel/mma8452.c
@@ -32,6 +32,7 @@
 #include 
 #include 
 #include 
+#include 
 
 #define MMA8452_STATUS 0x00
 #define  MMA8452_STATUS_DRDY   (BIT(2) | BIT(1) | BIT(0))
@@ -102,7 +103,8 @@
 #define MMA8452_AUTO_SUSPEND_DELAY_MS  2000
 
 struct mma8452_data {
-   struct i2c_client *client;
+   struct regmap *regmap;
+   struct device *dev;
struct mutex lock;
u8 ctrl_reg1;
u8 data_cfg;
@@ -163,6 +165,11 @@ static const struct mma8452_event_regs trans_ev_regs = {
.ev_count = MMA8452_TRANSIENT_COUNT,
 };
 
+static const struct regmap_config mma8452_regmap_config = {
+   .reg_bits = 8,
+   .val_bits = 8,
+};
+
 /**
  * struct mma_chip_info - chip specific data
  * @chip_id:   WHO_AM_I register's value
@@ -194,13 +201,14 @@ enum {
 static int mma8452_drdy(struct mma8452_data *data)
 {
int tries = 150;
+   unsigned int reg;
 
while (tries-- > 0) {
-   int ret = i2c_smbus_read_byte_data(data->client,
-   MMA8452_STATUS);
+   int ret = regmap_read(data->regmap, MMA8452_STATUS, );
if (ret < 0)
return ret;
-   if ((ret & MMA8452_STATUS_DRDY) == MMA8452_STATUS_DRDY)
+
+   if ((reg & MMA8452_STATUS_DRDY) == MMA8452_STATUS_DRDY)
return 0;
 
if (data->sleep_val <= 20)
@@ -210,28 +218,28 @@ static int mma8452_drdy(struct mma8452_data *data)
msleep(20);
}
 
-   dev_err(>client->dev, "data not ready\n");
+   dev_err(data->dev, "data not ready\n");
 
return -EIO;
 }
 
-static int mma8452_set_runtime_pm_state(struct i2c_client *client, bool on)
+static int mma8452_set_runtime_pm_state(struct device *dev, bool on)
 {
 #ifdef CONFIG_PM
int ret;
 
if (on) {
-   ret = pm_runtime_get_sync(>dev);
+   ret = pm_runtime_get_sync(dev);
} else {
-   pm_runtime_mark_last_busy(>dev);
-   ret = pm_runtime_put_autosuspend(>dev);
+   pm_runtime_mark_last_busy(dev);
+   ret = pm_runtime_put_autosuspend(dev);
}
 
if (ret < 0) {
-   dev_err(>dev,
+   dev_err(dev,
"failed to change power state to %d\n", on);
if (on)
-   pm_runtime_put_noidle(>dev);
+   pm_runtime_put_noidle(dev);
 
return ret;
}
@@ -247,14 +255,17 @@ static int mma8452_read(struct mma8452_data *data, __be16 
buf[3])
if (ret < 0)
return ret;
 
-   ret = mma8452_set_runtime_pm_state(data->client, true);
+   ret = mma8452_set_runtime_pm_state(data->dev, true);
if (ret)
return ret;
 
-   ret = i2c_smbus_read_i2c_block_data(data->client, MMA8452_OUT_X,
-   3 * sizeof(__be16), (u8 *)buf);
+   ret = regmap_bulk_read(data->regmap, MMA8452_OUT_X, (u8 *)buf, 3 * 
sizeof(__be16));
+   if (ret < 0) {
+   dev_err(data->dev, "failed to read axes\n");
+   return ret;
+   }
 
-   ret = mma8452_set_runtime_pm_state(data->client, false);
+   ret = mma8452_set_runtime_pm_state(data->dev, false);
 
return ret;
 }
@@ -358,12 +369,12 @@ static const u16 mma8452_os_ratio[4][8] = {
 
 static int mma8452_get_power_mode(struct mma8452_data *data)
 {
-   int reg;
+   int ret;
+   unsigned int reg;
 
-   reg = i2c_smbus_read_byte_data(data->client,
-  MMA8452_CTRL_REG2);
-   if (reg < 0)
-   return reg;
+   ret = regmap_read(data->regmap, MMA8452_CTRL_REG2, );
+   if (ret < 0)
+   return ret;
 
return ((reg & MMA8452_CTRL_REG2_MODS_MASK) >>
MMA8452_CTRL_REG2_MODS_SHIFT);
@@ -468,8 +479,9 @@ static int mma8452_get_hp_filter_index(struct mma8452_data 
*data,
 static int mma8452_read_hp_filter(struct mma8452_data *data, int *hz, int *uHz)
 {
int j, i, ret;
+   unsigned int reg;
 
-   ret = i2c_smbus_read_byte_data(data->client, MMA8452_HP_FILTER_CUTOFF);
+   ret = regmap_read(data->regmap, MMA8452_HP_FILTER_CUTOFF, );
if (ret < 0)
return ret;
 
@@ -479,8 +491,8 @@ static int mma8452_read_hp_filter(struct mma8452_data 
*data, int *hz, int *uHz)
return j;
 
ret &= MMA8452_HP_FILTER_CUTOFF_SEL_MASK;
-   *hz =