]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
media: i2c: ds90ub913: Add error handling to ub913_hw_init()
authorTomi Valkeinen <tomi.valkeinen@ideasonboard.com>
Fri, 6 Dec 2024 08:26:49 +0000 (10:26 +0200)
committerMauro Carvalho Chehab <mchehab+huawei@kernel.org>
Thu, 19 Dec 2024 11:50:17 +0000 (12:50 +0100)
Add error handling to ub913_hw_init() using a new helper function,
ub913_update_bits().

Reported-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Closes: https://lore.kernel.org/all/Zv40EQSR__JDN_0M@kekkonen.localdomain/
Reviewed-by: Jai Luthra <jai.luthra@ideasonboard.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
drivers/media/i2c/ds90ub913.c

index b5375d7366299662509bc3d76524b839db4c0cdd..7670d6c82d923e29b0816d937c89481b642fbec5 100644 (file)
@@ -8,6 +8,7 @@
  * Copyright (c) 2023 Tomi Valkeinen <tomi.valkeinen@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;
 }