media: rockchip: isp: normal read back to enable hdr merge

Change-Id: I65ece8474522ca6c141728e4fcf08dc732f30ad4
Signed-off-by: Cai YiWei <cyw@rock-chips.com>
This commit is contained in:
Cai YiWei
2020-10-24 15:47:38 +08:00
committed by Hu Kejun
parent 8b21466cd5
commit 228a86aac6
3 changed files with 24 additions and 11 deletions

View File

@@ -133,10 +133,6 @@ static int rkisp_csi_s_stream(struct v4l2_subdev *sd, int on)
struct rkisp_device *dev = csi->ispdev;
memset(csi->tx_first, 0, sizeof(csi->tx_first));
csi->frame_cnt = -1;
csi->frame_cnt_x1 = -1;
csi->frame_cnt_x2 = -1;
csi->frame_cnt_x3 = -1;
if (!IS_HDR_RDBK(dev->hdr.op_mode))
return 0;
@@ -326,6 +322,7 @@ static int csi_config(struct rkisp_csi_device *csi)
/* hdr merge */
switch (dev->hdr.op_mode) {
case HDR_RDBK_FRAME1:
case HDR_RDBK_FRAME2:
case HDR_FRAMEX2_DDR:
case HDR_LINEX2_DDR:
@@ -343,7 +340,6 @@ static int csi_config(struct rkisp_csi_device *csi)
val = 0;
}
rkisp_write(dev, ISP_HDRMGE_BASE, val, false);
rkisp_write(dev, ISP_HDRTMO_BASE, val, false);
v4l2_dbg(1, rkisp_debug, &dev->v4l2_dev,
"CSI2RX_IDS 0x%08x 0x%08x\n",
@@ -441,7 +437,8 @@ int rkisp_csi_config_patch(struct rkisp_device *dev)
}
}
if (dev->hdr.op_mode == HDR_RDBK_FRAME2)
if (dev->hdr.op_mode == HDR_RDBK_FRAME2 ||
dev->hdr.op_mode == HDR_RDBK_FRAME1)
val = SW_HDRMGE_EN | SW_HDRMGE_MODE_FRAMEX2;
else if (dev->hdr.op_mode == HDR_RDBK_FRAME3)
val = SW_HDRMGE_EN | SW_HDRMGE_MODE_FRAMEX3;
@@ -450,7 +447,6 @@ int rkisp_csi_config_patch(struct rkisp_device *dev)
rkisp_write(dev, CSI2RX_CTRL0,
SW_IBUF_OP_MODE(dev->hdr.op_mode), true);
rkisp_write(dev, ISP_HDRMGE_BASE, val, false);
rkisp_write(dev, ISP_HDRTMO_BASE, val & SW_HDRMGE_EN, false);
rkisp_write(dev, CSI2RX_MASK_STAT, 0x7FFFFF7F, true);
}
@@ -459,6 +455,10 @@ int rkisp_csi_config_patch(struct rkisp_device *dev)
rkisp_set_bits(dev, CTRL_SWS_CFG,
0, SW_MPIP_DROP_FRM_DIS, true);
}
dev->csi_dev.frame_cnt = -1;
dev->csi_dev.frame_cnt_x1 = -1;
dev->csi_dev.frame_cnt_x2 = -1;
dev->csi_dev.frame_cnt_x3 = -1;
return ret;
}
@@ -491,6 +491,7 @@ void rkisp_trigger_read_back(struct rkisp_csi_device *csi, u8 dma2frm, u32 mode)
val = 0;
if (mode & T_START_X1) {
csi->rd_mode = HDR_RDBK_FRAME1;
val = SW_HDRMGE_EN | SW_HDRMGE_MODE_FRAMEX2;
} else if (mode & T_START_X2) {
csi->rd_mode = HDR_RDBK_FRAME2;
val = SW_HDRMGE_EN | SW_HDRMGE_MODE_FRAMEX2;
@@ -526,8 +527,11 @@ void rkisp_trigger_read_back(struct rkisp_csi_device *csi, u8 dma2frm, u32 mode)
cur_frame_id, dma2frm + 1);
val = rkisp_read(dev, CSI2RX_CTRL0, true);
val &= ~SW_IBUF_OP_MODE(0xf);
val |= SW_CSI2RX_EN | SW_DMA_2FRM_MODE(dma2frm) |
SW_IBUF_OP_MODE(csi->rd_mode);
if (csi->rd_mode == HDR_RDBK_FRAME1)
val |= SW_IBUF_OP_MODE(HDR_RDBK_FRAME2);
else
val |= SW_IBUF_OP_MODE(csi->rd_mode);
val |= SW_CSI2RX_EN | SW_DMA_2FRM_MODE(dma2frm);
rkisp_write(dev, CSI2RX_CTRL0, val, true);
}

View File

@@ -375,6 +375,16 @@ static void update_rawrd(struct rkisp_stream *stream)
readl(base + rawwr_addr));
}
}
if (dev->isp_ver == ISP_V20 &&
dev->csi_dev.rd_mode == HDR_RDBK_FRAME1 &&
stream->id == RKISP_STREAM_RAWRD2) {
rkisp_write(dev, MI_RAW0_RD_BASE,
rkisp_read(dev, MI_RAW2_RD_BASE, false),
false);
rkisp_write(dev, MI_RAW0_RD_LENGTH,
rkisp_read(dev, MI_RAW2_RD_LENGTH, false),
false);
}
}
static struct streams_ops rkisp2_dmarx_streams_ops = {

View File

@@ -3432,8 +3432,7 @@ isp_gain_config(struct rkisp_isp_params_vdev *params_vdev,
u32 value, i, gain_wsize;
u8 mge_en;
if (dev->csi_dev.rd_mode != HDR_NORMAL &&
dev->csi_dev.rd_mode != HDR_RDBK_FRAME1)
if (dev->csi_dev.rd_mode != HDR_NORMAL)
mge_en = 1;
else
mge_en = 0;