drivers/gpu/ipu-v3/ipu-csi.c

Source file repositories/reference/linux-study-clean/drivers/gpu/ipu-v3/ipu-csi.c

File Facts

System
Linux kernel
Corpus path
drivers/gpu/ipu-v3/ipu-csi.c
Extension
.c
Size
20603 bytes
Lines
735
Domain
Driver Families
Bucket
drivers/gpu
Inferred role
Driver Families: exported/initcall integration point
Status
integration implementation candidate

Why This File Exists

Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.

Dependency Surface

Detected Declarations

Annotated Snippet

struct ipu_csi {
	void __iomem *base;
	int id;
	u32 module;
	struct clk *clk_ipu;	/* IPU bus clock */
	spinlock_t lock;
	bool inuse;
	struct ipu_soc *ipu;
};

/* CSI Register Offsets */
#define CSI_SENS_CONF		0x0000
#define CSI_SENS_FRM_SIZE	0x0004
#define CSI_ACT_FRM_SIZE	0x0008
#define CSI_OUT_FRM_CTRL	0x000c
#define CSI_TST_CTRL		0x0010
#define CSI_CCIR_CODE_1		0x0014
#define CSI_CCIR_CODE_2		0x0018
#define CSI_CCIR_CODE_3		0x001c
#define CSI_MIPI_DI		0x0020
#define CSI_SKIP		0x0024
#define CSI_CPD_CTRL		0x0028
#define CSI_CPD_RC(n)		(0x002c + ((n)*4))
#define CSI_CPD_RS(n)		(0x004c + ((n)*4))
#define CSI_CPD_GRC(n)		(0x005c + ((n)*4))
#define CSI_CPD_GRS(n)		(0x007c + ((n)*4))
#define CSI_CPD_GBC(n)		(0x008c + ((n)*4))
#define CSI_CPD_GBS(n)		(0x00Ac + ((n)*4))
#define CSI_CPD_BC(n)		(0x00Bc + ((n)*4))
#define CSI_CPD_BS(n)		(0x00Dc + ((n)*4))
#define CSI_CPD_OFFSET1		0x00ec
#define CSI_CPD_OFFSET2		0x00f0

/* CSI Register Fields */
#define CSI_SENS_CONF_DATA_FMT_SHIFT		8
#define CSI_SENS_CONF_DATA_FMT_MASK		0x00000700
#define CSI_SENS_CONF_DATA_FMT_RGB_YUV444	0L
#define CSI_SENS_CONF_DATA_FMT_YUV422_YUYV	1L
#define CSI_SENS_CONF_DATA_FMT_YUV422_UYVY	2L
#define CSI_SENS_CONF_DATA_FMT_BAYER		3L
#define CSI_SENS_CONF_DATA_FMT_RGB565		4L
#define CSI_SENS_CONF_DATA_FMT_RGB555		5L
#define CSI_SENS_CONF_DATA_FMT_RGB444		6L
#define CSI_SENS_CONF_DATA_FMT_JPEG		7L

#define CSI_SENS_CONF_VSYNC_POL_SHIFT		0
#define CSI_SENS_CONF_HSYNC_POL_SHIFT		1
#define CSI_SENS_CONF_DATA_POL_SHIFT		2
#define CSI_SENS_CONF_PIX_CLK_POL_SHIFT		3
#define CSI_SENS_CONF_SENS_PRTCL_MASK		0x00000070
#define CSI_SENS_CONF_SENS_PRTCL_SHIFT		4
#define CSI_SENS_CONF_PACK_TIGHT_SHIFT		7
#define CSI_SENS_CONF_DATA_WIDTH_SHIFT		11
#define CSI_SENS_CONF_EXT_VSYNC_SHIFT		15
#define CSI_SENS_CONF_DIVRATIO_SHIFT		16

#define CSI_SENS_CONF_DIVRATIO_MASK		0x00ff0000
#define CSI_SENS_CONF_DATA_DEST_SHIFT		24
#define CSI_SENS_CONF_DATA_DEST_MASK		0x07000000
#define CSI_SENS_CONF_JPEG8_EN_SHIFT		27
#define CSI_SENS_CONF_JPEG_EN_SHIFT		28
#define CSI_SENS_CONF_FORCE_EOF_SHIFT		29
#define CSI_SENS_CONF_DATA_EN_POL_SHIFT		31

#define CSI_DATA_DEST_IC			2
#define CSI_DATA_DEST_IDMAC			4

#define CSI_CCIR_ERR_DET_EN			0x01000000
#define CSI_HORI_DOWNSIZE_EN			0x80000000
#define CSI_VERT_DOWNSIZE_EN			0x40000000
#define CSI_TEST_GEN_MODE_EN			0x01000000

#define CSI_HSC_MASK				0x1fff0000
#define CSI_HSC_SHIFT				16
#define CSI_VSC_MASK				0x00000fff
#define CSI_VSC_SHIFT				0

#define CSI_TEST_GEN_R_MASK			0x000000ff
#define CSI_TEST_GEN_R_SHIFT			0
#define CSI_TEST_GEN_G_MASK			0x0000ff00
#define CSI_TEST_GEN_G_SHIFT			8
#define CSI_TEST_GEN_B_MASK			0x00ff0000
#define CSI_TEST_GEN_B_SHIFT			16

#define CSI_MAX_RATIO_SKIP_SMFC_MASK		0x00000007
#define CSI_MAX_RATIO_SKIP_SMFC_SHIFT		0
#define CSI_SKIP_SMFC_MASK			0x000000f8
#define CSI_SKIP_SMFC_SHIFT			3
#define CSI_ID_2_SKIP_MASK			0x00000300
#define CSI_ID_2_SKIP_SHIFT			8

Annotation

Implementation Notes