diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c index 24f62b5124ed..f81dcbe36f39 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c @@ -11543,6 +11543,8 @@ static void vop2_crtc_atomic_flush(struct drm_crtc *crtc, struct drm_atomic_stat struct drm_atomic_state *old_state = old_cstate->state; struct vop2_video_port *vp = to_vop2_video_port(crtc); struct vop2 *vop2 = vp->vop2; + const struct vop2_data *vop2_data = vop2->data; + const struct vop2_video_port_data *vp_data = &vop2_data->vp[vp->id]; struct drm_plane_state *old_pstate; struct drm_plane *plane; unsigned long flags; @@ -11614,7 +11616,8 @@ static void vop2_crtc_atomic_flush(struct drm_crtc *crtc, struct drm_atomic_stat VOP_MODULE_SET(vop2, vp, cubic_lut_update_en, 0); } - vop2_post_sharp_config(crtc); + if (vp_data->feature & VOP_FEATURE_POST_SHARP) + vop2_post_sharp_config(crtc); if (vcstate->line_flag) vop2_crtc_enable_line_flag_event(crtc, vcstate->line_flag); diff --git a/drivers/media/i2c/imx464.c b/drivers/media/i2c/imx464.c index 6193a80678bb..fef6df34e03a 100644 --- a/drivers/media/i2c/imx464.c +++ b/drivers/media/i2c/imx464.c @@ -3041,7 +3041,7 @@ static int IMX464_initialize_controls(struct IMX464 *IMX464) IMX464->link_freq = v4l2_ctrl_new_int_menu(handler, NULL, V4L2_CID_LINK_FREQ, 1, 0, link_freq_menu_items); - __v4l2_ctrl_s_ctrl(IMX464->link_freq, + v4l2_ctrl_s_ctrl(IMX464->link_freq, IMX464->cur_mode->mipi_freq_idx); pixel_rate = (u32)link_freq_menu_items[mode->mipi_freq_idx] / mode->bpp * 2 * IMX464->bus_cfg.bus.mipi_csi2.num_data_lanes; diff --git a/drivers/media/i2c/os04a10.c b/drivers/media/i2c/os04a10.c index 501e55e8974f..aa814d4178fc 100644 --- a/drivers/media/i2c/os04a10.c +++ b/drivers/media/i2c/os04a10.c @@ -2521,7 +2521,7 @@ static int os04a10_initialize_controls(struct os04a10 *os04a10) 0, PIXEL_RATE_WITH_648M, 1, dst_pixel_rate); - __v4l2_ctrl_s_ctrl(os04a10->link_freq, dst_link_freq); + v4l2_ctrl_s_ctrl(os04a10->link_freq, dst_link_freq); h_blank = mode->hts_def - mode->width; os04a10->hblank = v4l2_ctrl_new_std(handler, NULL, V4L2_CID_HBLANK, diff --git a/drivers/media/platform/rockchip/cif/capture.c b/drivers/media/platform/rockchip/cif/capture.c index 23ea4c72d633..db6a7ca3f237 100644 --- a/drivers/media/platform/rockchip/cif/capture.c +++ b/drivers/media/platform/rockchip/cif/capture.c @@ -5080,6 +5080,7 @@ static void rkcif_free_fence(struct rkcif_stream *stream) unsigned long lock_flags = 0; struct rkcif_fence *vb_fence, *done_fence; struct v4l2_device *v4l2_dev = &stream->cifdev->v4l2_dev; + struct files_struct *files = current->files; LIST_HEAD(local_list); spin_lock_irqsave(&stream->fence_lock, lock_flags); @@ -5100,8 +5101,10 @@ static void rkcif_free_fence(struct rkcif_stream *stream) v4l2_dbg(2, rkcif_debug, v4l2_dev, "%s: free qbuf_fence fd:%d\n", __func__, vb_fence->fence_fd); dma_fence_put(vb_fence->fence); - put_unused_fd(vb_fence->fence_fd); - close_fd(vb_fence->fence_fd); + if (files) { + put_unused_fd(vb_fence->fence_fd); + close_fd(vb_fence->fence_fd); + } kfree(vb_fence); } @@ -5115,8 +5118,10 @@ static void rkcif_free_fence(struct rkcif_stream *stream) v4l2_dbg(2, rkcif_debug, v4l2_dev, "%s: free done_fence fd:%d\n", __func__, done_fence->fence_fd); dma_fence_put(done_fence->fence); - put_unused_fd(done_fence->fence_fd); - close_fd(done_fence->fence_fd); + if (files) { + put_unused_fd(done_fence->fence_fd); + close_fd(done_fence->fence_fd); + } kfree(done_fence); } } diff --git a/drivers/media/platform/rockchip/vpss/stream.c b/drivers/media/platform/rockchip/vpss/stream.c index 65557a2a9757..a93052cbbc54 100644 --- a/drivers/media/platform/rockchip/vpss/stream.c +++ b/drivers/media/platform/rockchip/vpss/stream.c @@ -1206,6 +1206,11 @@ static int rkvpss_start_streaming(struct vb2_queue *queue, unsigned int count) goto free_buf_queue; } + if (hw->is_ofl_ch[stream->id]) { + v4l2_err(&dev->v4l2_dev, "channel[%d] already assigned to offline", stream->id); + goto free_buf_queue; + } + rkvpss_pipeline_open(dev); ret = rkvpss_stream_start(stream); diff --git a/drivers/video/rockchip/rga3/rga_job.c b/drivers/video/rockchip/rga3/rga_job.c index fc90e7cf9ca3..cfa913c3f69f 100644 --- a/drivers/video/rockchip/rga3/rga_job.c +++ b/drivers/video/rockchip/rga3/rga_job.c @@ -1130,6 +1130,7 @@ int rga_request_submit(struct rga_request *request) request->is_done = false; request->finished_task_count = 0; request->failed_task_count = 0; + request->ret = 0; request->current_mm = current_mm; /* Unlock after ensuring that the current request will not be resubmitted. */ @@ -1236,6 +1237,7 @@ int rga_request_mpi_submit(struct rga_req *req, struct rga_request *request) request->is_done = false; request->finished_task_count = 0; request->failed_task_count = 0; + request->ret = 0; spin_unlock_irqrestore(&request->lock, flags);