drivers/media/test-drivers/vimc/vimc-debayer.c

Source file repositories/reference/linux-study-clean/drivers/media/test-drivers/vimc/vimc-debayer.c

File Facts

System
Linux kernel
Corpus path
drivers/media/test-drivers/vimc/vimc-debayer.c
Extension
.c
Size
16552 bytes
Lines
613
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 vimc_debayer_pix_map {
	u32 code;
	enum vimc_debayer_rgb_colors order[2][2];
};

struct vimc_debayer_device {
	struct vimc_ent_device ved;
	struct v4l2_subdev sd;
	struct v4l2_ctrl_handler hdl;
	struct media_pad pads[2];

	u8 *src_frame;

	void (*set_rgb_src)(struct vimc_debayer_device *vdebayer,
			    unsigned int lin, unsigned int col,
			    unsigned int rgb[3]);

	/*
	 * Virtual "hardware" configuration, filled when the stream starts or
	 * when controls are set.
	 */
	struct {
		const struct vimc_debayer_pix_map *sink_pix_map;
		unsigned int sink_bpp;
		struct v4l2_area size;
		unsigned int mean_win_size;
		u32 src_code;
	} hw;
};

static const struct v4l2_mbus_framefmt sink_fmt_default = {
	.width = 640,
	.height = 480,
	.code = MEDIA_BUS_FMT_SRGGB8_1X8,
	.field = V4L2_FIELD_NONE,
	.colorspace = V4L2_COLORSPACE_SRGB,
};

static const u32 vimc_debayer_src_mbus_codes[] = {
	MEDIA_BUS_FMT_GBR888_1X24,
	MEDIA_BUS_FMT_BGR888_1X24,
	MEDIA_BUS_FMT_BGR888_3X8,
	MEDIA_BUS_FMT_RGB888_1X24,
	MEDIA_BUS_FMT_RGB888_2X12_BE,
	MEDIA_BUS_FMT_RGB888_2X12_LE,
	MEDIA_BUS_FMT_RGB888_3X8,
	MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
	MEDIA_BUS_FMT_RGB888_1X7X4_JEIDA,
	MEDIA_BUS_FMT_RGB888_1X32_PADHI,
};

static const struct vimc_debayer_pix_map vimc_debayer_pix_map_list[] = {
	{
		.code = MEDIA_BUS_FMT_SBGGR8_1X8,
		.order = { { VIMC_DEBAYER_BLUE, VIMC_DEBAYER_GREEN },
			   { VIMC_DEBAYER_GREEN, VIMC_DEBAYER_RED } }
	},
	{
		.code = MEDIA_BUS_FMT_SGBRG8_1X8,
		.order = { { VIMC_DEBAYER_GREEN, VIMC_DEBAYER_BLUE },
			   { VIMC_DEBAYER_RED, VIMC_DEBAYER_GREEN } }
	},
	{
		.code = MEDIA_BUS_FMT_SGRBG8_1X8,
		.order = { { VIMC_DEBAYER_GREEN, VIMC_DEBAYER_RED },
			   { VIMC_DEBAYER_BLUE, VIMC_DEBAYER_GREEN } }
	},
	{
		.code = MEDIA_BUS_FMT_SRGGB8_1X8,
		.order = { { VIMC_DEBAYER_RED, VIMC_DEBAYER_GREEN },
			   { VIMC_DEBAYER_GREEN, VIMC_DEBAYER_BLUE } }
	},
	{
		.code = MEDIA_BUS_FMT_SBGGR10_1X10,
		.order = { { VIMC_DEBAYER_BLUE, VIMC_DEBAYER_GREEN },
			   { VIMC_DEBAYER_GREEN, VIMC_DEBAYER_RED } }
	},
	{
		.code = MEDIA_BUS_FMT_SGBRG10_1X10,
		.order = { { VIMC_DEBAYER_GREEN, VIMC_DEBAYER_BLUE },
			   { VIMC_DEBAYER_RED, VIMC_DEBAYER_GREEN } }
	},
	{
		.code = MEDIA_BUS_FMT_SGRBG10_1X10,
		.order = { { VIMC_DEBAYER_GREEN, VIMC_DEBAYER_RED },
			   { VIMC_DEBAYER_BLUE, VIMC_DEBAYER_GREEN } }
	},
	{
		.code = MEDIA_BUS_FMT_SRGGB10_1X10,
		.order = { { VIMC_DEBAYER_RED, VIMC_DEBAYER_GREEN },

Annotation

Implementation Notes