mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-07 19:30:30 +09:00
media: rockchip: isp: awb or gain debug info to ddr for isp32
Change-Id: Id4de69cc2f33e52133fecec0ac5960db5733910f Signed-off-by: Cai YiWei <cyw@rock-chips.com>
This commit is contained in:
@@ -396,6 +396,17 @@ bool rkisp_params_check_bigmode(struct rkisp_isp_params_vdev *params_vdev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int rkisp_params_info2ddr_cfg(struct rkisp_isp_params_vdev *params_vdev,
|
||||
void *arg)
|
||||
{
|
||||
int ret = -EINVAL;
|
||||
|
||||
if (params_vdev->ops->info2ddr_cfg)
|
||||
ret = params_vdev->ops->info2ddr_cfg(params_vdev, arg);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
int rkisp_register_params_vdev(struct rkisp_isp_params_vdev *params_vdev,
|
||||
struct v4l2_device *v4l2_dev,
|
||||
struct rkisp_device *dev)
|
||||
|
||||
@@ -42,6 +42,8 @@ struct rkisp_isp_params_ops {
|
||||
void (*stream_stop)(struct rkisp_isp_params_vdev *params_vdev);
|
||||
void (*fop_release)(struct rkisp_isp_params_vdev *params_vdev);
|
||||
bool (*check_bigmode)(struct rkisp_isp_params_vdev *params_vdev);
|
||||
int (*info2ddr_cfg)(struct rkisp_isp_params_vdev *params_vdev,
|
||||
void *arg);
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -147,4 +149,5 @@ void rkisp_params_set_meshbuf_size(struct rkisp_isp_params_vdev *params_vdev,
|
||||
void *meshsize);
|
||||
void rkisp_params_stream_stop(struct rkisp_isp_params_vdev *params_vdev);
|
||||
bool rkisp_params_check_bigmode(struct rkisp_isp_params_vdev *params_vdev);
|
||||
int rkisp_params_info2ddr_cfg(struct rkisp_isp_params_vdev *params_vdev, void *arg);
|
||||
#endif /* _RKISP_ISP_PARAM_H */
|
||||
|
||||
@@ -2044,14 +2044,14 @@ isp_rawawb_config(struct rkisp_isp_params_vdev *params_vdev,
|
||||
ISP32_RAWAWB_WEIGHT_NUM);
|
||||
|
||||
/* avoid to override the old enable value */
|
||||
value = isp3_param_read(params_vdev, ISP3X_RAWAWB_CTRL);
|
||||
value &= ISP32_MODULE_EN;
|
||||
value = isp3_param_read_cache(params_vdev, ISP3X_RAWAWB_CTRL);
|
||||
value &= (ISP32_MODULE_EN |
|
||||
ISP32_RAWAWB_2DDR_PATH_EN |
|
||||
ISP32_RAWAWB_2DDR_PATH_DS);
|
||||
value |= !!arg->low12bit_val << 28 |
|
||||
//!!arg->ddr_path_sel << 27 |
|
||||
!!arg->yuv3d_en1 << 26 |
|
||||
!!arg->xy_en1 << 25 |
|
||||
!!arg->uv_en1 << 24 |
|
||||
//!!(arg->ddr_path_en << 23 |
|
||||
(arg->light_num & 0x7) << 20 |
|
||||
!!arg->rawlsc_bypass_en << 19 |
|
||||
!!arg->wind_size << 18 |
|
||||
@@ -2078,7 +2078,7 @@ isp_rawawb_enable(struct rkisp_isp_params_vdev *params_vdev, bool en)
|
||||
{
|
||||
u32 awb_ctrl;
|
||||
|
||||
awb_ctrl = isp3_param_read(params_vdev, ISP3X_RAWAWB_CTRL);
|
||||
awb_ctrl = isp3_param_read_cache(params_vdev, ISP3X_RAWAWB_CTRL);
|
||||
awb_ctrl &= ~ISP32_REG_WR_MASK;
|
||||
if (en)
|
||||
awb_ctrl |= ISP32_MODULE_EN;
|
||||
@@ -3397,7 +3397,7 @@ isp_gain_enable(struct rkisp_isp_params_vdev *params_vdev, bool en)
|
||||
if (val & ISP32_MODULE_EN && en)
|
||||
return;
|
||||
|
||||
val = 0;
|
||||
val = isp3_param_read_cache(params_vdev, ISP3X_GAIN_CTRL);
|
||||
if (en) {
|
||||
val |= priv_val->lut3d_en << 20 |
|
||||
priv_val->dhaz_en << 16 |
|
||||
@@ -3880,7 +3880,9 @@ void __isp_isr_other_en(struct rkisp_isp_params_vdev *params_vdev,
|
||||
if (module_en_update & ISP32_MODULE_CAC)
|
||||
ops->cac_enable(params_vdev, !!(module_ens & ISP32_MODULE_CAC));
|
||||
|
||||
if (module_en_update & ISP32_MODULE_GAIN)
|
||||
if (module_en_update & ISP32_MODULE_GAIN ||
|
||||
((priv_val->buf_info_owner == RKISP_INFO2DRR_OWNER_GAIN) &&
|
||||
!(isp3_param_read(params_vdev, ISP3X_GAIN_CTRL) & ISP3X_GAIN_2DDR_EN)))
|
||||
ops->gain_enable(params_vdev, !!(module_ens & ISP32_MODULE_GAIN));
|
||||
|
||||
if (module_en_update & ISP32_MODULE_VSM)
|
||||
@@ -3904,6 +3906,8 @@ void __isp_isr_meas_config(struct rkisp_isp_params_vdev *params_vdev,
|
||||
{
|
||||
struct rkisp_isp_params_ops_v32 *ops =
|
||||
(struct rkisp_isp_params_ops_v32 *)params_vdev->priv_ops;
|
||||
struct rkisp_isp_params_val_v32 *priv_val =
|
||||
(struct rkisp_isp_params_val_v32 *)params_vdev->priv_val;
|
||||
u64 module_cfg_update = new_params->module_cfg_update;
|
||||
|
||||
if (type == RKISP_PARAMS_SHD)
|
||||
@@ -3940,7 +3944,9 @@ void __isp_isr_meas_config(struct rkisp_isp_params_vdev *params_vdev,
|
||||
if ((module_cfg_update & ISP32_MODULE_RAWHIST3))
|
||||
ops->rawhst3_config(params_vdev, &new_params->meas.rawhist3);
|
||||
|
||||
if ((module_cfg_update & ISP32_MODULE_RAWAWB))
|
||||
if ((module_cfg_update & ISP32_MODULE_RAWAWB) ||
|
||||
((priv_val->buf_info_owner == RKISP_INFO2DRR_OWNER_AWB) &&
|
||||
!(isp3_param_read(params_vdev, ISP3X_RAWAWB_CTRL) & ISP32_RAWAWB_2DDR_PATH_EN)))
|
||||
ops->rawawb_config(params_vdev, &new_params->meas.rawawb);
|
||||
}
|
||||
|
||||
@@ -4359,6 +4365,128 @@ rkisp_params_set_meshbuf_size_v32(struct rkisp_isp_params_vdev *params_vdev,
|
||||
rkisp_init_mesh_buf(params_vdev, meshsize);
|
||||
}
|
||||
|
||||
static int
|
||||
rkisp_params_info2ddr_cfg_v32(struct rkisp_isp_params_vdev *params_vdev, void *arg)
|
||||
{
|
||||
struct rkisp_device *dev = params_vdev->dev;
|
||||
struct rkisp_isp_params_val_v32 *priv_val;
|
||||
struct rkisp_info2ddr *cfg = arg;
|
||||
struct rkisp_dummy_buffer *buf;
|
||||
u32 reg, ctrl, mask, size, val, wsize = 0, vsize = 0;
|
||||
int i, ret;
|
||||
|
||||
priv_val = params_vdev->priv_val;
|
||||
|
||||
if (cfg->buf_cnt > RKISP_INFO2DDR_BUF_MAX)
|
||||
cfg->buf_cnt = RKISP_INFO2DDR_BUF_MAX;
|
||||
else if (cfg->buf_cnt == 0)
|
||||
cfg->buf_cnt = 1;
|
||||
for (val = 0; val < cfg->buf_cnt; val++)
|
||||
cfg->buf_fd[val] = -1;
|
||||
|
||||
switch (cfg->owner) {
|
||||
case RKISP_INFO2DRR_OWNER_NULL:
|
||||
rkisp_clear_reg_cache_bits(dev, ISP3X_RAWAWB_CTRL,
|
||||
ISP32_RAWAWB_2DDR_PATH_EN);
|
||||
rkisp_clear_reg_cache_bits(dev, ISP3X_GAIN_CTRL,
|
||||
ISP3X_GAIN_2DDR_EN);
|
||||
priv_val->buf_info_owner = cfg->owner;
|
||||
return 0;
|
||||
case RKISP_INFO2DRR_OWNER_GAIN:
|
||||
ctrl = ISP3X_GAIN_2DDR_mode(cfg->u.gain.gain2ddr_mode);
|
||||
ctrl |= ISP3X_GAIN_2DDR_EN;
|
||||
mask = ISP3X_GAIN_2DDR_mode(3);
|
||||
reg = ISP3X_GAIN_CTRL;
|
||||
|
||||
if (cfg->wsize)
|
||||
wsize = (cfg->wsize + 7) / 8;
|
||||
else
|
||||
wsize = (dev->isp_sdev.in_crop.width + 7) / 8;
|
||||
/* 0 or 3: 4x8mode, 1: 2x8 mode, 2: 1x8mode */
|
||||
val = cfg->u.gain.gain2ddr_mode;
|
||||
val = (val == 1) ? 2 : ((val == 2) ? 1 : 4);
|
||||
if (cfg->vsize)
|
||||
vsize = cfg->vsize;
|
||||
else
|
||||
vsize = dev->isp_sdev.in_crop.height / val;
|
||||
break;
|
||||
case RKISP_INFO2DRR_OWNER_AWB:
|
||||
ctrl = cfg->u.awb.awb2ddr_sel ? ISP32_RAWAWB_2DDR_PATH_DS : 0;
|
||||
ctrl |= ISP32_RAWAWB_2DDR_PATH_EN;
|
||||
mask = ISP32_RAWAWB_2DDR_PATH_DS;
|
||||
reg = ISP3X_RAWAWB_CTRL;
|
||||
|
||||
val = cfg->u.awb.awb2ddr_sel ? 8 : 1;
|
||||
if (cfg->wsize)
|
||||
wsize = cfg->wsize;
|
||||
else
|
||||
wsize = dev->isp_sdev.in_crop.width * 4 / val;
|
||||
if (cfg->vsize)
|
||||
vsize = cfg->vsize;
|
||||
else
|
||||
vsize = dev->isp_sdev.in_crop.height / val;
|
||||
break;
|
||||
default:
|
||||
dev_err(dev->dev, "%s no support owner:%d\n", __func__, cfg->owner);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (!wsize || !vsize) {
|
||||
dev_err(dev->dev, "%s inval wsize:%d vsize:%d\n", __func__, wsize, vsize);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
wsize = ALIGN(wsize, 16);
|
||||
size = wsize * vsize;
|
||||
for (i = 0; i < cfg->buf_cnt; i++) {
|
||||
buf = &priv_val->buf_info[i];
|
||||
if (buf->mem_priv) {
|
||||
if (buf->size < size) {
|
||||
rkisp_free_buffer(dev, buf);
|
||||
} else {
|
||||
*(u32 *)buf->vaddr = RKISP_INFO2DDR_BUF_INIT;
|
||||
cfg->buf_fd[i] = buf->dma_fd;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
buf->size = size;
|
||||
buf->is_need_dbuf = true;
|
||||
buf->is_need_dmafd = true;
|
||||
buf->is_need_vaddr = true;
|
||||
ret = rkisp_alloc_buffer(dev, buf);
|
||||
if (ret) {
|
||||
dev_err(dev->dev, "%s alloc buf failed\n", __func__);
|
||||
goto err;
|
||||
}
|
||||
*(u32 *)buf->vaddr = RKISP_INFO2DDR_BUF_INIT;
|
||||
cfg->buf_fd[i] = buf->dma_fd;
|
||||
}
|
||||
buf = &priv_val->buf_info[0];
|
||||
isp3_param_write(params_vdev, buf->dma_addr, ISP3X_MI_GAIN_WR_BASE);
|
||||
isp3_param_write(params_vdev, buf->size, ISP3X_MI_GAIN_WR_SIZE);
|
||||
isp3_param_write(params_vdev, wsize, ISP3X_MI_GAIN_WR_LENGTH);
|
||||
if (dev->hw_dev->is_single)
|
||||
rkisp_write(dev, ISP3X_MI_WR_CTRL2, ISP3X_GAINSELF_UPD, true);
|
||||
rkisp_set_reg_cache_bits(dev, reg, mask, ctrl);
|
||||
|
||||
priv_val->buf_info_idx = 0;
|
||||
priv_val->buf_info_cnt = cfg->buf_cnt;
|
||||
priv_val->buf_info_owner = cfg->owner;
|
||||
|
||||
cfg->wsize = wsize;
|
||||
cfg->vsize = vsize;
|
||||
return 0;
|
||||
err:
|
||||
for (i -= 1; i >= 0; i--) {
|
||||
buf = &priv_val->buf_info[i];
|
||||
rkisp_free_buffer(dev, buf);
|
||||
cfg->buf_fd[i] = -1;
|
||||
}
|
||||
cfg->owner = RKISP_INFO2DRR_OWNER_NULL;
|
||||
cfg->buf_cnt = 0;
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
static void
|
||||
rkisp_params_stream_stop_v32(struct rkisp_isp_params_vdev *params_vdev)
|
||||
{
|
||||
@@ -4375,6 +4503,12 @@ rkisp_params_stream_stop_v32(struct rkisp_isp_params_vdev *params_vdev)
|
||||
rkisp_free_buffer(ispdev, &priv_val->buf_3dlut[i]);
|
||||
for (i = 0; i < RKISP_STATS_DDR_BUF_NUM; i++)
|
||||
rkisp_free_buffer(ispdev, &ispdev->stats_vdev.stats_buf[i]);
|
||||
priv_val->buf_info_owner = 0;
|
||||
priv_val->buf_info_cnt = 0;
|
||||
priv_val->buf_info_idx = -1;
|
||||
for (i = 0; i < priv_val->buf_info_cnt; i++)
|
||||
rkisp_free_buffer(ispdev, &priv_val->buf_info[i]);
|
||||
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -4555,6 +4689,7 @@ static struct rkisp_isp_params_ops rkisp_isp_params_ops_tbl = {
|
||||
.stream_stop = rkisp_params_stream_stop_v32,
|
||||
.fop_release = rkisp_params_fop_release_v32,
|
||||
.check_bigmode = rkisp_params_check_bigmode_v32,
|
||||
.info2ddr_cfg = rkisp_params_info2ddr_cfg_v32,
|
||||
};
|
||||
|
||||
int rkisp_init_params_vdev_v32(struct rkisp_isp_params_vdev *params_vdev)
|
||||
@@ -4581,6 +4716,9 @@ int rkisp_init_params_vdev_v32(struct rkisp_isp_params_vdev *params_vdev)
|
||||
isp_lsc_cfg_sram_task,
|
||||
(unsigned long)params_vdev);
|
||||
tasklet_disable(&priv_val->lsc_tasklet);
|
||||
priv_val->buf_info_owner = 0;
|
||||
priv_val->buf_info_cnt = 0;
|
||||
priv_val->buf_info_idx = -1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -180,6 +180,11 @@ struct rkisp_isp_params_val_v32 {
|
||||
struct rkisp_dummy_buffer buf_cac[ISP3X_MESH_BUF_NUM];
|
||||
u32 buf_cac_idx;
|
||||
|
||||
struct rkisp_dummy_buffer buf_info[RKISP_INFO2DDR_BUF_MAX];
|
||||
u32 buf_info_owner;
|
||||
u32 buf_info_cnt;
|
||||
int buf_info_idx;
|
||||
|
||||
struct rkisp_dummy_buffer buf_3dnr_iir;
|
||||
struct rkisp_dummy_buffer buf_3dnr_cur;
|
||||
struct rkisp_dummy_buffer buf_3dnr_ds;
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
#include "common.h"
|
||||
#include "isp_stats.h"
|
||||
#include "isp_stats_v32.h"
|
||||
#include "isp_params_v32.h"
|
||||
|
||||
#define ISP32_3A_MEAS_DONE BIT(31)
|
||||
|
||||
@@ -470,6 +471,70 @@ rkisp_stats_update_buf(struct rkisp_isp_stats_vdev *stats_vdev)
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
rkisp_stats_info2ddr(struct rkisp_isp_stats_vdev *stats_vdev,
|
||||
struct rkisp32_isp_stat_buffer *pbuf)
|
||||
{
|
||||
struct rkisp_device *dev = stats_vdev->dev;
|
||||
struct rkisp_isp_params_val_v32 *priv_val;
|
||||
|
||||
priv_val = (struct rkisp_isp_params_val_v32 *)dev->params_vdev.priv_val;
|
||||
if (priv_val->buf_info_owner && pbuf) {
|
||||
int idx = priv_val->buf_info_idx;
|
||||
struct rkisp_dummy_buffer *buf;
|
||||
u32 reg = 0, ctrl;
|
||||
|
||||
if (priv_val->buf_info_owner == RKISP_INFO2DRR_OWNER_GAIN) {
|
||||
reg = ISP3X_GAIN_CTRL;
|
||||
ctrl = ISP3X_GAIN_2DDR_EN;
|
||||
} else {
|
||||
reg = ISP3X_RAWAWB_CTRL;
|
||||
ctrl = ISP32_RAWAWB_2DDR_PATH_EN;
|
||||
}
|
||||
if (idx >= 0) {
|
||||
buf = &priv_val->buf_info[idx];
|
||||
rkisp_finish_buffer(dev, buf);
|
||||
if (*(u32 *)buf->vaddr != RKISP_INFO2DDR_BUF_INIT &&
|
||||
(reg != ISP3X_RAWAWB_CTRL ||
|
||||
!(rkisp_read(dev, reg, true) & ISP32_RAWAWB_2DDR_PATH_ERR))) {
|
||||
pbuf->params.info2ddr.buf_fd = buf->dma_fd;
|
||||
pbuf->params.info2ddr.owner = priv_val->buf_info_owner;
|
||||
pbuf->meas_type |= ISP32_STAT_INFO2DDR;
|
||||
} else if (reg == ISP3X_RAWAWB_CTRL &&
|
||||
rkisp_read(dev, reg, true) & ISP32_RAWAWB_2DDR_PATH_ERR) {
|
||||
v4l2_warn(&dev->v4l2_dev,
|
||||
"rawawb2ddr path error idx:%d\n", idx);
|
||||
}
|
||||
|
||||
if (pbuf->params.info2ddr.buf_fd == -1)
|
||||
return;
|
||||
}
|
||||
/* get next unused buf to hw */
|
||||
for (idx = 0; idx < priv_val->buf_info_cnt; idx++) {
|
||||
buf = &priv_val->buf_info[idx];
|
||||
if (*(u32 *)buf->vaddr == RKISP_INFO2DDR_BUF_INIT)
|
||||
break;
|
||||
}
|
||||
|
||||
if (idx == priv_val->buf_info_cnt) {
|
||||
rkisp_clear_bits(dev, reg, ctrl, false);
|
||||
priv_val->buf_info_idx = -1;
|
||||
} else {
|
||||
buf = &priv_val->buf_info[idx];
|
||||
rkisp_write(dev, ISP3X_MI_GAIN_WR_BASE, buf->dma_addr, false);
|
||||
if (dev->hw_dev->is_single)
|
||||
rkisp_write(dev, ISP3X_MI_WR_CTRL2, ISP3X_GAINSELF_UPD, true);
|
||||
if (priv_val->buf_info_idx < 0)
|
||||
rkisp_set_bits(dev, reg, 0, ctrl, false);
|
||||
priv_val->buf_info_idx = idx;
|
||||
}
|
||||
} else if (priv_val->buf_info_idx >= 0) {
|
||||
priv_val->buf_info_idx = -1;
|
||||
rkisp_clear_bits(dev, ISP3X_GAIN_CTRL, ISP3X_GAIN_2DDR_EN, false);
|
||||
rkisp_clear_bits(dev, ISP3X_RAWAWB_CTRL, ISP32_RAWAWB_2DDR_PATH_EN, false);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
rkisp_stats_send_meas_v32(struct rkisp_isp_stats_vdev *stats_vdev,
|
||||
struct rkisp_isp_readout_work *meas_work)
|
||||
@@ -496,6 +561,8 @@ rkisp_stats_send_meas_v32(struct rkisp_isp_stats_vdev *stats_vdev,
|
||||
cur_stat_buf =
|
||||
(struct rkisp32_isp_stat_buffer *)(cur_buf->vaddr[0]);
|
||||
cur_stat_buf->frame_id = cur_frame_id;
|
||||
cur_stat_buf->params.info2ddr.buf_fd = -1;
|
||||
cur_stat_buf->params.info2ddr.owner = 0;
|
||||
}
|
||||
|
||||
if (meas_work->isp_ris & ISP3X_AFM_SUM_OF)
|
||||
@@ -554,6 +621,7 @@ rkisp_stats_send_meas_v32(struct rkisp_isp_stats_vdev *stats_vdev,
|
||||
list_add_tail(&cur_buf->queue, &stats_vdev->stat);
|
||||
spin_unlock_irqrestore(&stats_vdev->rd_lock, flags);
|
||||
} else {
|
||||
rkisp_stats_info2ddr(stats_vdev, cur_stat_buf);
|
||||
vb2_set_plane_payload(&cur_buf->vb.vb2_buf, 0, size);
|
||||
cur_buf->vb.sequence = cur_frame_id;
|
||||
cur_buf->vb.vb2_buf.timestamp = meas_work->timestamp;
|
||||
|
||||
@@ -2111,6 +2111,10 @@
|
||||
|
||||
#define ISP32_EXPD_DATA(a, b) ((a) | (b) << 16)
|
||||
|
||||
/* GAIN */
|
||||
#define ISP3X_GAIN_2DDR_EN BIT(24)
|
||||
#define ISP3X_GAIN_2DDR_mode(a) (((a) & 0x3) << 25)
|
||||
|
||||
/* DPCC */
|
||||
|
||||
/* CCM */
|
||||
@@ -2170,4 +2174,9 @@
|
||||
#define ISP3X_RAWAF_INELINE0(x) ((x) & 0xf)
|
||||
#define ISP3X_RAWAF_INTLINE0_EN BIT(27)
|
||||
|
||||
/* RAWAWB */
|
||||
#define ISP32_RAWAWB_2DDR_PATH_EN BIT(23)
|
||||
#define ISP32_RAWAWB_2DDR_PATH_DS BIT(27)
|
||||
#define ISP32_RAWAWB_2DDR_PATH_ERR BIT(29)
|
||||
|
||||
#endif /* _RKISP_REGS_V3X_H */
|
||||
|
||||
@@ -3140,6 +3140,9 @@ static long rkisp_ioctl(struct v4l2_subdev *sd, unsigned int cmd, void *arg)
|
||||
idxfd = (struct isp2x_buf_idxfd *)arg;
|
||||
ret = rkisp_bridge_get_fbcbuf_fd(isp_dev, idxfd);
|
||||
break;
|
||||
case RKISP_CMD_INFO2DDR:
|
||||
ret = rkisp_params_info2ddr_cfg(&isp_dev->params_vdev, arg);
|
||||
break;
|
||||
default:
|
||||
ret = -ENOIOCTLCMD;
|
||||
}
|
||||
@@ -3160,6 +3163,7 @@ static long rkisp_compat_ioctl32(struct v4l2_subdev *sd,
|
||||
struct rkisp_meshbuf_size meshsize;
|
||||
struct rkisp_thunderboot_shmem shmem;
|
||||
struct isp2x_buf_idxfd idxfd;
|
||||
struct rkisp_info2ddr info2ddr;
|
||||
long ret = 0;
|
||||
|
||||
if (!up && cmd != RKISP_CMD_FREE_SHARED_BUF)
|
||||
@@ -3225,6 +3229,13 @@ static long rkisp_compat_ioctl32(struct v4l2_subdev *sd,
|
||||
if (!ret && copy_to_user(up, &idxfd, sizeof(idxfd)))
|
||||
ret = -EFAULT;
|
||||
break;
|
||||
case RKISP_CMD_INFO2DDR:
|
||||
if (copy_from_user(&info2ddr, up, sizeof(info2ddr)))
|
||||
return -EFAULT;
|
||||
ret = rkisp_ioctl(sd, cmd, &info2ddr);
|
||||
if (!ret && copy_to_user(up, &info2ddr, sizeof(info2ddr)))
|
||||
ret = -EFAULT;
|
||||
break;
|
||||
default:
|
||||
ret = -ENOIOCTLCMD;
|
||||
}
|
||||
|
||||
@@ -44,6 +44,9 @@
|
||||
#define RKISP_CMD_SET_MESHBUF_SIZE \
|
||||
_IOW('V', BASE_VIDIOC_PRIVATE + 9, struct rkisp_meshbuf_size)
|
||||
|
||||
#define RKISP_CMD_INFO2DDR \
|
||||
_IOWR('V', BASE_VIDIOC_PRIVATE + 10, struct rkisp_info2ddr)
|
||||
|
||||
/****************ISP VIDEO IOCTL******************************/
|
||||
|
||||
#define RKISP_CMD_GET_CSI_MEMORY_MODE \
|
||||
@@ -404,6 +407,46 @@ enum isp_csi_memory {
|
||||
CSI_MEM_WORD_BIG_ALIGN = 2,
|
||||
};
|
||||
|
||||
#define RKISP_INFO2DDR_BUF_MAX 4
|
||||
/* 32bit flag for user set to memory after buf used */
|
||||
#define RKISP_INFO2DDR_BUF_INIT 0x5AA5
|
||||
|
||||
enum rkisp_info2ddr_owner {
|
||||
RKISP_INFO2DRR_OWNER_NULL,
|
||||
RKISP_INFO2DRR_OWNER_GAIN,
|
||||
RKISP_INFO2DRR_OWNER_AWB,
|
||||
};
|
||||
|
||||
/* struct rkisp_info2ddr
|
||||
* awb and gain debug info write to ddr
|
||||
*
|
||||
* owner: 0: off, 1: gain, 2: awb.
|
||||
* u: gain or awb mode parameters.
|
||||
* buf_cnt: buf num to request. return actual result.
|
||||
* buf_fd: fd of memory alloc result.
|
||||
* wsize: data width to request. if useless to 0. return actual result.
|
||||
* vsize: data height to request. if useless to 0. return actual result.
|
||||
*/
|
||||
struct rkisp_info2ddr {
|
||||
enum rkisp_info2ddr_owner owner;
|
||||
|
||||
union {
|
||||
struct {
|
||||
u8 gain2ddr_mode;
|
||||
} gain;
|
||||
|
||||
struct {
|
||||
u8 awb2ddr_sel;
|
||||
} awb;
|
||||
} u;
|
||||
|
||||
u8 buf_cnt;
|
||||
s32 buf_fd[RKISP_INFO2DDR_BUF_MAX];
|
||||
|
||||
u32 wsize;
|
||||
u32 vsize;
|
||||
} __attribute__ ((packed));
|
||||
|
||||
struct isp2x_ispgain_buf {
|
||||
u32 gain_dmaidx;
|
||||
u32 mfbc_dmaidx;
|
||||
|
||||
@@ -64,6 +64,7 @@
|
||||
#define ISP32_STAT_BLS ISP3X_STAT_BLS
|
||||
#define ISP32_STAT_DHAZ ISP3X_STAT_DHAZ
|
||||
#define ISP32_STAT_VSM BIT(18)
|
||||
#define ISP32_STAT_INFO2DDR BIT(19)
|
||||
|
||||
#define ISP32_MESH_BUF_NUM ISP3X_MESH_BUF_NUM
|
||||
|
||||
@@ -750,11 +751,9 @@ struct isp32_rawawb_meas_cfg {
|
||||
u8 wind_size;
|
||||
u8 rawlsc_bypass_en;
|
||||
u8 light_num;
|
||||
u8 ddr_path_en;
|
||||
u8 uv_en1;
|
||||
u8 xy_en1;
|
||||
u8 yuv3d_en1;
|
||||
u8 ddr_path_sel;
|
||||
u8 low12bit_val;
|
||||
/* RAWAWB_WEIGHT_CURVE_CTRL */
|
||||
u8 wp_luma_wei_en0;
|
||||
@@ -1306,7 +1305,7 @@ struct isp32_rawaf_stat {
|
||||
u32 afm_sum_b;
|
||||
u32 afm_lum_b;
|
||||
u32 highlit_cnt_winb;
|
||||
u32 reserved[20];
|
||||
u32 reserved[18];
|
||||
} __attribute__ ((packed));
|
||||
|
||||
struct isp32_rawawb_ramdata {
|
||||
@@ -1348,6 +1347,11 @@ struct isp32_vsm_stat {
|
||||
u16 delta_v;
|
||||
} __attribute__ ((packed));
|
||||
|
||||
struct isp32_info2ddr_stat {
|
||||
u32 owner;
|
||||
s32 buf_fd;
|
||||
} __attribute__ ((packed));
|
||||
|
||||
struct isp32_isp_params_cfg {
|
||||
u64 module_en_update;
|
||||
u64 module_ens;
|
||||
@@ -1374,6 +1378,7 @@ struct isp32_stat {
|
||||
struct isp32_rawaf_stat rawaf; //offset 0x1c00
|
||||
struct isp3x_dhaz_stat dhaz;
|
||||
struct isp32_vsm_stat vsm;
|
||||
struct isp32_info2ddr_stat info2ddr;
|
||||
struct isp32_rawawb_meas_stat rawawb; //offset 0x2b00
|
||||
} __attribute__ ((packed));
|
||||
|
||||
|
||||
Reference in New Issue
Block a user