drivers/media/i2c/imx290.c

Source file repositories/reference/linux-study-clean/drivers/media/i2c/imx290.c

File Facts

System
Linux kernel
Corpus path
drivers/media/i2c/imx290.c
Extension
.c
Size
47186 bytes
Lines
1729
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 imx290_model_info {
	enum imx290_colour_variant colour_variant;
	const struct cci_reg_sequence *init_regs;
	size_t init_regs_num;
	unsigned int max_analog_gain;
	const char *name;
};

enum imx290_clk_freq {
	IMX290_CLK_37_125,
	IMX290_CLK_74_25,
	IMX290_NUM_CLK
};

/*
 * Clock configuration for registers INCKSEL1 to INCKSEL6.
 */
struct imx290_clk_cfg {
	u8 incksel1;
	u8 incksel2;
	u8 incksel3;
	u8 incksel4;
	u8 incksel5;
	u8 incksel6;
};

struct imx290_mode {
	u32 width;
	u32 height;
	u32 hmax_min;
	u32 vmax_min;
	u8 link_freq_index;
	u8 ctrl_07;

	const struct cci_reg_sequence *data;
	u32 data_size;

	const struct imx290_clk_cfg *clk_cfg;
};

struct imx290_csi_cfg {
	u16 repetition;
	u16 tclkpost;
	u16 thszero;
	u16 thsprepare;
	u16 tclktrail;
	u16 thstrail;
	u16 tclkzero;
	u16 tclkprepare;
	u16 tlpx;
};

struct imx290 {
	struct device *dev;
	struct clk *xclk;
	struct regmap *regmap;
	enum imx290_clk_freq xclk_idx;
	u8 nlanes;
	const struct imx290_model_info *model;

	struct v4l2_subdev sd;
	struct media_pad pad;

	const struct imx290_mode *current_mode;

	struct regulator_bulk_data supplies[IMX290_NUM_SUPPLIES];
	struct gpio_desc *rst_gpio;

	struct v4l2_ctrl_handler ctrls;
	struct v4l2_ctrl *link_freq;
	struct v4l2_ctrl *hblank;
	struct v4l2_ctrl *vblank;
	struct v4l2_ctrl *exposure;
	struct {
		struct v4l2_ctrl *hflip;
		struct v4l2_ctrl *vflip;
	};
};

static inline struct imx290 *to_imx290(struct v4l2_subdev *_sd)
{
	return container_of(_sd, struct imx290, sd);
}

/* -----------------------------------------------------------------------------
 * Modes and formats
 */

static const struct cci_reg_sequence imx290_global_init_settings[] = {
	{ IMX290_WINWV_OB, 12 },

Annotation

Implementation Notes