From 4bd2aaeb8a3b46e5eeadbe99dbfac510c60afeff Mon Sep 17 00:00:00 2001 From: Cai YiWei Date: Sat, 21 May 2022 15:19:08 +0800 Subject: [PATCH] media: rockchip: isp: sync params state The configured parameter buf, module_cfg_update will set to 0 for user. ISP2X_MODULE_FORCE BIT(64) for parameter buf to use. Change-Id: I54f867b4ca50ae1ebfbee884b44bbf1a5cfc53b9 Signed-off-by: Cai YiWei --- .../platform/rockchip/isp/isp_params_v21.c | 7 ++++++- .../platform/rockchip/isp/isp_params_v32.c | 7 ++++++- .../platform/rockchip/isp/isp_params_v3x.c | 18 +++++++++++++++--- include/uapi/linux/rkisp2-config.h | 4 +++- include/uapi/linux/rkisp3-config.h | 2 ++ include/uapi/linux/rkisp32-config.h | 2 ++ 6 files changed, 34 insertions(+), 6 deletions(-) diff --git a/drivers/media/platform/rockchip/isp/isp_params_v21.c b/drivers/media/platform/rockchip/isp/isp_params_v21.c index abc795e69717..296fd20db2fc 100644 --- a/drivers/media/platform/rockchip/isp/isp_params_v21.c +++ b/drivers/media/platform/rockchip/isp/isp_params_v21.c @@ -4081,10 +4081,14 @@ rkisp_params_cfg_v2x(struct rkisp_isp_params_vdev *params_vdev, list_del(&cur_buf->queue); if (list_empty(¶ms_vdev->params)) break; - else if (new_params->module_en_update) { + else if (new_params->module_en_update || + (new_params->module_cfg_update & ISP2X_MODULE_FORCE)) { /* update en immediately */ + __isp_isr_meas_config(params_vdev, new_params, type); + __isp_isr_other_config(params_vdev, new_params, type); __isp_isr_other_en(params_vdev, new_params, type); __isp_isr_meas_en(params_vdev, new_params, type); + new_params->module_cfg_update = 0; } if (new_params->module_cfg_update & ISP2X_MODULE_LDCH) ldch_data_abandon(params_vdev, new_params); @@ -4118,6 +4122,7 @@ rkisp_params_cfg_v2x(struct rkisp_isp_params_vdev *params_vdev, priv_val->last_hdrdrc = priv_val->cur_hdrdrc; priv_val->cur_hdrmge = new_params->others.hdrmge_cfg; priv_val->cur_hdrdrc = new_params->others.drc_cfg; + new_params->module_cfg_update = 0; vb2_buffer_done(&cur_buf->vb.vb2_buf, VB2_BUF_STATE_DONE); cur_buf = NULL; } diff --git a/drivers/media/platform/rockchip/isp/isp_params_v32.c b/drivers/media/platform/rockchip/isp/isp_params_v32.c index 5292b4150d5b..51c8f1438c5a 100644 --- a/drivers/media/platform/rockchip/isp/isp_params_v32.c +++ b/drivers/media/platform/rockchip/isp/isp_params_v32.c @@ -4607,10 +4607,14 @@ rkisp_params_cfg_v32(struct rkisp_isp_params_vdev *params_vdev, list_del(&cur_buf->queue); if (list_empty(¶ms_vdev->params)) break; - else if (new_params->module_en_update) { + else if (new_params->module_en_update || + (new_params->module_cfg_update & ISP32_MODULE_FORCE)) { /* update en immediately */ + __isp_isr_meas_config(params_vdev, new_params, type); + __isp_isr_other_config(params_vdev, new_params, type); __isp_isr_other_en(params_vdev, new_params, type); __isp_isr_meas_en(params_vdev, new_params, type); + new_params->module_cfg_update = 0; } if (new_params->module_cfg_update & (ISP32_MODULE_LDCH | ISP32_MODULE_CAC)) { @@ -4646,6 +4650,7 @@ rkisp_params_cfg_v32(struct rkisp_isp_params_vdev *params_vdev, priv_val->last_hdrdrc = priv_val->cur_hdrdrc; priv_val->cur_hdrmge = new_params->others.hdrmge_cfg; priv_val->cur_hdrdrc = new_params->others.drc_cfg; + new_params->module_cfg_update = 0; vb2_buffer_done(&cur_buf->vb.vb2_buf, VB2_BUF_STATE_DONE); cur_buf = NULL; } diff --git a/drivers/media/platform/rockchip/isp/isp_params_v3x.c b/drivers/media/platform/rockchip/isp/isp_params_v3x.c index a346e63fb41c..ebb815f7cdce 100644 --- a/drivers/media/platform/rockchip/isp/isp_params_v3x.c +++ b/drivers/media/platform/rockchip/isp/isp_params_v3x.c @@ -4552,13 +4552,22 @@ rkisp_params_cfg_v3x(struct rkisp_isp_params_vdev *params_vdev, list_del(&cur_buf->queue); if (list_empty(¶ms_vdev->params)) break; - else if (new_params->module_en_update) { + else if (new_params->module_en_update || + (new_params->module_cfg_update & ISP3X_MODULE_FORCE)) { /* update en immediately */ + __isp_isr_meas_config(params_vdev, new_params, type, 0); + __isp_isr_other_config(params_vdev, new_params, type, 0); __isp_isr_other_en(params_vdev, new_params, type, 0); __isp_isr_meas_en(params_vdev, new_params, type, 0); + new_params->module_cfg_update = 0; if (hw_dev->is_unite) { - __isp_isr_other_en(params_vdev, new_params + 1, type, 1); - __isp_isr_meas_en(params_vdev, new_params + 1, type, 1); + struct isp3x_isp_params_cfg *params = new_params + 1; + + __isp_isr_meas_config(params_vdev, params, type, 1); + __isp_isr_other_config(params_vdev, params, type, 1); + __isp_isr_other_en(params_vdev, params, type, 1); + __isp_isr_meas_en(params_vdev, params, type, 1); + params->module_cfg_update = 0; } } if (new_params->module_cfg_update & @@ -4603,6 +4612,9 @@ rkisp_params_cfg_v3x(struct rkisp_isp_params_vdev *params_vdev, priv_val->last_hdrdrc = priv_val->cur_hdrdrc; priv_val->cur_hdrmge = new_params->others.hdrmge_cfg; priv_val->cur_hdrdrc = new_params->others.drc_cfg; + new_params->module_cfg_update = 0; + if (hw_dev->is_unite) + (new_params++)->module_cfg_update = 0; vb2_buffer_done(&cur_buf->vb.vb2_buf, VB2_BUF_STATE_DONE); cur_buf = NULL; } diff --git a/include/uapi/linux/rkisp2-config.h b/include/uapi/linux/rkisp2-config.h index a7bd1c2c00e6..1ca74572793a 100644 --- a/include/uapi/linux/rkisp2-config.h +++ b/include/uapi/linux/rkisp2-config.h @@ -121,7 +121,7 @@ #define ISP2X_ID_LDCH (33) #define ISP2X_ID_GAIN (34) #define ISP2X_ID_DEBAYER (35) -#define ISP2X_ID_MAX (36) +#define ISP2X_ID_MAX (63) #define ISP2X_MODULE_DPCC BIT_ULL(ISP2X_ID_DPCC) #define ISP2X_MODULE_BLS BIT_ULL(ISP2X_ID_BLS) @@ -159,6 +159,8 @@ #define ISP2X_MODULE_GAIN BIT_ULL(ISP2X_ID_GAIN) #define ISP2X_MODULE_DEBAYER BIT_ULL(ISP2X_ID_DEBAYER) +#define ISP2X_MODULE_FORCE BIT_ULL(ISP2X_ID_MAX) + /* * Measurement types */ diff --git a/include/uapi/linux/rkisp3-config.h b/include/uapi/linux/rkisp3-config.h index 352e446f872b..1ea2a910385c 100644 --- a/include/uapi/linux/rkisp3-config.h +++ b/include/uapi/linux/rkisp3-config.h @@ -49,6 +49,8 @@ #define ISP3X_MODULE_CSM ISP2X_MODULE_CSM #define ISP3X_MODULE_CGC ISP2X_MODULE_CGC +#define ISP3X_MODULE_FORCE ISP2X_MODULE_FORCE + /* Measurement types */ #define ISP3X_STAT_RAWAWB ISP2X_STAT_RAWAWB #define ISP3X_STAT_RAWAF ISP2X_STAT_RAWAF diff --git a/include/uapi/linux/rkisp32-config.h b/include/uapi/linux/rkisp32-config.h index 663ced612d45..17a49168cb6c 100644 --- a/include/uapi/linux/rkisp32-config.h +++ b/include/uapi/linux/rkisp32-config.h @@ -50,6 +50,8 @@ #define ISP32_MODULE_CGC ISP3X_MODULE_CGC #define ISP32_MODULE_VSM BIT_ULL(45) +#define ISP32_MODULE_FORCE ISP3X_MODULE_FORCE + /* Measurement types */ #define ISP32_STAT_RAWAWB ISP3X_STAT_RAWAWB #define ISP32_STAT_RAWAF ISP3X_STAT_RAWAF