From ca3a31fb5d3c58b1632cd0e08a72e64d53cfe885 Mon Sep 17 00:00:00 2001 From: ZhongYiChong Date: Thu, 1 Mar 2018 16:07:39 +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 Reviewed-on: https://chromium-review.googlesource.com/942600 Commit-Ready: Jeffy Chen Tested-by: Jeffy Chen Reviewed-by: Tomasz Figa --- .../media/platform/rockchip/isp1/isp_params.c | 30 +++++++++---------- drivers/media/platform/rockchip/isp1/regs.h | 2 +- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/drivers/media/platform/rockchip/isp1/isp_params.c b/drivers/media/platform/rockchip/isp1/isp_params.c index 84a1e7ffbfde..0bb564513f44 100644 --- a/drivers/media/platform/rockchip/isp1/isp_params.c +++ b/drivers/media/platform/rockchip/isp1/isp_params.c @@ -243,14 +243,13 @@ __lsc_correct_matrix_config(struct rkisp1_isp_params_vdev *params_vdev, rkisp1_iowrite32(params_vdev, sram_addr, CIF_ISP_LSC_B_TABLE_ADDR); /* program data tables (table size is 9 * 17 = 153) */ - for (i = 0; i < ((CIF_ISP_LSC_SECTORS_MAX + 1) * - (CIF_ISP_LSC_SECTORS_MAX + 1)); - i += CIF_ISP_LSC_SECTORS_MAX + 1) { + for (i = 0; i < CIF_ISP_LSC_SECTORS_MAX * CIF_ISP_LSC_SECTORS_MAX; + i += CIF_ISP_LSC_SECTORS_MAX) { /* * 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); j += 2) { + for (j = 0; j < CIF_ISP_LSC_SECTORS_MAX - 1; j += 2) { data = CIF_ISP_LSC_TABLE_DATA( pconfig->r_data_tbl[i + j], pconfig->r_data_tbl[i + j + 1]); @@ -275,29 +274,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], + pconfig->r_data_tbl[i + j], 0); rkisp1_iowrite32(params_vdev, data, - CIF_ISP_LSC_GR_TABLE_DATA); + CIF_ISP_LSC_R_TABLE_DATA); data = CIF_ISP_LSC_TABLE_DATA( - pconfig->gb_data_tbl[i + CIF_ISP_LSC_SECTORS_MAX], + pconfig->gr_data_tbl[i + j], 0); rkisp1_iowrite32(params_vdev, data, - CIF_ISP_LSC_GB_TABLE_DATA); + CIF_ISP_LSC_GR_TABLE_DATA); data = CIF_ISP_LSC_TABLE_DATA( - pconfig->b_data_tbl[i + CIF_ISP_LSC_SECTORS_MAX], + pconfig->gb_data_tbl[i + j], 0); rkisp1_iowrite32(params_vdev, data, - CIF_ISP_LSC_B_TABLE_DATA); + CIF_ISP_LSC_GB_TABLE_DATA); + + data = CIF_ISP_LSC_TABLE_DATA( + pconfig->b_data_tbl[i + j], + 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; diff --git a/drivers/media/platform/rockchip/isp1/regs.h b/drivers/media/platform/rockchip/isp1/regs.h index b2495fa80ba7..53977bc7e879 100644 --- a/drivers/media/platform/rockchip/isp1/regs.h +++ b/drivers/media/platform/rockchip/isp1/regs.h @@ -504,7 +504,7 @@ #define CIF_ISP_LSC_SECT_SIZE_RESERVED 0xFC00FC00 #define CIF_ISP_LSC_GRAD_RESERVED 0xF000F000 #define CIF_ISP_LSC_SAMPLE_RESERVED 0xF000F000 -#define CIF_ISP_LSC_SECTORS_MAX 16 +#define CIF_ISP_LSC_SECTORS_MAX 17 #define CIF_ISP_LSC_TABLE_DATA(v0, v1) \ (((v0) & 0xFFF) | (((v1) & 0xFFF) << 12)) #define CIF_ISP_LSC_SECT_SIZE(v0, v1) \