mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-09 04:10:18 +09:00
media: rockchip: isp: make sure 3dlut no continuous read twice
if 3dlut enable and 3DLUT_UPDATE = 1, will start read lut at following case: 1. isp force update 2. frame end 2->1 shouldn't for 3dlut. Change-Id: I82d03836035bc06e25839fe4d90dba7cd36c2e1a Signed-off-by: Cai YiWei <cyw@rock-chips.com>
This commit is contained in:
@@ -32,6 +32,11 @@ u32 rkisp_read(struct rkisp_device *dev, u32 reg, bool is_direct)
|
||||
return val;
|
||||
}
|
||||
|
||||
u32 rkisp_read_reg_cache(struct rkisp_device *dev, u32 reg)
|
||||
{
|
||||
return *(u32 *)(dev->sw_base_addr + reg);
|
||||
}
|
||||
|
||||
void rkisp_set_bits(struct rkisp_device *dev, u32 reg, u32 mask, u32 val, bool is_direct)
|
||||
{
|
||||
u32 tmp = rkisp_read(dev, reg, is_direct) & ~mask;
|
||||
|
||||
@@ -163,6 +163,7 @@ static inline struct vb2_queue *to_vb2_queue(struct file *file)
|
||||
|
||||
void rkisp_write(struct rkisp_device *dev, u32 reg, u32 val, bool is_direct);
|
||||
u32 rkisp_read(struct rkisp_device *dev, u32 reg, bool is_direct);
|
||||
u32 rkisp_read_reg_cache(struct rkisp_device *dev, u32 reg);
|
||||
void rkisp_set_bits(struct rkisp_device *dev, u32 reg, u32 mask, u32 val, bool is_direct);
|
||||
void rkisp_clear_bits(struct rkisp_device *dev, u32 reg, u32 mask, bool is_direct);
|
||||
void rkisp_update_regs(struct rkisp_device *dev, u32 start, u32 end);
|
||||
|
||||
@@ -491,7 +491,7 @@ void rkisp_trigger_read_back(struct rkisp_csi_device *csi, u8 dma2frm, u32 mode)
|
||||
u32 val, cur_frame_id, tmp, rd_mode;
|
||||
bool is_feature_on = hw->is_feature_on;
|
||||
u64 iq_feature = hw->iq_feature;
|
||||
bool is_upd = false;
|
||||
bool is_upd = false, is_3dlut_upd = false;
|
||||
|
||||
if (dev->isp_ver == ISP_V21)
|
||||
dma2frm = 0;
|
||||
@@ -574,11 +574,19 @@ void rkisp_trigger_read_back(struct rkisp_csi_device *csi, u8 dma2frm, u32 mode)
|
||||
if (IS_HDR_RDBK(dev->csi_dev.rd_mode))
|
||||
rkisp_params_cfgsram(params_vdev);
|
||||
|
||||
/* read 3d lut at frame end */
|
||||
if (hw->is_single && is_upd &&
|
||||
rkisp_read_reg_cache(dev, ISP_3DLUT_UPDATE) & 0x1) {
|
||||
rkisp_write(dev, ISP_3DLUT_UPDATE, 0, true);
|
||||
is_3dlut_upd = true;
|
||||
}
|
||||
if (is_upd) {
|
||||
val = rkisp_read(dev, ISP_CTRL, false);
|
||||
val |= CIF_ISP_CTRL_ISP_CFG_UPD;
|
||||
rkisp_write(dev, ISP_CTRL, val, true);
|
||||
}
|
||||
if (is_3dlut_upd)
|
||||
rkisp_write(dev, ISP_3DLUT_UPDATE, 1, true);
|
||||
|
||||
memset(csi->filt_state, 0, sizeof(csi->filt_state));
|
||||
csi->filt_state[CSI_F_VS] = dma2frm;
|
||||
|
||||
@@ -2332,6 +2332,9 @@ void rkisp_isp_isr(unsigned int isp_mis,
|
||||
else
|
||||
dev->csi_dev.filt_state[CSI_F_VS]--;
|
||||
if (IS_HDR_RDBK(dev->hdr.op_mode)) {
|
||||
/* read 3d lut at isp readback */
|
||||
if (!dev->hw_dev->is_single)
|
||||
rkisp_write(dev, ISP_3DLUT_UPDATE, 0, true);
|
||||
rkisp_stats_rdbk_enable(&dev->stats_vdev, true);
|
||||
goto vs_skip;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user