drivers/gpu/drm/tegra/hdmi.c

Source file repositories/reference/linux-study-clean/drivers/gpu/drm/tegra/hdmi.c

File Facts

System
Linux kernel
Corpus path
drivers/gpu/drm/tegra/hdmi.c
Extension
.c
Size
57546 bytes
Lines
1927
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 tmds_config {
	unsigned int pclk;
	u32 pll0;
	u32 pll1;
	u32 pe_current;
	u32 drive_current;
	u32 peak_current;
};

struct tegra_hdmi_config {
	const struct tmds_config *tmds;
	unsigned int num_tmds;

	unsigned long fuse_override_offset;
	u32 fuse_override_value;

	bool has_sor_io_peak_current;
	bool has_hda;
	bool has_hbr;
};

struct tegra_hdmi {
	struct host1x_client client;
	struct tegra_output output;
	struct device *dev;

	struct regulator *hdmi;
	struct regulator *pll;
	struct regulator *vdd;

	void __iomem *regs;
	unsigned int irq;

	struct clk *clk_parent;
	struct clk *clk;
	struct reset_control *rst;

	const struct tegra_hdmi_config *config;

	unsigned int audio_source;
	struct tegra_hda_format format;

	unsigned int pixel_clock;
	bool stereo;
	bool dvi;

	struct drm_info_list *debugfs_files;

	struct platform_device *audio_pdev;
	struct mutex audio_lock;
};

static inline struct tegra_hdmi *
host1x_client_to_hdmi(struct host1x_client *client)
{
	return container_of(client, struct tegra_hdmi, client);
}

static inline struct tegra_hdmi *to_hdmi(struct tegra_output *output)
{
	return container_of(output, struct tegra_hdmi, output);
}

#define HDMI_AUDIOCLK_FREQ 216000000
#define HDMI_REKEY_DEFAULT 56

enum {
	AUTO = 0,
	SPDIF,
	HDA,
};

static inline u32 tegra_hdmi_readl(struct tegra_hdmi *hdmi,
				   unsigned int offset)
{
	u32 value = readl(hdmi->regs + (offset << 2));

	trace_hdmi_readl(hdmi->dev, offset, value);

	return value;
}

static inline void tegra_hdmi_writel(struct tegra_hdmi *hdmi, u32 value,
				     unsigned int offset)
{
	trace_hdmi_writel(hdmi->dev, offset, value);
	writel(value, hdmi->regs + (offset << 2));
}

struct tegra_hdmi_audio_config {

Annotation

Implementation Notes