media: rockchip: isp: change ldch mesh number

Signed-off-by: Hu Kejun <william.hu@rock-chips.com>
Change-Id: I2ce3fb8f996347d26ddd398e9066d9dc82707429
This commit is contained in:
Hu Kejun
2020-04-15 09:53:24 +08:00
committed by Tao Huang
parent 47a2e88510
commit 8d1d0cfb64
7 changed files with 76 additions and 55 deletions

View File

@@ -268,7 +268,7 @@ rkisp_params_init_vb2_queue(struct vb2_queue *q,
return vb2_queue_init(q);
}
static void rkisp_init_params_vdev(struct rkisp_isp_params_vdev *params_vdev)
static int rkisp_init_params_vdev(struct rkisp_isp_params_vdev *params_vdev)
{
params_vdev->vdev_fmt.fmt.meta.dataformat =
V4L2_META_FMT_RK_ISP1_PARAMS;
@@ -276,9 +276,9 @@ static void rkisp_init_params_vdev(struct rkisp_isp_params_vdev *params_vdev)
sizeof(struct rkisp1_isp_params_cfg);
if (params_vdev->dev->isp_ver <= ISP_V13)
rkisp_init_params_vdev_v1x(params_vdev);
return rkisp_init_params_vdev_v1x(params_vdev);
else
rkisp_init_params_vdev_v2x(params_vdev);
return rkisp_init_params_vdev_v2x(params_vdev);
}
static void rkisp_uninit_params_vdev(struct rkisp_isp_params_vdev *params_vdev)
@@ -347,7 +347,9 @@ int rkisp_register_params_vdev(struct rkisp_isp_params_vdev *params_vdev,
vdev->device_caps = V4L2_CAP_STREAMING | V4L2_CAP_META_OUTPUT;
vdev->vfl_dir = VFL_DIR_TX;
rkisp_params_init_vb2_queue(vdev->queue, params_vdev);
rkisp_init_params_vdev(params_vdev);
ret = rkisp_init_params_vdev(params_vdev);
if (ret < 0)
goto err_release_queue;
video_set_drvdata(vdev, params_vdev);
node->pad.flags = MEDIA_PAD_FL_SOURCE;

View File

@@ -39,8 +39,8 @@ struct rkisp_isp_params_vdev {
spinlock_t config_lock;
struct list_head params;
union {
struct rkisp1_isp_params_cfg isp1x_params;
struct isp2x_isp_params_cfg isp2x_params;
struct rkisp1_isp_params_cfg *isp1x_params;
struct isp2x_isp_params_cfg *isp2x_params;
};
struct v4l2_format vdev_fmt;
bool streamon;

View File

@@ -769,7 +769,8 @@ static void isp_aec_config_v12(struct rkisp_isp_params_vdev *params_vdev,
static void isp_cproc_config(struct rkisp_isp_params_vdev *params_vdev,
const struct cifisp_cproc_config *arg)
{
struct cifisp_isp_other_cfg *cur_other_cfg = &params_vdev->isp1x_params.others;
struct cifisp_isp_other_cfg *cur_other_cfg =
&params_vdev->isp1x_params->others;
struct cifisp_ie_config *cur_ie_config = &cur_other_cfg->ie_config;
u32 effect = cur_ie_config->effect;
u32 quantization = params_vdev->quantization;
@@ -2240,13 +2241,13 @@ static void rkisp1_params_first_cfg_v1x(struct rkisp_isp_params_vdev *params_vde
params_vdev->hdrae_para.lsc_table[i] = 0x0400;
/* override the default things */
if (!params_vdev->isp1x_params.module_cfg_update &&
!params_vdev->isp1x_params.module_en_update)
if (!params_vdev->isp1x_params->module_cfg_update &&
!params_vdev->isp1x_params->module_en_update)
dev_warn(dev, "can not get first iq setting in stream on\n");
__isp_isr_other_config(params_vdev, &params_vdev->isp1x_params);
__isp_isr_meas_config(params_vdev, &params_vdev->isp1x_params);
__preisp_isr_update_hdrae_para(params_vdev, &params_vdev->isp1x_params);
__isp_isr_other_config(params_vdev, params_vdev->isp1x_params);
__isp_isr_meas_config(params_vdev, params_vdev->isp1x_params);
__preisp_isr_update_hdrae_para(params_vdev, params_vdev->isp1x_params);
spin_unlock(&params_vdev->config_lock);
}
@@ -2256,13 +2257,13 @@ static void rkisp1_save_first_param_v1x(struct rkisp_isp_params_vdev *params_vde
struct rkisp1_isp_params_cfg *new_params;
new_params = (struct rkisp1_isp_params_cfg *)param;
params_vdev->isp1x_params = *new_params;
*params_vdev->isp1x_params = *new_params;
}
static void rkisp1_clear_first_param_v1x(struct rkisp_isp_params_vdev *params_vdev)
{
params_vdev->isp1x_params.module_cfg_update = 0;
params_vdev->isp1x_params.module_en_update = 0;
params_vdev->isp1x_params->module_cfg_update = 0;
params_vdev->isp1x_params->module_en_update = 0;
}
static void
@@ -2354,10 +2355,9 @@ static struct rkisp_isp_params_ops rkisp_isp_params_ops_tbl = {
.isr_hdl = rkisp1_params_isr_v1x,
};
void rkisp_init_params_vdev_v1x(struct rkisp_isp_params_vdev *params_vdev)
int rkisp_init_params_vdev_v1x(struct rkisp_isp_params_vdev *params_vdev)
{
params_vdev->ops = &rkisp_isp_params_ops_tbl;
if (params_vdev->dev->isp_ver == ISP_V12 ||
params_vdev->dev->isp_ver == ISP_V13) {
params_vdev->priv_ops = &rkisp1_v12_isp_params_ops;
@@ -2366,9 +2366,18 @@ void rkisp_init_params_vdev_v1x(struct rkisp_isp_params_vdev *params_vdev)
params_vdev->priv_ops = &rkisp1_v10_isp_params_ops;
params_vdev->priv_cfg = &rkisp1_v10_isp_params_config;
}
params_vdev->isp1x_params = vmalloc(sizeof(*params_vdev->isp1x_params));
if (!params_vdev->isp1x_params)
return -ENOMEM;
rkisp1_clear_first_param_v1x(params_vdev);
return 0;
}
void rkisp_uninit_params_vdev_v1x(struct rkisp_isp_params_vdev *params_vdev)
{
vfree(params_vdev->isp1x_params);
}

View File

@@ -76,7 +76,7 @@ struct rkisp_isp_params_v1x_config {
const int hst_weight_grids_size;
};
void rkisp_init_params_vdev_v1x(struct rkisp_isp_params_vdev *params_vdev);
int rkisp_init_params_vdev_v1x(struct rkisp_isp_params_vdev *params_vdev);
void rkisp_uninit_params_vdev_v1x(struct rkisp_isp_params_vdev *params_vdev);
#endif /* _RKISP_ISP_PARAM_V1X_H */

View File

@@ -880,7 +880,8 @@ static void
isp_cproc_config(struct rkisp_isp_params_vdev *params_vdev,
const struct isp2x_cproc_cfg *arg)
{
struct isp2x_isp_other_cfg *cur_other_cfg = &params_vdev->isp2x_params.others;
struct isp2x_isp_other_cfg *cur_other_cfg =
&params_vdev->isp2x_params->others;
struct isp2x_ie_cfg *cur_ie_config = &cur_other_cfg->ie_cfg;
u32 effect = cur_ie_config->effect;
u32 quantization = params_vdev->quantization;
@@ -3998,8 +3999,8 @@ rkisp_params_first_cfg_v2x(struct rkisp_isp_params_vdev *params_vdev)
spin_lock(&params_vdev->config_lock);
/* override the default things */
if (!params_vdev->isp2x_params.module_cfg_update &&
!params_vdev->isp2x_params.module_en_update)
if (!params_vdev->isp2x_params->module_cfg_update &&
!params_vdev->isp2x_params->module_en_update)
dev_warn(dev, "can not get first iq setting in stream on\n");
/* set the range */
@@ -4013,9 +4014,9 @@ rkisp_params_first_cfg_v2x(struct rkisp_isp_params_vdev *params_vdev)
priv_val->tmo_en = 0;
priv_val->lsc_en = 0;
priv_val->mge_en = 0;
__isp_isr_other_config(params_vdev, &params_vdev->isp2x_params, RKISP_PARAMS_ALL);
__isp_isr_meas_config(params_vdev, &params_vdev->isp2x_params, RKISP_PARAMS_ALL);
__preisp_isr_update_hdrae_para(params_vdev, &params_vdev->isp2x_params);
__isp_isr_other_config(params_vdev, params_vdev->isp2x_params, RKISP_PARAMS_ALL);
__isp_isr_meas_config(params_vdev, params_vdev->isp2x_params, RKISP_PARAMS_ALL);
__preisp_isr_update_hdrae_para(params_vdev, params_vdev->isp2x_params);
spin_unlock(&params_vdev->config_lock);
}
@@ -4024,41 +4025,20 @@ static void rkisp_save_first_param_v2x(struct rkisp_isp_params_vdev *params_vdev
struct isp2x_isp_params_cfg *new_params;
new_params = (struct isp2x_isp_params_cfg *)param;
params_vdev->isp2x_params = *new_params;
*params_vdev->isp2x_params = *new_params;
}
static void rkisp_clear_first_param_v2x(struct rkisp_isp_params_vdev *params_vdev)
{
params_vdev->isp2x_params.module_cfg_update = 0;
params_vdev->isp2x_params.module_en_update = 0;
params_vdev->isp2x_params->module_cfg_update = 0;
params_vdev->isp2x_params->module_en_update = 0;
}
static void
rkisp_get_param_size_v2x(struct rkisp_isp_params_vdev *params_vdev,
unsigned int sizes[])
{
struct rkisp_device *dev = params_vdev->dev;
struct rkisp_isp_params_val_v2x *priv_val;
u32 width, height;
int i, ret;
width = (dev->isp_sdev.in_crop.width + 15) / 16 + 1;
height = (dev->isp_sdev.in_crop.height + 7) / 8 + 1;
sizes[0] = sizeof(struct isp2x_isp_params_cfg) + 2 * width * height;
priv_val = (struct rkisp_isp_params_val_v2x *)params_vdev->priv_val;
if (priv_val->buf_ldch[0].size != 2 * width * height) {
for (i = 0; i < RKISP_PARAM_LDCH_BUF_NUM; i++)
rkisp_free_buffer(dev->dev, &priv_val->buf_ldch[i]);
for (i = 0; i < RKISP_PARAM_LDCH_BUF_NUM; i++) {
priv_val->buf_ldch[i].size = 2 * width * height;
ret = rkisp_alloc_buffer(dev->dev, &priv_val->buf_ldch[i]);
if (ret)
dev_err(dev->dev, "can not alloc buffer\n");
}
}
sizes[0] = sizeof(struct isp2x_isp_params_cfg);
}
/* Not called when the camera active, thus not isr protection. */
@@ -4189,7 +4169,7 @@ static struct rkisp_isp_params_ops rkisp_isp_params_ops_tbl = {
.param_cfg = rkisp_params_cfg_v2x,
};
void rkisp_init_params_vdev_v2x(struct rkisp_isp_params_vdev *params_vdev)
int rkisp_init_params_vdev_v2x(struct rkisp_isp_params_vdev *params_vdev)
{
struct rkisp_isp_params_val_v2x *priv_val;
struct device *dev = params_vdev->dev->dev;
@@ -4198,7 +4178,7 @@ void rkisp_init_params_vdev_v2x(struct rkisp_isp_params_vdev *params_vdev)
priv_val = kzalloc(sizeof(*priv_val), GFP_KERNEL);
if (!priv_val) {
dev_err(dev, "can not get memory\n");
return;
return -ENOMEM;
}
priv_val->buf_3dlut_idx = 0;
@@ -4221,10 +4201,26 @@ void rkisp_init_params_vdev_v2x(struct rkisp_isp_params_vdev *params_vdev)
}
}
priv_val->buf_ldch_idx = 0;
for (i = 0; i < RKISP_PARAM_LDCH_BUF_NUM; i++) {
priv_val->buf_ldch[i].size = ISP2X_LDCH_MESH_XY_NUM * sizeof(u16);
ret = rkisp_alloc_buffer(dev, &priv_val->buf_ldch[i]);
if (ret) {
dev_err(dev, "can not alloc buffer\n");
goto err;
}
}
params_vdev->isp2x_params = vmalloc(sizeof(*params_vdev->isp2x_params));
if (!params_vdev->isp2x_params)
goto err;
rkisp_clear_first_param_v2x(params_vdev);
params_vdev->priv_val = (void *)priv_val;
params_vdev->ops = &rkisp_isp_params_ops_tbl;
params_vdev->priv_ops = &rkisp_v2x_isp_params_ops;
return;
return 0;
err:
for (i = 0; i < RKISP_PARAM_3DLUT_BUF_NUM; i++)
@@ -4232,6 +4228,13 @@ err:
for (i = 0; i < RKISP_PARAM_LSC_LUT_BUF_NUM; i++)
rkisp_free_buffer(dev, &priv_val->buf_lsclut[i]);
for (i = 0; i < RKISP_PARAM_LDCH_BUF_NUM; i++)
rkisp_free_buffer(dev, &priv_val->buf_ldch[i]);
vfree(params_vdev->isp2x_params);
return -ENOMEM;
}
void rkisp_uninit_params_vdev_v2x(struct rkisp_isp_params_vdev *params_vdev)
@@ -4250,6 +4253,11 @@ void rkisp_uninit_params_vdev_v2x(struct rkisp_isp_params_vdev *params_vdev)
for (i = 0; i < RKISP_PARAM_LSC_LUT_BUF_NUM; i++)
rkisp_free_buffer(dev, &priv_val->buf_lsclut[i]);
for (i = 0; i < RKISP_PARAM_LDCH_BUF_NUM; i++)
rkisp_free_buffer(dev, &priv_val->buf_ldch[i]);
vfree(params_vdev->isp2x_params);
kfree(priv_val);
params_vdev->priv_val = NULL;
}

View File

@@ -338,7 +338,7 @@ struct rkisp_isp_params_val_v2x {
u8 mge_en;
};
void rkisp_init_params_vdev_v2x(struct rkisp_isp_params_vdev *params_vdev);
int rkisp_init_params_vdev_v2x(struct rkisp_isp_params_vdev *params_vdev);
void rkisp_uninit_params_vdev_v2x(struct rkisp_isp_params_vdev *params_vdev);
#endif /* _RKISP_ISP_PARAM_V2X_H */

View File

@@ -139,6 +139,8 @@
#define ISP2X_3DLUT_DATA_NUM 729
#define ISP2X_LDCH_MESH_XY_NUM 0x80000
struct isp2x_csi_trigger {
u32 frame_id;
int times;
@@ -843,7 +845,7 @@ struct isp2x_3dlut_cfg {
struct isp2x_ldch_cfg {
u32 hsize;
u32 vsize;
u32 data[1];
u16 data[ISP2X_LDCH_MESH_XY_NUM];
} __attribute__ ((packed));
struct isp2x_awb_gain_cfg {
@@ -1357,7 +1359,7 @@ struct isp2x_isp_other_cfg {
struct isp2x_dhaz_cfg dhaz_cfg;
struct isp2x_gain_cfg gain_cfg;
struct isp2x_3dlut_cfg isp3dlut_cfg;
struct isp2x_ldch_cfg ldch_cfg; // must be last item
struct isp2x_ldch_cfg ldch_cfg;
} __attribute__ ((packed));
struct isp2x_isp_meas_cfg {