mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-07 03:15:31 +09:00
media: platform: mtk-mdp3: fix error handling about components clock_on
[ Upstream commit74a596e7fc] 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> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
ab49175a5a
commit
ef9170c00e
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user