mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-08 03:40:35 +09:00
media: rockchip: isp: update procfs info
Change-Id: I48d64f9e579ca6eee1af5b707420a055e5b1b17f Signed-off-by: Cai YiWei <cyw@rock-chips.com>
This commit is contained in:
@@ -38,6 +38,7 @@
|
||||
#include "common.h"
|
||||
#include "capture_v1x.h"
|
||||
#include "capture_v2x.h"
|
||||
#include "isp_ispp.h"
|
||||
|
||||
#define RDBK_MAX 3
|
||||
#define RDBK_L 0
|
||||
@@ -223,6 +224,7 @@ struct rkisp_stream {
|
||||
wait_queue_head_t done;
|
||||
unsigned int burst;
|
||||
atomic_t sequence;
|
||||
struct frame_debug_info dbg;
|
||||
union {
|
||||
struct rkisp_stream_sp sp;
|
||||
struct rkisp_stream_mp mp;
|
||||
|
||||
@@ -1385,6 +1385,13 @@ static int mi_frame_end(struct rkisp_stream *stream)
|
||||
ns = ktime_get_ns();
|
||||
vb2_buf->timestamp = ns;
|
||||
|
||||
ns = ktime_get_ns();
|
||||
stream->dbg.interval = ns - stream->dbg.timestamp;
|
||||
stream->dbg.timestamp = ns;
|
||||
stream->dbg.id = stream->curr_buf->vb.sequence;
|
||||
if (stream->id == RKISP_STREAM_MP || stream->id == RKISP_STREAM_SP)
|
||||
stream->dbg.delay = ns - dev->isp_sdev.frm_timestamp;
|
||||
|
||||
if (is_rdbk_stream(stream) &&
|
||||
dev->dmarx_dev.trigger == T_MANUAL) {
|
||||
if (stream->id == RKISP_STREAM_DMATX0) {
|
||||
|
||||
@@ -738,6 +738,13 @@ static int mi_frame_end(struct rkisp_stream *stream)
|
||||
ns = ktime_get_ns();
|
||||
vb2_buf->timestamp = ns;
|
||||
|
||||
ns = ktime_get_ns();
|
||||
stream->dbg.interval = ns - stream->dbg.timestamp;
|
||||
stream->dbg.timestamp = ns;
|
||||
stream->dbg.id = stream->curr_buf->vb.sequence;
|
||||
if (stream->id == RKISP_STREAM_MP || stream->id == RKISP_STREAM_SP)
|
||||
stream->dbg.delay = ns - dev->isp_sdev.frm_timestamp;
|
||||
|
||||
if (is_rdbk_stream(stream) &&
|
||||
dev->dmarx_dev.trigger == T_MANUAL) {
|
||||
if (stream->id == RKISP_STREAM_DMATX0) {
|
||||
|
||||
@@ -658,6 +658,7 @@ static void rkisp_dev_trigger_handle(struct rkisp_device *dev, u32 cmd)
|
||||
isp->dmarx_dev.cur_frame.id = t.frame_id;
|
||||
isp->dmarx_dev.cur_frame.sof_timestamp = t.sof_timestamp;
|
||||
isp->dmarx_dev.cur_frame.timestamp = t.frame_timestamp;
|
||||
isp->isp_sdev.frm_timestamp = t.sof_timestamp;
|
||||
mode = t.mode;
|
||||
times = t.times;
|
||||
hw->cur_dev_id = id;
|
||||
|
||||
@@ -41,49 +41,52 @@ struct isp_irqs_data {
|
||||
/* using default value if reg no write for multi device */
|
||||
static void default_sw_reg_flag(struct rkisp_device *dev)
|
||||
{
|
||||
u32 reg[] = {
|
||||
CTRL_VI_ISP_PATH,
|
||||
IMG_EFF_CTRL,
|
||||
SUPER_IMP_CTRL,
|
||||
ISP_FLASH_CMD,
|
||||
ISP_SHUTTER_CTRL,
|
||||
ISP_CCM_CTRL,
|
||||
CPROC_CTRL,
|
||||
DUAL_CROP_CTRL,
|
||||
ISP_GAMMA_OUT_CTRL,
|
||||
ISP_GAMMA_OUT_CTRL,
|
||||
ISP_LSC_CTRL,
|
||||
ISP_DEBAYER_CONTROL,
|
||||
ISP_WDR_CTRL,
|
||||
ISP_GIC_CONTROL,
|
||||
ISP_BLS_CTRL,
|
||||
ISP_DPCC0_MODE,
|
||||
ISP_DPCC1_MODE,
|
||||
ISP_DPCC2_MODE,
|
||||
ISP_HDRMGE_CTRL,
|
||||
ISP_HDRTMO_CTRL,
|
||||
ISP_RAWNR_CTRL,
|
||||
ISP_LDCH_STS,
|
||||
ISP_DHAZ_CTRL,
|
||||
ISP_3DLUT_CTRL,
|
||||
ISP_GAIN_CTRL,
|
||||
ISP_AFM_CTRL,
|
||||
ISP_HIST_HIST_CTRL,
|
||||
RAWAE_BIG1_BASE,
|
||||
RAWAE_BIG2_BASE,
|
||||
RAWAE_BIG3_BASE,
|
||||
ISP_RAWAE_LITE_CTRL,
|
||||
ISP_RAWHIST_LITE_CTRL,
|
||||
ISP_RAWHIST_BIG1_BASE,
|
||||
ISP_RAWHIST_BIG2_BASE,
|
||||
ISP_RAWHIST_BIG3_BASE,
|
||||
ISP_YUVAE_CTRL,
|
||||
ISP_RAWAF_CTRL,
|
||||
ISP_RAWAWB_CTRL,
|
||||
u32 v20_reg[] = {
|
||||
CTRL_VI_ISP_PATH, IMG_EFF_CTRL, ISP_CCM_CTRL,
|
||||
CPROC_CTRL, DUAL_CROP_CTRL, ISP_GAMMA_OUT_CTRL,
|
||||
ISP_LSC_CTRL, ISP_DEBAYER_CONTROL, ISP_WDR_CTRL,
|
||||
ISP_GIC_CONTROL, ISP_BLS_CTRL, ISP_DPCC0_MODE,
|
||||
ISP_DPCC1_MODE, ISP_DPCC2_MODE, ISP_HDRMGE_CTRL,
|
||||
ISP_HDRTMO_CTRL, ISP_RAWNR_CTRL, ISP_LDCH_STS,
|
||||
ISP_DHAZ_CTRL, ISP_3DLUT_CTRL, ISP_GAIN_CTRL,
|
||||
ISP_AFM_CTRL, ISP_HIST_HIST_CTRL, RAWAE_BIG1_BASE,
|
||||
RAWAE_BIG2_BASE, RAWAE_BIG3_BASE, ISP_RAWAE_LITE_CTRL,
|
||||
ISP_RAWHIST_LITE_CTRL, ISP_RAWHIST_BIG1_BASE,
|
||||
ISP_RAWHIST_BIG2_BASE, ISP_RAWHIST_BIG3_BASE,
|
||||
ISP_YUVAE_CTRL, ISP_RAWAF_CTRL, ISP_RAWAWB_CTRL,
|
||||
};
|
||||
u32 i, *flag;
|
||||
u32 v21_reg[] = {
|
||||
CTRL_VI_ISP_PATH, IMG_EFF_CTRL, ISP_CCM_CTRL,
|
||||
CPROC_CTRL, DUAL_CROP_CTRL, ISP_GAMMA_OUT_CTRL,
|
||||
SELF_RESIZE_CTRL, MAIN_RESIZE_CTRL, ISP_LSC_CTRL,
|
||||
ISP_DEBAYER_CONTROL, ISP21_YNR_GLOBAL_CTRL,
|
||||
ISP21_CNR_CTRL, ISP21_SHARP_SHARP_EN, ISP_GIC_CONTROL,
|
||||
ISP_BLS_CTRL, ISP_DPCC0_MODE, ISP_DPCC1_MODE,
|
||||
ISP_HDRMGE_CTRL, ISP21_DRC_CTRL0, ISP21_BAYNR_CTRL,
|
||||
ISP21_BAY3D_CTRL, ISP_LDCH_STS, ISP21_DHAZ_CTRL,
|
||||
ISP_3DLUT_CTRL, ISP_AFM_CTRL, ISP_HIST_HIST_CTRL,
|
||||
RAWAE_BIG1_BASE, RAWAE_BIG2_BASE, RAWAE_BIG3_BASE,
|
||||
ISP_RAWAE_LITE_CTRL, ISP_RAWHIST_LITE_CTRL,
|
||||
ISP_RAWHIST_BIG1_BASE, ISP_RAWHIST_BIG2_BASE,
|
||||
ISP_RAWHIST_BIG3_BASE, ISP_YUVAE_CTRL, ISP_RAWAF_CTRL,
|
||||
ISP21_RAWAWB_CTRL,
|
||||
};
|
||||
u32 i, *flag, *reg, size;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(reg); i++) {
|
||||
switch (dev->isp_ver) {
|
||||
case ISP_V20:
|
||||
reg = v20_reg;
|
||||
size = ARRAY_SIZE(v20_reg);
|
||||
break;
|
||||
case ISP_V21:
|
||||
reg = v21_reg;
|
||||
size = ARRAY_SIZE(v21_reg);
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
|
||||
for (i = 0; i < size; i++) {
|
||||
flag = dev->sw_base_addr + reg[i] + RKISP_ISP_SW_REG_SIZE;
|
||||
*flag = SW_REG_CACHE;
|
||||
}
|
||||
|
||||
@@ -12,13 +12,10 @@
|
||||
#include "regs_v2x.h"
|
||||
|
||||
#ifdef CONFIG_PROC_FS
|
||||
static int isp_show(struct seq_file *p, void *v)
|
||||
|
||||
static void isp20_show(struct rkisp_device *dev, struct seq_file *p)
|
||||
{
|
||||
struct rkisp_device *dev = p->private;
|
||||
struct rkisp_isp_subdev *sdev = &dev->isp_sdev;
|
||||
struct rkisp_sensor_info *sensor = dev->active_sensor;
|
||||
u32 full_range_flg = CIF_ISP_CTRL_ISP_CSM_Y_FULL_ENA | CIF_ISP_CTRL_ISP_CSM_C_FULL_ENA;
|
||||
u32 val = 0;
|
||||
static const char * const effect[] = {
|
||||
"BLACKWHITE",
|
||||
"NEGATIVE",
|
||||
@@ -29,70 +26,7 @@ static int isp_show(struct seq_file *p, void *v)
|
||||
"SHARPEN",
|
||||
"RKSHARPEN"
|
||||
};
|
||||
|
||||
seq_printf(p, "%-10s Version:v%02x.%02x.%02x\n",
|
||||
dev->name,
|
||||
RKISP_DRIVER_VERSION >> 16,
|
||||
(RKISP_DRIVER_VERSION & 0xff00) >> 8,
|
||||
RKISP_DRIVER_VERSION & 0x00ff);
|
||||
for (val = 0; val < dev->hw_dev->num_clks; val++) {
|
||||
seq_printf(p, "%-10s %ld\n",
|
||||
dev->hw_dev->match_data->clks[val],
|
||||
clk_get_rate(dev->hw_dev->clks[val]));
|
||||
}
|
||||
if (!(dev->isp_state & ISP_START))
|
||||
return 0;
|
||||
|
||||
seq_printf(p, "%-10s Cnt:%d ErrCnt:%d\n",
|
||||
"Interrupt",
|
||||
dev->isp_isr_cnt,
|
||||
dev->isp_err_cnt);
|
||||
|
||||
if (sensor && sensor->fi.interval.numerator)
|
||||
val = sensor->fi.interval.denominator / sensor->fi.interval.numerator;
|
||||
seq_printf(p, "%-10s %s Format:%s Size:%dx%d@%dfps Offset(%d,%d)\n",
|
||||
"Input",
|
||||
sensor ? sensor->sd->name : NULL,
|
||||
sdev->in_fmt.name,
|
||||
sdev->in_crop.width, sdev->in_crop.height, val,
|
||||
sdev->in_crop.left, sdev->in_crop.top);
|
||||
if (IS_HDR_RDBK(dev->hdr.op_mode))
|
||||
seq_printf(p, "%-10s mode:frame%d (frame:%d rate:%dms %s) cnt(total:%d X1:%d X2:%d X3:%d)\n",
|
||||
"Isp Read",
|
||||
dev->csi_dev.rd_mode - 3,
|
||||
dev->dmarx_dev.cur_frame.id,
|
||||
(u32)(dev->dmarx_dev.cur_frame.timestamp - dev->dmarx_dev.pre_frame.timestamp) / 1000 / 1000,
|
||||
(dev->isp_state & ISP_FRAME_END) ? "idle" : "working",
|
||||
dev->csi_dev.frame_cnt,
|
||||
dev->csi_dev.frame_cnt_x1,
|
||||
dev->csi_dev.frame_cnt_x2,
|
||||
dev->csi_dev.frame_cnt_x3);
|
||||
seq_printf(p, "%-10s rkispp%d %s Format:%s%s Size:%dx%d (frame:%d rate:%dms)\n",
|
||||
"Output",
|
||||
dev->dev_id,
|
||||
dev->br_dev.en ? "ON" : "OFF",
|
||||
(dev->br_dev.work_mode & ISP_ISPP_FBC) ? "FBC" : "YUV",
|
||||
(dev->br_dev.work_mode & ISP_ISPP_422) ? "422" : "420",
|
||||
dev->br_dev.crop.width,
|
||||
dev->br_dev.crop.height,
|
||||
dev->br_dev.dbg.id,
|
||||
dev->br_dev.dbg.interval / 1000 / 1000);
|
||||
for (val = 0; val < RKISP_MAX_STREAM; val++) {
|
||||
struct rkisp_stream *stream = &dev->cap_dev.stream[val];
|
||||
|
||||
if (!stream->streaming)
|
||||
continue;
|
||||
seq_printf(p, "%-10s %s Format:%c%c%c%c Size:%dx%d frame:%d\n",
|
||||
"Output",
|
||||
stream->vnode.vdev.name,
|
||||
stream->out_fmt.pixelformat,
|
||||
stream->out_fmt.pixelformat >> 8,
|
||||
stream->out_fmt.pixelformat >> 16,
|
||||
stream->out_fmt.pixelformat >> 24,
|
||||
stream->out_fmt.width,
|
||||
stream->out_fmt.height,
|
||||
atomic_read(&stream->sequence) - 1);
|
||||
}
|
||||
u32 val;
|
||||
|
||||
val = rkisp_read(dev, ISP_DPCC0_MODE, false);
|
||||
seq_printf(p, "%-10s %s(0x%x)\n", "DPCC0", (val & 1) ? "ON" : "OFF", val);
|
||||
@@ -175,6 +109,200 @@ static int isp_show(struct seq_file *p, void *v)
|
||||
seq_printf(p, "%-10s %s(0x%x)\n", "RAWHIST2", (val & 1) ? "ON" : "OFF", val);
|
||||
val = rkisp_read(dev, ISP_RAWHIST_BIG1_BASE, false);
|
||||
seq_printf(p, "%-10s %s(0x%x)\n", "RAWHIST3", (val & 1) ? "ON" : "OFF", val);
|
||||
}
|
||||
|
||||
static void isp21_show(struct rkisp_device *dev, struct seq_file *p)
|
||||
{
|
||||
u32 full_range_flg = CIF_ISP_CTRL_ISP_CSM_Y_FULL_ENA | CIF_ISP_CTRL_ISP_CSM_C_FULL_ENA;
|
||||
static const char * const effect[] = {
|
||||
"BLACKWHITE",
|
||||
"NEGATIVE",
|
||||
"SEPIA",
|
||||
"COLOR_SEL",
|
||||
"EMBOSS",
|
||||
"SKETCH",
|
||||
"SHARPEN",
|
||||
"RKSHARPEN"
|
||||
};
|
||||
u32 val;
|
||||
|
||||
val = rkisp_read(dev, ISP_DPCC0_MODE, false);
|
||||
seq_printf(p, "%-10s %s(0x%x)\n", "DPCC0", (val & 1) ? "ON" : "OFF", val);
|
||||
val = rkisp_read(dev, ISP_DPCC1_MODE, false);
|
||||
seq_printf(p, "%-10s %s(0x%x)\n", "DPCC1", (val & 1) ? "ON" : "OFF", val);
|
||||
val = rkisp_read(dev, ISP_BLS_CTRL, false);
|
||||
seq_printf(p, "%-10s %s(0x%x)\n", "BLS", (val & 1) ? "ON" : "OFF", val);
|
||||
val = rkisp_read(dev, CIF_ISP_CTRL, false);
|
||||
seq_printf(p, "%-10s %s(0x%x)\n", "SDG",
|
||||
(val & CIF_ISP_CTRL_ISP_GAMMA_IN_ENA) ? "ON" : "OFF", val);
|
||||
val = rkisp_read(dev, ISP_LSC_CTRL, false);
|
||||
seq_printf(p, "%-10s %s(0x%x)\n", "LSC", (val & 1) ? "ON" : "OFF", val);
|
||||
val = rkisp_read(dev, CIF_ISP_CTRL, false);
|
||||
seq_printf(p, "%-10s %s(0x%x) (gain: 0x%08x, 0x%08x)\n", "AWBGAIN",
|
||||
(val & CIF_ISP_CTRL_ISP_AWB_ENA) ? "ON" : "OFF", val,
|
||||
rkisp_read(dev, CIF_ISP_AWB_GAIN_G_V12, false),
|
||||
rkisp_read(dev, CIF_ISP_AWB_GAIN_RB_V12, false));
|
||||
val = rkisp_read(dev, ISP_DEBAYER_CONTROL, false);
|
||||
seq_printf(p, "%-10s %s(0x%x)\n", "DEBAYER", (val & 1) ? "ON" : "OFF", val);
|
||||
val = rkisp_read(dev, ISP_CCM_CTRL, false);
|
||||
seq_printf(p, "%-10s %s(0x%x)\n", "CCM", (val & 1) ? "ON" : "OFF", val);
|
||||
val = rkisp_read(dev, ISP_GAMMA_OUT_CTRL, false);
|
||||
seq_printf(p, "%-10s %s(0x%x)\n", "GAMMA_OUT", (val & 1) ? "ON" : "OFF", val);
|
||||
val = rkisp_read(dev, CPROC_CTRL, false);
|
||||
seq_printf(p, "%-10s %s(0x%x)\n", "CPROC", (val & 1) ? "ON" : "OFF", val);
|
||||
val = rkisp_read(dev, CIF_IMG_EFF_CTRL, false);
|
||||
seq_printf(p, "%-10s %s(0x%x) (effect: %s)\n", "IE",
|
||||
(val & 1) ? "ON" : "OFF", val,
|
||||
effect[(val & CIF_IMG_EFF_CTRL_MODE_MASK) >> 1]);
|
||||
val = rkisp_read(dev, ISP21_DRC_CTRL0, false);
|
||||
seq_printf(p, "%-10s %s(0x%x)\n", "HDRTMO", (val & 1) ? "ON" : "OFF", val);
|
||||
val = rkisp_read(dev, ISP_HDRMGE_CTRL, false);
|
||||
seq_printf(p, "%-10s %s(0x%x)\n", "HDRMGE", (val & 1) ? "ON" : "OFF", val);
|
||||
val = rkisp_read(dev, ISP21_BAYNR_CTRL, false);
|
||||
seq_printf(p, "%-10s %s(0x%x)\n", "BAYNR", (val & 1) ? "ON" : "OFF", val);
|
||||
val = rkisp_read(dev, ISP21_BAY3D_CTRL, false);
|
||||
seq_printf(p, "%-10s %s(0x%x)\n", "BAY3D", (val & 1) ? "ON" : "OFF", val);
|
||||
val = rkisp_read(dev, ISP21_YNR_GLOBAL_CTRL, false);
|
||||
seq_printf(p, "%-10s %s(0x%x)\n", "YNR", (val & 1) ? "ON" : "OFF", val);
|
||||
val = rkisp_read(dev, ISP21_CNR_CTRL, false);
|
||||
seq_printf(p, "%-10s %s(0x%x)\n", "CNR", (val & 1) ? "ON" : "OFF", val);
|
||||
val = rkisp_read(dev, ISP21_SHARP_SHARP_EN, false);
|
||||
seq_printf(p, "%-10s %s(0x%x)\n", "SHARP", (val & 1) ? "ON" : "OFF", val);
|
||||
val = rkisp_read(dev, ISP_GIC_CONTROL, false);
|
||||
seq_printf(p, "%-10s %s(0x%x)\n", "GIC", (val & 1) ? "ON" : "OFF", val);
|
||||
val = rkisp_read(dev, ISP_DHAZ_CTRL, false);
|
||||
seq_printf(p, "%-10s %s(0x%x)\n", "DHAZ", (val & 1) ? "ON" : "OFF", val);
|
||||
val = rkisp_read(dev, ISP_3DLUT_CTRL, false);
|
||||
seq_printf(p, "%-10s %s(0x%x)\n", "3DLUT", (val & 1) ? "ON" : "OFF", val);
|
||||
val = rkisp_read(dev, ISP_LDCH_STS, false);
|
||||
seq_printf(p, "%-10s %s(0x%x)\n", "LDCH", (val & 1) ? "ON" : "OFF", val);
|
||||
val = rkisp_read(dev, ISP_CTRL, false);
|
||||
seq_printf(p, "%-10s %s(0x%x)\n", "CSM",
|
||||
(val & full_range_flg) ? "FULL" : "LIMITED", val);
|
||||
|
||||
val = rkisp_read(dev, ISP_AFM_CTRL, false);
|
||||
seq_printf(p, "%-10s %s(0x%x)\n", "SIAF", (val & 1) ? "ON" : "OFF", val);
|
||||
val = rkisp_read(dev, CIF_ISP_AWB_PROP_V10, false);
|
||||
seq_printf(p, "%-10s %s(0x%x)\n", "SIAWB",
|
||||
(val & CIF_ISP_AWB_ENABLE) ? "ON" : "OFF", val);
|
||||
val = rkisp_read(dev, ISP_YUVAE_CTRL, false);
|
||||
seq_printf(p, "%-10s %s(0x%x)\n", "YUVAE", (val & 1) ? "ON" : "OFF", val);
|
||||
val = rkisp_read(dev, ISP_HIST_HIST_CTRL, false);
|
||||
seq_printf(p, "%-10s %s(0x%x)\n", "SIHST", (val & 1) ? "ON" : "OFF", val);
|
||||
val = rkisp_read(dev, ISP_RAWAF_CTRL, false);
|
||||
seq_printf(p, "%-10s %s(0x%x)\n", "RAWAF", (val & 1) ? "ON" : "OFF", val);
|
||||
val = rkisp_read(dev, ISP21_RAWAWB_CTRL, false);
|
||||
seq_printf(p, "%-10s %s(0x%x)\n", "RAWAWB", (val & 1) ? "ON" : "OFF", val);
|
||||
val = rkisp_read(dev, ISP_RAWAE_LITE_CTRL, false);
|
||||
seq_printf(p, "%-10s %s(0x%x)\n", "RAWAE0", (val & 1) ? "ON" : "OFF", val);
|
||||
val = rkisp_read(dev, RAWAE_BIG2_BASE, false);
|
||||
seq_printf(p, "%-10s %s(0x%x)\n", "RAWAE1", (val & 1) ? "ON" : "OFF", val);
|
||||
val = rkisp_read(dev, RAWAE_BIG3_BASE, false);
|
||||
seq_printf(p, "%-10s %s(0x%x)\n", "RAWAE2", (val & 1) ? "ON" : "OFF", val);
|
||||
val = rkisp_read(dev, RAWAE_BIG1_BASE, false);
|
||||
seq_printf(p, "%-10s %s(0x%x)\n", "RAWAE3", (val & 1) ? "ON" : "OFF", val);
|
||||
val = rkisp_read(dev, ISP_RAWHIST_LITE_CTRL, false);
|
||||
seq_printf(p, "%-10s %s(0x%x)\n", "RAWHIST0", (val & 1) ? "ON" : "OFF", val);
|
||||
val = rkisp_read(dev, ISP_RAWHIST_BIG2_BASE, false);
|
||||
seq_printf(p, "%-10s %s(0x%x)\n", "RAWHIST1", (val & 1) ? "ON" : "OFF", val);
|
||||
val = rkisp_read(dev, ISP_RAWHIST_BIG3_BASE, false);
|
||||
seq_printf(p, "%-10s %s(0x%x)\n", "RAWHIST2", (val & 1) ? "ON" : "OFF", val);
|
||||
val = rkisp_read(dev, ISP_RAWHIST_BIG1_BASE, false);
|
||||
seq_printf(p, "%-10s %s(0x%x)\n", "RAWHIST3", (val & 1) ? "ON" : "OFF", val);
|
||||
}
|
||||
|
||||
static int isp_show(struct seq_file *p, void *v)
|
||||
{
|
||||
struct rkisp_device *dev = p->private;
|
||||
struct rkisp_isp_subdev *sdev = &dev->isp_sdev;
|
||||
struct rkisp_sensor_info *sensor = dev->active_sensor;
|
||||
u32 val = 0;
|
||||
|
||||
seq_printf(p, "%-10s Version:v%02x.%02x.%02x\n",
|
||||
dev->name,
|
||||
RKISP_DRIVER_VERSION >> 16,
|
||||
(RKISP_DRIVER_VERSION & 0xff00) >> 8,
|
||||
RKISP_DRIVER_VERSION & 0x00ff);
|
||||
for (val = 0; val < dev->hw_dev->num_clks; val++) {
|
||||
seq_printf(p, "%-10s %ld\n",
|
||||
dev->hw_dev->match_data->clks[val],
|
||||
clk_get_rate(dev->hw_dev->clks[val]));
|
||||
}
|
||||
if (!(dev->isp_state & ISP_START))
|
||||
return 0;
|
||||
|
||||
seq_printf(p, "%-10s Cnt:%d ErrCnt:%d\n",
|
||||
"Interrupt",
|
||||
dev->isp_isr_cnt,
|
||||
dev->isp_err_cnt);
|
||||
|
||||
if (sensor && sensor->fi.interval.numerator)
|
||||
val = sensor->fi.interval.denominator / sensor->fi.interval.numerator;
|
||||
seq_printf(p, "%-10s %s Format:%s Size:%dx%d@%dfps Offset(%d,%d)\n",
|
||||
"Input",
|
||||
sensor ? sensor->sd->name : NULL,
|
||||
sdev->in_fmt.name,
|
||||
sdev->in_crop.width, sdev->in_crop.height, val,
|
||||
sdev->in_crop.left, sdev->in_crop.top);
|
||||
if (IS_HDR_RDBK(dev->hdr.op_mode))
|
||||
seq_printf(p, "%-10s mode:frame%d (frame:%d rate:%dms %s time:%dms) cnt(total:%d X1:%d X2:%d X3:%d)\n",
|
||||
"Isp Read",
|
||||
dev->csi_dev.rd_mode - 3,
|
||||
dev->dmarx_dev.cur_frame.id,
|
||||
(u32)(dev->dmarx_dev.cur_frame.timestamp - dev->dmarx_dev.pre_frame.timestamp) / 1000 / 1000,
|
||||
(dev->isp_state & ISP_FRAME_END) ? "idle" : "working",
|
||||
sdev->dbg.interval / 1000 / 1000,
|
||||
dev->csi_dev.frame_cnt,
|
||||
dev->csi_dev.frame_cnt_x1,
|
||||
dev->csi_dev.frame_cnt_x2,
|
||||
dev->csi_dev.frame_cnt_x3);
|
||||
else
|
||||
seq_printf(p, "%-10s frame:%d %s time:%dms\n",
|
||||
"Isp online",
|
||||
sdev->dbg.id,
|
||||
(dev->isp_state & ISP_FRAME_END) ? "idle" : "working",
|
||||
sdev->dbg.interval / 1000 / 1000);
|
||||
|
||||
if (dev->br_dev.en)
|
||||
seq_printf(p, "%-10s rkispp%d Format:%s%s Size:%dx%d (frame:%d rate:%dms)\n",
|
||||
"Output",
|
||||
dev->dev_id,
|
||||
(dev->br_dev.work_mode & ISP_ISPP_FBC) ? "FBC" : "YUV",
|
||||
(dev->br_dev.work_mode & ISP_ISPP_422) ? "422" : "420",
|
||||
dev->br_dev.crop.width,
|
||||
dev->br_dev.crop.height,
|
||||
dev->br_dev.dbg.id,
|
||||
dev->br_dev.dbg.interval / 1000 / 1000);
|
||||
for (val = 0; val < RKISP_MAX_STREAM; val++) {
|
||||
struct rkisp_stream *stream = &dev->cap_dev.stream[val];
|
||||
|
||||
if (!stream->streaming)
|
||||
continue;
|
||||
seq_printf(p, "%-10s %s Format:%c%c%c%c Size:%dx%d (frame:%d rate:%dms delay:%dms)\n",
|
||||
"Output",
|
||||
stream->vnode.vdev.name,
|
||||
stream->out_fmt.pixelformat,
|
||||
stream->out_fmt.pixelformat >> 8,
|
||||
stream->out_fmt.pixelformat >> 16,
|
||||
stream->out_fmt.pixelformat >> 24,
|
||||
stream->out_fmt.width,
|
||||
stream->out_fmt.height,
|
||||
stream->dbg.id,
|
||||
stream->dbg.interval / 1000 / 1000,
|
||||
stream->dbg.delay / 1000 / 1000);
|
||||
}
|
||||
|
||||
switch (dev->isp_ver) {
|
||||
case ISP_V20:
|
||||
isp20_show(dev, p);
|
||||
break;
|
||||
case ISP_V21:
|
||||
isp21_show(dev, p);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -1836,6 +1836,8 @@ rkisp_isp_queue_event_sof(struct rkisp_isp_subdev *isp)
|
||||
.u.frame_sync.frame_sequence =
|
||||
atomic_inc_return(&isp->frm_sync_seq) - 1,
|
||||
};
|
||||
|
||||
event.timestamp = ns_to_timespec(ktime_get_ns());
|
||||
v4l2_event_queue(isp->sd.devnode, &event);
|
||||
}
|
||||
|
||||
@@ -2318,6 +2320,8 @@ void rkisp_isp_isr(unsigned int isp_mis,
|
||||
dev->isp_isr_cnt++;
|
||||
/* start edge of v_sync */
|
||||
if (isp_mis & CIF_ISP_V_START) {
|
||||
if (!(dev->isp_state & ISP_FRAME_VS))
|
||||
dev->isp_sdev.dbg.timestamp = ktime_get_ns();
|
||||
rkisp_set_state(dev, ISP_FRAME_VS);
|
||||
/* last vsync to config next buf */
|
||||
if (!dev->csi_dev.filt_state[CSI_F_VS])
|
||||
@@ -2352,8 +2356,10 @@ void rkisp_isp_isr(unsigned int isp_mis,
|
||||
}
|
||||
}
|
||||
|
||||
if (dev->vs_irq < 0)
|
||||
if (dev->vs_irq < 0) {
|
||||
dev->isp_sdev.frm_timestamp = ktime_get_ns();
|
||||
rkisp_isp_queue_event_sof(&dev->isp_sdev);
|
||||
}
|
||||
vs_skip:
|
||||
writel(CIF_ISP_V_START, base + CIF_ISP_ICR);
|
||||
isp_mis_tmp = readl(base + CIF_ISP_MIS);
|
||||
@@ -2410,6 +2416,8 @@ vs_skip:
|
||||
|
||||
/* frame was completely put out */
|
||||
if (isp_mis & CIF_ISP_FRAME) {
|
||||
dev->isp_sdev.dbg.interval =
|
||||
ktime_get_ns() - dev->isp_sdev.dbg.timestamp;
|
||||
/* Clear Frame In (ISP) */
|
||||
rkisp_set_state(dev, ISP_FRAME_END);
|
||||
writel(CIF_ISP_FRAME, base + CIF_ISP_ICR);
|
||||
@@ -2417,7 +2425,7 @@ vs_skip:
|
||||
if (isp_mis_tmp & CIF_ISP_FRAME)
|
||||
v4l2_err(&dev->v4l2_dev,
|
||||
"isp icr frame end err: 0x%x\n", isp_mis_tmp);
|
||||
|
||||
rkisp_dmarx_get_frame(dev, &dev->isp_sdev.dbg.id, NULL, NULL, true);
|
||||
rkisp_isp_read_add_fifo_data(dev);
|
||||
}
|
||||
|
||||
|
||||
@@ -41,6 +41,7 @@
|
||||
#include <linux/rk-camera-module.h>
|
||||
#include <media/v4l2-fwnode.h>
|
||||
#include "common.h"
|
||||
#include "isp_ispp.h"
|
||||
|
||||
#define CIF_ISP_INPUT_W_MAX 4416
|
||||
#define CIF_ISP_INPUT_H_MAX 3312
|
||||
@@ -118,6 +119,8 @@ struct rkisp_isp_subdev {
|
||||
bool dphy_errctrl_disabled;
|
||||
atomic_t frm_sync_seq;
|
||||
enum v4l2_quantization quantization;
|
||||
u64 frm_timestamp;
|
||||
struct frame_debug_info dbg;
|
||||
};
|
||||
|
||||
struct rkisp_emd_data {
|
||||
|
||||
Reference in New Issue
Block a user