drivers/i2c/busses/i2c-tegra.c

Source file repositories/reference/linux-study-clean/drivers/i2c/busses/i2c-tegra.c

File Facts

System
Linux kernel
Corpus path
drivers/i2c/busses/i2c-tegra.c
Extension
.c
Size
72209 bytes
Lines
2512
Domain
Driver Families
Bucket
drivers/i2c
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 tegra_i2c_regs {
	unsigned int cnfg;
	unsigned int status;
	unsigned int sl_cnfg;
	unsigned int sl_addr1;
	unsigned int sl_addr2;
	unsigned int tlow_sext;
	unsigned int tx_fifo;
	unsigned int rx_fifo;
	unsigned int packet_transfer_status;
	unsigned int fifo_control;
	unsigned int fifo_status;
	unsigned int int_mask;
	unsigned int int_status;
	unsigned int clk_divisor;
	unsigned int bus_clear_cnfg;
	unsigned int bus_clear_status;
	unsigned int config_load;
	unsigned int clken_override;
	unsigned int interface_timing_0;
	unsigned int interface_timing_1;
	unsigned int hs_interface_timing_0;
	unsigned int hs_interface_timing_1;
	unsigned int master_reset_cntrl;
	unsigned int mst_fifo_control;
	unsigned int mst_fifo_status;
	unsigned int fairness_arb;
	unsigned int sw_mutex;
};

static const struct tegra_i2c_regs tegra20_i2c_regs = {
	.cnfg = 0x000,
	.status = 0x01c,
	.sl_cnfg = 0x020,
	.sl_addr1 = 0x02c,
	.sl_addr2 = 0x030,
	.tx_fifo = 0x050,
	.rx_fifo = 0x054,
	.packet_transfer_status = 0x058,
	.fifo_control = 0x05c,
	.fifo_status = 0x060,
	.int_mask = 0x064,
	.int_status = 0x068,
	.clk_divisor = 0x06c,
	.bus_clear_cnfg = 0x084,
	.bus_clear_status = 0x088,
	.config_load = 0x08c,
	.clken_override = 0x090,
	.interface_timing_0 = 0x094,
	.interface_timing_1 = 0x098,
	.hs_interface_timing_0 = 0x09c,
	.hs_interface_timing_1 = 0x0a0,
	.master_reset_cntrl = 0x0a8,
	.mst_fifo_control = 0x0b4,
	.mst_fifo_status = 0x0b8,
};

#if IS_ENABLED(CONFIG_ARCH_TEGRA_2x_SOC)
static const struct tegra_i2c_regs tegra20_dvc_i2c_regs = {
	.cnfg = 0x040,
	.status = 0x05c,
	.tx_fifo = 0x060,
	.rx_fifo = 0x064,
	.packet_transfer_status = 0x068,
	.fifo_control = 0x06c,
	.fifo_status = 0x070,
	.int_mask = 0x074,
	.int_status = 0x078,
	.clk_divisor = 0x07c,
	.bus_clear_cnfg = 0x094,
	.bus_clear_status = 0x098,
	.config_load = 0x09c,
	.clken_override = 0x0a0,
	.interface_timing_0 = 0x0a4,
	.interface_timing_1 = 0x0a8,
	.hs_interface_timing_0 = 0x0ac,
	.hs_interface_timing_1 = 0x0b0,
	.master_reset_cntrl = 0x0b8,
	.mst_fifo_control = 0x0c4,
	.mst_fifo_status = 0x0c8,
};
#endif

#if IS_ENABLED(CONFIG_ARCH_TEGRA_210_SOC)
static const struct tegra_i2c_regs tegra210_vi_i2c_regs = {
	.cnfg = 0x0c00,
	.status = 0x0c70,
	.tlow_sext = 0x0cd0,
	.tx_fifo = 0x0d40,
	.rx_fifo = 0x0d50,

Annotation

Implementation Notes