mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-07 19:30:30 +09:00
media: rockchip: isp: adjust params common api
Change-Id: I5d2961496ec445bea3c3592050d9ef0bd35778c1 Signed-off-by: Cai YiWei <cyw@rock-chips.com>
This commit is contained in:
@@ -344,19 +344,22 @@ void rkisp_params_first_cfg(struct rkisp_isp_params_vdev *params_vdev,
|
||||
/* Not called when the camera active, thus not isr protection. */
|
||||
void rkisp_params_disable_isp(struct rkisp_isp_params_vdev *params_vdev)
|
||||
{
|
||||
params_vdev->ops->disable_isp(params_vdev);
|
||||
if (params_vdev->ops->disable_isp)
|
||||
params_vdev->ops->disable_isp(params_vdev);
|
||||
}
|
||||
|
||||
void rkisp_params_get_ldchbuf_inf(struct rkisp_isp_params_vdev *params_vdev,
|
||||
struct rkisp_ldchbuf_info *ldchbuf)
|
||||
void rkisp_params_get_meshbuf_inf(struct rkisp_isp_params_vdev *params_vdev,
|
||||
void *meshbuf)
|
||||
{
|
||||
params_vdev->ops->get_ldchbuf_inf(params_vdev, ldchbuf);
|
||||
if (params_vdev->ops->get_meshbuf_inf)
|
||||
params_vdev->ops->get_meshbuf_inf(params_vdev, meshbuf);
|
||||
}
|
||||
|
||||
void rkisp_params_set_ldchbuf_size(struct rkisp_isp_params_vdev *params_vdev,
|
||||
struct rkisp_ldchbuf_size *ldchsize)
|
||||
void rkisp_params_set_meshbuf_size(struct rkisp_isp_params_vdev *params_vdev,
|
||||
void *meshsize)
|
||||
{
|
||||
params_vdev->ops->set_ldchbuf_size(params_vdev, ldchsize);
|
||||
if (params_vdev->ops->set_meshbuf_size)
|
||||
params_vdev->ops->set_meshbuf_size(params_vdev, meshsize);
|
||||
}
|
||||
|
||||
void rkisp_params_stream_stop(struct rkisp_isp_params_vdev *params_vdev)
|
||||
|
||||
@@ -5,9 +5,17 @@
|
||||
#define _RKISP_ISP_PARAM_H
|
||||
|
||||
#include <linux/rkisp1-config.h>
|
||||
#include <linux/rkisp2-config.h>
|
||||
#include <linux/rk-preisp.h>
|
||||
#include "common.h"
|
||||
|
||||
#define ISP_PACK_4BYTE(a, b, c, d) \
|
||||
(((a) & 0xFF) << 0 | ((b) & 0xFF) << 8 | \
|
||||
((c) & 0xFF) << 16 | ((d) & 0xFF) << 24)
|
||||
|
||||
#define ISP_PACK_2SHORT(a, b) \
|
||||
(((a) & 0xFFFF) << 0 | ((b) & 0xFFFF) << 16)
|
||||
|
||||
enum rkisp_params_type {
|
||||
RKISP_PARAMS_ALL,
|
||||
RKISP_PARAMS_IMD,
|
||||
@@ -25,10 +33,10 @@ struct rkisp_isp_params_ops {
|
||||
void (*param_cfg)(struct rkisp_isp_params_vdev *params_vdev, u32 frame_id,
|
||||
enum rkisp_params_type type);
|
||||
void (*param_cfgsram)(struct rkisp_isp_params_vdev *params_vdev);
|
||||
void (*get_ldchbuf_inf)(struct rkisp_isp_params_vdev *params_vdev,
|
||||
struct rkisp_ldchbuf_info *ldchbuf);
|
||||
void (*set_ldchbuf_size)(struct rkisp_isp_params_vdev *params_vdev,
|
||||
struct rkisp_ldchbuf_size *ldchsize);
|
||||
void (*get_meshbuf_inf)(struct rkisp_isp_params_vdev *params_vdev,
|
||||
void *meshbuf);
|
||||
void (*set_meshbuf_size)(struct rkisp_isp_params_vdev *params_vdev,
|
||||
void *meshsize);
|
||||
void (*stream_stop)(struct rkisp_isp_params_vdev *params_vdev);
|
||||
void (*fop_release)(struct rkisp_isp_params_vdev *params_vdev);
|
||||
};
|
||||
@@ -70,18 +78,45 @@ struct rkisp_isp_params_vdev {
|
||||
struct rkisp_buffer *cur_buf;
|
||||
u32 rdbk_times;
|
||||
|
||||
struct isp2x_hdrtmo_cfg last_hdrtmo;
|
||||
struct isp2x_hdrmge_cfg last_hdrmge;
|
||||
struct isp21_drc_cfg last_hdrdrc;
|
||||
struct isp2x_hdrtmo_cfg cur_hdrtmo;
|
||||
struct isp2x_hdrmge_cfg cur_hdrmge;
|
||||
struct isp21_drc_cfg cur_hdrdrc;
|
||||
struct isp2x_lsc_cfg cur_lsccfg;
|
||||
struct sensor_exposure_cfg exposure;
|
||||
|
||||
bool is_subs_evt;
|
||||
};
|
||||
|
||||
static inline void
|
||||
rkisp_iowrite32(struct rkisp_isp_params_vdev *params_vdev,
|
||||
u32 value, u32 addr)
|
||||
{
|
||||
rkisp_write(params_vdev->dev, addr, value, false);
|
||||
}
|
||||
|
||||
static inline u32
|
||||
rkisp_ioread32(struct rkisp_isp_params_vdev *params_vdev,
|
||||
u32 addr)
|
||||
{
|
||||
return rkisp_read(params_vdev->dev, addr, false);
|
||||
}
|
||||
|
||||
static inline void
|
||||
isp_param_set_bits(struct rkisp_isp_params_vdev *params_vdev,
|
||||
u32 reg, u32 bit_mask)
|
||||
{
|
||||
u32 val;
|
||||
|
||||
val = rkisp_ioread32(params_vdev, reg);
|
||||
rkisp_iowrite32(params_vdev, val | bit_mask, reg);
|
||||
}
|
||||
|
||||
static inline void
|
||||
isp_param_clear_bits(struct rkisp_isp_params_vdev *params_vdev,
|
||||
u32 reg, u32 bit_mask)
|
||||
{
|
||||
u32 val;
|
||||
|
||||
val = rkisp_ioread32(params_vdev, reg);
|
||||
rkisp_iowrite32(params_vdev, val & ~bit_mask, reg);
|
||||
}
|
||||
|
||||
/* config params before ISP streaming */
|
||||
void rkisp_params_first_cfg(struct rkisp_isp_params_vdev *params_vdev,
|
||||
struct ispsd_in_fmt *in_fmt,
|
||||
@@ -99,10 +134,10 @@ void rkisp_params_isr(struct rkisp_isp_params_vdev *params_vdev, u32 isp_mis);
|
||||
void rkisp_params_cfg(struct rkisp_isp_params_vdev *params_vdev, u32 frame_id);
|
||||
|
||||
void rkisp_params_cfgsram(struct rkisp_isp_params_vdev *params_vdev);
|
||||
void rkisp_params_get_ldchbuf_inf(struct rkisp_isp_params_vdev *params_vdev,
|
||||
struct rkisp_ldchbuf_info *ldchbuf);
|
||||
void rkisp_params_set_ldchbuf_size(struct rkisp_isp_params_vdev *params_vdev,
|
||||
struct rkisp_ldchbuf_size *ldchsize);
|
||||
void rkisp_params_get_meshbuf_inf(struct rkisp_isp_params_vdev *params_vdev,
|
||||
void *meshbuf);
|
||||
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);
|
||||
|
||||
#endif /* _RKISP_ISP_PARAM_H */
|
||||
|
||||
@@ -43,26 +43,6 @@ static inline u32 rkisp1_ioread32(struct rkisp_isp_params_vdev *params_vdev,
|
||||
return ioread32(params_vdev->dev->base_addr + addr);
|
||||
}
|
||||
|
||||
static inline void isp_param_set_bits(struct rkisp_isp_params_vdev
|
||||
*params_vdev,
|
||||
u32 reg, u32 bit_mask)
|
||||
{
|
||||
u32 val;
|
||||
|
||||
val = rkisp1_ioread32(params_vdev, reg);
|
||||
rkisp1_iowrite32(params_vdev, val | bit_mask, reg);
|
||||
}
|
||||
|
||||
static inline void isp_param_clear_bits(struct rkisp_isp_params_vdev
|
||||
*params_vdev,
|
||||
u32 reg, u32 bit_mask)
|
||||
{
|
||||
u32 val;
|
||||
|
||||
val = rkisp1_ioread32(params_vdev, reg);
|
||||
rkisp1_iowrite32(params_vdev, val & ~bit_mask, reg);
|
||||
}
|
||||
|
||||
/* ISP BP interface function */
|
||||
static void isp_dpcc_config(struct rkisp_isp_params_vdev *params_vdev,
|
||||
const struct cifisp_dpcc_config *arg)
|
||||
@@ -2261,18 +2241,6 @@ rkisp1_get_param_size_v1x(struct rkisp_isp_params_vdev *params_vdev, unsigned in
|
||||
sizes[0] = sizeof(struct rkisp1_isp_params_cfg);
|
||||
}
|
||||
|
||||
static void
|
||||
rkisp_params_get_ldchbuf_inf_v1x(struct rkisp_isp_params_vdev *params_vdev,
|
||||
struct rkisp_ldchbuf_info *ldchbuf)
|
||||
{
|
||||
}
|
||||
|
||||
static void
|
||||
rkisp_params_set_ldchbuf_size_v1x(struct rkisp_isp_params_vdev *params_vdev,
|
||||
struct rkisp_ldchbuf_size *ldchsize)
|
||||
{
|
||||
}
|
||||
|
||||
/* Not called when the camera active, thus not isr protection. */
|
||||
static void rkisp1_params_disable_isp_v1x(struct rkisp_isp_params_vdev *params_vdev)
|
||||
{
|
||||
@@ -2354,8 +2322,6 @@ static struct rkisp_isp_params_ops rkisp_isp_params_ops_tbl = {
|
||||
.first_cfg = rkisp1_params_first_cfg_v1x,
|
||||
.disable_isp = rkisp1_params_disable_isp_v1x,
|
||||
.isr_hdl = rkisp1_params_isr_v1x,
|
||||
.get_ldchbuf_inf = rkisp_params_get_ldchbuf_inf_v1x,
|
||||
.set_ldchbuf_size = rkisp_params_set_ldchbuf_size_v1x,
|
||||
};
|
||||
|
||||
int rkisp_init_params_vdev_v1x(struct rkisp_isp_params_vdev *params_vdev)
|
||||
|
||||
@@ -23,40 +23,6 @@
|
||||
#define ISP2X_NOBIG_OVERFLOW_SIZE (2688 * 1536)
|
||||
#define ISP2X_AUTO_BIGMODE_WIDTH 2688
|
||||
|
||||
static inline void
|
||||
rkisp_iowrite32(struct rkisp_isp_params_vdev *params_vdev,
|
||||
u32 value, u32 addr)
|
||||
{
|
||||
rkisp_write(params_vdev->dev, addr, value, false);
|
||||
}
|
||||
|
||||
static inline u32
|
||||
rkisp_ioread32(struct rkisp_isp_params_vdev *params_vdev,
|
||||
u32 addr)
|
||||
{
|
||||
return rkisp_read(params_vdev->dev, addr, false);
|
||||
}
|
||||
|
||||
static inline void
|
||||
isp_param_set_bits(struct rkisp_isp_params_vdev *params_vdev,
|
||||
u32 reg, u32 bit_mask)
|
||||
{
|
||||
u32 val;
|
||||
|
||||
val = rkisp_ioread32(params_vdev, reg);
|
||||
rkisp_iowrite32(params_vdev, val | bit_mask, reg);
|
||||
}
|
||||
|
||||
static inline void
|
||||
isp_param_clear_bits(struct rkisp_isp_params_vdev *params_vdev,
|
||||
u32 reg, u32 bit_mask)
|
||||
{
|
||||
u32 val;
|
||||
|
||||
val = rkisp_ioread32(params_vdev, reg);
|
||||
rkisp_iowrite32(params_vdev, val & ~bit_mask, reg);
|
||||
}
|
||||
|
||||
static inline size_t
|
||||
isp_param_get_insize(struct rkisp_isp_params_vdev *params_vdev)
|
||||
{
|
||||
@@ -632,6 +598,8 @@ static void
|
||||
isp_lsc_config(struct rkisp_isp_params_vdev *params_vdev,
|
||||
const struct isp2x_lsc_cfg *arg)
|
||||
{
|
||||
struct rkisp_isp_params_val_v21 *priv_val =
|
||||
(struct rkisp_isp_params_val_v21 *)params_vdev->priv_val;
|
||||
struct rkisp_device *dev = params_vdev->dev;
|
||||
unsigned int data;
|
||||
u32 lsc_ctrl;
|
||||
@@ -679,7 +647,7 @@ isp_lsc_config(struct rkisp_isp_params_vdev *params_vdev,
|
||||
isp_param_clear_bits(params_vdev, ISP_LSC_CTRL, ISP_LSC_EN);
|
||||
}
|
||||
|
||||
params_vdev->cur_lsccfg = *arg;
|
||||
priv_val->cur_lsccfg = *arg;
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -3700,19 +3668,21 @@ void __isp_config_hdrshd(struct rkisp_isp_params_vdev *params_vdev)
|
||||
{
|
||||
struct rkisp_isp_params_v21_ops *ops =
|
||||
(struct rkisp_isp_params_v21_ops *)params_vdev->priv_ops;
|
||||
struct rkisp_isp_params_val_v21 *priv_val =
|
||||
(struct rkisp_isp_params_val_v21 *)params_vdev->priv_val;
|
||||
|
||||
ops->hdrmge_config(params_vdev,
|
||||
¶ms_vdev->last_hdrmge, RKISP_PARAMS_SHD);
|
||||
ops->hdrmge_config(params_vdev, &priv_val->last_hdrmge, RKISP_PARAMS_SHD);
|
||||
|
||||
ops->hdrdrc_config(params_vdev,
|
||||
¶ms_vdev->last_hdrdrc, RKISP_PARAMS_SHD);
|
||||
ops->hdrdrc_config(params_vdev, &priv_val->last_hdrdrc, RKISP_PARAMS_SHD);
|
||||
}
|
||||
|
||||
static
|
||||
void rkisp_params_cfgsram_v2x(struct rkisp_isp_params_vdev *params_vdev)
|
||||
{
|
||||
isp_lsc_matrix_cfg_sram(params_vdev,
|
||||
¶ms_vdev->cur_lsccfg, true);
|
||||
struct rkisp_isp_params_val_v21 *priv_val =
|
||||
(struct rkisp_isp_params_val_v21 *)params_vdev->priv_val;
|
||||
|
||||
isp_lsc_matrix_cfg_sram(params_vdev, &priv_val->cur_lsccfg, true);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -3777,10 +3747,10 @@ rkisp_params_first_cfg_v2x(struct rkisp_isp_params_vdev *params_vdev)
|
||||
ISP2X_SYS_BIGMODE_MANUAL | ISP2X_SYS_BIGMODE_FORCEEN, false);
|
||||
}
|
||||
|
||||
params_vdev->cur_hdrmge = params_vdev->isp21_params->others.hdrmge_cfg;
|
||||
params_vdev->cur_hdrdrc = params_vdev->isp21_params->others.drc_cfg;
|
||||
params_vdev->last_hdrmge = params_vdev->cur_hdrmge;
|
||||
params_vdev->last_hdrdrc = params_vdev->cur_hdrdrc;
|
||||
priv_val->cur_hdrmge = params_vdev->isp21_params->others.hdrmge_cfg;
|
||||
priv_val->cur_hdrdrc = params_vdev->isp21_params->others.drc_cfg;
|
||||
priv_val->last_hdrmge = priv_val->cur_hdrmge;
|
||||
priv_val->last_hdrdrc = priv_val->cur_hdrdrc;
|
||||
spin_unlock(¶ms_vdev->config_lock);
|
||||
}
|
||||
|
||||
@@ -3875,9 +3845,10 @@ rkisp_get_param_size_v2x(struct rkisp_isp_params_vdev *params_vdev,
|
||||
|
||||
static void
|
||||
rkisp_params_get_ldchbuf_inf_v2x(struct rkisp_isp_params_vdev *params_vdev,
|
||||
struct rkisp_ldchbuf_info *ldchbuf)
|
||||
void *buf)
|
||||
{
|
||||
struct rkisp_isp_params_val_v21 *priv_val;
|
||||
struct rkisp_ldchbuf_info *ldchbuf = buf;
|
||||
int i;
|
||||
|
||||
priv_val = params_vdev->priv_val;
|
||||
@@ -3889,8 +3860,10 @@ rkisp_params_get_ldchbuf_inf_v2x(struct rkisp_isp_params_vdev *params_vdev,
|
||||
|
||||
static void
|
||||
rkisp_params_set_ldchbuf_size_v2x(struct rkisp_isp_params_vdev *params_vdev,
|
||||
struct rkisp_ldchbuf_size *ldchsize)
|
||||
void *size)
|
||||
{
|
||||
struct rkisp_ldchbuf_size *ldchsize = size;
|
||||
|
||||
rkisp_deinit_ldch_buf(params_vdev);
|
||||
rkisp_init_ldch_buf(params_vdev, ldchsize);
|
||||
}
|
||||
@@ -4024,10 +3997,13 @@ rkisp_params_cfg_v2x(struct rkisp_isp_params_vdev *params_vdev,
|
||||
__isp_config_hdrshd(params_vdev);
|
||||
|
||||
if (type != RKISP_PARAMS_IMD) {
|
||||
params_vdev->last_hdrmge = params_vdev->cur_hdrmge;
|
||||
params_vdev->last_hdrdrc = params_vdev->cur_hdrdrc;
|
||||
params_vdev->cur_hdrmge = new_params->others.hdrmge_cfg;
|
||||
params_vdev->cur_hdrdrc = new_params->others.drc_cfg;
|
||||
struct rkisp_isp_params_val_v21 *priv_val =
|
||||
(struct rkisp_isp_params_val_v21 *)params_vdev->priv_val;
|
||||
|
||||
priv_val->last_hdrmge = priv_val->cur_hdrmge;
|
||||
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;
|
||||
vb2_buffer_done(&cur_buf->vb.vb2_buf, VB2_BUF_STATE_DONE);
|
||||
cur_buf = NULL;
|
||||
}
|
||||
@@ -4096,8 +4072,8 @@ static struct rkisp_isp_params_ops rkisp_isp_params_ops_tbl = {
|
||||
.isr_hdl = rkisp_params_isr_v2x,
|
||||
.param_cfg = rkisp_params_cfg_v2x,
|
||||
.param_cfgsram = rkisp_params_cfgsram_v2x,
|
||||
.get_ldchbuf_inf = rkisp_params_get_ldchbuf_inf_v2x,
|
||||
.set_ldchbuf_size = rkisp_params_set_ldchbuf_size_v2x,
|
||||
.get_meshbuf_inf = rkisp_params_get_ldchbuf_inf_v2x,
|
||||
.set_meshbuf_size = rkisp_params_set_ldchbuf_size_v2x,
|
||||
.stream_stop = rkisp_params_stream_stop_v2x,
|
||||
.fop_release = rkisp_params_fop_release_v2x,
|
||||
};
|
||||
|
||||
@@ -8,174 +8,7 @@
|
||||
#include <linux/rk-preisp.h>
|
||||
#include "common.h"
|
||||
#include "isp_params.h"
|
||||
|
||||
#define ISP2X_YUVAE_ENA BIT(0)
|
||||
#define ISP2X_YUVAE_WNDNUM_SET BIT(1)
|
||||
#define ISP2X_YUVAE_SUBWIN1_EN BIT(4)
|
||||
#define ISP2X_YUVAE_SUBWIN2_EN BIT(5)
|
||||
#define ISP2X_YUVAE_SUBWIN3_EN BIT(6)
|
||||
#define ISP2X_YUVAE_SUBWIN4_EN BIT(7)
|
||||
#define ISP2X_YUVAE_YSEL BIT(16)
|
||||
#define ISP2X_YUVAE_H_OFFSET_SET(x) ((x) & 0x1FFF)
|
||||
#define ISP2X_YUVAE_V_OFFSET_SET(x) (((x) & 0x1FFF) << 16)
|
||||
#define ISP2X_YUVAE_H_SIZE_SET(x) ((x) & 0x7FF)
|
||||
#define ISP2X_YUVAE_V_SIZE_SET(x) (((x) & 0x7FF) << 16)
|
||||
#define ISP2X_YUVAE_SUBWIN_H_OFFSET_SET(x) ((x) & 0x1FFF)
|
||||
#define ISP2X_YUVAE_SUBWIN_V_OFFSET_SET(x) (((x) & 0x1FFF) << 16)
|
||||
#define ISP2X_YUVAE_SUBWIN_H_SIZE_SET(x) ((x) & 0x1FFF)
|
||||
#define ISP2X_YUVAE_SUBWIN_V_SIZE_SET(x) (((x) & 0x1FFF) << 16)
|
||||
|
||||
#define ISP2X_RAWAE_LITE_ENA BIT(0)
|
||||
#define ISP2X_RAWAE_LITE_WNDNUM_SET(x) (((x) & 0x1) << 1)
|
||||
#define ISP2X_RAWAE_LITE_H_OFFSET_SET(x) ((x) & 0x1FFF)
|
||||
#define ISP2X_RAWAE_LITE_V_OFFSET_SET(x) (((x) & 0x1FFF) << 16)
|
||||
#define ISP2X_RAWAE_LITE_H_SIZE_SET(x) ((x) & 0x1FFF)
|
||||
#define ISP2X_RAWAE_LITE_V_SIZE_SET(x) (((x) & 0x1FFF) << 16)
|
||||
|
||||
#define ISP2X_RAWAEBIG_ENA BIT(0)
|
||||
#define ISP2X_RAWAEBIG_WNDNUM_SET(x) (((x) & 0x3) << 1)
|
||||
#define ISP2X_RAWAEBIG_SUBWIN1_EN BIT(4)
|
||||
#define ISP2X_RAWAEBIG_SUBWIN2_EN BIT(5)
|
||||
#define ISP2X_RAWAEBIG_SUBWIN3_EN BIT(6)
|
||||
#define ISP2X_RAWAEBIG_SUBWIN4_EN BIT(7)
|
||||
#define ISP2X_RAWAEBIG_H_OFFSET_SET(x) ((x) & 0x1FFF)
|
||||
#define ISP2X_RAWAEBIG_V_OFFSET_SET(x) (((x) & 0x1FFF) << 16)
|
||||
#define ISP2X_RAWAEBIG_H_SIZE_SET(x) ((x) & 0x7FF)
|
||||
#define ISP2X_RAWAEBIG_V_SIZE_SET(x) (((x) & 0x7FF) << 16)
|
||||
#define ISP2X_RAWAEBIG_SUBWIN_H_OFFSET_SET(x) ((x) & 0x1FFF)
|
||||
#define ISP2X_RAWAEBIG_SUBWIN_V_OFFSET_SET(x) (((x) & 0x1FFF) << 16)
|
||||
#define ISP2X_RAWAEBIG_SUBWIN_H_SIZE_SET(x) ((x) & 0x1FFF)
|
||||
#define ISP2X_RAWAEBIG_SUBWIN_V_SIZE_SET(x) (((x) & 0x1FFF) << 16)
|
||||
|
||||
#define ISP2X_SIAWB_YMAX_CMP_EN BIT(2)
|
||||
#define ISP2X_SIAWB_RGB_MODE_EN BIT(31)
|
||||
#define ISP2X_SIAWB_SET_FRAMES(x) (((x) & 0x07) << 28)
|
||||
#define ISP2X_SIAWB_MODE_SET(x) ((x) << 0)
|
||||
|
||||
#define ISP2X_SIAF_ENA BIT(0)
|
||||
#define ISP2X_SIAF_WIN_X(x) (((x) & 0x1FFF) << 16)
|
||||
#define ISP2X_SIAF_WIN_Y(x) ((x) & 0x1FFF)
|
||||
#define ISP2X_SIAF_SET_SHIFT_A(x, y) (((x) & 0x7) << 16 | ((y) & 0x7) << 0)
|
||||
#define ISP2X_SIAF_SET_SHIFT_B(x, y) (((x) & 0x7) << 20 | ((y) & 0x7) << 4)
|
||||
#define ISP2X_SIAF_SET_SHIFT_C(x, y) (((x) & 0x7) << 24 | ((y) & 0x7) << 8)
|
||||
#define ISP2X_SIAF_GET_LUM_SHIFT_A(x) (((x) & 0x70000) >> 16)
|
||||
#define ISP2X_SIAF_GET_AFM_SHIFT_A(x) ((x) & 0x7)
|
||||
|
||||
#define ISP2X_RAWAF_ENA BIT(0)
|
||||
#define ISP2X_RAWAF_GAMMA_ENA BIT(1)
|
||||
#define ISP2X_RAWAF_GAUS_ENA BIT(2)
|
||||
|
||||
#define ISP2X_RAWAF_INT_LINE0_EN BIT(27)
|
||||
#define ISP2X_RAWAF_INT_LINE1_EN BIT(28)
|
||||
#define ISP2X_RAWAF_INT_LINE2_EN BIT(29)
|
||||
#define ISP2X_RAWAF_INT_LINE3_EN BIT(30)
|
||||
#define ISP2X_RAWAF_INT_LINE4_EN BIT(31)
|
||||
#define ISP2X_RAWAF_INT_LINE0_NUM(x) (((x) & 0xF) << 0)
|
||||
#define ISP2X_RAWAF_INT_LINE1_NUM(x) (((x) & 0xF) << 4)
|
||||
#define ISP2X_RAWAF_INT_LINE2_NUM(x) (((x) & 0xF) << 8)
|
||||
#define ISP2X_RAWAF_INT_LINE3_NUM(x) (((x) & 0xF) << 12)
|
||||
#define ISP2X_RAWAF_INT_LINE4_NUM(x) (((x) & 0xF) << 16)
|
||||
|
||||
#define ISP2X_RAWAF_THRES(x) ((x) & 0xFFFF)
|
||||
|
||||
#define ISP2X_RAWAF_WIN_X(x) (((x) & 0x1FFF) << 16)
|
||||
#define ISP2X_RAWAF_WIN_Y(x) ((x) & 0x1FFF)
|
||||
#define ISP2X_RAWAF_SET_SHIFT_A(x, y) (((x) & 0x7) << 16 | ((y) & 0x7) << 0)
|
||||
#define ISP2X_RAWAF_SET_SHIFT_B(x, y) (((x) & 0x7) << 20 | ((y) & 0x7) << 4)
|
||||
|
||||
#define ISP2X_SIHST_CTRL_EN_SET(x) (((x) & 0x01) << 0)
|
||||
#define ISP2X_SIHST_CTRL_EN_MASK ISP2X_SIHST_CTRL_EN_SET(0x01)
|
||||
#define ISP2X_SIHST_CTRL_STEPSIZE_SET(x) (((x) & 0x7F) << 1)
|
||||
#define ISP2X_SIHST_CTRL_MODE_SET(x) (((x) & 0x07) << 8)
|
||||
#define ISP2X_SIHST_CTRL_MODE_MASK ISP2X_SIHST_CTRL_MODE_SET(0x07)
|
||||
#define ISP2X_SIHST_CTRL_AUTOSTOP_SET(x) (((x) & 0x01) << 11)
|
||||
#define ISP2X_SIHST_CTRL_WATERLINE_SET(x) (((x) & 0xFFF) << 12)
|
||||
#define ISP2X_SIHST_CTRL_DATASEL_SET(x) (((x) & 0x07) << 24)
|
||||
#define ISP2X_SIHST_CTRL_INTRSEL_SET(x) (((x) & 0x01) << 27)
|
||||
#define ISP2X_SIHST_CTRL_INTRSEL_MASK ISP2X_SIHST_CTRL_INTRSEL_SET(0x01)
|
||||
#define ISP2X_SIHST_CTRL_WNDNUM_SET(x) (((x) & 0x03) << 28)
|
||||
#define ISP2X_SIHST_CTRL_WNDNUM_MASK ISP2X_SIHST_CTRL_WNDNUM_SET(0x03)
|
||||
|
||||
#define ISP2X_SIHST_ROW_NUM 15
|
||||
#define ISP2X_SIHST_COLUMN_NUM 15
|
||||
#define ISP2X_SIHST_WEIGHT_REG_SIZE \
|
||||
(ISP2X_SIHST_ROW_NUM * ISP2X_SIHST_COLUMN_NUM)
|
||||
|
||||
#define ISP2X_SIHST_WEIGHT_SET(v0, v1, v2, v3) \
|
||||
(((v0) & 0x3F) | (((v1) & 0x3F) << 8) |\
|
||||
(((v2) & 0x3F) << 16) |\
|
||||
(((v3) & 0x3F) << 24))
|
||||
|
||||
#define ISP2X_SIHST_OFFS_SET(v0, v1) \
|
||||
(((v0) & 0x1FFF) | (((v1) & 0x1FFF) << 16))
|
||||
#define ISP2X_SIHST_SIZE_SET(v0, v1) \
|
||||
(((v0) & 0x1FFF) | (((v1) & 0x1FFF) << 16))
|
||||
|
||||
#define ISP2X_RAWHSTBIG_CTRL_EN_SET(x) (((x) & 0x01) << 0)
|
||||
#define ISP2X_RAWHSTBIG_CTRL_EN_MASK ISP2X_RAWHSTBIG_CTRL_EN_SET(0x01)
|
||||
#define ISP2X_RAWHSTBIG_CTRL_STEPSIZE_SET(x) (((x) & 0x07) << 1)
|
||||
#define ISP2X_RAWHSTBIG_CTRL_MODE_SET(x) (((x) & 0x07) << 8)
|
||||
#define ISP2X_RAWHSTBIG_CTRL_MODE_MASK ISP2X_RAWHSTBIG_CTRL_MODE_SET(0x07)
|
||||
#define ISP2X_RAWHSTBIG_CTRL_WATERLINE_SET(x) (((x) & 0xFFF) << 12)
|
||||
#define ISP2X_RAWHSTBIG_CTRL_DATASEL_SET(x) (((x) & 0x07) << 24)
|
||||
#define ISP2X_RAWHSTBIG_CTRL_WNDNUM_SET(x) (((x) & 0x03) << 28)
|
||||
#define ISP2X_RAWHSTBIG_CTRL_WNDNUM_MASK ISP2X_RAWHSTBIG_CTRL_WNDNUM_SET(0x03)
|
||||
|
||||
#define ISP2X_RAWHSTBIG_WRAM_EN BIT(31)
|
||||
|
||||
#define ISP2X_RAWHSTBIG_ROW_NUM 15
|
||||
#define ISP2X_RAWHSTBIG_COLUMN_NUM 15
|
||||
#define ISP2X_RAWHSTBIG_WEIGHT_REG_SIZE \
|
||||
(ISP2X_RAWHSTBIG_ROW_NUM * ISP2X_RAWHSTBIG_COLUMN_NUM)
|
||||
|
||||
#define ISP2X_RAWHSTBIG_WEIGHT_SET(v0, v1, v2, v3, v4) \
|
||||
(((v0) & 0x3F) | (((v1) & 0x3F) << 6) |\
|
||||
(((v2) & 0x3F) << 12) |\
|
||||
(((v3) & 0x3F) << 18) |\
|
||||
(((v4) & 0x3F) << 24))
|
||||
|
||||
#define ISP2X_RAWHSTBIG_OFFS_SET(v0, v1) \
|
||||
(((v0) & 0x1FFF) | (((v1) & 0x1FFF) << 16))
|
||||
#define ISP2X_RAWHSTBIG_SIZE_SET(v0, v1) \
|
||||
(((v0) & 0x7FF) | (((v1) & 0x7FF) << 16))
|
||||
|
||||
#define ISP2X_RAWHSTLITE_CTRL_EN_SET(x) (((x) & 0x01) << 0)
|
||||
#define ISP2X_RAWHSTLITE_CTRL_EN_MASK ISP2X_RAWHSTBIG_CTRL_EN_SET(0x01)
|
||||
#define ISP2X_RAWHSTLITE_CTRL_STEPSIZE_SET(x) (((x) & 0x07) << 1)
|
||||
#define ISP2X_RAWHSTLITE_CTRL_MODE_SET(x) (((x) & 0x07) << 8)
|
||||
#define ISP2X_RAWHSTLITE_CTRL_MODE_MASK ISP2X_RAWHSTBIG_CTRL_MODE_SET(0x07)
|
||||
#define ISP2X_RAWHSTLITE_CTRL_WATERLINE_SET(x) (((x) & 0xFFF) << 12)
|
||||
#define ISP2X_RAWHSTLITE_CTRL_DATASEL_SET(x) (((x) & 0x07) << 24)
|
||||
|
||||
#define ISP2X_RAWHSTLITE_ROW_NUM 5
|
||||
#define ISP2X_RAWHSTLITE_COLUMN_NUM 5
|
||||
#define ISP2X_RAWHSTLITE_WEIGHT_REG_SIZE \
|
||||
(ISP2X_RAWHSTLITE_ROW_NUM * ISP2X_RAWHSTLITE_COLUMN_NUM)
|
||||
|
||||
#define ISP2X_RAWHSTLITE_WEIGHT_SET(v0, v1, v2, v3) \
|
||||
(((v0) & 0x3F) | (((v1) & 0x3F) << 8) |\
|
||||
(((v2) & 0x3F) << 16) |\
|
||||
(((v3) & 0x3F) << 24))
|
||||
|
||||
#define ISP2X_RAWHSTLITE_OFFS_SET(v0, v1) \
|
||||
(((v0) & 0x1FFF) | (((v1) & 0x1FFF) << 16))
|
||||
#define ISP2X_RAWHSTLITE_SIZE_SET(v0, v1) \
|
||||
(((v0) & 0x7FF) | (((v1) & 0x7FF) << 16))
|
||||
|
||||
#define ISP2X_RAWAWB_ENA BIT(0)
|
||||
#define ISP2X_RAWAWB_WPTH2_SET(x) (((x) & 0x1FF) << 9)
|
||||
|
||||
#define ISP2X_ISPPATH_RAWAE_SEL_SET(x) (((x) & 0x03) << 16)
|
||||
#define ISP2X_ISPPATH_RAWAF_SEL_SET(x) (((x) & 0x03) << 18)
|
||||
#define ISP2X_ISPPATH_RAWAWB_SEL_SET(x) (((x) & 0x03) << 20)
|
||||
#define ISP2X_ISPPATH_RAWAE_SWAP_SET(x) (((x) & 0x03) << 22)
|
||||
|
||||
#define RKISP_PARAM_3DLUT_BUF_NUM 2
|
||||
#define RKISP_PARAM_3DLUT_BUF_SIZE (9 * 9 * 9 * 4)
|
||||
|
||||
#define RKISP_PARAM_LSC_LUT_BUF_NUM 2
|
||||
#define RKISP_PARAM_LSC_LUT_TBL_SIZE (9 * 17 * 4)
|
||||
#define RKISP_PARAM_LSC_LUT_BUF_SIZE (RKISP_PARAM_LSC_LUT_TBL_SIZE * 4)
|
||||
#include "isp_params_v2x.h"
|
||||
|
||||
struct rkisp_isp_params_vdev;
|
||||
struct rkisp_isp_params_v21_ops {
|
||||
@@ -319,6 +152,12 @@ struct rkisp_isp_params_val_v21 {
|
||||
|
||||
struct rkisp_dummy_buffer buf_3dnr;
|
||||
|
||||
struct isp2x_hdrmge_cfg last_hdrmge;
|
||||
struct isp21_drc_cfg last_hdrdrc;
|
||||
struct isp2x_hdrmge_cfg cur_hdrmge;
|
||||
struct isp21_drc_cfg cur_hdrdrc;
|
||||
struct isp2x_lsc_cfg cur_lsccfg;
|
||||
|
||||
u8 dhaz_en;
|
||||
u8 wdr_en;
|
||||
u8 tmo_en;
|
||||
|
||||
@@ -23,40 +23,6 @@
|
||||
#define ISP2X_REG_WR_MASK BIT(31) //disable write protect
|
||||
#define ISP2X_NOBIG_OVERFLOW_SIZE (2560 * 1440)
|
||||
|
||||
static inline void
|
||||
rkisp_iowrite32(struct rkisp_isp_params_vdev *params_vdev,
|
||||
u32 value, u32 addr)
|
||||
{
|
||||
rkisp_write(params_vdev->dev, addr, value, false);
|
||||
}
|
||||
|
||||
static inline u32
|
||||
rkisp_ioread32(struct rkisp_isp_params_vdev *params_vdev,
|
||||
u32 addr)
|
||||
{
|
||||
return rkisp_read(params_vdev->dev, addr, false);
|
||||
}
|
||||
|
||||
static inline void
|
||||
isp_param_set_bits(struct rkisp_isp_params_vdev *params_vdev,
|
||||
u32 reg, u32 bit_mask)
|
||||
{
|
||||
u32 val;
|
||||
|
||||
val = rkisp_ioread32(params_vdev, reg);
|
||||
rkisp_iowrite32(params_vdev, val | bit_mask, reg);
|
||||
}
|
||||
|
||||
static inline void
|
||||
isp_param_clear_bits(struct rkisp_isp_params_vdev *params_vdev,
|
||||
u32 reg, u32 bit_mask)
|
||||
{
|
||||
u32 val;
|
||||
|
||||
val = rkisp_ioread32(params_vdev, reg);
|
||||
rkisp_iowrite32(params_vdev, val & ~bit_mask, reg);
|
||||
}
|
||||
|
||||
static inline size_t
|
||||
isp_param_get_insize(struct rkisp_isp_params_vdev *params_vdev)
|
||||
{
|
||||
@@ -708,6 +674,8 @@ static void
|
||||
isp_lsc_config(struct rkisp_isp_params_vdev *params_vdev,
|
||||
const struct isp2x_lsc_cfg *arg)
|
||||
{
|
||||
struct rkisp_isp_params_val_v2x *priv_val =
|
||||
(struct rkisp_isp_params_val_v2x *)params_vdev->priv_val;
|
||||
struct rkisp_device *dev = params_vdev->dev;
|
||||
unsigned int data;
|
||||
u32 lsc_ctrl;
|
||||
@@ -755,7 +723,7 @@ isp_lsc_config(struct rkisp_isp_params_vdev *params_vdev,
|
||||
isp_param_clear_bits(params_vdev, ISP_LSC_CTRL, ISP_LSC_EN);
|
||||
}
|
||||
|
||||
params_vdev->cur_lsccfg = *arg;
|
||||
priv_val->cur_lsccfg = *arg;
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -4036,18 +4004,20 @@ void __isp_config_hdrshd(struct rkisp_isp_params_vdev *params_vdev)
|
||||
{
|
||||
struct rkisp_isp_params_v2x_ops *ops =
|
||||
(struct rkisp_isp_params_v2x_ops *)params_vdev->priv_ops;
|
||||
struct rkisp_isp_params_val_v2x *priv_val =
|
||||
(struct rkisp_isp_params_val_v2x *)params_vdev->priv_val;
|
||||
|
||||
ops->hdrmge_config(params_vdev,
|
||||
¶ms_vdev->last_hdrmge, RKISP_PARAMS_ALL);
|
||||
ops->hdrtmo_config(params_vdev,
|
||||
¶ms_vdev->last_hdrtmo, RKISP_PARAMS_ALL);
|
||||
ops->hdrmge_config(params_vdev, &priv_val->last_hdrmge, RKISP_PARAMS_ALL);
|
||||
ops->hdrtmo_config(params_vdev, &priv_val->last_hdrtmo, RKISP_PARAMS_ALL);
|
||||
}
|
||||
|
||||
static
|
||||
void rkisp_params_cfgsram_v2x(struct rkisp_isp_params_vdev *params_vdev)
|
||||
{
|
||||
isp_lsc_matrix_cfg_sram(params_vdev,
|
||||
¶ms_vdev->cur_lsccfg, true);
|
||||
struct rkisp_isp_params_val_v2x *priv_val =
|
||||
(struct rkisp_isp_params_val_v2x *)params_vdev->priv_val;
|
||||
|
||||
isp_lsc_matrix_cfg_sram(params_vdev, &priv_val->cur_lsccfg, true);
|
||||
}
|
||||
|
||||
/* Not called when the camera active, thus not isr protection. */
|
||||
@@ -4077,10 +4047,10 @@ rkisp_params_first_cfg_v2x(struct rkisp_isp_params_vdev *params_vdev)
|
||||
__isp_isr_meas_en(params_vdev, params_vdev->isp2x_params, RKISP_PARAMS_ALL);
|
||||
params_vdev->first_cfg_params = false;
|
||||
|
||||
params_vdev->cur_hdrtmo = params_vdev->isp2x_params->others.hdrtmo_cfg;
|
||||
params_vdev->cur_hdrmge = params_vdev->isp2x_params->others.hdrmge_cfg;
|
||||
params_vdev->last_hdrtmo = params_vdev->cur_hdrtmo;
|
||||
params_vdev->last_hdrmge = params_vdev->cur_hdrmge;
|
||||
priv_val->cur_hdrtmo = params_vdev->isp2x_params->others.hdrtmo_cfg;
|
||||
priv_val->cur_hdrmge = params_vdev->isp2x_params->others.hdrmge_cfg;
|
||||
priv_val->last_hdrtmo = priv_val->cur_hdrtmo;
|
||||
priv_val->last_hdrmge = priv_val->cur_hdrmge;
|
||||
spin_unlock(¶ms_vdev->config_lock);
|
||||
}
|
||||
|
||||
@@ -4179,9 +4149,10 @@ rkisp_get_param_size_v2x(struct rkisp_isp_params_vdev *params_vdev,
|
||||
|
||||
static void
|
||||
rkisp_params_get_ldchbuf_inf_v2x(struct rkisp_isp_params_vdev *params_vdev,
|
||||
struct rkisp_ldchbuf_info *ldchbuf)
|
||||
void *buf)
|
||||
{
|
||||
struct rkisp_isp_params_val_v2x *priv_val;
|
||||
struct rkisp_ldchbuf_info *ldchbuf = buf;
|
||||
int i;
|
||||
|
||||
priv_val = params_vdev->priv_val;
|
||||
@@ -4193,8 +4164,10 @@ rkisp_params_get_ldchbuf_inf_v2x(struct rkisp_isp_params_vdev *params_vdev,
|
||||
|
||||
static void
|
||||
rkisp_params_set_ldchbuf_size_v2x(struct rkisp_isp_params_vdev *params_vdev,
|
||||
struct rkisp_ldchbuf_size *ldchsize)
|
||||
void *size)
|
||||
{
|
||||
struct rkisp_ldchbuf_size *ldchsize = size;
|
||||
|
||||
rkisp_deinit_ldch_buf(params_vdev);
|
||||
rkisp_init_ldch_buf(params_vdev, ldchsize);
|
||||
}
|
||||
@@ -4319,10 +4292,13 @@ rkisp_params_cfg_v2x(struct rkisp_isp_params_vdev *params_vdev,
|
||||
__isp_config_hdrshd(params_vdev);
|
||||
|
||||
if (type != RKISP_PARAMS_IMD) {
|
||||
params_vdev->last_hdrtmo = params_vdev->cur_hdrtmo;
|
||||
params_vdev->last_hdrmge = params_vdev->cur_hdrmge;
|
||||
params_vdev->cur_hdrtmo = new_params->others.hdrtmo_cfg;
|
||||
params_vdev->cur_hdrmge = new_params->others.hdrmge_cfg;
|
||||
struct rkisp_isp_params_val_v2x *priv_val =
|
||||
(struct rkisp_isp_params_val_v2x *)params_vdev->priv_val;
|
||||
|
||||
priv_val->last_hdrtmo = priv_val->cur_hdrtmo;
|
||||
priv_val->last_hdrmge = priv_val->cur_hdrmge;
|
||||
priv_val->cur_hdrtmo = new_params->others.hdrtmo_cfg;
|
||||
priv_val->cur_hdrmge = new_params->others.hdrmge_cfg;
|
||||
vb2_buffer_done(&cur_buf->vb.vb2_buf, VB2_BUF_STATE_DONE);
|
||||
cur_buf = NULL;
|
||||
}
|
||||
@@ -4377,8 +4353,8 @@ static struct rkisp_isp_params_ops rkisp_isp_params_ops_tbl = {
|
||||
.isr_hdl = rkisp_params_isr_v2x,
|
||||
.param_cfg = rkisp_params_cfg_v2x,
|
||||
.param_cfgsram = rkisp_params_cfgsram_v2x,
|
||||
.get_ldchbuf_inf = rkisp_params_get_ldchbuf_inf_v2x,
|
||||
.set_ldchbuf_size = rkisp_params_set_ldchbuf_size_v2x,
|
||||
.get_meshbuf_inf = rkisp_params_get_ldchbuf_inf_v2x,
|
||||
.set_meshbuf_size = rkisp_params_set_ldchbuf_size_v2x,
|
||||
.fop_release = rkisp_params_fop_release_v2x,
|
||||
};
|
||||
|
||||
|
||||
@@ -329,6 +329,12 @@ struct rkisp_isp_params_val_v2x {
|
||||
struct rkisp_dummy_buffer buf_lsclut[RKISP_PARAM_LSC_LUT_BUF_NUM];
|
||||
u32 buf_lsclut_idx;
|
||||
|
||||
struct isp2x_hdrtmo_cfg last_hdrtmo;
|
||||
struct isp2x_hdrmge_cfg last_hdrmge;
|
||||
struct isp2x_hdrtmo_cfg cur_hdrtmo;
|
||||
struct isp2x_hdrmge_cfg cur_hdrmge;
|
||||
struct isp2x_lsc_cfg cur_lsccfg;
|
||||
|
||||
u8 dhaz_en;
|
||||
u8 wdr_en;
|
||||
u8 tmo_en;
|
||||
|
||||
@@ -2475,8 +2475,6 @@ static long rkisp_ioctl(struct v4l2_subdev *sd, unsigned int cmd, void *arg)
|
||||
struct rkisp_device *isp_dev = sd_to_isp_dev(sd);
|
||||
struct rkisp_thunderboot_resmem *resmem;
|
||||
struct rkisp_thunderboot_resmem_head *head;
|
||||
struct rkisp_ldchbuf_info *ldchbuf;
|
||||
struct rkisp_ldchbuf_size *ldchsize;
|
||||
struct rkisp_thunderboot_shmem *shmem;
|
||||
struct isp2x_buf_idxfd *idxfd;
|
||||
void *resmem_va;
|
||||
@@ -2532,12 +2530,12 @@ static long rkisp_ioctl(struct v4l2_subdev *sd, unsigned int cmd, void *arg)
|
||||
isp_dev->resmem_size = 0;
|
||||
break;
|
||||
case RKISP_CMD_GET_LDCHBUF_INFO:
|
||||
ldchbuf = (struct rkisp_ldchbuf_info *)arg;
|
||||
rkisp_params_get_ldchbuf_inf(&isp_dev->params_vdev, ldchbuf);
|
||||
case RKISP_CMD_GET_MESHBUF_INFO:
|
||||
rkisp_params_get_meshbuf_inf(&isp_dev->params_vdev, arg);
|
||||
break;
|
||||
case RKISP_CMD_SET_LDCHBUF_SIZE:
|
||||
ldchsize = (struct rkisp_ldchbuf_size *)arg;
|
||||
rkisp_params_set_ldchbuf_size(&isp_dev->params_vdev, ldchsize);
|
||||
case RKISP_CMD_SET_MESHBUF_SIZE:
|
||||
rkisp_params_set_meshbuf_size(&isp_dev->params_vdev, arg);
|
||||
break;
|
||||
case RKISP_CMD_GET_SHM_BUFFD:
|
||||
shmem = (struct rkisp_thunderboot_shmem *)arg;
|
||||
@@ -2563,6 +2561,8 @@ static long rkisp_compat_ioctl32(struct v4l2_subdev *sd,
|
||||
struct rkisp_thunderboot_resmem resmem;
|
||||
struct rkisp_ldchbuf_info ldchbuf;
|
||||
struct rkisp_ldchbuf_size ldchsize;
|
||||
struct rkisp_meshbuf_info meshbuf;
|
||||
struct rkisp_meshbuf_size meshsize;
|
||||
struct rkisp_thunderboot_shmem shmem;
|
||||
struct isp2x_buf_idxfd idxfd;
|
||||
long ret = 0;
|
||||
@@ -2594,6 +2594,18 @@ static long rkisp_compat_ioctl32(struct v4l2_subdev *sd,
|
||||
return -EFAULT;
|
||||
ret = rkisp_ioctl(sd, cmd, &ldchsize);
|
||||
break;
|
||||
case RKISP_CMD_GET_MESHBUF_INFO:
|
||||
if (copy_from_user(&meshsize, up, sizeof(meshsize)))
|
||||
return -EFAULT;
|
||||
ret = rkisp_ioctl(sd, cmd, &meshbuf);
|
||||
if (!ret && copy_to_user(up, &meshbuf, sizeof(meshbuf)))
|
||||
ret = -EFAULT;
|
||||
break;
|
||||
case RKISP_CMD_SET_MESHBUF_SIZE:
|
||||
if (copy_from_user(&meshsize, up, sizeof(meshsize)))
|
||||
return -EFAULT;
|
||||
ret = rkisp_ioctl(sd, cmd, &meshsize);
|
||||
break;
|
||||
case RKISP_CMD_GET_SHM_BUFFD:
|
||||
if (copy_from_user(&shmem, up, sizeof(shmem)))
|
||||
return -EFAULT;
|
||||
|
||||
@@ -35,6 +35,12 @@
|
||||
#define RKISP_CMD_GET_FBCBUF_FD \
|
||||
_IOR('V', BASE_VIDIOC_PRIVATE + 7, struct isp2x_buf_idxfd)
|
||||
|
||||
#define RKISP_CMD_GET_MESHBUF_INFO \
|
||||
_IOWR('V', BASE_VIDIOC_PRIVATE + 8, struct rkisp_meshbuf_info)
|
||||
|
||||
#define RKISP_CMD_SET_MESHBUF_SIZE \
|
||||
_IOW('V', BASE_VIDIOC_PRIVATE + 9, struct rkisp_meshbuf_size)
|
||||
|
||||
/****************ISP VIDEO IOCTL******************************/
|
||||
|
||||
#define RKISP_CMD_GET_CSI_MEMORY_MODE \
|
||||
@@ -212,6 +218,31 @@
|
||||
|
||||
#define ISP2X_FBCBUF_FD_NUM 64
|
||||
|
||||
#define ISP2X_MESH_BUF_NUM 2
|
||||
|
||||
enum isp2x_mesh_buf_stat {
|
||||
MESH_BUF_INIT = 0,
|
||||
MESH_BUF_WAIT2CHIP,
|
||||
MESH_BUF_CHIPINUSE,
|
||||
};
|
||||
|
||||
struct rkisp_meshbuf_info {
|
||||
u64 module_id;
|
||||
s32 buf_fd[ISP2X_MESH_BUF_NUM];
|
||||
u32 buf_size[ISP2X_MESH_BUF_NUM];
|
||||
} __attribute__ ((packed));
|
||||
|
||||
struct rkisp_meshbuf_size {
|
||||
u64 module_id;
|
||||
u32 meas_width;
|
||||
u32 meas_height;
|
||||
} __attribute__ ((packed));
|
||||
|
||||
struct isp2x_mesh_head {
|
||||
enum isp2x_mesh_buf_stat stat;
|
||||
u32 data_oft;
|
||||
} __attribute__ ((packed));
|
||||
|
||||
/* trigger event mode
|
||||
* T_TRY: trigger maybe with retry
|
||||
* T_TRY_YES: trigger to retry
|
||||
|
||||
Reference in New Issue
Block a user