From: Antoine Bouyer <antoine.bouyer@nxp.com>
To: julien.vuillaumier@nxp.com, alexi.birlinger@nxp.com,
daniel.baluta@nxp.com, peng.fan@nxp.com, frank.li@nxp.com,
jacopo.mondi@ideasonboard.com, laurent.pinchart@ideasonboard.com,
mchehab@kernel.org, robh@kernel.org, krzk+dt@kernel.org,
conor+dt@kernel.org, shawnguo@kernel.org, s.hauer@pengutronix.de,
kernel@pengutronix.de, festevam@gmail.com
Cc: linux-kernel@vger.kernel.org, linux-media@vger.kernel.org,
devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
Antoine Bouyer <antoine.bouyer@nxp.com>
Subject: [RFC v1 10/11] media: platform: neoisp: Add debugfs support
Date: Fri, 23 Jan 2026 09:09:37 +0100 [thread overview]
Message-ID: <20260123080938.3367348-11-antoine.bouyer@nxp.com> (raw)
In-Reply-To: <20260123080938.3367348-1-antoine.bouyer@nxp.com>
Add debugfs entries to dump ISP registers, and some internal memory
regions used to store Vignetting, DRC global and DRC local coefficients.
Debug mode is activated with the `enable_debugfs` module's parameter, to
avoid runtime suspend which blocks register access when IP is not active,
so we can capture an ISP snapshot after a frame is decoded.
Signed-off-by: Antoine Bouyer <antoine.bouyer@nxp.com>
---
drivers/media/platform/nxp/neoisp/Makefile | 2 +
drivers/media/platform/nxp/neoisp/neoisp.h | 16 +
.../platform/nxp/neoisp/neoisp_debugfs.c | 503 ++++++++++++++++++
.../media/platform/nxp/neoisp/neoisp_main.c | 14 +
4 files changed, 535 insertions(+)
create mode 100644 drivers/media/platform/nxp/neoisp/neoisp_debugfs.c
diff --git a/drivers/media/platform/nxp/neoisp/Makefile b/drivers/media/platform/nxp/neoisp/Makefile
index 7652df785e98..c68e216980dc 100644
--- a/drivers/media/platform/nxp/neoisp/Makefile
+++ b/drivers/media/platform/nxp/neoisp/Makefile
@@ -4,3 +4,5 @@ obj-$(CONFIG_VIDEO_NXP_NEOISP) += neoisp.o
neoisp-objs := neoisp_ctx.o \
neoisp_main.o
+
+neoisp-$(CONFIG_DEBUG_FS) += neoisp_debugfs.o
diff --git a/drivers/media/platform/nxp/neoisp/neoisp.h b/drivers/media/platform/nxp/neoisp/neoisp.h
index 381e11454d37..3402efdbc923 100644
--- a/drivers/media/platform/nxp/neoisp/neoisp.h
+++ b/drivers/media/platform/nxp/neoisp/neoisp.h
@@ -9,6 +9,7 @@
#define __NXP_NEOISP_H
#include <linux/bits.h>
+#include <linux/debugfs.h>
#include <linux/media/nxp/nxp_neoisp.h>
#include <media/v4l2-ctrls.h>
#include <media/v4l2-device.h>
@@ -232,8 +233,23 @@ struct neoisp_dev_s {
struct neoisp_job_s queued_job;
bool hw_busy; /* Non-zero if a job is queued or is being started */
spinlock_t hw_lock; /* Protects "hw_busy" flag and streaming_map */
+ struct dentry *debugfs_entry;
+ struct debugfs_regset32 *regset;
};
+#if IS_ENABLED(CONFIG_DEBUG_FS)
+void neoisp_debugfs_init(struct neoisp_dev_s *neoispd);
+void neoisp_debugfs_exit(struct neoisp_dev_s *neoispd);
+#else
+static inline void neoisp_debugfs_init(struct neoisp_dev_s *neoispd)
+{
+}
+
+static inline void neoisp_debugfs_exit(struct neoisp_dev_s *neoispd)
+{
+}
+#endif
+
static inline int neoisp_node_link_is_enabled(struct neoisp_node_s *node)
{
return (node->intf_link->flags & MEDIA_LNK_FL_ENABLED);
diff --git a/drivers/media/platform/nxp/neoisp/neoisp_debugfs.c b/drivers/media/platform/nxp/neoisp/neoisp_debugfs.c
new file mode 100644
index 000000000000..a4b9af1e9e86
--- /dev/null
+++ b/drivers/media/platform/nxp/neoisp/neoisp_debugfs.c
@@ -0,0 +1,503 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * NEOISP debugfs definition
+ *
+ * Copyright 2024-2026 NXP
+ */
+
+#include <linux/debugfs.h>
+
+#include "neoisp.h"
+#include "neoisp_ctx.h"
+#include "neoisp_regs.h"
+
+#define NEOISP_DFS_REG(reg) {.name = #reg, .offset = reg}
+
+static const struct debugfs_reg32 neoisp_dfs_regs[] = {
+ NEOISP_DFS_REG(NEO_PIPE_CONF_SOFT_RESET),
+ NEOISP_DFS_REG(NEO_PIPE_CONF_BUS_TXPARAM),
+ NEOISP_DFS_REG(NEO_PIPE_CONF_REG_XFR_DIS),
+ NEOISP_DFS_REG(NEO_PIPE_CONF_CSI_CTRL),
+ NEOISP_DFS_REG(NEO_PIPE_CONF_FRAME_NUM),
+ NEOISP_DFS_REG(NEO_PIPE_CONF_REG_SHD_CTRL),
+ NEOISP_DFS_REG(NEO_PIPE_CONF_REG_SHD_CMD),
+ NEOISP_DFS_REG(NEO_PIPE_CONF_TRIG_CAM0),
+ NEOISP_DFS_REG(NEO_PIPE_CONF_INT_EN0_V2),
+ NEOISP_DFS_REG(NEO_PIPE_CONF_INT_STAT0_V2),
+ NEOISP_DFS_REG(NEO_PIPE_CONF_CSI_STAT_V2),
+ NEOISP_DFS_REG(NEO_PIPE_CONF_IMG_CONF_CAM0),
+ NEOISP_DFS_REG(NEO_PIPE_CONF_IMG_SIZE_CAM0),
+ NEOISP_DFS_REG(NEO_PIPE_CONF_IMG0_IN_ADDR_CAM0),
+ NEOISP_DFS_REG(NEO_PIPE_CONF_IMG1_IN_ADDR_CAM0),
+ NEOISP_DFS_REG(NEO_PIPE_CONF_OUTCH0_ADDR_CAM0),
+ NEOISP_DFS_REG(NEO_PIPE_CONF_OUTCH1_ADDR_CAM0),
+ NEOISP_DFS_REG(NEO_PIPE_CONF_OUTIR_ADDR_CAM0),
+ NEOISP_DFS_REG(NEO_PIPE_CONF_IMG0_IN_LS_CAM0),
+ NEOISP_DFS_REG(NEO_PIPE_CONF_IMG1_IN_LS_CAM0),
+ NEOISP_DFS_REG(NEO_PIPE_CONF_OUTCH0_LS_CAM0),
+ NEOISP_DFS_REG(NEO_PIPE_CONF_OUTCH1_LS_CAM0),
+ NEOISP_DFS_REG(NEO_PIPE_CONF_OUTIR_LS_CAM0),
+ NEOISP_DFS_REG(NEO_PIPE_CONF_SKIP_CTRL0),
+ NEOISP_DFS_REG(NEO_PIPE_CONF_INT_EN0),
+ NEOISP_DFS_REG(NEO_PIPE_CONF_INT_STAT0),
+ NEOISP_DFS_REG(NEO_PIPE_CONF_CSI_STAT),
+ NEOISP_DFS_REG(NEO_HC_CTRL_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_DECOMPRESS0_CTRL_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_DECOMPRESS0_KNEE_POINT1_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_DECOMPRESS0_KNEE_POINT2_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_DECOMPRESS0_KNEE_POINT3_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_DECOMPRESS0_KNEE_POINT4_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_DECOMPRESS0_KNEE_OFFSET0_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_DECOMPRESS0_KNEE_OFFSET1_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_DECOMPRESS0_KNEE_OFFSET2_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_DECOMPRESS0_KNEE_OFFSET3_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_DECOMPRESS0_KNEE_OFFSET4_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_DECOMPRESS0_KNEE_RATIO01_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_DECOMPRESS0_KNEE_RATIO23_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_DECOMPRESS0_KNEE_RATIO4_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_DECOMPRESS0_KNEE_NPOINT0_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_DECOMPRESS0_KNEE_NPOINT1_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_DECOMPRESS0_KNEE_NPOINT2_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_DECOMPRESS0_KNEE_NPOINT3_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_DECOMPRESS0_KNEE_NPOINT4_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_DECOMPRESS1_CTRL_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_DECOMPRESS1_KNEE_POINT1_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_DECOMPRESS1_KNEE_POINT2_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_DECOMPRESS1_KNEE_POINT3_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_DECOMPRESS1_KNEE_POINT4_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_DECOMPRESS1_KNEE_OFFSET0_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_DECOMPRESS1_KNEE_OFFSET1_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_DECOMPRESS1_KNEE_OFFSET2_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_DECOMPRESS1_KNEE_OFFSET3_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_DECOMPRESS1_KNEE_OFFSET4_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_DECOMPRESS1_KNEE_RATIO01_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_DECOMPRESS1_KNEE_RATIO23_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_DECOMPRESS1_KNEE_RATIO4_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_DECOMPRESS1_KNEE_NPOINT0_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_DECOMPRESS1_KNEE_NPOINT1_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_DECOMPRESS1_KNEE_NPOINT2_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_DECOMPRESS1_KNEE_NPOINT3_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_DECOMPRESS1_KNEE_NPOINT4_CAM0),
+ NEOISP_DFS_REG(NEO_OB_WB0_CTRL_CAM0),
+ NEOISP_DFS_REG(NEO_OB_WB0_R_CTRL_CAM0),
+ NEOISP_DFS_REG(NEO_OB_WB0_GR_CTRL_CAM0),
+ NEOISP_DFS_REG(NEO_OB_WB0_GB_CTRL_CAM0),
+ NEOISP_DFS_REG(NEO_OB_WB0_B_CTRL_CAM0),
+ NEOISP_DFS_REG(NEO_OB_WB1_CTRL_CAM0),
+ NEOISP_DFS_REG(NEO_OB_WB1_R_CTRL_CAM0),
+ NEOISP_DFS_REG(NEO_OB_WB1_GR_CTRL_CAM0),
+ NEOISP_DFS_REG(NEO_OB_WB1_GB_CTRL_CAM0),
+ NEOISP_DFS_REG(NEO_OB_WB1_B_CTRL_CAM0),
+ NEOISP_DFS_REG(NEO_OB_WB2_CTRL_CAM0),
+ NEOISP_DFS_REG(NEO_OB_WB2_R_CTRL_CAM0),
+ NEOISP_DFS_REG(NEO_OB_WB2_GR_CTRL_CAM0),
+ NEOISP_DFS_REG(NEO_OB_WB2_GB_CTRL_CAM0),
+ NEOISP_DFS_REG(NEO_OB_WB2_B_CTRL_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_MERGE_CTRL_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_MERGE_GAIN_OFFSET_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_MERGE_GAIN_SCALE_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_MERGE_GAIN_SHIFT_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_MERGE_LUMA_TH_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_MERGE_LUMA_SCALE_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_MERGE_DOWNSCALE_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_MERGE_UPSCALE_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_MERGE_POST_SCALE_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_MERGE_S_GAIN_OFFSET_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_MERGE_S_GAIN_SCALE_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_MERGE_S_GAIN_SHIFT_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_MERGE_S_LUMA_TH_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_MERGE_S_LUMA_SCALE_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_MERGE_S_DOWNSCALE_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_MERGE_S_UPSCALE_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_MERGE_S_POST_SCALE_CAM0),
+ NEOISP_DFS_REG(NEO_HDR_MERGE_S_LINE_NUM_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CTRL_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_ROI_POS_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_ROI_SIZE_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_REDGAIN_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_BLUEGAIN_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_POINT1_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_POINT2_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_HOFFSET_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_VOFFSET_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_POINT1_SLOPE_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_POINT2_SLOPE_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_LUMA_TH_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CSC_MAT0_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CSC_MAT1_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CSC_MAT2_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CSC_MAT3_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CSC_MAT4_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_R_GR_OFFSET_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_GB_B_OFFSET_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CNT_WHITE_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_SUMRL_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_SUMRH_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_SUMGL_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_SUMGH_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_SUMBL_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_SUMBH_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_SUMRGL_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_SUMRGH_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_SUMBGL_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_SUMBGH_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_STAT_BLK_SIZE0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_STAT_CURR_BLK_Y0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI0_POS_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI0_PIXCNT_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI0_SUMRED_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI0_SUMGREEN_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI0_SUMBLUE_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI1_POS_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI1_PIXCNT_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI1_SUMRED_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI1_SUMGREEN_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI1_SUMBLUE_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI2_POS_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI2_PIXCNT_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI2_SUMRED_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI2_SUMGREEN_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI2_SUMBLUE_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI3_POS_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI3_PIXCNT_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI3_SUMRED_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI3_SUMGREEN_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI3_SUMBLUE_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI4_POS_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI4_PIXCNT_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI4_SUMRED_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI4_SUMGREEN_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI4_SUMBLUE_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI5_POS_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI5_PIXCNT_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI5_SUMRED_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI5_SUMGREEN_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI5_SUMBLUE_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI6_POS_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI6_PIXCNT_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI6_SUMRED_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI6_SUMGREEN_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI6_SUMBLUE_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI7_POS_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI7_PIXCNT_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI7_SUMRED_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI7_SUMGREEN_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI7_SUMBLUE_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI8_POS_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI8_PIXCNT_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI8_SUMRED_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI8_SUMGREEN_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI8_SUMBLUE_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI9_POS_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI9_PIXCNT_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI9_SUMRED_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI9_SUMGREEN_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_CROI9_SUMBLUE_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_GR_AVG_IN_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_GB_AVG_IN_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_GR_GB_CNT_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_GR_SUM_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_GB_SUM_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_GR2_SUM_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_GB2_SUM_CAM0),
+ NEOISP_DFS_REG(NEO_COLOR_TEMP_GRGB_SUM_CAM0),
+ NEOISP_DFS_REG(NEO_RGBIR_CTRL_CAM0),
+ NEOISP_DFS_REG(NEO_RGBIR_CCM0_CAM0),
+ NEOISP_DFS_REG(NEO_RGBIR_CCM1_CAM0),
+ NEOISP_DFS_REG(NEO_RGBIR_CCM2_CAM0),
+ NEOISP_DFS_REG(NEO_RGBIR_CCM0_TH_CAM0),
+ NEOISP_DFS_REG(NEO_RGBIR_CCM1_TH_CAM0),
+ NEOISP_DFS_REG(NEO_RGBIR_CCM2_TH_CAM0),
+ NEOISP_DFS_REG(NEO_RGBIR_ROI0_POS_CAM0),
+ NEOISP_DFS_REG(NEO_RGBIR_ROI0_SIZE_CAM0),
+ NEOISP_DFS_REG(NEO_RGBIR_ROI1_POS_CAM0),
+ NEOISP_DFS_REG(NEO_RGBIR_ROI1_SIZE_CAM0),
+ NEOISP_DFS_REG(NEO_RGBIR_HIST0_CTRL_CAM0),
+ NEOISP_DFS_REG(NEO_RGBIR_HIST0_SCALE_CAM0),
+ NEOISP_DFS_REG(NEO_RGBIR_HIST1_CTRL_CAM0),
+ NEOISP_DFS_REG(NEO_RGBIR_HIST1_SCALE_CAM0),
+ NEOISP_DFS_REG(NEO_STAT_ROI0_POS_CAM0),
+ NEOISP_DFS_REG(NEO_STAT_ROI0_SIZE_CAM0),
+ NEOISP_DFS_REG(NEO_STAT_ROI1_POS_CAM0),
+ NEOISP_DFS_REG(NEO_STAT_ROI1_SIZE_CAM0),
+ NEOISP_DFS_REG(NEO_STAT_HIST0_CTRL_CAM0),
+ NEOISP_DFS_REG(NEO_STAT_HIST0_SCALE_CAM0),
+ NEOISP_DFS_REG(NEO_STAT_HIST1_CTRL_CAM0),
+ NEOISP_DFS_REG(NEO_STAT_HIST1_SCALE_CAM0),
+ NEOISP_DFS_REG(NEO_STAT_HIST2_CTRL_CAM0),
+ NEOISP_DFS_REG(NEO_STAT_HIST2_SCALE_CAM0),
+ NEOISP_DFS_REG(NEO_STAT_HIST3_CTRL_CAM0),
+ NEOISP_DFS_REG(NEO_STAT_HIST3_SCALE_CAM0),
+ NEOISP_DFS_REG(NEO_IR_COMPRESS_CTRL_CAM0),
+ NEOISP_DFS_REG(NEO_IR_COMPRESS_KNEE_POINT1_CAM0),
+ NEOISP_DFS_REG(NEO_IR_COMPRESS_KNEE_POINT2_CAM0),
+ NEOISP_DFS_REG(NEO_IR_COMPRESS_KNEE_POINT3_CAM0),
+ NEOISP_DFS_REG(NEO_IR_COMPRESS_KNEE_POINT4_CAM0),
+ NEOISP_DFS_REG(NEO_IR_COMPRESS_KNEE_OFFSET0_CAM0),
+ NEOISP_DFS_REG(NEO_IR_COMPRESS_KNEE_OFFSET1_CAM0),
+ NEOISP_DFS_REG(NEO_IR_COMPRESS_KNEE_OFFSET2_CAM0),
+ NEOISP_DFS_REG(NEO_IR_COMPRESS_KNEE_OFFSET3_CAM0),
+ NEOISP_DFS_REG(NEO_IR_COMPRESS_KNEE_OFFSET4_CAM0),
+ NEOISP_DFS_REG(NEO_IR_COMPRESS_KNEE_RATIO01_CAM0),
+ NEOISP_DFS_REG(NEO_IR_COMPRESS_KNEE_RATIO23_CAM0),
+ NEOISP_DFS_REG(NEO_IR_COMPRESS_KNEE_RATIO4_CAM0),
+ NEOISP_DFS_REG(NEO_IR_COMPRESS_KNEE_NPOINT0_CAM0),
+ NEOISP_DFS_REG(NEO_IR_COMPRESS_KNEE_NPOINT1_CAM0),
+ NEOISP_DFS_REG(NEO_IR_COMPRESS_KNEE_NPOINT2_CAM0),
+ NEOISP_DFS_REG(NEO_IR_COMPRESS_KNEE_NPOINT3_CAM0),
+ NEOISP_DFS_REG(NEO_IR_COMPRESS_KNEE_NPOINT4_CAM0),
+ NEOISP_DFS_REG(NEO_BNR_CTRL_CAM0),
+ NEOISP_DFS_REG(NEO_BNR_YPEAK_CAM0),
+ NEOISP_DFS_REG(NEO_BNR_YEDGE_TH0_CAM0),
+ NEOISP_DFS_REG(NEO_BNR_YEDGE_SCALE_CAM0),
+ NEOISP_DFS_REG(NEO_BNR_YEDGES_TH0_CAM0),
+ NEOISP_DFS_REG(NEO_BNR_YEDGES_SCALE_CAM0),
+ NEOISP_DFS_REG(NEO_BNR_YEDGEA_TH0_CAM0),
+ NEOISP_DFS_REG(NEO_BNR_YEDGEA_SCALE_CAM0),
+ NEOISP_DFS_REG(NEO_BNR_YLUMA_X_TH0_CAM0),
+ NEOISP_DFS_REG(NEO_BNR_YLUMA_Y_TH_CAM0),
+ NEOISP_DFS_REG(NEO_BNR_YLUMA_SCALE_CAM0),
+ NEOISP_DFS_REG(NEO_BNR_YALPHA_GAIN_CAM0),
+ NEOISP_DFS_REG(NEO_BNR_CPEAK_CAM0),
+ NEOISP_DFS_REG(NEO_BNR_CEDGE_TH0_CAM0),
+ NEOISP_DFS_REG(NEO_BNR_CEDGE_SCALE_CAM0),
+ NEOISP_DFS_REG(NEO_BNR_CEDGES_TH0_CAM0),
+ NEOISP_DFS_REG(NEO_BNR_CEDGES_SCALE_CAM0),
+ NEOISP_DFS_REG(NEO_BNR_CEDGEA_TH0_CAM0),
+ NEOISP_DFS_REG(NEO_BNR_CEDGEA_SCALE_CAM0),
+ NEOISP_DFS_REG(NEO_BNR_CLUMA_X_TH0_CAM0),
+ NEOISP_DFS_REG(NEO_BNR_CLUMA_Y_TH_CAM0),
+ NEOISP_DFS_REG(NEO_BNR_CLUMA_SCALE_CAM0),
+ NEOISP_DFS_REG(NEO_BNR_CALPHA_GAIN_CAM0),
+ NEOISP_DFS_REG(NEO_BNR_EDGE_STAT_CAM0),
+ NEOISP_DFS_REG(NEO_BNR_EDGES_STAT_CAM0),
+ NEOISP_DFS_REG(NEO_BNR_STRETCH_CAM0),
+ NEOISP_DFS_REG(NEO_VIGNETTING_CTRL_CAM0),
+ NEOISP_DFS_REG(NEO_VIGNETTING_BLK_CONF_CAM0),
+ NEOISP_DFS_REG(NEO_VIGNETTING_BLK_SIZE_CAM0),
+ NEOISP_DFS_REG(NEO_VIGNETTING_BLK_STEPY_CAM0),
+ NEOISP_DFS_REG(NEO_VIGNETTING_BLK_STEPX_CAM0),
+ NEOISP_DFS_REG(NEO_VIGNETTING_BLK_C_LINE_CAM0),
+ NEOISP_DFS_REG(NEO_VIGNETTING_BLK_C_ROW_CAM0),
+ NEOISP_DFS_REG(NEO_VIGNETTING_BLK_C_FRACY_CAM0),
+ NEOISP_DFS_REG(NEO_IDBG1_LINE_NUM),
+ NEOISP_DFS_REG(NEO_IDBG1_CURR_LINE_NUM),
+ NEOISP_DFS_REG(NEO_IDBG1_IMA),
+ NEOISP_DFS_REG(NEO_IDBG1_IMD),
+ NEOISP_DFS_REG(NEO_IDBG1_DONE_STAT),
+ NEOISP_DFS_REG(NEO_DEMOSAIC_CTRL_CAM0),
+ NEOISP_DFS_REG(NEO_DEMOSAIC_ACTIVITY_CTL_CAM0),
+ NEOISP_DFS_REG(NEO_DEMOSAIC_DYNAMICS_CTL0_CAM0),
+ NEOISP_DFS_REG(NEO_DEMOSAIC_DYNAMICS_CTL2_CAM0),
+ NEOISP_DFS_REG(NEO_RGB_TO_YUV_GAIN_CTRL_CAM0),
+ NEOISP_DFS_REG(NEO_RGB_TO_YUV_MAT0_CAM0),
+ NEOISP_DFS_REG(NEO_RGB_TO_YUV_MAT1_CAM0),
+ NEOISP_DFS_REG(NEO_RGB_TO_YUV_MAT2_CAM0),
+ NEOISP_DFS_REG(NEO_RGB_TO_YUV_MAT3_CAM0),
+ NEOISP_DFS_REG(NEO_RGB_TO_YUV_MAT4_CAM0),
+ NEOISP_DFS_REG(NEO_RGB_TO_YUV_MAT5_CAM0),
+ NEOISP_DFS_REG(NEO_RGB_TO_YUV_OFFSET0_CAM0),
+ NEOISP_DFS_REG(NEO_RGB_TO_YUV_OFFSET1_CAM0),
+ NEOISP_DFS_REG(NEO_RGB_TO_YUV_OFFSET2_CAM0),
+ NEOISP_DFS_REG(NEO_DRC_ROI0_POS_CAM0),
+ NEOISP_DFS_REG(NEO_DRC_ROI0_SIZE_CAM0),
+ NEOISP_DFS_REG(NEO_DRC_ROI1_POS_CAM0),
+ NEOISP_DFS_REG(NEO_DRC_ROI1_SIZE_CAM0),
+ NEOISP_DFS_REG(NEO_DRC_GROI_SUM_SHIFT_CAM0),
+ NEOISP_DFS_REG(NEO_DRC_GBL_GAIN_CAM0),
+ NEOISP_DFS_REG(NEO_DRC_LCL_BLK_SIZE_CAM0),
+ NEOISP_DFS_REG(NEO_DRC_LCL_STRETCH_CAM0),
+ NEOISP_DFS_REG(NEO_DRC_LCL_BLK_STEPY_CAM0),
+ NEOISP_DFS_REG(NEO_DRC_LCL_BLK_STEPX_CAM0),
+ NEOISP_DFS_REG(NEO_DRC_LCL_SUM_SHIFT_CAM0),
+ NEOISP_DFS_REG(NEO_DRC_ALPHA_CAM0),
+ NEOISP_DFS_REG(NEO_DRC_GROI0_SUM_CAM0),
+ NEOISP_DFS_REG(NEO_DRC_GROI1_SUM_CAM0),
+ NEOISP_DFS_REG(NEO_DRC_STAT_BLK_Y_CAM0),
+ NEOISP_DFS_REG(NEO_DRC_CURR_YFRACT_CAM0),
+ NEOISP_DFS_REG(NEO_NR_CTRL_CAM0),
+ NEOISP_DFS_REG(NEO_NR_BLEND_SCALE_CAM0),
+ NEOISP_DFS_REG(NEO_NR_BLEND_TH0_CAM0),
+ NEOISP_DFS_REG(NEO_NR_EDGECNT_CAM0),
+ NEOISP_DFS_REG(NEO_DF_CTRL_CAM0),
+ NEOISP_DFS_REG(NEO_DF_TH_SCALE_CAM0),
+ NEOISP_DFS_REG(NEO_DF_BLEND_SHIFT_CAM0),
+ NEOISP_DFS_REG(NEO_DF_BLEND_TH0_CAM0),
+ NEOISP_DFS_REG(NEO_DF_EDGECNT_CAM0),
+ NEOISP_DFS_REG(NEO_EE_CTRL_CAM0),
+ NEOISP_DFS_REG(NEO_EE_CORING_CAM0),
+ NEOISP_DFS_REG(NEO_EE_CLIP_CAM0),
+ NEOISP_DFS_REG(NEO_EE_MASKGAIN_CAM0),
+ NEOISP_DFS_REG(NEO_EE_EDGECNT_CAM0),
+ NEOISP_DFS_REG(NEO_CCONVMED_CTRL_CAM0),
+ NEOISP_DFS_REG(NEO_CAS_GAIN_CAM0),
+ NEOISP_DFS_REG(NEO_CAS_CORR_CAM0),
+ NEOISP_DFS_REG(NEO_CAS_OFFSET_CAM0),
+ NEOISP_DFS_REG(NEO_PACKETIZER_CH0_CTRL_CAM0),
+ NEOISP_DFS_REG(NEO_PACKETIZER_CH12_CTRL_CAM0),
+ NEOISP_DFS_REG(NEO_PACKETIZER_PACK_CTRL_CAM0),
+ NEOISP_DFS_REG(NEO_GCM_IMAT0_CAM0),
+ NEOISP_DFS_REG(NEO_GCM_IMAT1_CAM0),
+ NEOISP_DFS_REG(NEO_GCM_IMAT2_CAM0),
+ NEOISP_DFS_REG(NEO_GCM_IMAT3_CAM0),
+ NEOISP_DFS_REG(NEO_GCM_IMAT4_CAM0),
+ NEOISP_DFS_REG(NEO_GCM_IMAT5_CAM0),
+ NEOISP_DFS_REG(NEO_GCM_IOFFSET0_CAM0),
+ NEOISP_DFS_REG(NEO_GCM_IOFFSET1_CAM0),
+ NEOISP_DFS_REG(NEO_GCM_IOFFSET2_CAM0),
+ NEOISP_DFS_REG(NEO_GCM_OMAT0_CAM0),
+ NEOISP_DFS_REG(NEO_GCM_OMAT1_CAM0),
+ NEOISP_DFS_REG(NEO_GCM_OMAT2_CAM0),
+ NEOISP_DFS_REG(NEO_GCM_OMAT3_CAM0),
+ NEOISP_DFS_REG(NEO_GCM_OMAT4_CAM0),
+ NEOISP_DFS_REG(NEO_GCM_OMAT5_CAM0),
+ NEOISP_DFS_REG(NEO_GCM_OOFFSET0_CAM0),
+ NEOISP_DFS_REG(NEO_GCM_OOFFSET1_CAM0),
+ NEOISP_DFS_REG(NEO_GCM_OOFFSET2_CAM0),
+ NEOISP_DFS_REG(NEO_GCM_GAMMA0_CAM0),
+ NEOISP_DFS_REG(NEO_GCM_GAMMA1_CAM0),
+ NEOISP_DFS_REG(NEO_GCM_GAMMA2_CAM0),
+ NEOISP_DFS_REG(NEO_GCM_BLKLVL0_CTRL_CAM0),
+ NEOISP_DFS_REG(NEO_GCM_BLKLVL1_CTRL_CAM0),
+ NEOISP_DFS_REG(NEO_GCM_BLKLVL2_CTRL_CAM0),
+ NEOISP_DFS_REG(NEO_GCM_LOWTH_CTRL01_CAM0),
+ NEOISP_DFS_REG(NEO_GCM_LOWTH_CTRL2_CAM0),
+ NEOISP_DFS_REG(NEO_GCM_MAT_CONFG_CAM0),
+ NEOISP_DFS_REG(NEO_AUTOFOCUS_ROI0_POS_CAM0),
+ NEOISP_DFS_REG(NEO_AUTOFOCUS_ROI0_SIZE_CAM0),
+ NEOISP_DFS_REG(NEO_AUTOFOCUS_ROI1_POS_CAM0),
+ NEOISP_DFS_REG(NEO_AUTOFOCUS_ROI1_SIZE_CAM0),
+ NEOISP_DFS_REG(NEO_AUTOFOCUS_ROI2_POS_CAM0),
+ NEOISP_DFS_REG(NEO_AUTOFOCUS_ROI2_SIZE_CAM0),
+ NEOISP_DFS_REG(NEO_AUTOFOCUS_ROI3_POS_CAM0),
+ NEOISP_DFS_REG(NEO_AUTOFOCUS_ROI3_SIZE_CAM0),
+ NEOISP_DFS_REG(NEO_AUTOFOCUS_ROI4_POS_CAM0),
+ NEOISP_DFS_REG(NEO_AUTOFOCUS_ROI4_SIZE_CAM0),
+ NEOISP_DFS_REG(NEO_AUTOFOCUS_ROI5_POS_CAM0),
+ NEOISP_DFS_REG(NEO_AUTOFOCUS_ROI5_SIZE_CAM0),
+ NEOISP_DFS_REG(NEO_AUTOFOCUS_ROI6_POS_CAM0),
+ NEOISP_DFS_REG(NEO_AUTOFOCUS_ROI6_SIZE_CAM0),
+ NEOISP_DFS_REG(NEO_AUTOFOCUS_ROI7_POS_CAM0),
+ NEOISP_DFS_REG(NEO_AUTOFOCUS_ROI7_SIZE_CAM0),
+ NEOISP_DFS_REG(NEO_AUTOFOCUS_ROI8_POS_CAM0),
+ NEOISP_DFS_REG(NEO_AUTOFOCUS_ROI8_SIZE_CAM0),
+ NEOISP_DFS_REG(NEO_AUTOFOCUS_FIL0_COEFFS0_CAM0),
+ NEOISP_DFS_REG(NEO_AUTOFOCUS_FIL0_COEFFS1_CAM0),
+ NEOISP_DFS_REG(NEO_AUTOFOCUS_FIL0_COEFFS2_CAM0),
+ NEOISP_DFS_REG(NEO_AUTOFOCUS_FIL0_SHIFT_CAM0),
+ NEOISP_DFS_REG(NEO_AUTOFOCUS_FIL1_COEFFS0_CAM0),
+ NEOISP_DFS_REG(NEO_AUTOFOCUS_FIL1_COEFFS1_CAM0),
+ NEOISP_DFS_REG(NEO_AUTOFOCUS_FIL1_COEFFS2_CAM0),
+ NEOISP_DFS_REG(NEO_AUTOFOCUS_FIL1_SHIFT_CAM0),
+ NEOISP_DFS_REG(NEO_AUTOFOCUS_ROI0_SUM0_CAM0),
+ NEOISP_DFS_REG(NEO_AUTOFOCUS_ROI0_SUM1_CAM0),
+ NEOISP_DFS_REG(NEO_AUTOFOCUS_ROI1_SUM0_CAM0),
+ NEOISP_DFS_REG(NEO_AUTOFOCUS_ROI1_SUM1_CAM0),
+ NEOISP_DFS_REG(NEO_AUTOFOCUS_ROI2_SUM0_CAM0),
+ NEOISP_DFS_REG(NEO_AUTOFOCUS_ROI2_SUM1_CAM0),
+ NEOISP_DFS_REG(NEO_AUTOFOCUS_ROI3_SUM0_CAM0),
+ NEOISP_DFS_REG(NEO_AUTOFOCUS_ROI3_SUM1_CAM0),
+ NEOISP_DFS_REG(NEO_AUTOFOCUS_ROI4_SUM0_CAM0),
+ NEOISP_DFS_REG(NEO_AUTOFOCUS_ROI4_SUM1_CAM0),
+ NEOISP_DFS_REG(NEO_AUTOFOCUS_ROI5_SUM0_CAM0),
+ NEOISP_DFS_REG(NEO_AUTOFOCUS_ROI5_SUM1_CAM0),
+ NEOISP_DFS_REG(NEO_AUTOFOCUS_ROI6_SUM0_CAM0),
+ NEOISP_DFS_REG(NEO_AUTOFOCUS_ROI6_SUM1_CAM0),
+ NEOISP_DFS_REG(NEO_AUTOFOCUS_ROI7_SUM0_CAM0),
+ NEOISP_DFS_REG(NEO_AUTOFOCUS_ROI7_SUM1_CAM0),
+ NEOISP_DFS_REG(NEO_AUTOFOCUS_ROI8_SUM0_CAM0),
+ NEOISP_DFS_REG(NEO_AUTOFOCUS_ROI8_SUM1_CAM0),
+ NEOISP_DFS_REG(NEO_IDBG2_LINE_NUM),
+ NEOISP_DFS_REG(NEO_IDBG2_CURR_LINE_NUM),
+ NEOISP_DFS_REG(NEO_IDBG2_IMA),
+ NEOISP_DFS_REG(NEO_IDBG2_IMD),
+ NEOISP_DFS_REG(NEO_IDBG2_DONE_STAT),
+};
+
+/* Structure to store word when reading memory */
+union udata_t {
+ u8 byte[4];
+ u16 half[2];
+ u32 word;
+};
+
+static inline int neoisp_dump_memory(struct seq_file *m, enum isp_block_map_e map, int wsize)
+{
+ struct neoisp_dev_s *neoispd = m->private;
+ union udata_t data;
+ u32 addr;
+ u32 *src = (u32 *)(uintptr_t)neoispd->mmio_tcm;
+ u32 offset = ISP_GET_OFF(map) / sizeof(u32);
+ u32 size = ISP_GET_SZ(map) / sizeof(u32);
+ int i, j;
+
+ for (i = 0; i < size; i++) {
+ addr = (offset + i) * sizeof(u32);
+ data.word = src[offset + i];
+
+ if (wsize == sizeof(u8)) {
+ for (j = 0; j < ARRAY_SIZE(data.byte); j++)
+ seq_printf(m, "%#x: %#x\n",
+ addr + (j * wsize), data.byte[j]);
+ }
+
+ if (wsize == sizeof(u16)) {
+ for (j = 0; j < ARRAY_SIZE(data.half); j++)
+ seq_printf(m, "%#x: %#x\n",
+ addr + (j * wsize), data.half[j]);
+ }
+ }
+
+ return 0;
+}
+
+static int neoisp_dump_vignetting_show(struct seq_file *m, void *private)
+{
+ struct neoisp_dev_s *neoispd = m->private;
+
+ return neoisp_dump_memory(m, neoispd->info->mems->vignetting_table, sizeof(u16));
+}
+DEFINE_SHOW_ATTRIBUTE(neoisp_dump_vignetting);
+
+static int neoisp_dump_drc_global_show(struct seq_file *m, void *private)
+{
+ struct neoisp_dev_s *neoispd = m->private;
+
+ return neoisp_dump_memory(m, neoispd->info->mems->drc_global_tonemap, sizeof(u16));
+}
+DEFINE_SHOW_ATTRIBUTE(neoisp_dump_drc_global);
+
+static int neoisp_dump_drc_local_show(struct seq_file *m, void *private)
+{
+ struct neoisp_dev_s *neoispd = m->private;
+
+ return neoisp_dump_memory(m, neoispd->info->mems->drc_local_tonemap, sizeof(u8));
+}
+DEFINE_SHOW_ATTRIBUTE(neoisp_dump_drc_local);
+
+void neoisp_debugfs_init(struct neoisp_dev_s *neoispd)
+{
+ neoispd->regset = devm_kzalloc(&neoispd->pdev->dev, sizeof(*neoispd->regset), GFP_KERNEL);
+ if (!neoispd->regset)
+ return;
+
+ neoispd->regset->regs = neoisp_dfs_regs;
+ neoispd->regset->nregs = ARRAY_SIZE(neoisp_dfs_regs);
+ neoispd->regset->base = neoispd->mmio;
+
+ neoispd->debugfs_entry = debugfs_create_dir(dev_name(&neoispd->pdev->dev), NULL);
+
+ debugfs_create_regset32("registers", 0400, neoispd->debugfs_entry, neoispd->regset);
+
+ debugfs_create_file("vignetting", 0400, neoispd->debugfs_entry, neoispd,
+ &neoisp_dump_vignetting_fops);
+ debugfs_create_file("drc_global", 0400, neoispd->debugfs_entry, neoispd,
+ &neoisp_dump_drc_global_fops);
+ debugfs_create_file("drc_local", 0400, neoispd->debugfs_entry, neoispd,
+ &neoisp_dump_drc_local_fops);
+}
+
+void neoisp_debugfs_exit(struct neoisp_dev_s *neoispd)
+{
+ debugfs_remove_recursive(neoispd->debugfs_entry);
+}
diff --git a/drivers/media/platform/nxp/neoisp/neoisp_main.c b/drivers/media/platform/nxp/neoisp/neoisp_main.c
index f053a2136dad..a6d4dc40f9ea 100644
--- a/drivers/media/platform/nxp/neoisp/neoisp_main.c
+++ b/drivers/media/platform/nxp/neoisp/neoisp_main.c
@@ -9,6 +9,7 @@
*/
#include <linux/clk.h>
+#include <linux/debugfs.h>
#include <linux/delay.h>
#include <linux/interrupt.h>
#include <linux/io.h>
@@ -35,6 +36,9 @@
#define NODE_NAME(node) \
(node_desc[(node)->id].ent_name + sizeof(NEOISP_NAME))
+static int enable_debugfs;
+module_param_named(enable_debugfs, enable_debugfs, uint, 0600);
+
static inline bool node_desc_is_output(const struct neoisp_node_desc_s *desc)
{
return desc->buf_type == V4L2_BUF_TYPE_META_OUTPUT ||
@@ -1765,9 +1769,16 @@ static int neoisp_probe(struct platform_device *pdev)
if (ret)
goto disable_nodes_err;
+ if (enable_debugfs) {
+ neoisp_debugfs_init(neoispd);
+ /* Increase pm_runtime counter to prevent suspend */
+ pm_runtime_resume_and_get(&pdev->dev);
+ }
+
pm_runtime_mark_last_busy(&pdev->dev);
pm_runtime_put_autosuspend(&pdev->dev);
+ dev_info(&pdev->dev, "probe: done (%d) debugfs (%x)\n", ret, enable_debugfs);
return ret;
disable_nodes_err:
@@ -1786,6 +1797,9 @@ static void neoisp_remove(struct platform_device *pdev)
struct neoisp_dev_s *neoispd = platform_get_drvdata(pdev);
int i;
+ if (enable_debugfs)
+ neoisp_debugfs_exit(neoispd);
+
for (i = NEOISP_NODE_GROUPS_COUNT - 1; i >= 0; i--)
neoisp_destroy_node_group(&neoispd->node_group[i]);
--
2.52.0
next prev parent reply other threads:[~2026-01-23 8:06 UTC|newest]
Thread overview: 54+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-01-23 8:09 [RFC v1 00/11] Add iMX95 neoisp driver Antoine Bouyer
2026-01-23 8:09 ` [RFC v1 01/11] media: uapi: v4l2-isp: Add v4l2 ISP extensible statistics definitions Antoine Bouyer
2026-02-03 16:15 ` Jacopo Mondi
2026-02-04 11:07 ` Antoine Bouyer
2026-02-04 13:14 ` Jacopo Mondi
2026-02-09 23:00 ` Laurent Pinchart
2026-03-02 9:41 ` Antoine Bouyer
2026-03-03 8:48 ` Jacopo Mondi
2026-01-23 8:09 ` [RFC v1 02/11] media: v4l2-isp: Add helper function to compute extended stats size Antoine Bouyer
2026-01-23 8:09 ` [RFC v1 03/11] media: Documentation: uapi: Update V4L2 ISP for extensible stats Antoine Bouyer
2026-02-03 16:58 ` Jacopo Mondi
2026-02-09 23:16 ` Laurent Pinchart
2026-01-23 8:09 ` [RFC v1 04/11] media: Documentation: Add NXP neoisp driver documentation Antoine Bouyer
2026-01-23 8:09 ` [RFC v1 05/11] dt-bindings: media: Add nxp neoisp support Antoine Bouyer
2026-01-26 17:12 ` Frank Li
2026-02-05 9:43 ` Krzysztof Kozlowski
2026-02-16 13:16 ` Antoine Bouyer
2026-02-16 13:38 ` Krzysztof Kozlowski
2026-01-23 8:09 ` [RFC v1 06/11] media: v4l2-ctrls: Add user control base for NXP neoisp controls Antoine Bouyer
2026-01-23 8:09 ` [RFC v1 07/11] media: Add meta formats supported by NXP neoisp driver Antoine Bouyer
2026-02-03 17:11 ` Jacopo Mondi
2026-02-04 13:31 ` Antoine Bouyer
2026-02-04 13:36 ` Jacopo Mondi
2026-02-04 14:04 ` Antoine Bouyer
2026-01-23 8:09 ` [RFC v1 08/11] media: uapi: Add NXP NEOISP user interface header file Antoine Bouyer
2026-02-09 23:29 ` Laurent Pinchart
2026-01-23 8:09 ` [RFC v1 09/11] media: platform: Add NXP Neoisp Image Signal Processor Antoine Bouyer
2026-02-04 14:16 ` [RFC 9/11] " Markus Elfring
2026-01-23 8:09 ` Antoine Bouyer [this message]
2026-01-23 8:09 ` [RFC v1 11/11] arm64: dts: freescale: imx95: Add NXP neoisp device tree node Antoine Bouyer
2026-02-05 9:44 ` Krzysztof Kozlowski
2026-01-26 9:44 ` [RFC v1 00/11] Add iMX95 neoisp driver Michael Riesch
2026-01-28 8:17 ` [EXT] " Antoine Bouyer
2026-01-28 23:00 ` Michael Riesch
2026-02-03 18:37 ` Jacopo Mondi
2026-02-04 17:12 ` Jacopo Mondi
2026-02-04 18:30 ` Antoine Bouyer
2026-02-05 9:40 ` Jacopo Mondi
2026-02-09 13:19 ` Anthony McGivern
2026-02-10 0:20 ` Laurent Pinchart
2026-02-10 12:20 ` Anthony McGivern
2026-02-10 16:02 ` Laurent Pinchart
2026-02-12 8:43 ` Anthony McGivern
2026-02-10 0:03 ` Laurent Pinchart
2026-02-12 17:38 ` Julien Vuillaumier
2026-02-23 12:38 ` Julien Vuillaumier
2026-02-23 16:52 ` Jacopo Mondi
2026-02-24 19:01 ` Julien Vuillaumier
2026-02-25 8:44 ` Jacopo Mondi
2026-03-20 16:29 ` Antoine Bouyer
2026-03-23 13:18 ` Jacopo Mondi
2026-03-24 17:44 ` Antoine Bouyer
2026-03-25 13:23 ` Jacopo Mondi
2026-02-06 20:51 ` Michael Riesch
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260123080938.3367348-11-antoine.bouyer@nxp.com \
--to=antoine.bouyer@nxp.com \
--cc=alexi.birlinger@nxp.com \
--cc=conor+dt@kernel.org \
--cc=daniel.baluta@nxp.com \
--cc=devicetree@vger.kernel.org \
--cc=festevam@gmail.com \
--cc=frank.li@nxp.com \
--cc=jacopo.mondi@ideasonboard.com \
--cc=julien.vuillaumier@nxp.com \
--cc=kernel@pengutronix.de \
--cc=krzk+dt@kernel.org \
--cc=laurent.pinchart@ideasonboard.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-media@vger.kernel.org \
--cc=mchehab@kernel.org \
--cc=peng.fan@nxp.com \
--cc=robh@kernel.org \
--cc=s.hauer@pengutronix.de \
--cc=shawnguo@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox