mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-09 12:17:12 +09:00
media: rockchip: vicap force update buffer addr when init stream
Change-Id: I3bc59fdcc769e9beaeb303ca6f6b18dfb5b457fa Signed-off-by: Zefa Chen <zefa.chen@rock-chips.com>
This commit is contained in:
@@ -5041,10 +5041,25 @@ static int rkcif_csi_channel_set_v1(struct rkcif_stream *stream,
|
||||
channel->crop_st_y << 16 |
|
||||
(channel->crop_st_x + capture_info->multi_dev.pixel_offset));
|
||||
|
||||
if (!(capture_info->mode == RKMODULE_MULTI_DEV_COMBINE_ONE &&
|
||||
index < capture_info->multi_dev.dev_num - 1)) {
|
||||
if (mode == RKCIF_STREAM_MODE_CAPTURE)
|
||||
rkcif_assign_new_buffer_pingpong(stream,
|
||||
RKCIF_YUV_ADDR_STATE_INIT,
|
||||
channel->id);
|
||||
else if (mode == RKCIF_STREAM_MODE_TOISP ||
|
||||
mode == RKCIF_STREAM_MODE_TOISP_RDBK)
|
||||
rkcif_assign_new_buffer_pingpong_toisp(stream,
|
||||
RKCIF_YUV_ADDR_STATE_INIT,
|
||||
channel->id);
|
||||
}
|
||||
|
||||
val = channel->virtual_width;
|
||||
if (dev->chip_id >= CHIP_RV1103B_CIF && dev->sditf[0] &&
|
||||
dev->sditf[0]->hdr_wrap_line)
|
||||
val |= dev->sditf[0]->hdr_wrap_line << 20;
|
||||
if (dev->chip_id >= CHIP_RK3562_CIF)
|
||||
val |= BIT(31);
|
||||
rkcif_write_register(dev, get_reg_index_of_frm0_y_vlw(channel->id), val);
|
||||
|
||||
if (stream->lack_buf_cnt == 2)
|
||||
@@ -5172,18 +5187,7 @@ static int rkcif_csi_channel_set_v1(struct rkcif_stream *stream,
|
||||
} else {
|
||||
atomic_inc(&stream->cifdev->id_use_cnt);
|
||||
}
|
||||
if (!(capture_info->mode == RKMODULE_MULTI_DEV_COMBINE_ONE &&
|
||||
index < capture_info->multi_dev.dev_num - 1)) {
|
||||
if (mode == RKCIF_STREAM_MODE_CAPTURE)
|
||||
rkcif_assign_new_buffer_pingpong(stream,
|
||||
RKCIF_YUV_ADDR_STATE_INIT,
|
||||
channel->id);
|
||||
else if (mode == RKCIF_STREAM_MODE_TOISP ||
|
||||
mode == RKCIF_STREAM_MODE_TOISP_RDBK)
|
||||
rkcif_assign_new_buffer_pingpong_toisp(stream,
|
||||
RKCIF_YUV_ADDR_STATE_INIT,
|
||||
channel->id);
|
||||
}
|
||||
|
||||
dev->intr_mask = rkcif_read_register(dev, CIF_REG_MIPI_LVDS_INTEN);
|
||||
return 0;
|
||||
}
|
||||
@@ -5306,10 +5310,24 @@ static int rkcif_csi_channel_set_rv1126b(struct rkcif_stream *stream,
|
||||
channel->crop_st_y << 16 |
|
||||
(channel->crop_st_x + capture_info->multi_dev.pixel_offset));
|
||||
|
||||
if (!(capture_info->mode == RKMODULE_MULTI_DEV_COMBINE_ONE &&
|
||||
index < capture_info->multi_dev.dev_num - 1)) {
|
||||
if (mode == RKCIF_STREAM_MODE_CAPTURE)
|
||||
rkcif_assign_new_buffer_pingpong(stream,
|
||||
RKCIF_YUV_ADDR_STATE_INIT,
|
||||
channel->id);
|
||||
else if (mode == RKCIF_STREAM_MODE_TOISP ||
|
||||
mode == RKCIF_STREAM_MODE_TOISP_RDBK)
|
||||
rkcif_assign_new_buffer_pingpong_toisp(stream,
|
||||
RKCIF_YUV_ADDR_STATE_INIT,
|
||||
channel->id);
|
||||
}
|
||||
|
||||
val = channel->virtual_width;
|
||||
if (dev->sditf[0] &&
|
||||
dev->sditf[0]->hdr_wrap_line)
|
||||
val |= dev->sditf[0]->hdr_wrap_line << 20;
|
||||
val |= BIT(31);
|
||||
rkcif_write_register(dev, get_reg_index_of_frm0_y_vlw(channel->id), val);
|
||||
|
||||
if (stream->lack_buf_cnt == 2)
|
||||
@@ -5387,18 +5405,7 @@ static int rkcif_csi_channel_set_rv1126b(struct rkcif_stream *stream,
|
||||
} else {
|
||||
atomic_inc(&stream->cifdev->id_use_cnt);
|
||||
}
|
||||
if (!(capture_info->mode == RKMODULE_MULTI_DEV_COMBINE_ONE &&
|
||||
index < capture_info->multi_dev.dev_num - 1)) {
|
||||
if (mode == RKCIF_STREAM_MODE_CAPTURE)
|
||||
rkcif_assign_new_buffer_pingpong(stream,
|
||||
RKCIF_YUV_ADDR_STATE_INIT,
|
||||
channel->id);
|
||||
else if (mode == RKCIF_STREAM_MODE_TOISP ||
|
||||
mode == RKCIF_STREAM_MODE_TOISP_RDBK)
|
||||
rkcif_assign_new_buffer_pingpong_toisp(stream,
|
||||
RKCIF_YUV_ADDR_STATE_INIT,
|
||||
channel->id);
|
||||
}
|
||||
|
||||
dev->intr_mask = rkcif_read_register(dev, CIF_REG_MIPI_LVDS_INTEN);
|
||||
return 0;
|
||||
}
|
||||
@@ -8313,7 +8320,6 @@ static int rkcif_stream_start_rv1126b(struct rkcif_stream *stream, unsigned int
|
||||
}
|
||||
}
|
||||
|
||||
val = stream->pixm.plane_fmt[0].bytesperline;
|
||||
if (stream->crop_enable) {
|
||||
dev->channels[stream->id].crop_en = 1;
|
||||
dev->channels[stream->id].crop_st_x = stream->crop[CROP_SRC_ACT].left;
|
||||
@@ -8328,10 +8334,6 @@ static int rkcif_stream_start_rv1126b(struct rkcif_stream *stream, unsigned int
|
||||
dev->channels[stream->id].crop_en = 0;
|
||||
}
|
||||
|
||||
if (dev->chip_id > CHIP_RK3562_CIF && stream->sw_dbg_en)
|
||||
val = (val + 23) / 24 * 24;
|
||||
|
||||
rkcif_write_register(dev, get_dvp_reg_index_of_vlw(stream->id), val);
|
||||
rkcif_write_register(dev, CIF_REG_DVP_SET_SIZE_ID0 + stream->id,
|
||||
dev->channels[stream->id].width |
|
||||
(dev->channels[stream->id].height << 16));
|
||||
@@ -8358,6 +8360,11 @@ static int rkcif_stream_start_rv1126b(struct rkcif_stream *stream, unsigned int
|
||||
stream->id);
|
||||
}
|
||||
|
||||
val = stream->pixm.plane_fmt[0].bytesperline;
|
||||
if (dev->chip_id > CHIP_RK3562_CIF && stream->sw_dbg_en)
|
||||
val = (val + 23) / 24 * 24;
|
||||
rkcif_write_register(dev, get_dvp_reg_index_of_vlw(stream->id), val | BIT(31));
|
||||
|
||||
dev->workmode = RKCIF_WORKMODE_PINGPONG;
|
||||
href_pol = (mbus_flags & V4L2_MBUS_HSYNC_ACTIVE_HIGH) ?
|
||||
HSY_HIGH_ACTIVE : HSY_LOW_ACTIVE;
|
||||
@@ -13357,7 +13364,7 @@ void rkcif_enable_dma_capture(struct rkcif_stream *stream, bool is_only_enable)
|
||||
else if (cif_dev->chip_id < CHIP_RK3576_CIF)
|
||||
rkcif_write_register_or(cif_dev, CIF_REG_DVP_VIR_LINE_WIDTH, BIT(28) << stream->id);
|
||||
else
|
||||
rkcif_write_register_or(cif_dev, CIF_REG_DVP_VIR_LINE_WIDTH, BIT(31));
|
||||
rkcif_write_register_or(cif_dev, get_dvp_reg_index_of_vlw(stream->id), BIT(31));
|
||||
}
|
||||
if (mbus_cfg->type == V4L2_MBUS_CSI2_DPHY ||
|
||||
mbus_cfg->type == V4L2_MBUS_CSI2_CPHY) {
|
||||
|
||||
Reference in New Issue
Block a user