drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-bytecap.c

Source file repositories/reference/linux-study-clean/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-bytecap.c

File Facts

System
Linux kernel
Corpus path
drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-bytecap.c
Extension
.c
Size
27123 bytes
Lines
969
Domain
Driver Families
Bucket
drivers/media
Inferred role
Driver Families: implementation source
Status
source 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 dcmipp_bytecap_pix_map {
	unsigned int code;
	u32 pixelformat;
};

#define PIXMAP_MBUS_PFMT(mbus, fmt)			\
	{						\
		.code = MEDIA_BUS_FMT_##mbus,		\
		.pixelformat = V4L2_PIX_FMT_##fmt	\
	}

static const struct dcmipp_bytecap_pix_map dcmipp_bytecap_pix_map_list[] = {
	PIXMAP_MBUS_PFMT(RGB565_2X8_LE, RGB565),
	PIXMAP_MBUS_PFMT(RGB565_1X16, RGB565),
	PIXMAP_MBUS_PFMT(RGB888_1X24, RGB24),
	PIXMAP_MBUS_PFMT(YUYV8_2X8, YUYV),
	PIXMAP_MBUS_PFMT(YUYV8_1X16, YUYV),
	PIXMAP_MBUS_PFMT(YVYU8_2X8, YVYU),
	PIXMAP_MBUS_PFMT(YVYU8_1X16, YVYU),
	PIXMAP_MBUS_PFMT(UYVY8_2X8, UYVY),
	PIXMAP_MBUS_PFMT(UYVY8_1X16, UYVY),
	PIXMAP_MBUS_PFMT(VYUY8_2X8, VYUY),
	PIXMAP_MBUS_PFMT(VYUY8_1X16, VYUY),
	PIXMAP_MBUS_PFMT(Y8_1X8, GREY),
	PIXMAP_MBUS_PFMT(Y10_1X10, Y10),
	PIXMAP_MBUS_PFMT(Y12_1X12, Y12),
	PIXMAP_MBUS_PFMT(Y14_1X14, Y14),
	PIXMAP_MBUS_PFMT(SBGGR8_1X8, SBGGR8),
	PIXMAP_MBUS_PFMT(SGBRG8_1X8, SGBRG8),
	PIXMAP_MBUS_PFMT(SGRBG8_1X8, SGRBG8),
	PIXMAP_MBUS_PFMT(SRGGB8_1X8, SRGGB8),
	PIXMAP_MBUS_PFMT(SBGGR10_1X10, SBGGR10),
	PIXMAP_MBUS_PFMT(SGBRG10_1X10, SGBRG10),
	PIXMAP_MBUS_PFMT(SGRBG10_1X10, SGRBG10),
	PIXMAP_MBUS_PFMT(SRGGB10_1X10, SRGGB10),
	PIXMAP_MBUS_PFMT(SBGGR12_1X12, SBGGR12),
	PIXMAP_MBUS_PFMT(SGBRG12_1X12, SGBRG12),
	PIXMAP_MBUS_PFMT(SGRBG12_1X12, SGRBG12),
	PIXMAP_MBUS_PFMT(SRGGB12_1X12, SRGGB12),
	PIXMAP_MBUS_PFMT(SBGGR14_1X14, SBGGR14),
	PIXMAP_MBUS_PFMT(SGBRG14_1X14, SGBRG14),
	PIXMAP_MBUS_PFMT(SGRBG14_1X14, SGRBG14),
	PIXMAP_MBUS_PFMT(SRGGB14_1X14, SRGGB14),
	PIXMAP_MBUS_PFMT(JPEG_1X8, JPEG),
};

static const struct dcmipp_bytecap_pix_map *
dcmipp_bytecap_pix_map_by_pixelformat(u32 pixelformat)
{
	unsigned int i;

	for (i = 0; i < ARRAY_SIZE(dcmipp_bytecap_pix_map_list); i++) {
		if (dcmipp_bytecap_pix_map_list[i].pixelformat == pixelformat)
			return &dcmipp_bytecap_pix_map_list[i];
	}

	return NULL;
}

struct dcmipp_buf {
	struct vb2_v4l2_buffer	vb;
	bool			prepared;
	dma_addr_t		addr;
	size_t			size;
	struct list_head	list;
};

enum dcmipp_state {
	DCMIPP_STOPPED = 0,
	DCMIPP_WAIT_FOR_BUFFER,
	DCMIPP_RUNNING,
};

struct dcmipp_bytecap_device {
	struct dcmipp_ent_device ved;
	struct video_device vdev;
	struct device *dev;
	struct v4l2_pix_format format;
	struct vb2_queue queue;
	struct list_head buffers;
	/*
	 * Protects concurrent calls of buf queue / irq handler
	 * and buffer handling related variables / lists
	 */
	spinlock_t irqlock;
	/* mutex used as vdev and queue lock */
	struct mutex lock;
	u32 sequence;
	struct media_pipeline pipe;
	struct v4l2_subdev *s_subdev;

Annotation

Implementation Notes