.. | .. |
---|
3324 | 3324 | isp_csm_config(struct rkisp_isp_params_vdev *params_vdev, |
---|
3325 | 3325 | const struct isp21_csm_cfg *arg) |
---|
3326 | 3326 | { |
---|
3327 | | - u32 i, val, eff_ctrl, cproc_ctrl; |
---|
| 3327 | + u32 i, val; |
---|
3328 | 3328 | |
---|
3329 | 3329 | for (i = 0; i < ISP21_CSM_COEFF_NUM; i++) { |
---|
3330 | 3330 | if (i == 0) |
---|
.. | .. |
---|
3337 | 3337 | } |
---|
3338 | 3338 | |
---|
3339 | 3339 | val = CIF_ISP_CTRL_ISP_CSM_Y_FULL_ENA | CIF_ISP_CTRL_ISP_CSM_C_FULL_ENA; |
---|
3340 | | - if (arg->csm_full_range) { |
---|
3341 | | - params_vdev->quantization = V4L2_QUANTIZATION_FULL_RANGE; |
---|
3342 | | - isp_param_set_bits(params_vdev, ISP_CTRL, val); |
---|
3343 | | - } else { |
---|
3344 | | - params_vdev->quantization = V4L2_QUANTIZATION_LIM_RANGE; |
---|
3345 | | - isp_param_clear_bits(params_vdev, ISP_CTRL, val); |
---|
3346 | | - } |
---|
3347 | | - |
---|
3348 | | - eff_ctrl = rkisp_ioread32(params_vdev, CIF_IMG_EFF_CTRL); |
---|
3349 | | - if (eff_ctrl & CIF_IMG_EFF_CTRL_ENABLE) { |
---|
3350 | | - if (arg->csm_full_range) |
---|
3351 | | - eff_ctrl |= CIF_IMG_EFF_CTRL_YCBCR_FULL; |
---|
3352 | | - else |
---|
3353 | | - eff_ctrl &= ~CIF_IMG_EFF_CTRL_YCBCR_FULL; |
---|
3354 | | - rkisp_iowrite32(params_vdev, eff_ctrl, CIF_IMG_EFF_CTRL); |
---|
3355 | | - } |
---|
3356 | | - |
---|
3357 | | - cproc_ctrl = rkisp_ioread32(params_vdev, CPROC_CTRL); |
---|
3358 | | - if (cproc_ctrl & CIF_C_PROC_CTR_ENABLE) { |
---|
3359 | | - val = CIF_C_PROC_YOUT_FULL | CIF_C_PROC_YIN_FULL | CIF_C_PROC_COUT_FULL; |
---|
3360 | | - if (eff_ctrl & CIF_IMG_EFF_CTRL_ENABLE || !arg->csm_full_range) |
---|
3361 | | - cproc_ctrl &= ~val; |
---|
3362 | | - else |
---|
3363 | | - cproc_ctrl |= val; |
---|
3364 | | - rkisp_iowrite32(params_vdev, cproc_ctrl, CPROC_CTRL); |
---|
3365 | | - } |
---|
| 3340 | + isp_param_set_bits(params_vdev, ISP_CTRL, val); |
---|
3366 | 3341 | } |
---|
3367 | 3342 | |
---|
3368 | 3343 | static void |
---|
.. | .. |
---|
3370 | 3345 | const struct isp21_cgc_cfg *arg) |
---|
3371 | 3346 | { |
---|
3372 | 3347 | u32 val = rkisp_ioread32(params_vdev, ISP_CTRL); |
---|
| 3348 | + u32 eff_ctrl, cproc_ctrl; |
---|
3373 | 3349 | |
---|
| 3350 | + params_vdev->quantization = V4L2_QUANTIZATION_FULL_RANGE; |
---|
3374 | 3351 | val &= ~(ISP21_CGC_YUV_LIMIT | ISP21_CGC_RATIO_EN); |
---|
3375 | | - if (arg->yuv_limit) |
---|
| 3352 | + if (arg->yuv_limit) { |
---|
3376 | 3353 | val |= ISP21_CGC_YUV_LIMIT; |
---|
| 3354 | + params_vdev->quantization = V4L2_QUANTIZATION_LIM_RANGE; |
---|
| 3355 | + } |
---|
3377 | 3356 | if (arg->ratio_en) |
---|
3378 | 3357 | val |= ISP21_CGC_RATIO_EN; |
---|
3379 | 3358 | rkisp_iowrite32(params_vdev, val, ISP_CTRL); |
---|
| 3359 | + |
---|
| 3360 | + cproc_ctrl = rkisp_ioread32(params_vdev, CPROC_CTRL); |
---|
| 3361 | + if (cproc_ctrl & CIF_C_PROC_CTR_ENABLE) { |
---|
| 3362 | + val = CIF_C_PROC_YOUT_FULL | CIF_C_PROC_YIN_FULL | CIF_C_PROC_COUT_FULL; |
---|
| 3363 | + if (arg->yuv_limit) |
---|
| 3364 | + cproc_ctrl &= ~val; |
---|
| 3365 | + else |
---|
| 3366 | + cproc_ctrl |= val; |
---|
| 3367 | + rkisp_iowrite32(params_vdev, cproc_ctrl, CPROC_CTRL); |
---|
| 3368 | + } |
---|
| 3369 | + |
---|
| 3370 | + eff_ctrl = rkisp_ioread32(params_vdev, CIF_IMG_EFF_CTRL); |
---|
| 3371 | + if (eff_ctrl & CIF_IMG_EFF_CTRL_ENABLE) { |
---|
| 3372 | + if (arg->yuv_limit) |
---|
| 3373 | + eff_ctrl &= ~CIF_IMG_EFF_CTRL_YCBCR_FULL; |
---|
| 3374 | + else |
---|
| 3375 | + eff_ctrl |= CIF_IMG_EFF_CTRL_YCBCR_FULL; |
---|
| 3376 | + rkisp_iowrite32(params_vdev, eff_ctrl, CIF_IMG_EFF_CTRL); |
---|
| 3377 | + } |
---|
3380 | 3378 | } |
---|
3381 | 3379 | |
---|
3382 | 3380 | struct rkisp_isp_params_v21_ops rkisp_v21_isp_params_ops = { |
---|
.. | .. |
---|
3488 | 3486 | if ((module_cfg_update & ISP2X_MODULE_GOC)) |
---|
3489 | 3487 | ops->goc_config(params_vdev, &new_params->others.gammaout_cfg); |
---|
3490 | 3488 | |
---|
3491 | | - if ((module_cfg_update & ISP2X_MODULE_CGC)) |
---|
3492 | | - ops->cgc_config(params_vdev, &new_params->others.cgc_cfg); |
---|
3493 | | - |
---|
| 3489 | + /* range csm->cgc->cproc->ie */ |
---|
3494 | 3490 | if ((module_cfg_update & ISP2X_MODULE_CSM)) |
---|
3495 | 3491 | ops->csm_config(params_vdev, &new_params->others.csm_cfg); |
---|
| 3492 | + |
---|
| 3493 | + if ((module_cfg_update & ISP2X_MODULE_CGC)) |
---|
| 3494 | + ops->cgc_config(params_vdev, &new_params->others.cgc_cfg); |
---|
3496 | 3495 | |
---|
3497 | 3496 | if ((module_cfg_update & ISP2X_MODULE_CPROC)) |
---|
3498 | 3497 | ops->cproc_config(params_vdev, &new_params->others.cproc_cfg); |
---|
.. | .. |
---|
3649 | 3648 | (struct rkisp_isp_params_v21_ops *)params_vdev->priv_ops; |
---|
3650 | 3649 | u64 module_cfg_update = new_params->module_cfg_update; |
---|
3651 | 3650 | |
---|
| 3651 | + params_vdev->cur_frame_id = new_params->frame_id; |
---|
3652 | 3652 | if (type == RKISP_PARAMS_SHD) |
---|
3653 | 3653 | return; |
---|
3654 | 3654 | |
---|
.. | .. |
---|
3793 | 3793 | } |
---|
3794 | 3794 | } |
---|
3795 | 3795 | |
---|
| 3796 | +static bool |
---|
| 3797 | +rkisp_params_check_bigmode_v21(struct rkisp_isp_params_vdev *params_vdev) |
---|
| 3798 | +{ |
---|
| 3799 | + struct rkisp_device *ispdev = params_vdev->dev; |
---|
| 3800 | + struct device *dev = params_vdev->dev->dev; |
---|
| 3801 | + struct rkisp_hw_dev *hw = params_vdev->dev->hw_dev; |
---|
| 3802 | + struct v4l2_rect *crop = ¶ms_vdev->dev->isp_sdev.in_crop; |
---|
| 3803 | + u32 width = hw->max_in.w, height = hw->max_in.h, size = width * height; |
---|
| 3804 | + u32 bigmode_max_w, bigmode_max_size; |
---|
| 3805 | + int k = 0, idx1[DEV_MAX] = { 0 }; |
---|
| 3806 | + int n = 0, idx2[DEV_MAX] = { 0 }; |
---|
| 3807 | + int i = 0, j = 0; |
---|
| 3808 | + bool is_bigmode = false; |
---|
| 3809 | + |
---|
| 3810 | +multi_overflow: |
---|
| 3811 | + if (hw->is_multi_overflow) { |
---|
| 3812 | + ispdev->multi_index = 0; |
---|
| 3813 | + ispdev->multi_mode = 0; |
---|
| 3814 | + bigmode_max_w = ISP21_AUTO_BIGMODE_WIDTH; |
---|
| 3815 | + bigmode_max_size = ISP21_NOBIG_OVERFLOW_SIZE; |
---|
| 3816 | + dev_warn(dev, "over virtual isp max resolution, force to 2 readback\n"); |
---|
| 3817 | + goto end; |
---|
| 3818 | + } |
---|
| 3819 | + |
---|
| 3820 | + switch (hw->dev_link_num) { |
---|
| 3821 | + case 4: |
---|
| 3822 | + bigmode_max_w = ISP21_VIR4_AUTO_BIGMODE_WIDTH; |
---|
| 3823 | + bigmode_max_size = ISP21_VIR4_NOBIG_OVERFLOW_SIZE; |
---|
| 3824 | + ispdev->multi_index = ispdev->dev_id; |
---|
| 3825 | + ispdev->multi_mode = 2; |
---|
| 3826 | + /* internal buf of hw divided to four parts |
---|
| 3827 | + * bigmode nobigmode |
---|
| 3828 | + * _________ max width:1920 max width:960 |
---|
| 3829 | + * |_sensor0_| max size:1920*1080 max size:960*540 |
---|
| 3830 | + * |_sensor1_| max size:1920*1080 max size:960*540 |
---|
| 3831 | + * |_sensor2_| max size:1920*1080 max size:960*540 |
---|
| 3832 | + * |_sensor3_| max size:1920*1080 max size:960*540 |
---|
| 3833 | + */ |
---|
| 3834 | + for (i = 0; i < hw->dev_num; i++) { |
---|
| 3835 | + if (hw->isp_size[i].w <= ISP21_VIR4_MAX_WIDTH && |
---|
| 3836 | + hw->isp_size[i].size <= ISP21_VIR4_MAX_SIZE) |
---|
| 3837 | + continue; |
---|
| 3838 | + dev_warn(dev, "isp%d %dx%d over four vir isp max:1920x1080\n", |
---|
| 3839 | + i, hw->isp_size[i].w, hw->isp_size[i].h); |
---|
| 3840 | + hw->is_multi_overflow = true; |
---|
| 3841 | + goto multi_overflow; |
---|
| 3842 | + } |
---|
| 3843 | + break; |
---|
| 3844 | + case 3: |
---|
| 3845 | + bigmode_max_w = ISP21_VIR4_AUTO_BIGMODE_WIDTH; |
---|
| 3846 | + bigmode_max_size = ISP21_VIR4_NOBIG_OVERFLOW_SIZE; |
---|
| 3847 | + ispdev->multi_index = ispdev->dev_id; |
---|
| 3848 | + ispdev->multi_mode = 2; |
---|
| 3849 | + /* case0: bigmode nobigmode |
---|
| 3850 | + * _________ max width:1920 max width:960 |
---|
| 3851 | + * |_sensor0_| max size:1920*1080 max size:960*540 |
---|
| 3852 | + * |_sensor1_| max size:1920*1080 max size:960*540 |
---|
| 3853 | + * |_sensor2_| max size:1920*1080 max size:960*540 |
---|
| 3854 | + * |_________| |
---|
| 3855 | + * |
---|
| 3856 | + * case1: bigmode special reg cfg |
---|
| 3857 | + * _________ max width:3840 |
---|
| 3858 | + * | sensor0 | max size:3840*2160 mode=1 index=0 |
---|
| 3859 | + * |_________| |
---|
| 3860 | + * |_sensor1_| max size:1920*1080 mode=2 index=2 |
---|
| 3861 | + * |_sensor2_| max size:1920*1080 mode=2 index=3 |
---|
| 3862 | + * max width:1920 |
---|
| 3863 | + */ |
---|
| 3864 | + for (i = 0; i < hw->dev_num; i++) { |
---|
| 3865 | + if (!hw->isp_size[i].size) { |
---|
| 3866 | + if (i < hw->dev_link_num) |
---|
| 3867 | + idx2[n++] = i; |
---|
| 3868 | + continue; |
---|
| 3869 | + } |
---|
| 3870 | + if (hw->isp_size[i].w <= ISP21_VIR4_MAX_WIDTH && |
---|
| 3871 | + hw->isp_size[i].size <= ISP21_VIR4_MAX_SIZE) |
---|
| 3872 | + continue; |
---|
| 3873 | + idx1[k++] = i; |
---|
| 3874 | + } |
---|
| 3875 | + if (k) { |
---|
| 3876 | + is_bigmode = true; |
---|
| 3877 | + if (k != 1 || |
---|
| 3878 | + (hw->isp_size[idx1[0]].size > ISP21_VIR2_MAX_SIZE)) { |
---|
| 3879 | + dev_warn(dev, "isp%d %dx%d over three vir isp max:1920x1080\n", |
---|
| 3880 | + idx1[0], hw->isp_size[idx1[0]].h, hw->isp_size[idx1[0]].w); |
---|
| 3881 | + hw->is_multi_overflow = true; |
---|
| 3882 | + goto multi_overflow; |
---|
| 3883 | + } else { |
---|
| 3884 | + if (idx1[0] == ispdev->dev_id) { |
---|
| 3885 | + ispdev->multi_mode = 1; |
---|
| 3886 | + ispdev->multi_index = 0; |
---|
| 3887 | + } else { |
---|
| 3888 | + ispdev->multi_mode = 2; |
---|
| 3889 | + if (ispdev->multi_index == 0 || |
---|
| 3890 | + ispdev->multi_index == 1) |
---|
| 3891 | + ispdev->multi_index = 3; |
---|
| 3892 | + } |
---|
| 3893 | + } |
---|
| 3894 | + } else if (ispdev->multi_index >= hw->dev_link_num) { |
---|
| 3895 | + ispdev->multi_index = idx2[ispdev->multi_index - hw->dev_link_num]; |
---|
| 3896 | + } |
---|
| 3897 | + break; |
---|
| 3898 | + case 2: |
---|
| 3899 | + bigmode_max_w = ISP21_VIR2_AUTO_BIGMODE_WIDTH; |
---|
| 3900 | + bigmode_max_size = ISP21_VIR2_NOBIG_OVERFLOW_SIZE; |
---|
| 3901 | + ispdev->multi_index = ispdev->dev_id; |
---|
| 3902 | + ispdev->multi_mode = 1; |
---|
| 3903 | + /* case0: bigmode nobigmode |
---|
| 3904 | + * _________ max width:3840 max width:1920 |
---|
| 3905 | + * | sensor0 | max size:3840*2160 max size:1920*1080 |
---|
| 3906 | + * |_________| |
---|
| 3907 | + * | sensor1 | max size:3840*2160 max size:1920*1080 |
---|
| 3908 | + * |_________| |
---|
| 3909 | + * |
---|
| 3910 | + * case1: bigmode special reg cfg |
---|
| 3911 | + * _________ max width:4096 |
---|
| 3912 | + * | sensor0 | max size: mode=0 index=0 |
---|
| 3913 | + * | | 3840*2160+1920*1080 |
---|
| 3914 | + * |_________| |
---|
| 3915 | + * |_sensor1_| max size:1920*1080 mode=2 index=3 |
---|
| 3916 | + * max width:1920 |
---|
| 3917 | + */ |
---|
| 3918 | + for (i = 0; i < hw->dev_num; i++) { |
---|
| 3919 | + if (!hw->isp_size[i].size) { |
---|
| 3920 | + if (i < hw->dev_link_num) |
---|
| 3921 | + idx2[n++] = i; |
---|
| 3922 | + continue; |
---|
| 3923 | + } |
---|
| 3924 | + if (hw->isp_size[i].w <= ISP21_VIR2_MAX_WIDTH && |
---|
| 3925 | + hw->isp_size[i].size <= ISP21_VIR2_MAX_SIZE) { |
---|
| 3926 | + if (hw->isp_size[i].w > ISP21_VIR4_MAX_WIDTH || |
---|
| 3927 | + hw->isp_size[i].size > ISP21_VIR4_MAX_SIZE) |
---|
| 3928 | + j++; |
---|
| 3929 | + continue; |
---|
| 3930 | + } |
---|
| 3931 | + idx1[k++] = i; |
---|
| 3932 | + } |
---|
| 3933 | + if (k) { |
---|
| 3934 | + is_bigmode = true; |
---|
| 3935 | + if (k == 2 || j || |
---|
| 3936 | + hw->isp_size[idx1[k - 1]].size > (ISP21_VIR4_MAX_SIZE + ISP21_VIR2_MAX_SIZE)) { |
---|
| 3937 | + dev_warn(dev, "isp%d %dx%d over two vir isp max:3840x2160\n", |
---|
| 3938 | + idx1[k - 1], hw->isp_size[idx1[k - 1]].w, hw->isp_size[idx1[k - 1]].h); |
---|
| 3939 | + hw->is_multi_overflow = true; |
---|
| 3940 | + goto multi_overflow; |
---|
| 3941 | + } else { |
---|
| 3942 | + if (idx1[0] == ispdev->dev_id) { |
---|
| 3943 | + ispdev->multi_mode = 0; |
---|
| 3944 | + ispdev->multi_index = 0; |
---|
| 3945 | + } else { |
---|
| 3946 | + ispdev->multi_mode = 2; |
---|
| 3947 | + ispdev->multi_index = 3; |
---|
| 3948 | + } |
---|
| 3949 | + } |
---|
| 3950 | + } else if (ispdev->multi_index >= hw->dev_link_num) { |
---|
| 3951 | + ispdev->multi_index = idx2[ispdev->multi_index - hw->dev_link_num]; |
---|
| 3952 | + } |
---|
| 3953 | + break; |
---|
| 3954 | + default: |
---|
| 3955 | + bigmode_max_w = ISP21_AUTO_BIGMODE_WIDTH; |
---|
| 3956 | + bigmode_max_size = ISP21_NOBIG_OVERFLOW_SIZE; |
---|
| 3957 | + ispdev->multi_mode = 0; |
---|
| 3958 | + ispdev->multi_index = 0; |
---|
| 3959 | + width = crop->width; |
---|
| 3960 | + height = crop->height; |
---|
| 3961 | + size = width * height; |
---|
| 3962 | + break; |
---|
| 3963 | + } |
---|
| 3964 | + |
---|
| 3965 | +end: |
---|
| 3966 | + if (!is_bigmode && |
---|
| 3967 | + (width > bigmode_max_w || size > bigmode_max_size)) |
---|
| 3968 | + is_bigmode = true; |
---|
| 3969 | + |
---|
| 3970 | + return ispdev->is_bigmode = is_bigmode; |
---|
| 3971 | +} |
---|
| 3972 | + |
---|
3796 | 3973 | /* Not called when the camera active, thus not isr protection. */ |
---|
3797 | 3974 | static void |
---|
3798 | 3975 | rkisp_params_first_cfg_v2x(struct rkisp_isp_params_vdev *params_vdev) |
---|
3799 | 3976 | { |
---|
3800 | | - struct device *dev = params_vdev->dev->dev; |
---|
| 3977 | + struct rkisp_device *dev = params_vdev->dev; |
---|
3801 | 3978 | struct rkisp_isp_params_val_v21 *priv_val = |
---|
3802 | 3979 | (struct rkisp_isp_params_val_v21 *)params_vdev->priv_val; |
---|
3803 | | - struct rkisp_hw_dev *hw = params_vdev->dev->hw_dev; |
---|
3804 | | - struct v4l2_rect *out_crop = ¶ms_vdev->dev->isp_sdev.out_crop; |
---|
3805 | | - u32 width = hw->max_in.w ? hw->max_in.w : out_crop->width; |
---|
3806 | | - u32 height = hw->max_in.h ? hw->max_in.h : out_crop->height; |
---|
3807 | | - u32 size = width * height; |
---|
3808 | | - u32 bigmode_max_w, bigmode_max_size; |
---|
3809 | 3980 | |
---|
3810 | | - if (hw->dev_num > 2) { |
---|
3811 | | - bigmode_max_w = ISP21_VIR4_AUTO_BIGMODE_WIDTH; |
---|
3812 | | - bigmode_max_size = ISP21_VIR4_NOBIG_OVERFLOW_SIZE; |
---|
3813 | | - if (width > ISP21_VIR4_MAX_WIDTH || size > ISP21_VIR4_MAX_SIZE) |
---|
3814 | | - dev_err(dev, "%dx%d > max:3840x2160 for %d virtual isp\n", |
---|
3815 | | - width, height, hw->dev_num); |
---|
3816 | | - } else if (hw->dev_num > 1) { |
---|
3817 | | - bigmode_max_w = ISP21_VIR2_AUTO_BIGMODE_WIDTH; |
---|
3818 | | - bigmode_max_size = ISP21_VIR2_NOBIG_OVERFLOW_SIZE; |
---|
3819 | | - if (width > ISP21_VIR2_MAX_WIDTH || size > ISP21_VIR2_MAX_SIZE) |
---|
3820 | | - dev_err(dev, "%dx%d > max:1920x1080 for %d virtual isp\n", |
---|
3821 | | - width, height, hw->dev_num); |
---|
3822 | | - } else { |
---|
3823 | | - bigmode_max_w = ISP21_AUTO_BIGMODE_WIDTH; |
---|
3824 | | - bigmode_max_size = ISP21_NOBIG_OVERFLOW_SIZE; |
---|
3825 | | - } |
---|
3826 | | - |
---|
| 3981 | + dev->is_bigmode = rkisp_params_check_bigmode_v21(params_vdev); |
---|
3827 | 3982 | spin_lock(¶ms_vdev->config_lock); |
---|
3828 | 3983 | /* override the default things */ |
---|
3829 | 3984 | if (!params_vdev->isp21_params->module_cfg_update && |
---|
3830 | 3985 | !params_vdev->isp21_params->module_en_update) |
---|
3831 | | - dev_warn(dev, "can not get first iq setting in stream on\n"); |
---|
| 3986 | + dev_warn(dev->dev, "can not get first iq setting in stream on\n"); |
---|
3832 | 3987 | |
---|
3833 | 3988 | priv_val->dhaz_en = 0; |
---|
3834 | 3989 | priv_val->wdr_en = 0; |
---|
.. | .. |
---|
3839 | 3994 | __isp_isr_other_config(params_vdev, params_vdev->isp21_params, RKISP_PARAMS_ALL); |
---|
3840 | 3995 | __isp_isr_other_en(params_vdev, params_vdev->isp21_params, RKISP_PARAMS_ALL); |
---|
3841 | 3996 | __isp_isr_meas_en(params_vdev, params_vdev->isp21_params, RKISP_PARAMS_ALL); |
---|
3842 | | - if (width > bigmode_max_w || size > bigmode_max_size) { |
---|
| 3997 | + if (dev->is_bigmode) |
---|
3843 | 3998 | rkisp_set_bits(params_vdev->dev, ISP_CTRL1, |
---|
3844 | 3999 | ISP2X_SYS_BIGMODE_MANUAL | ISP2X_SYS_BIGMODE_FORCEEN, |
---|
3845 | 4000 | ISP2X_SYS_BIGMODE_MANUAL | ISP2X_SYS_BIGMODE_FORCEEN, false); |
---|
3846 | | - } |
---|
3847 | 4001 | |
---|
3848 | 4002 | priv_val->cur_hdrmge = params_vdev->isp21_params->others.hdrmge_cfg; |
---|
3849 | 4003 | priv_val->cur_hdrdrc = params_vdev->isp21_params->others.drc_cfg; |
---|
.. | .. |
---|
3957 | 4111 | } |
---|
3958 | 4112 | } |
---|
3959 | 4113 | |
---|
3960 | | -static void |
---|
| 4114 | +static int |
---|
3961 | 4115 | rkisp_params_set_ldchbuf_size_v2x(struct rkisp_isp_params_vdev *params_vdev, |
---|
3962 | 4116 | void *size) |
---|
3963 | 4117 | { |
---|
3964 | 4118 | struct rkisp_ldchbuf_size *ldchsize = size; |
---|
3965 | 4119 | |
---|
3966 | 4120 | rkisp_deinit_ldch_buf(params_vdev); |
---|
3967 | | - rkisp_init_ldch_buf(params_vdev, ldchsize); |
---|
| 4121 | + return rkisp_init_ldch_buf(params_vdev, ldchsize); |
---|
| 4122 | +} |
---|
| 4123 | + |
---|
| 4124 | +static void |
---|
| 4125 | +rkisp_params_free_meshbuf_v21(struct rkisp_isp_params_vdev *params_vdev, |
---|
| 4126 | + u64 module_id) |
---|
| 4127 | +{ |
---|
| 4128 | + rkisp_deinit_ldch_buf(params_vdev); |
---|
3968 | 4129 | } |
---|
3969 | 4130 | |
---|
3970 | 4131 | static void |
---|
.. | .. |
---|
4066 | 4227 | list_del(&cur_buf->queue); |
---|
4067 | 4228 | if (list_empty(¶ms_vdev->params)) |
---|
4068 | 4229 | break; |
---|
4069 | | - else if (new_params->module_en_update) { |
---|
| 4230 | + else if (new_params->module_en_update || |
---|
| 4231 | + (new_params->module_cfg_update & ISP2X_MODULE_FORCE)) { |
---|
4070 | 4232 | /* update en immediately */ |
---|
| 4233 | + __isp_isr_meas_config(params_vdev, new_params, type); |
---|
| 4234 | + __isp_isr_other_config(params_vdev, new_params, type); |
---|
4071 | 4235 | __isp_isr_other_en(params_vdev, new_params, type); |
---|
4072 | 4236 | __isp_isr_meas_en(params_vdev, new_params, type); |
---|
| 4237 | + new_params->module_cfg_update = 0; |
---|
4073 | 4238 | } |
---|
4074 | 4239 | if (new_params->module_cfg_update & ISP2X_MODULE_LDCH) |
---|
4075 | 4240 | ldch_data_abandon(params_vdev, new_params); |
---|
.. | .. |
---|
4103 | 4268 | priv_val->last_hdrdrc = priv_val->cur_hdrdrc; |
---|
4104 | 4269 | priv_val->cur_hdrmge = new_params->others.hdrmge_cfg; |
---|
4105 | 4270 | priv_val->cur_hdrdrc = new_params->others.drc_cfg; |
---|
| 4271 | + new_params->module_cfg_update = 0; |
---|
4106 | 4272 | vb2_buffer_done(&cur_buf->vb.vb2_buf, VB2_BUF_STATE_DONE); |
---|
4107 | 4273 | cur_buf = NULL; |
---|
4108 | 4274 | } |
---|
.. | .. |
---|
4173 | 4339 | .param_cfgsram = rkisp_params_cfgsram_v21, |
---|
4174 | 4340 | .get_meshbuf_inf = rkisp_params_get_ldchbuf_inf_v2x, |
---|
4175 | 4341 | .set_meshbuf_size = rkisp_params_set_ldchbuf_size_v2x, |
---|
| 4342 | + .free_meshbuf = rkisp_params_free_meshbuf_v21, |
---|
4176 | 4343 | .stream_stop = rkisp_params_stream_stop_v2x, |
---|
4177 | 4344 | .fop_release = rkisp_params_fop_release_v2x, |
---|
| 4345 | + .check_bigmode = rkisp_params_check_bigmode_v21, |
---|
4178 | 4346 | }; |
---|
4179 | 4347 | |
---|
4180 | 4348 | int rkisp_init_params_vdev_v21(struct rkisp_isp_params_vdev *params_vdev) |
---|