media: rockchip: isp: adjust params common api

Change-Id: I5d2961496ec445bea3c3592050d9ef0bd35778c1
Signed-off-by: Cai YiWei <cyw@rock-chips.com>
This commit is contained in:
Cai YiWei
2021-10-26 16:13:48 +08:00
committed by Tao Huang
parent 101a69d8c2
commit d3dd2eea03
9 changed files with 180 additions and 336 deletions

View File

@@ -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)

View File

@@ -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 */

View File

@@ -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)

View File

@@ -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,
&params_vdev->last_hdrmge, RKISP_PARAMS_SHD);
ops->hdrmge_config(params_vdev, &priv_val->last_hdrmge, RKISP_PARAMS_SHD);
ops->hdrdrc_config(params_vdev,
&params_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,
&params_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(&params_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,
};

View File

@@ -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;

View File

@@ -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,
&params_vdev->last_hdrmge, RKISP_PARAMS_ALL);
ops->hdrtmo_config(params_vdev,
&params_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,
&params_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(&params_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,
};

View File

@@ -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;

View File

@@ -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;

View File

@@ -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