media: rockchip: isp: config bls1 and bls2 black level

ob offset not equal to zero will auto enable bls1 and bls2

Change-Id: I1b0099ca1047eb05b12d8bb745646e322e093e90
Signed-off-by: Cai YiWei <cyw@rock-chips.com>
This commit is contained in:
Cai YiWei
2024-08-01 11:26:28 +08:00
committed by Tao Huang
parent 074c3535a6
commit e104bbb1bc
2 changed files with 106 additions and 112 deletions

View File

@@ -326,36 +326,34 @@ isp_bls_config(struct rkisp_isp_params_vdev *params_vdev,
new_control &= (ISP_BLS_ENA | ISP32_BLS_BLS2_EN);
pval = &arg->bls1_val;
if (arg->bls1_en) {
if (arg->bls1_en)
new_control |= ISP_BLS_BLS1_EN;
switch (params_vdev->raw_type) {
case RAW_BGGR:
isp3_param_write(params_vdev, pval->r, ISP3X_BLS1_D_FIXED, id);
isp3_param_write(params_vdev, pval->gr, ISP3X_BLS1_C_FIXED, id);
isp3_param_write(params_vdev, pval->gb, ISP3X_BLS1_B_FIXED, id);
isp3_param_write(params_vdev, pval->b, ISP3X_BLS1_A_FIXED, id);
break;
case RAW_GBRG:
isp3_param_write(params_vdev, pval->r, ISP3X_BLS1_C_FIXED, id);
isp3_param_write(params_vdev, pval->gr, ISP3X_BLS1_D_FIXED, id);
isp3_param_write(params_vdev, pval->gb, ISP3X_BLS1_A_FIXED, id);
isp3_param_write(params_vdev, pval->b, ISP3X_BLS1_B_FIXED, id);
break;
case RAW_GRBG:
isp3_param_write(params_vdev, pval->r, ISP3X_BLS1_B_FIXED, id);
isp3_param_write(params_vdev, pval->gr, ISP3X_BLS1_A_FIXED, id);
isp3_param_write(params_vdev, pval->gb, ISP3X_BLS1_D_FIXED, id);
isp3_param_write(params_vdev, pval->b, ISP3X_BLS1_C_FIXED, id);
break;
case RAW_RGGB:
default:
isp3_param_write(params_vdev, pval->r, ISP3X_BLS1_A_FIXED, id);
isp3_param_write(params_vdev, pval->gr, ISP3X_BLS1_B_FIXED, id);
isp3_param_write(params_vdev, pval->gb, ISP3X_BLS1_C_FIXED, id);
isp3_param_write(params_vdev, pval->b, ISP3X_BLS1_D_FIXED, id);
break;
}
switch (params_vdev->raw_type) {
case RAW_BGGR:
isp3_param_write(params_vdev, pval->r, ISP3X_BLS1_D_FIXED, id);
isp3_param_write(params_vdev, pval->gr, ISP3X_BLS1_C_FIXED, id);
isp3_param_write(params_vdev, pval->gb, ISP3X_BLS1_B_FIXED, id);
isp3_param_write(params_vdev, pval->b, ISP3X_BLS1_A_FIXED, id);
break;
case RAW_GBRG:
isp3_param_write(params_vdev, pval->r, ISP3X_BLS1_C_FIXED, id);
isp3_param_write(params_vdev, pval->gr, ISP3X_BLS1_D_FIXED, id);
isp3_param_write(params_vdev, pval->gb, ISP3X_BLS1_A_FIXED, id);
isp3_param_write(params_vdev, pval->b, ISP3X_BLS1_B_FIXED, id);
break;
case RAW_GRBG:
isp3_param_write(params_vdev, pval->r, ISP3X_BLS1_B_FIXED, id);
isp3_param_write(params_vdev, pval->gr, ISP3X_BLS1_A_FIXED, id);
isp3_param_write(params_vdev, pval->gb, ISP3X_BLS1_D_FIXED, id);
isp3_param_write(params_vdev, pval->b, ISP3X_BLS1_C_FIXED, id);
break;
case RAW_RGGB:
default:
isp3_param_write(params_vdev, pval->r, ISP3X_BLS1_A_FIXED, id);
isp3_param_write(params_vdev, pval->gr, ISP3X_BLS1_B_FIXED, id);
isp3_param_write(params_vdev, pval->gb, ISP3X_BLS1_C_FIXED, id);
isp3_param_write(params_vdev, pval->b, ISP3X_BLS1_D_FIXED, id);
break;
}
/* fixed subtraction values */
@@ -1599,34 +1597,33 @@ isp_rawawb_config(struct rkisp_isp_params_vdev *params_vdev,
value = isp3_param_read(params_vdev, ISP3X_BLS_CTRL, id);
value &= ~ISP32_BLS_BLS2_EN;
if (arg->bls2_en) {
switch (params_vdev->raw_type) {
case RAW_BGGR:
isp3_param_write(params_vdev, pval->r, ISP32_BLS2_D_FIXED, id);
isp3_param_write(params_vdev, pval->gr, ISP32_BLS2_C_FIXED, id);
isp3_param_write(params_vdev, pval->gb, ISP32_BLS2_B_FIXED, id);
isp3_param_write(params_vdev, pval->b, ISP32_BLS2_A_FIXED, id);
break;
case RAW_GBRG:
isp3_param_write(params_vdev, pval->r, ISP32_BLS2_C_FIXED, id);
isp3_param_write(params_vdev, pval->gr, ISP32_BLS2_D_FIXED, id);
isp3_param_write(params_vdev, pval->gb, ISP32_BLS2_A_FIXED, id);
isp3_param_write(params_vdev, pval->b, ISP32_BLS2_B_FIXED, id);
break;
case RAW_GRBG:
isp3_param_write(params_vdev, pval->r, ISP32_BLS2_B_FIXED, id);
isp3_param_write(params_vdev, pval->gr, ISP32_BLS2_A_FIXED, id);
isp3_param_write(params_vdev, pval->gb, ISP32_BLS2_D_FIXED, id);
isp3_param_write(params_vdev, pval->b, ISP32_BLS2_C_FIXED, id);
break;
case RAW_RGGB:
default:
isp3_param_write(params_vdev, pval->r, ISP32_BLS2_A_FIXED, id);
isp3_param_write(params_vdev, pval->gr, ISP32_BLS2_B_FIXED, id);
isp3_param_write(params_vdev, pval->gb, ISP32_BLS2_C_FIXED, id);
isp3_param_write(params_vdev, pval->b, ISP32_BLS2_D_FIXED, id);
}
if (arg->bls2_en)
value |= ISP32_BLS_BLS2_EN;
switch (params_vdev->raw_type) {
case RAW_BGGR:
isp3_param_write(params_vdev, pval->r, ISP32_BLS2_D_FIXED, id);
isp3_param_write(params_vdev, pval->gr, ISP32_BLS2_C_FIXED, id);
isp3_param_write(params_vdev, pval->gb, ISP32_BLS2_B_FIXED, id);
isp3_param_write(params_vdev, pval->b, ISP32_BLS2_A_FIXED, id);
break;
case RAW_GBRG:
isp3_param_write(params_vdev, pval->r, ISP32_BLS2_C_FIXED, id);
isp3_param_write(params_vdev, pval->gr, ISP32_BLS2_D_FIXED, id);
isp3_param_write(params_vdev, pval->gb, ISP32_BLS2_A_FIXED, id);
isp3_param_write(params_vdev, pval->b, ISP32_BLS2_B_FIXED, id);
break;
case RAW_GRBG:
isp3_param_write(params_vdev, pval->r, ISP32_BLS2_B_FIXED, id);
isp3_param_write(params_vdev, pval->gr, ISP32_BLS2_A_FIXED, id);
isp3_param_write(params_vdev, pval->gb, ISP32_BLS2_D_FIXED, id);
isp3_param_write(params_vdev, pval->b, ISP32_BLS2_C_FIXED, id);
break;
case RAW_RGGB:
default:
isp3_param_write(params_vdev, pval->r, ISP32_BLS2_A_FIXED, id);
isp3_param_write(params_vdev, pval->gr, ISP32_BLS2_B_FIXED, id);
isp3_param_write(params_vdev, pval->gb, ISP32_BLS2_C_FIXED, id);
isp3_param_write(params_vdev, pval->b, ISP32_BLS2_D_FIXED, id);
}
isp3_param_write(params_vdev, value, ISP3X_BLS_CTRL, id);

View File

@@ -312,36 +312,34 @@ isp_bls_config(struct rkisp_isp_params_vdev *params_vdev,
new_control &= (ISP_BLS_ENA | ISP32_BLS_BLS2_EN);
pval = &arg->bls1_val;
if (arg->bls1_en) {
if (arg->bls1_en)
new_control |= ISP_BLS_BLS1_EN;
switch (params_vdev->raw_type) {
case RAW_BGGR:
isp3_param_write(params_vdev, pval->r, ISP3X_BLS1_D_FIXED, id);
isp3_param_write(params_vdev, pval->gr, ISP3X_BLS1_C_FIXED, id);
isp3_param_write(params_vdev, pval->gb, ISP3X_BLS1_B_FIXED, id);
isp3_param_write(params_vdev, pval->b, ISP3X_BLS1_A_FIXED, id);
break;
case RAW_GBRG:
isp3_param_write(params_vdev, pval->r, ISP3X_BLS1_C_FIXED, id);
isp3_param_write(params_vdev, pval->gr, ISP3X_BLS1_D_FIXED, id);
isp3_param_write(params_vdev, pval->gb, ISP3X_BLS1_A_FIXED, id);
isp3_param_write(params_vdev, pval->b, ISP3X_BLS1_B_FIXED, id);
break;
case RAW_GRBG:
isp3_param_write(params_vdev, pval->r, ISP3X_BLS1_B_FIXED, id);
isp3_param_write(params_vdev, pval->gr, ISP3X_BLS1_A_FIXED, id);
isp3_param_write(params_vdev, pval->gb, ISP3X_BLS1_D_FIXED, id);
isp3_param_write(params_vdev, pval->b, ISP3X_BLS1_C_FIXED, id);
break;
case RAW_RGGB:
default:
isp3_param_write(params_vdev, pval->r, ISP3X_BLS1_A_FIXED, id);
isp3_param_write(params_vdev, pval->gr, ISP3X_BLS1_B_FIXED, id);
isp3_param_write(params_vdev, pval->gb, ISP3X_BLS1_C_FIXED, id);
isp3_param_write(params_vdev, pval->b, ISP3X_BLS1_D_FIXED, id);
break;
}
switch (params_vdev->raw_type) {
case RAW_BGGR:
isp3_param_write(params_vdev, pval->r, ISP3X_BLS1_D_FIXED, id);
isp3_param_write(params_vdev, pval->gr, ISP3X_BLS1_C_FIXED, id);
isp3_param_write(params_vdev, pval->gb, ISP3X_BLS1_B_FIXED, id);
isp3_param_write(params_vdev, pval->b, ISP3X_BLS1_A_FIXED, id);
break;
case RAW_GBRG:
isp3_param_write(params_vdev, pval->r, ISP3X_BLS1_C_FIXED, id);
isp3_param_write(params_vdev, pval->gr, ISP3X_BLS1_D_FIXED, id);
isp3_param_write(params_vdev, pval->gb, ISP3X_BLS1_A_FIXED, id);
isp3_param_write(params_vdev, pval->b, ISP3X_BLS1_B_FIXED, id);
break;
case RAW_GRBG:
isp3_param_write(params_vdev, pval->r, ISP3X_BLS1_B_FIXED, id);
isp3_param_write(params_vdev, pval->gr, ISP3X_BLS1_A_FIXED, id);
isp3_param_write(params_vdev, pval->gb, ISP3X_BLS1_D_FIXED, id);
isp3_param_write(params_vdev, pval->b, ISP3X_BLS1_C_FIXED, id);
break;
case RAW_RGGB:
default:
isp3_param_write(params_vdev, pval->r, ISP3X_BLS1_A_FIXED, id);
isp3_param_write(params_vdev, pval->gr, ISP3X_BLS1_B_FIXED, id);
isp3_param_write(params_vdev, pval->gb, ISP3X_BLS1_C_FIXED, id);
isp3_param_write(params_vdev, pval->b, ISP3X_BLS1_D_FIXED, id);
break;
}
/* fixed subtraction values */
@@ -1284,34 +1282,33 @@ isp_rawawb_config(struct rkisp_isp_params_vdev *params_vdev,
value = isp3_param_read(params_vdev, ISP3X_BLS_CTRL, id);
value &= ~ISP32_BLS_BLS2_EN;
if (arg->bls2_en) {
switch (params_vdev->raw_type) {
case RAW_BGGR:
isp3_param_write(params_vdev, pval->r, ISP32_BLS2_D_FIXED, id);
isp3_param_write(params_vdev, pval->gr, ISP32_BLS2_C_FIXED, id);
isp3_param_write(params_vdev, pval->gb, ISP32_BLS2_B_FIXED, id);
isp3_param_write(params_vdev, pval->b, ISP32_BLS2_A_FIXED, id);
break;
case RAW_GBRG:
isp3_param_write(params_vdev, pval->r, ISP32_BLS2_C_FIXED, id);
isp3_param_write(params_vdev, pval->gr, ISP32_BLS2_D_FIXED, id);
isp3_param_write(params_vdev, pval->gb, ISP32_BLS2_A_FIXED, id);
isp3_param_write(params_vdev, pval->b, ISP32_BLS2_B_FIXED, id);
break;
case RAW_GRBG:
isp3_param_write(params_vdev, pval->r, ISP32_BLS2_B_FIXED, id);
isp3_param_write(params_vdev, pval->gr, ISP32_BLS2_A_FIXED, id);
isp3_param_write(params_vdev, pval->gb, ISP32_BLS2_D_FIXED, id);
isp3_param_write(params_vdev, pval->b, ISP32_BLS2_C_FIXED, id);
break;
case RAW_RGGB:
default:
isp3_param_write(params_vdev, pval->r, ISP32_BLS2_A_FIXED, id);
isp3_param_write(params_vdev, pval->gr, ISP32_BLS2_B_FIXED, id);
isp3_param_write(params_vdev, pval->gb, ISP32_BLS2_C_FIXED, id);
isp3_param_write(params_vdev, pval->b, ISP32_BLS2_D_FIXED, id);
}
if (arg->bls2_en)
value |= ISP32_BLS_BLS2_EN;
switch (params_vdev->raw_type) {
case RAW_BGGR:
isp3_param_write(params_vdev, pval->r, ISP32_BLS2_D_FIXED, id);
isp3_param_write(params_vdev, pval->gr, ISP32_BLS2_C_FIXED, id);
isp3_param_write(params_vdev, pval->gb, ISP32_BLS2_B_FIXED, id);
isp3_param_write(params_vdev, pval->b, ISP32_BLS2_A_FIXED, id);
break;
case RAW_GBRG:
isp3_param_write(params_vdev, pval->r, ISP32_BLS2_C_FIXED, id);
isp3_param_write(params_vdev, pval->gr, ISP32_BLS2_D_FIXED, id);
isp3_param_write(params_vdev, pval->gb, ISP32_BLS2_A_FIXED, id);
isp3_param_write(params_vdev, pval->b, ISP32_BLS2_B_FIXED, id);
break;
case RAW_GRBG:
isp3_param_write(params_vdev, pval->r, ISP32_BLS2_B_FIXED, id);
isp3_param_write(params_vdev, pval->gr, ISP32_BLS2_A_FIXED, id);
isp3_param_write(params_vdev, pval->gb, ISP32_BLS2_D_FIXED, id);
isp3_param_write(params_vdev, pval->b, ISP32_BLS2_C_FIXED, id);
break;
case RAW_RGGB:
default:
isp3_param_write(params_vdev, pval->r, ISP32_BLS2_A_FIXED, id);
isp3_param_write(params_vdev, pval->gr, ISP32_BLS2_B_FIXED, id);
isp3_param_write(params_vdev, pval->gb, ISP32_BLS2_C_FIXED, id);
isp3_param_write(params_vdev, pval->b, ISP32_BLS2_D_FIXED, id);
}
isp3_param_write(params_vdev, value, ISP3X_BLS_CTRL, id);