mirror of
https://github.com/torvalds/linux
synced 2024-10-17 16:58:15 +00:00
media: platform: mtk-mdp3: fix error handling about components clock_on
Add goto statement in mdp_comp_clock_on() to avoid error code not being
propagated or returning positive values.
This change also performs a well-timed clock_off when an error occurs, and
reduces unnecessary error logging in mdp_cmdq_send().
Fixes: 61890ccaef
("media: platform: mtk-mdp3: add MediaTek MDP3 driver")
Signed-off-by: Moudy Ho <moudy.ho@mediatek.com>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
This commit is contained in:
parent
64e0a0804b
commit
74a596e7fc
|
@ -433,10 +433,8 @@ int mdp_cmdq_send(struct mdp_dev *mdp, struct mdp_cmdq_param *param)
|
|||
cmd->mdp_ctx = param->mdp_ctx;
|
||||
|
||||
ret = mdp_comp_clocks_on(&mdp->pdev->dev, cmd->comps, cmd->num_comps);
|
||||
if (ret) {
|
||||
dev_err(dev, "comp %d failed to enable clock!\n", ret);
|
||||
if (ret)
|
||||
goto err_free_path;
|
||||
}
|
||||
|
||||
dma_sync_single_for_device(mdp->cmdq_clt->chan->mbox->dev,
|
||||
cmd->pkt.pa_base, cmd->pkt.cmd_buf_size,
|
||||
|
|
|
@ -699,12 +699,22 @@ int mdp_comp_clock_on(struct device *dev, struct mdp_comp *comp)
|
|||
dev_err(dev,
|
||||
"Failed to enable clk %d. type:%d id:%d\n",
|
||||
i, comp->type, comp->id);
|
||||
pm_runtime_put(comp->comp_dev);
|
||||
return ret;
|
||||
goto err_revert;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
err_revert:
|
||||
while (--i >= 0) {
|
||||
if (IS_ERR_OR_NULL(comp->clks[i]))
|
||||
continue;
|
||||
clk_disable_unprepare(comp->clks[i]);
|
||||
}
|
||||
if (comp->comp_dev)
|
||||
pm_runtime_put_sync(comp->comp_dev);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
void mdp_comp_clock_off(struct device *dev, struct mdp_comp *comp)
|
||||
|
@ -723,11 +733,13 @@ void mdp_comp_clock_off(struct device *dev, struct mdp_comp *comp)
|
|||
|
||||
int mdp_comp_clocks_on(struct device *dev, struct mdp_comp *comps, int num)
|
||||
{
|
||||
int i;
|
||||
int i, ret;
|
||||
|
||||
for (i = 0; i < num; i++)
|
||||
if (mdp_comp_clock_on(dev, &comps[i]) != 0)
|
||||
return ++i;
|
||||
for (i = 0; i < num; i++) {
|
||||
ret = mdp_comp_clock_on(dev, &comps[i]);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue