drivers/pinctrl/pinctrl-eic7700.c

Source file repositories/reference/linux-study-clean/drivers/pinctrl/pinctrl-eic7700.c

File Facts

System
Linux kernel
Corpus path
drivers/pinctrl/pinctrl-eic7700.c
Extension
.c
Size
24559 bytes
Lines
705
Domain
Driver Families
Bucket
drivers/pinctrl
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 eic7700_pin {
	u8 functions[EIC7700_FUNCTIONS_PER_PIN];
};

struct eic7700_pinctrl {
	void __iomem *base;
	struct pinctrl_desc desc;
	unsigned int functions_count;
	struct pinfunction functions[] __counted_by(functions_count);
};

enum {
	F_DISABLED,
	F_BOOT_SEL,
	F_CHIP_MODE,
	F_EMMC,
	F_FAN_TACH,
	F_GPIO,
	F_HDMI,
	F_I2C,
	F_I2S,
	F_JTAG,
	F_DDR_REF_CLK_SEL,
	F_LPDDR_REF_CLK,
	F_MIPI_CSI,
	F_OSC,
	F_PCIE,
	F_PWM,
	F_RGMII,
	F_RESET,
	F_SATA,
	F_SDIO,
	F_SPI,
	F_S_MODE,
	F_UART,
	F_USB,
	EIC7700_FUNCTIONS_COUNT
};

static const char *const eic7700_functions[EIC7700_FUNCTIONS_COUNT] = {
	[F_DISABLED]		= "disabled",
	[F_BOOT_SEL]		= "boot_sel",
	[F_CHIP_MODE]		= "chip_mode",
	[F_EMMC]		= "emmc",
	[F_FAN_TACH]		= "fan_tach",
	[F_GPIO]		= "gpio",
	[F_HDMI]		= "hdmi",
	[F_I2C]			= "i2c",
	[F_I2S]			= "i2s",
	[F_JTAG]		= "jtag",
	[F_DDR_REF_CLK_SEL]	= "ddr_ref_clk_sel",
	[F_LPDDR_REF_CLK]	= "lpddr_ref_clk",
	[F_MIPI_CSI]		= "mipi_csi",
	[F_OSC]			= "osc",
	[F_PCIE]		= "pcie",
	[F_PWM]			= "pwm",
	[F_RGMII]		= "rgmii",
	[F_RESET]		= "reset",
	[F_SATA]		= "sata",
	[F_SDIO]		= "sdio",
	[F_SPI]			= "spi",
	[F_S_MODE]		= "s_mode",
	[F_UART]		= "uart",
	[F_USB]			= "usb",
};

#define EIC7700_PIN(_number, _name, ...) \
	{ \
		.number	= _number, \
		.name = _name, \
		.drv_data = (void *)&(struct eic7700_pin) { { __VA_ARGS__ } } \
	}

static const struct pinctrl_pin_desc eic7700_pins[] = {
	EIC7700_PIN(0,   "chip_mode",		[0] = F_CHIP_MODE),
	EIC7700_PIN(1,   "mode_set0",		[0] = F_SDIO, [2] = F_GPIO),
	EIC7700_PIN(2,   "mode_set1",		[0] = F_SDIO, [2] = F_GPIO),
	EIC7700_PIN(3,   "mode_set2",		[0] = F_SDIO, [2] = F_GPIO),
	EIC7700_PIN(4,   "mode_set3",		[0] = F_SDIO, [2] = F_GPIO),
	EIC7700_PIN(5,   "xin",			[0] = F_OSC),
	EIC7700_PIN(6,   "rtc_xin",		[0] = F_DISABLED),
	EIC7700_PIN(7,   "rst_out_n",		[0] = F_RESET),
	EIC7700_PIN(8,   "key_reset_n",		[0] = F_RESET),
	EIC7700_PIN(9,   "rst_in_n",		[0] = F_DISABLED),
	EIC7700_PIN(10,  "por_in_n",		[0] = F_DISABLED),
	EIC7700_PIN(11,  "por_out_n",		[0] = F_DISABLED),
	EIC7700_PIN(12,  "gpio0",		[0] = F_GPIO),
	EIC7700_PIN(13,  "por_sel",		[0] = F_RESET),
	EIC7700_PIN(14,  "jtag0_tck",		[0] = F_JTAG, [1] = F_SPI, [2] = F_GPIO),
	EIC7700_PIN(15,  "jtag0_tms",		[0] = F_JTAG, [1] = F_SPI, [2] = F_GPIO),

Annotation

Implementation Notes