drivers/pinctrl/cirrus/pinctrl-lochnagar.c
Source file repositories/reference/linux-study-clean/drivers/pinctrl/cirrus/pinctrl-lochnagar.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/pinctrl/cirrus/pinctrl-lochnagar.c- Extension
.c- Size
- 37447 bytes
- Lines
- 1237
- 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/err.hlinux/errno.hlinux/gpio/driver.hlinux/module.hlinux/of.hlinux/platform_device.hlinux/regmap.hlinux/string_choices.hlinux/pinctrl/consumer.hlinux/pinctrl/pinconf-generic.hlinux/pinctrl/pinconf.hlinux/pinctrl/pinctrl.hlinux/pinctrl/pinmux.hlinux/mfd/lochnagar.hlinux/mfd/lochnagar1_regs.hlinux/mfd/lochnagar2_regs.hdt-bindings/pinctrl/lochnagar.h../pinctrl-utils.h
Detected Declarations
struct lochnagar_pinstruct lochnagar_aifstruct lochnagar_funcstruct lochnagar_groupstruct lochnagar_func_groupsstruct lochnagar_pin_privenum lochnagar_pin_typeenum lochnagar_func_typefunction lochnagar_get_groups_countfunction lochnagar_get_group_pinsfunction lochnagar_get_funcs_countfunction lochnagar_get_func_groupsfunction lochnagar2_get_gpio_chanfunction lochnagar_pin_set_muxfunction lochnagar_aif_set_muxfunction lochnagar_set_muxfunction lochnagar_gpio_requestfunction lochnagar_gpio_set_directionfunction lochnagar_aif_set_masterfunction lochnagar_conf_group_setfunction lochnagar_gpio_setfunction lochnagar_gpio_direction_outfunction lochnagar_fill_func_groupsfunction lochnagar_pin_probe
Annotated Snippet
struct lochnagar_pin {
const char name[20];
enum lochnagar_pin_type type;
unsigned int reg;
int shift;
bool invert;
};
LN1_PIN_GPIO(CDC_RESET, "codec-reset", RST, CDC_RESET, 1);
LN1_PIN_GPIO(DSP_RESET, "dsp-reset", RST, DSP_RESET, 1);
LN1_PIN_GPIO(CDC_CIF1MODE, "codec-cif1mode", I2C_CTRL, CDC_CIF_MODE, 0);
LN1_PIN_MUX(GF_GPIO2, "gf-gpio2");
LN1_PIN_MUX(GF_GPIO3, "gf-gpio3");
LN1_PIN_MUX(GF_GPIO7, "gf-gpio7");
LN1_PIN_MUX(LED1, "led1");
LN1_PIN_MUX(LED2, "led2");
LN1_PIN_AIF(CDC_AIF1);
LN1_PIN_AIF(CDC_AIF2);
LN1_PIN_AIF(CDC_AIF3);
LN1_PIN_AIF(DSP_AIF1);
LN1_PIN_AIF(DSP_AIF2);
LN1_PIN_AIF(PSIA1);
LN1_PIN_AIF(PSIA2);
LN1_PIN_AIF(SPDIF_AIF);
LN1_PIN_AIF(GF_AIF1);
LN1_PIN_AIF(GF_AIF2);
LN1_PIN_AIF(GF_AIF3);
LN1_PIN_AIF(GF_AIF4);
LN2_PIN_GPIO(CDC_RESET, "codec-reset", MINICARD_RESETS, CDC_RESET, 1);
LN2_PIN_GPIO(DSP_RESET, "dsp-reset", MINICARD_RESETS, DSP_RESET, 1);
LN2_PIN_GPIO(CDC_CIF1MODE, "codec-cif1mode", COMMS_CTRL4, CDC_CIF1MODE, 0);
LN2_PIN_GPIO(CDC_LDOENA, "codec-ldoena", POWER_CTRL, PWR_ENA, 0);
LN2_PIN_GPIO(SPDIF_HWMODE, "spdif-hwmode", SPDIF_CTRL, SPDIF_HWMODE, 0);
LN2_PIN_GPIO(SPDIF_RESET, "spdif-reset", SPDIF_CTRL, SPDIF_RESET, 1);
LN2_PIN_MUX(FPGA_GPIO1, "fpga-gpio1");
LN2_PIN_MUX(FPGA_GPIO2, "fpga-gpio2");
LN2_PIN_MUX(FPGA_GPIO3, "fpga-gpio3");
LN2_PIN_MUX(FPGA_GPIO4, "fpga-gpio4");
LN2_PIN_MUX(FPGA_GPIO5, "fpga-gpio5");
LN2_PIN_MUX(FPGA_GPIO6, "fpga-gpio6");
LN2_PIN_MUX(CDC_GPIO1, "codec-gpio1");
LN2_PIN_MUX(CDC_GPIO2, "codec-gpio2");
LN2_PIN_MUX(CDC_GPIO3, "codec-gpio3");
LN2_PIN_MUX(CDC_GPIO4, "codec-gpio4");
LN2_PIN_MUX(CDC_GPIO5, "codec-gpio5");
LN2_PIN_MUX(CDC_GPIO6, "codec-gpio6");
LN2_PIN_MUX(CDC_GPIO7, "codec-gpio7");
LN2_PIN_MUX(CDC_GPIO8, "codec-gpio8");
LN2_PIN_MUX(DSP_GPIO1, "dsp-gpio1");
LN2_PIN_MUX(DSP_GPIO2, "dsp-gpio2");
LN2_PIN_MUX(DSP_GPIO3, "dsp-gpio3");
LN2_PIN_MUX(DSP_GPIO4, "dsp-gpio4");
LN2_PIN_MUX(DSP_GPIO5, "dsp-gpio5");
LN2_PIN_MUX(DSP_GPIO6, "dsp-gpio6");
LN2_PIN_MUX(GF_GPIO2, "gf-gpio2");
LN2_PIN_MUX(GF_GPIO3, "gf-gpio3");
LN2_PIN_MUX(GF_GPIO7, "gf-gpio7");
LN2_PIN_MUX(DSP_UART1_RX, "dsp-uart1-rx");
LN2_PIN_MUX(DSP_UART1_TX, "dsp-uart1-tx");
LN2_PIN_MUX(DSP_UART2_RX, "dsp-uart2-rx");
LN2_PIN_MUX(DSP_UART2_TX, "dsp-uart2-tx");
LN2_PIN_MUX(GF_UART2_RX, "gf-uart2-rx");
LN2_PIN_MUX(GF_UART2_TX, "gf-uart2-tx");
LN2_PIN_MUX(USB_UART_RX, "usb-uart-rx");
LN2_PIN_MUX(CDC_PDMCLK1, "codec-pdmclk1");
LN2_PIN_MUX(CDC_PDMDAT1, "codec-pdmdat1");
LN2_PIN_MUX(CDC_PDMCLK2, "codec-pdmclk2");
LN2_PIN_MUX(CDC_PDMDAT2, "codec-pdmdat2");
LN2_PIN_MUX(CDC_DMICCLK1, "codec-dmicclk1");
LN2_PIN_MUX(CDC_DMICDAT1, "codec-dmicdat1");
LN2_PIN_MUX(CDC_DMICCLK2, "codec-dmicclk2");
LN2_PIN_MUX(CDC_DMICDAT2, "codec-dmicdat2");
LN2_PIN_MUX(CDC_DMICCLK3, "codec-dmicclk3");
LN2_PIN_MUX(CDC_DMICDAT3, "codec-dmicdat3");
LN2_PIN_MUX(CDC_DMICCLK4, "codec-dmicclk4");
LN2_PIN_MUX(CDC_DMICDAT4, "codec-dmicdat4");
LN2_PIN_MUX(DSP_DMICCLK1, "dsp-dmicclk1");
LN2_PIN_MUX(DSP_DMICDAT1, "dsp-dmicdat1");
LN2_PIN_MUX(DSP_DMICCLK2, "dsp-dmicclk2");
LN2_PIN_MUX(DSP_DMICDAT2, "dsp-dmicdat2");
LN2_PIN_MUX(I2C2_SCL, "i2c2-scl");
LN2_PIN_MUX(I2C2_SDA, "i2c2-sda");
LN2_PIN_MUX(I2C3_SCL, "i2c3-scl");
LN2_PIN_MUX(I2C3_SDA, "i2c3-sda");
LN2_PIN_MUX(I2C4_SCL, "i2c4-scl");
LN2_PIN_MUX(I2C4_SDA, "i2c4-sda");
LN2_PIN_MUX(DSP_STANDBY, "dsp-standby");
Annotation
- Immediate include surface: `linux/err.h`, `linux/errno.h`, `linux/gpio/driver.h`, `linux/module.h`, `linux/of.h`, `linux/platform_device.h`, `linux/regmap.h`, `linux/string_choices.h`.
- Detected declarations: `struct lochnagar_pin`, `struct lochnagar_aif`, `struct lochnagar_func`, `struct lochnagar_group`, `struct lochnagar_func_groups`, `struct lochnagar_pin_priv`, `enum lochnagar_pin_type`, `enum lochnagar_func_type`, `function lochnagar_get_groups_count`, `function lochnagar_get_group_pins`.
- 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.