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.
- 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.
- Allocates kernel memory; connect allocation flags and lifetime to context constraints.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
linux/bitfield.hlinux/device.hlinux/io.hlinux/mod_devicetable.hlinux/module.hlinux/of.hlinux/platform_device.hlinux/seq_file.hlinux/regulator/consumer.hlinux/pinctrl/pinconf.hlinux/pinctrl/pinconf-generic.hlinux/pinctrl/pinctrl.hlinux/pinctrl/pinmux.hcore.hpinmux.hpinconf.h
Detected Declarations
struct eic7700_pinstruct eic7700_pinctrlfunction eic7700_get_groups_countfunction eic7700_get_group_pinsfunction eic7700_pin_config_getfunction eic7700_pin_config_setfunction eic7700_pin_config_dbg_showfunction eic7700_get_functions_countfunction eic7700_get_function_groupsfunction eic7700_set_muxfunction eic7700_gpio_request_enablefunction eic7700_gpio_disable_freefunction eic7700_gpio_set_directionfunction eic7700_pinctrl_init_function_groupsfunction eic7700_pinctrl_probe
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
- Immediate include surface: `linux/bitfield.h`, `linux/device.h`, `linux/io.h`, `linux/mod_devicetable.h`, `linux/module.h`, `linux/of.h`, `linux/platform_device.h`, `linux/seq_file.h`.
- Detected declarations: `struct eic7700_pin`, `struct eic7700_pinctrl`, `function eic7700_get_groups_count`, `function eic7700_get_group_pins`, `function eic7700_pin_config_get`, `function eic7700_pin_config_set`, `function eic7700_pin_config_dbg_show`, `function eic7700_get_functions_count`, `function eic7700_get_function_groups`, `function eic7700_set_mux`.
- Atlas domain: Driver Families / drivers/pinctrl.
- Implementation status: source implementation candidate.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.