On Fri Dec 6 10:26:50 2024 +0200, Tomi Valkeinen wrote:
> Add error handling for i2c reads/writes in various places.
> 
> 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/ds90ub953.c | 46 ++++++++++++++++++++++++++++++-------------
 1 file changed, 32 insertions(+), 14 deletions(-)

---

diff --git a/drivers/media/i2c/ds90ub953.c b/drivers/media/i2c/ds90ub953.c
index c49ca42e8fa4..028892cfa361 100644
--- a/drivers/media/i2c/ds90ub953.c
+++ b/drivers/media/i2c/ds90ub953.c
@@ -400,8 +400,13 @@ static int ub953_gpiochip_probe(struct ub953_data *priv)
        int ret;
 
        /* Set all GPIOs to local input mode */
-       ub953_write(priv, UB953_REG_LOCAL_GPIO_DATA, 0);
-       ub953_write(priv, UB953_REG_GPIO_INPUT_CTRL, 0xf);
+       ret = ub953_write(priv, UB953_REG_LOCAL_GPIO_DATA, 0);
+       if (ret)
+               return ret;
+
+       ret = ub953_write(priv, UB953_REG_GPIO_INPUT_CTRL, 0xf);
+       if (ret)
+               return ret;
 
        gc->label = dev_name(dev);
        gc->parent = dev;
@@ -967,10 +972,11 @@ static void ub953_calc_clkout_params(struct ub953_data 
*priv,
        clkout_data->rate = clkout_rate;
 }
 
-static void ub953_write_clkout_regs(struct ub953_data *priv,
-                                   const struct ub953_clkout_data *clkout_data)
+static int ub953_write_clkout_regs(struct ub953_data *priv,
+                                  const struct ub953_clkout_data *clkout_data)
 {
        u8 clkout_ctrl0, clkout_ctrl1;
+       int ret;
 
        if (priv->hw_data->is_ub971)
                clkout_ctrl0 = clkout_data->m;
@@ -980,8 +986,15 @@ static void ub953_write_clkout_regs(struct ub953_data 
*priv,
 
        clkout_ctrl1 = clkout_data->n;
 
-       ub953_write(priv, UB953_REG_CLKOUT_CTRL0, clkout_ctrl0);
-       ub953_write(priv, UB953_REG_CLKOUT_CTRL1, clkout_ctrl1);
+       ret = ub953_write(priv, UB953_REG_CLKOUT_CTRL0, clkout_ctrl0);
+       if (ret)
+               return ret;
+
+       ret = ub953_write(priv, UB953_REG_CLKOUT_CTRL1, clkout_ctrl1);
+       if (ret)
+               return ret;
+
+       return 0;
 }
 
 static unsigned long ub953_clkout_recalc_rate(struct clk_hw *hw,
@@ -1061,9 +1074,7 @@ static int ub953_clkout_set_rate(struct clk_hw *hw, 
unsigned long rate,
        dev_dbg(&priv->client->dev, "%s %lu (requested %lu)\n", __func__,
                clkout_data.rate, rate);
 
-       ub953_write_clkout_regs(priv, &clkout_data);
-
-       return 0;
+       return ub953_write_clkout_regs(priv, &clkout_data);
 }
 
 static const struct clk_ops ub953_clkout_ops = {
@@ -1088,7 +1099,9 @@ static int ub953_register_clkout(struct ub953_data *priv)
 
        /* Initialize clkout to 25MHz by default */
        ub953_calc_clkout_params(priv, UB953_DEFAULT_CLKOUT_RATE, &clkout_data);
-       ub953_write_clkout_regs(priv, &clkout_data);
+       ret = ub953_write_clkout_regs(priv, &clkout_data);
+       if (ret)
+               return ret;
 
        priv->clkout_clk_hw.init = &init;
 
@@ -1235,10 +1248,15 @@ static int ub953_hw_init(struct ub953_data *priv)
        if (ret)
                return dev_err_probe(dev, ret, "i2c init failed\n");
 
-       ub953_write(priv, UB953_REG_GENERAL_CFG,
-                   (priv->non_continous_clk ? 0 : 
UB953_REG_GENERAL_CFG_CONT_CLK) |
-                   ((priv->num_data_lanes - 1) << 
UB953_REG_GENERAL_CFG_CSI_LANE_SEL_SHIFT) |
-                   UB953_REG_GENERAL_CFG_CRC_TX_GEN_ENABLE);
+       v = 0;
+       v |= priv->non_continous_clk ? 0 : UB953_REG_GENERAL_CFG_CONT_CLK;
+       v |= (priv->num_data_lanes - 1) <<
+               UB953_REG_GENERAL_CFG_CSI_LANE_SEL_SHIFT;
+       v |= UB953_REG_GENERAL_CFG_CRC_TX_GEN_ENABLE;
+
+       ret = ub953_write(priv, UB953_REG_GENERAL_CFG, v);
+       if (ret)
+               return ret;
 
        return 0;
 }

Reply via email to