On Fri Dec 6 10:26:49 2024 +0200, Tomi Valkeinen wrote:
> Add error handling to ub913_hw_init() using a new helper function,
> ub913_update_bits().
> 
> Reported-by: Sakari Ailus <sakari.ai...@linux.intel.com>
> Closes: https://lore.kernel.org/all/Zv40EQSR__JDN_0M@kekkonen.localdomain/
> Reviewed-by: Jai Luthra <jai.lut...@ideasonboard.com>
> Signed-off-by: Tomi Valkeinen <tomi.valkei...@ideasonboard.com>
> Signed-off-by: Sakari Ailus <sakari.ai...@linux.intel.com>
> Signed-off-by: Mauro Carvalho Chehab <mchehab+hua...@kernel.org>

Patch committed.

Thanks,
Mauro Carvalho Chehab

 drivers/media/i2c/ds90ub913.c | 25 +++++++++++++++++++++----
 1 file changed, 21 insertions(+), 4 deletions(-)

---

diff --git a/drivers/media/i2c/ds90ub913.c b/drivers/media/i2c/ds90ub913.c
index b5375d736629..7670d6c82d92 100644
--- a/drivers/media/i2c/ds90ub913.c
+++ b/drivers/media/i2c/ds90ub913.c
@@ -8,6 +8,7 @@
  * Copyright (c) 2023 Tomi Valkeinen <tomi.valkei...@ideasonboard.com>
  */
 
+#include <linux/bitfield.h>
 #include <linux/clk-provider.h>
 #include <linux/clk.h>
 #include <linux/delay.h>
@@ -146,6 +147,19 @@ static int ub913_write(const struct ub913_data *priv, u8 
reg, u8 val)
        return ret;
 }
 
+static int ub913_update_bits(const struct ub913_data *priv, u8 reg, u8 mask,
+                            u8 val)
+{
+       int ret;
+
+       ret = regmap_update_bits(priv->regmap, reg, mask, val);
+       if (ret < 0)
+               dev_err(&priv->client->dev,
+                       "Cannot update register 0x%02x %d!\n", reg, ret);
+
+       return ret;
+}
+
 /*
  * GPIO chip
  */
@@ -733,10 +747,13 @@ static int ub913_hw_init(struct ub913_data *priv)
        if (ret)
                return dev_err_probe(dev, ret, "i2c master init failed\n");
 
-       ub913_read(priv, UB913_REG_GENERAL_CFG, &v);
-       v &= ~UB913_REG_GENERAL_CFG_PCLK_RISING;
-       v |= priv->pclk_polarity_rising ? UB913_REG_GENERAL_CFG_PCLK_RISING : 0;
-       ub913_write(priv, UB913_REG_GENERAL_CFG, v);
+       ret = ub913_update_bits(priv, UB913_REG_GENERAL_CFG,
+                               UB913_REG_GENERAL_CFG_PCLK_RISING,
+                               FIELD_PREP(UB913_REG_GENERAL_CFG_PCLK_RISING,
+                                          priv->pclk_polarity_rising));
+
+       if (ret)
+               return ret;
 
        return 0;
 }

Reply via email to