From e4b5ad1093bea66230d4c4e28d877789bdd889c5 Mon Sep 17 00:00:00 2001 From: Hu Kejun Date: Tue, 27 Mar 2018 18:46:15 +0800 Subject: [PATCH] media: rockchip: isp1: fix config lsc error LSC data table size is 17x17, but when configuring data to ISP, should be aligned to 18x17. That means every last data of last line should be filled with 0, and not filled with the data of next line. BUG=b:36227021 TEST=scarlet can preview. Change-Id: I5e923529429a1c60efff3827e594f32db7112c1f Signed-off-by: ZhongYiChong Change-Id: Ib7805802fe616635c524ce2b17812cde3012b81a Signed-off-by: Hu Kejun --- .../media/platform/rockchip/isp1/isp_params.c | 26 +++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/drivers/media/platform/rockchip/isp1/isp_params.c b/drivers/media/platform/rockchip/isp1/isp_params.c index 2530cc604114..136e2393d714 100644 --- a/drivers/media/platform/rockchip/isp1/isp_params.c +++ b/drivers/media/platform/rockchip/isp1/isp_params.c @@ -243,7 +243,7 @@ __lsc_correct_matrix_config(struct rkisp1_isp_params_vdev *params_vdev, * 17 sectors with 2 values in one DWORD = 9 * DWORDs (2nd value of last DWORD unused) */ - for (j = 0; j < (CIF_ISP_LSC_SECTORS_MAX + 1); j += 2) { + for (j = 0; j < (CIF_ISP_LSC_SECTORS_MAX); j += 2) { data = CIF_ISP_LSC_TABLE_DATA( pconfig->r_data_tbl[i + j], pconfig->r_data_tbl[i + j + 1]); @@ -268,8 +268,30 @@ __lsc_correct_matrix_config(struct rkisp1_isp_params_vdev *params_vdev, rkisp1_iowrite32(params_vdev, data, CIF_ISP_LSC_B_TABLE_DATA); } - } + data = CIF_ISP_LSC_TABLE_DATA( + pconfig->r_data_tbl[i + CIF_ISP_LSC_SECTORS_MAX], + 0); + rkisp1_iowrite32(params_vdev, data, + CIF_ISP_LSC_R_TABLE_DATA); + data = CIF_ISP_LSC_TABLE_DATA( + pconfig->gr_data_tbl[i + CIF_ISP_LSC_SECTORS_MAX], + 0); + rkisp1_iowrite32(params_vdev, data, + CIF_ISP_LSC_GR_TABLE_DATA); + + data = CIF_ISP_LSC_TABLE_DATA( + pconfig->gb_data_tbl[i + CIF_ISP_LSC_SECTORS_MAX], + 0); + rkisp1_iowrite32(params_vdev, data, + CIF_ISP_LSC_GB_TABLE_DATA); + + data = CIF_ISP_LSC_TABLE_DATA( + pconfig->b_data_tbl[i + CIF_ISP_LSC_SECTORS_MAX], + 0); + rkisp1_iowrite32(params_vdev, data, + CIF_ISP_LSC_B_TABLE_DATA); + } isp_lsc_table_sel = (isp_lsc_status & CIF_ISP_LSC_ACTIVE_TABLE) ? CIF_ISP_LSC_TABLE_0 : CIF_ISP_LSC_TABLE_1; rkisp1_iowrite32(params_vdev, isp_lsc_table_sel, CIF_ISP_LSC_TABLE_SEL);