mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-08 11:50:43 +09:00
media: rockchip: isp: disable tmo interrupt
remove associated configuration in TMO isr Signed-off-by: Xu Hongfei <xuhf@rock-chips.com> Change-Id: I610bc64aaa2549d10e4383df0d8247f161bc8048
This commit is contained in:
@@ -4333,129 +4333,6 @@ unlock:
|
||||
spin_unlock(¶ms_vdev->config_lock);
|
||||
}
|
||||
|
||||
static void isp_hdrtmo_palhpa_reconfig(struct rkisp_isp_params_vdev *params_vdev, u32 lgmean)
|
||||
{
|
||||
u16 set_lgmin, set_lgmax, palpha_0p18;
|
||||
u32 palpha, max_palpha;
|
||||
u32 cur_frame_id = 0;
|
||||
u32 value = 0;
|
||||
|
||||
set_lgmin = params_vdev->cur_hdrtmo.set_lgmin;
|
||||
set_lgmax = params_vdev->cur_hdrtmo.set_lgmax;
|
||||
palpha_0p18 = params_vdev->cur_hdrtmo.palpha_0p18;
|
||||
max_palpha = params_vdev->cur_hdrtmo.maxpalpha;
|
||||
|
||||
palpha = palpha_0p18 * (4 * lgmean - 3 * set_lgmin - set_lgmax) / (set_lgmax - set_lgmin);
|
||||
palpha = min(palpha, max_palpha);
|
||||
|
||||
rkisp_dmarx_get_frame(params_vdev->dev, &cur_frame_id, NULL, NULL, true);
|
||||
|
||||
value = rkisp_read(params_vdev->dev, ISP_HDRTMO_LG_CFG0, true) & 0xfffffc00;
|
||||
value |= palpha;
|
||||
rkisp_write(params_vdev->dev, ISP_HDRTMO_LG_CFG0, value, true);
|
||||
|
||||
v4l2_dbg(5, rkisp_debug, ¶ms_vdev->dev->v4l2_dev,
|
||||
"frame(%d), palpha(%d)\n", cur_frame_id, palpha);
|
||||
}
|
||||
|
||||
static void isp_hdrtmo_lgavgmax_reconfig(struct rkisp_isp_params_vdev *params_vdev,
|
||||
s32 lgmean)
|
||||
{
|
||||
u8 weight_key;
|
||||
u16 set_lgmax;
|
||||
s32 lgrange1 = 0, lgavgmax = 0;
|
||||
u32 cur_frame_id, value;
|
||||
|
||||
set_lgmax = params_vdev->cur_hdrtmo.set_lgmax;
|
||||
lgrange1 = params_vdev->cur_hdrtmo.set_lgrange1;
|
||||
weight_key = params_vdev->cur_hdrtmo.set_weightkey;
|
||||
|
||||
if (params_vdev->cur_hdrtmo.predict.global_tmo) {
|
||||
lgavgmax = lgmean;
|
||||
} else {
|
||||
lgavgmax = weight_key * set_lgmax + (256 - weight_key) * lgmean;
|
||||
lgavgmax = min(lgavgmax / 256, lgrange1);
|
||||
}
|
||||
|
||||
value = rkisp_read(params_vdev->dev, ISP_HDRTMO_LG_CFG4, true) & 0xffff0000;
|
||||
value |= lgavgmax;
|
||||
rkisp_write(params_vdev->dev, ISP_HDRTMO_LG_CFG4, value, true);
|
||||
|
||||
rkisp_dmarx_get_frame(params_vdev->dev, &cur_frame_id, NULL, NULL, true);
|
||||
|
||||
v4l2_dbg(5, rkisp_debug, ¶ms_vdev->dev->v4l2_dev,
|
||||
"frame(%d), global_tmo(%d), lgavgmax(%d)\n",
|
||||
cur_frame_id, params_vdev->cur_hdrtmo.predict.global_tmo, lgavgmax);
|
||||
}
|
||||
|
||||
static void isp_hdrtmo_lgrange1_reconfig(struct rkisp_isp_params_vdev *params_vdev,
|
||||
s32 lgmean)
|
||||
{
|
||||
if (params_vdev->cur_hdrtmo.predict.global_tmo) {
|
||||
s32 lgrange1 = 0;
|
||||
u32 cur_frame_id, value;
|
||||
|
||||
lgrange1 = lgmean;
|
||||
value = rkisp_read(params_vdev->dev, ISP_HDRTMO_LG_CFG3, true) & 0xffff;
|
||||
value |= lgrange1 << 16;
|
||||
rkisp_write(params_vdev->dev, ISP_HDRTMO_LG_CFG3, value, true);
|
||||
|
||||
rkisp_dmarx_get_frame(params_vdev->dev, &cur_frame_id, NULL, NULL, true);
|
||||
|
||||
v4l2_dbg(5, rkisp_debug, ¶ms_vdev->dev->v4l2_dev,
|
||||
"frame(%d), global_tmo(%d), lgrange1(%d)\n",
|
||||
cur_frame_id, params_vdev->cur_hdrtmo.predict.global_tmo, lgrange1);
|
||||
}
|
||||
}
|
||||
|
||||
static u16 isp_hdrtmo_lgmean_reconfig(struct rkisp_isp_params_vdev *params_vdev)
|
||||
{
|
||||
u16 default_lgmean = 40000;
|
||||
u16 lgmean = default_lgmean;
|
||||
u32 value = 0;
|
||||
s32 cur_frame_id = 0;
|
||||
static s32 prev_lgmean = 40000;
|
||||
|
||||
rkisp_dmarx_get_frame(params_vdev->dev, &cur_frame_id, NULL, NULL, true);
|
||||
if (params_vdev->cur_hdrtmo.predict.iir < params_vdev->cur_hdrtmo.predict.iir_max) {
|
||||
u32 ro_lgmean;
|
||||
s32 iir = 0;
|
||||
s32 global_tmo_strength = params_vdev->cur_hdrtmo.predict.global_tmo_strength;
|
||||
|
||||
value = rkisp_read(params_vdev->dev, ISP_HDRTMO_LG_RO2, true);
|
||||
ro_lgmean = value & 0xffff;
|
||||
|
||||
iir = min(cur_frame_id + 1, params_vdev->cur_hdrtmo.predict.iir);
|
||||
default_lgmean += global_tmo_strength;
|
||||
ro_lgmean += global_tmo_strength;
|
||||
if (params_vdev->cur_hdrtmo.predict.scene_stable) {
|
||||
if (cur_frame_id == 0)
|
||||
lgmean = default_lgmean;
|
||||
else
|
||||
lgmean = ((iir - 1) * prev_lgmean + ro_lgmean) / iir;
|
||||
} else {
|
||||
if (cur_frame_id == 0)
|
||||
lgmean = default_lgmean;
|
||||
else
|
||||
lgmean = prev_lgmean;
|
||||
}
|
||||
}
|
||||
|
||||
value = rkisp_read(params_vdev->dev, ISP_HDRTMO_LG_CFG2, true) & 0xffff0000;
|
||||
value |= lgmean;
|
||||
rkisp_write(params_vdev->dev, ISP_HDRTMO_LG_CFG2, value, true);
|
||||
|
||||
prev_lgmean = lgmean;
|
||||
|
||||
v4l2_dbg(5, rkisp_debug, ¶ms_vdev->dev->v4l2_dev,
|
||||
"frame(%d), scene_stable(%d), k_rolgmean(%d), iir(%d), lgmean(%d)\n",
|
||||
cur_frame_id, params_vdev->cur_hdrtmo.predict.scene_stable,
|
||||
params_vdev->cur_hdrtmo.predict.k_rolgmean,
|
||||
params_vdev->cur_hdrtmo.predict.iir, lgmean);
|
||||
|
||||
return lgmean;
|
||||
}
|
||||
|
||||
static void
|
||||
rkisp_params_isr_v2x(struct rkisp_isp_params_vdev *params_vdev,
|
||||
u32 isp_mis)
|
||||
@@ -4487,17 +4364,6 @@ rkisp_params_isr_v2x(struct rkisp_isp_params_vdev *params_vdev,
|
||||
}
|
||||
}
|
||||
|
||||
if (isp_mis & ISP2X_HDR_DONE) {
|
||||
u16 lgmean = 0;
|
||||
|
||||
lgmean = isp_hdrtmo_lgmean_reconfig(params_vdev);
|
||||
isp_hdrtmo_palhpa_reconfig(params_vdev, lgmean);
|
||||
isp_hdrtmo_lgrange1_reconfig(params_vdev, lgmean);
|
||||
isp_hdrtmo_lgavgmax_reconfig(params_vdev, lgmean);
|
||||
|
||||
writel(ISP2X_HDR_DONE, dev->base_addr + ISP_ISP_ICR);
|
||||
}
|
||||
|
||||
if ((isp_mis & CIF_ISP_FRAME) && !IS_HDR_RDBK(dev->rd_mode))
|
||||
rkisp_params_cfg_v2x(params_vdev, cur_frame_id + 1, RKISP_PARAMS_ALL);
|
||||
}
|
||||
|
||||
@@ -1225,8 +1225,6 @@ static int rkisp_config_isp(struct rkisp_device *dev)
|
||||
CIF_ISP_FRAME_IN;
|
||||
if (dev->isp_ver == ISP_V20 || dev->isp_ver == ISP_V21)
|
||||
irq_mask |= ISP2X_LSC_LUT_ERR;
|
||||
if (dev->isp_ver == ISP_V20)
|
||||
irq_mask |= ISP2X_HDR_DONE;
|
||||
rkisp_write(dev, CIF_ISP_IMSC, irq_mask, true);
|
||||
|
||||
if ((dev->isp_ver == ISP_V20 || dev->isp_ver == ISP_V21) &&
|
||||
|
||||
Reference in New Issue
Block a user