From 2a2955cd9ef6827fdcfb7e838f8eb6bec9f73a9c Mon Sep 17 00:00:00 2001 From: Cai YiWei Date: Sat, 20 Aug 2022 10:21:46 +0800 Subject: [PATCH] media: rockchip: isp: fix pm runtime return -EACCES for thunderboot Change-Id: I279f171dc3756b0fa64185745678223d7c94e4d3 Signed-off-by: Cai YiWei --- drivers/media/platform/rockchip/isp/capture.c | 12 +++++++++++- drivers/media/platform/rockchip/isp/dev.c | 3 +-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/drivers/media/platform/rockchip/isp/capture.c b/drivers/media/platform/rockchip/isp/capture.c index 57bc783df3cb..3f3deb7f2022 100644 --- a/drivers/media/platform/rockchip/isp/capture.c +++ b/drivers/media/platform/rockchip/isp/capture.c @@ -1867,8 +1867,18 @@ static void rkisp_stream_fast(struct work_struct *work) struct rkisp_stream *stream = &cap_dev->stream[0]; struct rkisp_device *ispdev = cap_dev->ispdev; struct v4l2_subdev *sd = ispdev->active_sensor->sd; + int ret; + + if (ispdev->isp_ver != ISP_V30) + return; + + ret = v4l2_pipeline_pm_get(&stream->vnode.vdev.entity); + if (ret < 0) { + dev_err(ispdev->dev, "%s PM get fail:%d\n", __func__, ret); + ispdev->is_thunderboot = false; + return; + } - v4l2_pipeline_pm_get(&stream->vnode.vdev.entity); rkisp_chk_tb_over(ispdev); if (ispdev->tb_head.complete != RKISP_TB_OK) { v4l2_pipeline_pm_put(&stream->vnode.vdev.entity); diff --git a/drivers/media/platform/rockchip/isp/dev.c b/drivers/media/platform/rockchip/isp/dev.c index acebd6cec802..8333ba9aef56 100644 --- a/drivers/media/platform/rockchip/isp/dev.c +++ b/drivers/media/platform/rockchip/isp/dev.c @@ -888,6 +888,7 @@ static int rkisp_plat_probe(struct platform_device *pdev) goto err_unreg_v4l2_dev; } + pm_runtime_enable(dev); /* create & register platefom subdev (from of_node) */ ret = rkisp_register_platform_subdevs(isp_dev); if (ret < 0) @@ -901,8 +902,6 @@ static int rkisp_plat_probe(struct platform_device *pdev) mutex_lock(&rkisp_dev_mutex); list_add_tail(&isp_dev->list, &rkisp_device_list); mutex_unlock(&rkisp_dev_mutex); - - pm_runtime_enable(dev); return 0; err_unreg_media_dev: