drivers/gpu/drm/renesas/rz-du/rzg2l_mipi_dsi.c

Source file repositories/reference/linux-study-clean/drivers/gpu/drm/renesas/rz-du/rzg2l_mipi_dsi.c

File Facts

System
Linux kernel
Corpus path
drivers/gpu/drm/renesas/rz-du/rzg2l_mipi_dsi.c
Extension
.c
Size
42710 bytes
Lines
1561
Domain
Driver Families
Bucket
drivers/gpu
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 rzg2l_mipi_dsi_hw_info {
	int (*dphy_init)(struct rzg2l_mipi_dsi *dsi, u64 hsfreq_millihz);
	void (*dphy_startup_late_init)(struct rzg2l_mipi_dsi *dsi);
	void (*dphy_exit)(struct rzg2l_mipi_dsi *dsi);
	int (*dphy_conf_clks)(struct rzg2l_mipi_dsi *dsi, unsigned long mode_freq,
			      u64 *hsfreq_millihz);
	unsigned int (*dphy_mode_clk_check)(struct rzg2l_mipi_dsi *dsi,
					    unsigned long mode_freq);
	struct {
		const struct rzv2h_pll_limits **limits;
		const u8 *table;
		const u8 table_size;
	} cpg_plldsi;
	u32 phy_reg_offset;
	u32 link_reg_offset;
	unsigned long min_dclk;
	unsigned long max_dclk;
	u8 features;
};

struct rzv2h_dsi_mode_calc {
	unsigned long mode_freq_khz;
	struct rzv2h_pll_pars dsi_parameters;
};

struct rzg2l_mipi_dsi {
	struct device *dev;
	void __iomem *mmio;

	const struct rzg2l_mipi_dsi_hw_info *info;

	struct reset_control *rstc;
	struct reset_control *arstc;
	struct reset_control *prstc;

	struct mipi_dsi_host host;
	struct drm_bridge bridge;
	struct drm_bridge *next_bridge;

	struct clk *vclk;
	struct clk *lpclk;

	enum mipi_dsi_pixel_format format;
	unsigned int num_data_lanes;
	unsigned int lanes;
	unsigned long mode_flags;

	struct rzv2h_dsi_mode_calc mode_calc;

	/* DCS buffer pointers when using external memory. */
	dma_addr_t dcs_buf_phys;
	u8 *dcs_buf_virt;
};

static const struct rzv2h_pll_limits rzv2h_plldsi_div_limits = {
	.fout = { .min = 80 * MEGA, .max = 1500 * MEGA },
	.fvco = { .min = 1050 * MEGA, .max = 2100 * MEGA },
	.m = { .min = 64, .max = 1023 },
	.p = { .min = 1, .max = 4 },
	.s = { .min = 0, .max = 5 },
	.k = { .min = -32768, .max = 32767 },
};

static inline struct rzg2l_mipi_dsi *
bridge_to_rzg2l_mipi_dsi(struct drm_bridge *bridge)
{
	return container_of(bridge, struct rzg2l_mipi_dsi, bridge);
}

static inline struct rzg2l_mipi_dsi *
host_to_rzg2l_mipi_dsi(struct mipi_dsi_host *host)
{
	return container_of(host, struct rzg2l_mipi_dsi, host);
}

struct rzg2l_mipi_dsi_timings {
	unsigned long hsfreq_max;
	u32 t_init;
	u32 tclk_prepare;
	u32 ths_prepare;
	u32 tclk_zero;
	u32 tclk_pre;
	u32 tclk_post;
	u32 tclk_trail;
	u32 ths_zero;
	u32 ths_trail;
	u32 ths_exit;
	u32 tlpx;
};

Annotation

Implementation Notes