mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-07 11:26:02 +09:00
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:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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 = {
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user