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

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

File Facts

System
Linux kernel
Corpus path
drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-byteproc.c
Extension
.c
Size
16674 bytes
Lines
607
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_byteproc_pix_map {
	unsigned int code;
	unsigned int bpp;
};

#define PIXMAP_MBUS_BPP(mbus, byteperpixel)		\
	{						\
		.code = MEDIA_BUS_FMT_##mbus,		\
		.bpp = byteperpixel,			\
	}
static const struct dcmipp_byteproc_pix_map dcmipp_byteproc_pix_map_list[] = {
	PIXMAP_MBUS_BPP(RGB565_2X8_LE, 2),
	PIXMAP_MBUS_BPP(RGB565_1X16, 2),
	PIXMAP_MBUS_BPP(RGB888_3X8, 3),
	PIXMAP_MBUS_BPP(RGB888_1X24, 3),
	PIXMAP_MBUS_BPP(YUYV8_2X8, 2),
	PIXMAP_MBUS_BPP(YUYV8_1X16, 2),
	PIXMAP_MBUS_BPP(YVYU8_2X8, 2),
	PIXMAP_MBUS_BPP(YVYU8_1X16, 2),
	PIXMAP_MBUS_BPP(UYVY8_2X8, 2),
	PIXMAP_MBUS_BPP(UYVY8_1X16, 2),
	PIXMAP_MBUS_BPP(VYUY8_2X8, 2),
	PIXMAP_MBUS_BPP(VYUY8_1X16, 2),
	PIXMAP_MBUS_BPP(Y8_1X8, 1),
	PIXMAP_MBUS_BPP(Y10_1X10, 2),
	PIXMAP_MBUS_BPP(Y12_1X12, 2),
	PIXMAP_MBUS_BPP(Y14_1X14, 2),
	PIXMAP_MBUS_BPP(SBGGR8_1X8, 1),
	PIXMAP_MBUS_BPP(SGBRG8_1X8, 1),
	PIXMAP_MBUS_BPP(SGRBG8_1X8, 1),
	PIXMAP_MBUS_BPP(SRGGB8_1X8, 1),
	PIXMAP_MBUS_BPP(SBGGR10_1X10, 2),
	PIXMAP_MBUS_BPP(SGBRG10_1X10, 2),
	PIXMAP_MBUS_BPP(SGRBG10_1X10, 2),
	PIXMAP_MBUS_BPP(SRGGB10_1X10, 2),
	PIXMAP_MBUS_BPP(SBGGR12_1X12, 2),
	PIXMAP_MBUS_BPP(SGBRG12_1X12, 2),
	PIXMAP_MBUS_BPP(SGRBG12_1X12, 2),
	PIXMAP_MBUS_BPP(SRGGB12_1X12, 2),
	PIXMAP_MBUS_BPP(SBGGR14_1X14, 2),
	PIXMAP_MBUS_BPP(SGBRG14_1X14, 2),
	PIXMAP_MBUS_BPP(SGRBG14_1X14, 2),
	PIXMAP_MBUS_BPP(SRGGB14_1X14, 2),
	PIXMAP_MBUS_BPP(JPEG_1X8, 1),
};

static const struct dcmipp_byteproc_pix_map *
dcmipp_byteproc_pix_map_by_code(u32 code)
{
	unsigned int i;

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

	return NULL;
}

struct dcmipp_byteproc_device {
	struct dcmipp_ent_device ved;
	struct v4l2_subdev sd;
	struct device *dev;
	void __iomem *regs;
};

static const struct v4l2_mbus_framefmt fmt_default = {
	.width = DCMIPP_FMT_WIDTH_DEFAULT,
	.height = DCMIPP_FMT_HEIGHT_DEFAULT,
	.code = MEDIA_BUS_FMT_RGB565_2X8_LE,
	.field = V4L2_FIELD_NONE,
	.colorspace = DCMIPP_COLORSPACE_DEFAULT,
	.ycbcr_enc = DCMIPP_YCBCR_ENC_DEFAULT,
	.quantization = DCMIPP_QUANTIZATION_DEFAULT,
	.xfer_func = DCMIPP_XFER_FUNC_DEFAULT,
};

static const struct v4l2_rect crop_min = {
	.width = DCMIPP_FRAME_MIN_WIDTH,
	.height = DCMIPP_FRAME_MIN_HEIGHT,
	.top = 0,
	.left = 0,
};

static void dcmipp_byteproc_adjust_crop(struct v4l2_rect *r,
					struct v4l2_rect *compose)
{
	/* Disallow rectangles smaller than the minimal one. */
	v4l2_rect_set_min_size(r, &crop_min);
	v4l2_rect_map_inside(r, compose);

Annotation

Implementation Notes