mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-24 05:30:52 +07:00
media: mtk-vcodec: fix PM runtime get logic
[ Upstream commit 908711f542c17fe61e5d653da1beb8e5ab5c7b50 ] Currently, the driver just assumes that PM runtime logic succeded resuming the device. That may not be the case, as pm_runtime_get_sync() can fail (but keeping the usage count incremented). Replace the code to use pm_runtime_resume_and_get(), and letting it return the error code. This way, if mtk_vcodec_dec_pw_on() fails, the logic under fops_vcodec_open() will do the right thing and return an error, instead of just assuming that the device is ready to be used. Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
8318f7bc0e
commit
3c90c3fbdc
@ -126,7 +126,9 @@ static int fops_vcodec_open(struct file *file)
|
||||
mtk_vcodec_dec_set_default_params(ctx);
|
||||
|
||||
if (v4l2_fh_is_singular(&ctx->fh)) {
|
||||
mtk_vcodec_dec_pw_on(&dev->pm);
|
||||
ret = mtk_vcodec_dec_pw_on(&dev->pm);
|
||||
if (ret < 0)
|
||||
goto err_load_fw;
|
||||
/*
|
||||
* Does nothing if firmware was already loaded.
|
||||
*/
|
||||
|
@ -88,13 +88,15 @@ void mtk_vcodec_release_dec_pm(struct mtk_vcodec_dev *dev)
|
||||
put_device(dev->pm.larbvdec);
|
||||
}
|
||||
|
||||
void mtk_vcodec_dec_pw_on(struct mtk_vcodec_pm *pm)
|
||||
int mtk_vcodec_dec_pw_on(struct mtk_vcodec_pm *pm)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = pm_runtime_get_sync(pm->dev);
|
||||
ret = pm_runtime_resume_and_get(pm->dev);
|
||||
if (ret)
|
||||
mtk_v4l2_err("pm_runtime_get_sync fail %d", ret);
|
||||
mtk_v4l2_err("pm_runtime_resume_and_get fail %d", ret);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
void mtk_vcodec_dec_pw_off(struct mtk_vcodec_pm *pm)
|
||||
|
@ -12,7 +12,7 @@
|
||||
int mtk_vcodec_init_dec_pm(struct mtk_vcodec_dev *dev);
|
||||
void mtk_vcodec_release_dec_pm(struct mtk_vcodec_dev *dev);
|
||||
|
||||
void mtk_vcodec_dec_pw_on(struct mtk_vcodec_pm *pm);
|
||||
int mtk_vcodec_dec_pw_on(struct mtk_vcodec_pm *pm);
|
||||
void mtk_vcodec_dec_pw_off(struct mtk_vcodec_pm *pm);
|
||||
void mtk_vcodec_dec_clock_on(struct mtk_vcodec_pm *pm);
|
||||
void mtk_vcodec_dec_clock_off(struct mtk_vcodec_pm *pm);
|
||||
|
Loading…
Reference in New Issue
Block a user