mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-10 12:57:06 +09:00
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:
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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 = ¶ms_vdev->isp1x_params.others;
|
||||
struct cifisp_isp_other_cfg *cur_other_cfg =
|
||||
¶ms_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, ¶ms_vdev->isp1x_params);
|
||||
__isp_isr_meas_config(params_vdev, ¶ms_vdev->isp1x_params);
|
||||
__preisp_isr_update_hdrae_para(params_vdev, ¶ms_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(¶ms_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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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 */
|
||||
|
||||
@@ -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 = ¶ms_vdev->isp2x_params.others;
|
||||
struct isp2x_isp_other_cfg *cur_other_cfg =
|
||||
¶ms_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(¶ms_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, ¶ms_vdev->isp2x_params, RKISP_PARAMS_ALL);
|
||||
__isp_isr_meas_config(params_vdev, ¶ms_vdev->isp2x_params, RKISP_PARAMS_ALL);
|
||||
__preisp_isr_update_hdrae_para(params_vdev, ¶ms_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(¶ms_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;
|
||||
}
|
||||
|
||||
@@ -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 */
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user