drivers/pinctrl/pinctrl-upboard.c
Source file repositories/reference/linux-study-clean/drivers/pinctrl/pinctrl-upboard.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/pinctrl/pinctrl-upboard.c- Extension
.c- Size
- 32795 bytes
- Lines
- 1071
- 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/array_size.hlinux/container_of.hlinux/device.hlinux/dmi.hlinux/err.hlinux/gpio/forwarder.hlinux/mfd/upboard-fpga.hlinux/module.hlinux/platform_device.hlinux/regmap.hlinux/seq_file.hlinux/stddef.hlinux/string_choices.hlinux/types.hlinux/pinctrl/consumer.hlinux/pinctrl/pinctrl.hlinux/pinctrl/pinmux.hlinux/gpio/driver.hlinux/gpio/consumer.hcore.hpinmux.h
Detected Declarations
struct upboard_pinstruct upboard_pingroupstruct upboard_pinctrl_datastruct upboard_pinctrlstruct upboard_pinctrl_mapenum upboard_pin_modeenum upboard_func0_fpgabitenum upboard_up_fpgabitenum upboard_up2_fpgabitfunction upboard_pinctrl_set_functionfunction upboard_pinctrl_gpio_commit_enablefunction upboard_pinctrl_gpio_request_enablefunction upboard_pinctrl_gpio_commit_disablefunction upboard_pinctrl_gpio_disable_freefunction upboard_pinctrl_gpio_commit_directionfunction upboard_pinctrl_gpio_set_directionfunction upboard_pinctrl_set_muxfunction upboard_pinctrl_pin_get_modefunction upboard_pinctrl_dbg_showfunction upboard_gpio_requestfunction upboard_gpio_freefunction upboard_gpio_get_directionfunction upboard_gpio_direction_inputfunction upboard_gpio_direction_outputfunction upboard_pinctrl_register_groupsfunction upboard_pinctrl_register_functionsfunction upboard_pinctrl_probe
Annotated Snippet
struct upboard_pin {
struct regmap_field *funcbit;
struct regmap_field *enbit;
struct regmap_field *dirbit;
};
struct upboard_pingroup {
struct pingroup grp;
enum upboard_pin_mode mode;
const enum upboard_pin_mode *modes;
};
struct upboard_pinctrl_data {
const struct upboard_pingroup *groups;
size_t ngroups;
const struct pinfunction *funcs;
size_t nfuncs;
const unsigned int *pin_header;
size_t ngpio;
};
struct upboard_pinctrl {
struct device *dev;
struct pinctrl_dev *pctldev;
const struct upboard_pinctrl_data *pctrl_data;
struct gpio_pin_range pin_range;
struct upboard_pin *pins;
};
struct upboard_pinctrl_map {
const struct pinctrl_map *maps;
size_t nmaps;
};
enum upboard_func0_fpgabit {
UPBOARD_FUNC_I2C0_EN = 8,
UPBOARD_FUNC_I2C1_EN = 9,
UPBOARD_FUNC_CEC0_EN = 12,
UPBOARD_FUNC_ADC0_EN = 14,
};
static const struct reg_field upboard_i2c0_reg =
REG_FIELD(UPBOARD_REG_FUNC_EN0, UPBOARD_FUNC_I2C0_EN, UPBOARD_FUNC_I2C0_EN);
static const struct reg_field upboard_i2c1_reg =
REG_FIELD(UPBOARD_REG_FUNC_EN0, UPBOARD_FUNC_I2C1_EN, UPBOARD_FUNC_I2C1_EN);
static const struct reg_field upboard_adc0_reg =
REG_FIELD(UPBOARD_REG_FUNC_EN0, UPBOARD_FUNC_ADC0_EN, UPBOARD_FUNC_ADC0_EN);
#define UPBOARD_UP_BIT_TO_PIN(bit) UPBOARD_UP_BIT_##bit
#define UPBOARD_UP_PIN_NAME(id) \
{ \
.number = UPBOARD_UP_BIT_##id, \
.name = #id, \
}
#define UPBOARD_UP_PIN_MUX(bit, data) \
{ \
.number = UPBOARD_UP_BIT_##bit, \
.name = "PINMUX_"#bit, \
.drv_data = (void *)(data), \
}
#define UPBOARD_UP_PIN_FUNC(id, data) \
{ \
.number = UPBOARD_UP_BIT_##id, \
.name = #id, \
.drv_data = (void *)(data), \
}
enum upboard_up_fpgabit {
UPBOARD_UP_BIT_I2C1_SDA,
UPBOARD_UP_BIT_I2C1_SCL,
UPBOARD_UP_BIT_ADC0,
UPBOARD_UP_BIT_UART1_RTS,
UPBOARD_UP_BIT_GPIO27,
UPBOARD_UP_BIT_GPIO22,
UPBOARD_UP_BIT_SPI_MOSI,
UPBOARD_UP_BIT_SPI_MISO,
UPBOARD_UP_BIT_SPI_CLK,
UPBOARD_UP_BIT_I2C0_SDA,
UPBOARD_UP_BIT_GPIO5,
UPBOARD_UP_BIT_GPIO6,
UPBOARD_UP_BIT_PWM1,
UPBOARD_UP_BIT_I2S_FRM,
UPBOARD_UP_BIT_GPIO26,
UPBOARD_UP_BIT_UART1_TX,
UPBOARD_UP_BIT_UART1_RX,
Annotation
- Immediate include surface: `linux/array_size.h`, `linux/container_of.h`, `linux/device.h`, `linux/dmi.h`, `linux/err.h`, `linux/gpio/forwarder.h`, `linux/mfd/upboard-fpga.h`, `linux/module.h`.
- Detected declarations: `struct upboard_pin`, `struct upboard_pingroup`, `struct upboard_pinctrl_data`, `struct upboard_pinctrl`, `struct upboard_pinctrl_map`, `enum upboard_pin_mode`, `enum upboard_func0_fpgabit`, `enum upboard_up_fpgabit`, `enum upboard_up2_fpgabit`, `function upboard_pinctrl_set_function`.
- 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.