diff --git a/drivers/media/platform/rockchip/cif/capture.c b/drivers/media/platform/rockchip/cif/capture.c index c1f3fec2ef61..db78f855a854 100644 --- a/drivers/media/platform/rockchip/cif/capture.c +++ b/drivers/media/platform/rockchip/cif/capture.c @@ -1659,8 +1659,9 @@ static void rkcif_s_rx_buffer(struct rkcif_stream *stream, struct rkisp_rx_buf * sd = get_rkisp_sd(dev->sditf[0]); if (!sd) return; - if (dev->rdbk_debug && - dbufs->sequence < 15) { + if ((dev->rdbk_debug && + dbufs->sequence < 15) || + rkcif_debug == 3) { rx_buf = to_cif_rx_buf(dbufs); v4l2_info(&dev->v4l2_dev, "s_buf seq %d type %d, dma addr %x, %lld\n", @@ -2532,7 +2533,6 @@ static int rkcif_assign_new_buffer_update(struct rkcif_stream *stream, int ret = 0; u32 buff_addr_y, buff_addr_cbcr; unsigned long flags; - int on = 0; if (mbus_cfg->type == V4L2_MBUS_CSI2_DPHY || mbus_cfg->type == V4L2_MBUS_CSI2_CPHY || @@ -2631,18 +2631,6 @@ static int rkcif_assign_new_buffer_update(struct rkcif_stream *stream, } } stream->frame_phase_cache = stream->frame_phase; - if (stream->is_single_cap && !stream->cur_skip_frame) { - stream->to_stop_dma = RKCIF_DMAEN_BY_VICAP; - rkcif_stop_dma_capture(stream); - rkcif_dphy_quick_stream(stream->cifdev, on); - stream->is_single_cap = false; - if ((dev->hdr.hdr_mode == NO_HDR && atomic_read(&dev->streamoff_cnt) == 1) || - (dev->hdr.hdr_mode == HDR_X2 && atomic_read(&dev->streamoff_cnt) == 2) || - (dev->hdr.hdr_mode == HDR_X3 && atomic_read(&dev->streamoff_cnt) == 3)) { - dev->sensor_work.on = on; - schedule_work(&dev->sensor_work.work); - } - } if (buffer) { buff_addr_y = buffer->buff_addr[RKCIF_PLANE_Y]; @@ -10180,7 +10168,10 @@ static void rkcif_toisp_check_stop_status(struct sditf_priv *priv, complete(&stream->stop_complete); } } - if (stream->is_single_cap && (!stream->cur_skip_frame)) { + if (stream->is_single_cap && (!stream->cur_skip_frame) && + (stream->cifdev->hdr.hdr_mode == NO_HDR || + (stream->cifdev->hdr.hdr_mode == HDR_X2 && stream->id == 1) || + (stream->cifdev->hdr.hdr_mode == HDR_X3 && stream->id == 2))) { rkcif_dphy_quick_stream(stream->cifdev, on); stream->cifdev->sensor_work.on = 0; schedule_work(&stream->cifdev->sensor_work.work); @@ -10188,8 +10179,8 @@ static void rkcif_toisp_check_stop_status(struct sditf_priv *priv, } if (stream->cur_skip_frame && (stream->cifdev->hdr.hdr_mode == NO_HDR || - (stream->cifdev->hdr.hdr_mode == HDR_X2 && stream->id == 1) || - (stream->cifdev->hdr.hdr_mode == HDR_X3 && stream->id == 2))) + (stream->cifdev->hdr.hdr_mode == HDR_X2 && stream->id == 1) || + (stream->cifdev->hdr.hdr_mode == HDR_X3 && stream->id == 2))) stream->cur_skip_frame--; if (stream->cifdev->chip_id >= CHIP_RV1106_CIF) rkcif_modify_frame_skip_config(stream); @@ -11142,8 +11133,13 @@ void rkcif_irq_pingpong_v1(struct rkcif_device *cif_dev) stream->dma_en); rkcif_update_stream_rockit(cif_dev, stream, mipi_id); } - if (stream->is_single_cap) { - stream->to_stop_dma = RKCIF_DMAEN_BY_ISP; + if (stream->is_single_cap && !stream->cur_skip_frame) { + if (stream->dma_en & RKCIF_DMAEN_BY_ISP) + stream->to_stop_dma = RKCIF_DMAEN_BY_ISP; + else if (stream->dma_en & RKCIF_DMAEN_BY_VICAP) + stream->to_stop_dma = RKCIF_DMAEN_BY_VICAP; + else if (stream->dma_en & RKCIF_DMAEN_BY_ROCKIT) + stream->to_stop_dma = RKCIF_DMAEN_BY_ROCKIT; rkcif_stop_dma_capture(stream); stream->is_single_cap = false; if ((cif_dev->hdr.hdr_mode == NO_HDR && atomic_read(&cif_dev->streamoff_cnt) == 1) || diff --git a/include/uapi/linux/rk-camera-module.h b/include/uapi/linux/rk-camera-module.h index dcbecdec954f..d25977d3b878 100644 --- a/include/uapi/linux/rk-camera-module.h +++ b/include/uapi/linux/rk-camera-module.h @@ -184,7 +184,7 @@ _IOW('V', BASE_VIDIOC_PRIVATE + 40, struct rkmodule_capture_info) #define RKMODULE_GET_SKIP_FRAME \ - _IOW('V', BASE_VIDIOC_PRIVATE + 41, __u32) + _IOR('V', BASE_VIDIOC_PRIVATE + 41, __u32) struct rkmodule_i2cdev_info { __u8 slave_addr;