media: i2c: ds90ub953: Add error handling for i2c reads/writes
[ Upstream commit 0794c43ea1 ]
Add error handling for i2c reads/writes in various places.
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>
Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
75ba1588c5
commit
95d0d793b6
@@ -398,8 +398,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;
|
||||
@@ -961,10 +966,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;
|
||||
@@ -974,8 +980,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,
|
||||
@@ -1055,9 +1068,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 = {
|
||||
@@ -1082,7 +1093,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;
|
||||
|
||||
@@ -1229,10 +1242,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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user