media: rockchip: isp: fix cac repeat enable

Change-Id: I2b0e5cb7e3064a3118147b689ce126e7ff99c9c3
Signed-off-by: Cai YiWei <cyw@rock-chips.com>
This commit is contained in:
Cai YiWei
2024-05-20 14:20:16 +08:00
committed by Tao Huang
parent e6a4425422
commit 8e8fd7e954
3 changed files with 48 additions and 27 deletions

View File

@@ -3820,6 +3820,8 @@ isp_cac_config(struct rkisp_isp_params_vdev *params_vdev,
}
if (i == ISP32_MESH_BUF_NUM) {
if (arg->bypass_en)
goto end;
dev_err(dev->dev, "cannot find cac buf fd(%d)\n", arg->buf_fd);
return;
}
@@ -3843,29 +3845,28 @@ isp_cac_config(struct rkisp_isp_params_vdev *params_vdev,
isp3_param_write(params_vdev, arg->vsize, ISP3X_MI_LUT_CAC_RD_V_SIZE, id);
if (ctrl & ISP3X_CAC_EN)
ctrl |= ISP3X_CAC_LUT_EN | ISP32_SELF_FORCE_UPD | ISP3X_CAC_LUT_MODE(3);
end:
isp3_param_write(params_vdev, ctrl, ISP3X_CAC_CTRL, id);
}
static void
isp_cac_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id)
{
struct rkisp_device *dev = params_vdev->dev;
struct rkisp_isp_params_val_v32 *priv_val;
u32 val;
struct rkisp_isp_params_val_v32 *priv_val = params_vdev->priv_val;
u32 val, ctrl = isp3_param_read(params_vdev, ISP3X_CAC_CTRL, id);
priv_val = (struct rkisp_isp_params_val_v32 *)params_vdev->priv_val;
val = priv_val->buf_cac_idx[id];
if (en && !priv_val->buf_cac[id][val].vaddr) {
dev_err(dev->dev, "no cac buffer allocated\n");
if (en == !!(ctrl & ISP3X_CAC_EN))
return;
}
val = isp3_param_read(params_vdev, ISP3X_CAC_CTRL, id);
val &= ~(ISP3X_CAC_EN | ISP3X_CAC_LUT_EN | ISP32_SELF_FORCE_UPD);
if (en)
val |= ISP3X_CAC_EN | ISP3X_CAC_LUT_EN |
ISP32_SELF_FORCE_UPD | ISP3X_CAC_LUT_MODE(3);
isp3_param_write(params_vdev, val, ISP3X_CAC_CTRL, id);
ctrl &= ~(ISP3X_CAC_EN | ISP3X_CAC_LUT_EN | ISP32_SELF_FORCE_UPD);
if (en) {
ctrl |= ISP3X_CAC_EN;
val = priv_val->buf_cac_idx[id];
if (priv_val->buf_cac[id][val].vaddr)
ctrl |= ISP3X_CAC_LUT_EN |
ISP32_SELF_FORCE_UPD | ISP3X_CAC_LUT_MODE(3);
}
isp3_param_write(params_vdev, ctrl, ISP3X_CAC_CTRL, id);
}
static void

View File

@@ -3482,6 +3482,8 @@ isp_cac_config(struct rkisp_isp_params_vdev *params_vdev,
}
if (i == ISP39_MESH_BUF_NUM) {
if (arg->bypass_en)
goto end;
dev_err(dev->dev, "cannot find cac buf fd(%d)\n", arg->buf_fd);
return;
}
@@ -3505,20 +3507,28 @@ isp_cac_config(struct rkisp_isp_params_vdev *params_vdev,
isp3_param_write(params_vdev, arg->vsize, ISP3X_MI_LUT_CAC_RD_V_SIZE, id);
if (ctrl & ISP3X_CAC_EN)
ctrl |= ISP3X_CAC_LUT_EN | ISP39_SELF_FORCE_UPD | ISP3X_CAC_LUT_MODE(3);
end:
isp3_param_write(params_vdev, ctrl, ISP3X_CAC_CTRL, id);
}
static void
isp_cac_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id)
{
u32 val;
struct rkisp_isp_params_val_v39 *priv_val = params_vdev->priv_val;
u32 val, ctrl = isp3_param_read(params_vdev, ISP3X_CAC_CTRL, id);
val = isp3_param_read(params_vdev, ISP3X_CAC_CTRL, id);
val &= ~(ISP3X_CAC_EN | ISP3X_CAC_LUT_EN | ISP39_SELF_FORCE_UPD);
if (en)
val |= ISP3X_CAC_EN | ISP3X_CAC_LUT_EN |
ISP39_SELF_FORCE_UPD | ISP3X_CAC_LUT_MODE(3);
isp3_param_write(params_vdev, val, ISP3X_CAC_CTRL, id);
if (en == !!(ctrl & ISP3X_CAC_EN))
return;
ctrl &= ~(ISP3X_CAC_EN | ISP3X_CAC_LUT_EN | ISP39_SELF_FORCE_UPD);
if (en) {
ctrl |= ISP3X_CAC_EN;
val = priv_val->buf_cac_idx[id];
if (priv_val->buf_cac[id][val].vaddr)
ctrl |= ISP3X_CAC_LUT_EN |
ISP39_SELF_FORCE_UPD | ISP3X_CAC_LUT_MODE(3);
}
isp3_param_write(params_vdev, ctrl, ISP3X_CAC_CTRL, id);
}
static void

View File

@@ -3609,6 +3609,8 @@ isp_cac_config(struct rkisp_isp_params_vdev *params_vdev,
}
if (i == ISP3X_MESH_BUF_NUM) {
if (arg->bypass_en)
goto end;
dev_err(dev->dev, "cannot find cac buf fd(%d)\n", arg->buf_fd);
return;
}
@@ -3632,19 +3634,27 @@ isp_cac_config(struct rkisp_isp_params_vdev *params_vdev,
isp3_param_write(params_vdev, arg->vsize, ISP3X_MI_LUT_CAC_RD_V_SIZE, id);
if (ctrl & ISP3X_CAC_EN)
ctrl |= ISP3X_CAC_LUT_EN;
end:
isp3_param_write(params_vdev, ctrl, ISP3X_CAC_CTRL, id);
}
static void
isp_cac_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id)
{
u32 val;
struct rkisp_isp_params_val_v3x *priv_val = params_vdev->priv_val;
u32 val, ctrl = isp3_param_read(params_vdev, ISP3X_CAC_CTRL, id);
val = isp3_param_read(params_vdev, ISP3X_CAC_CTRL, id);
val &= ~ISP3X_CAC_EN;
if (en)
val |= ISP3X_CAC_EN | ISP3X_CAC_LUT_EN;
isp3_param_write(params_vdev, val, ISP3X_CAC_CTRL, id);
if (en == !!(ctrl & ISP3X_CAC_EN))
return;
ctrl &= ~(ISP3X_CAC_EN | ISP3X_CAC_LUT_EN | ISP3X_SELF_FORCE_UPD);
if (en) {
ctrl |= ISP3X_CAC_EN;
val = priv_val->buf_cac_idx[id];
if (priv_val->buf_cac[id][val].vaddr)
ctrl |= ISP3X_CAC_LUT_EN;
}
isp3_param_write(params_vdev, ctrl, ISP3X_CAC_CTRL, id);
}
static void