ENUM PIN_CONFIG_PARAM(9)
๐ enum pin_config_param โ the Kernel API Manual moment โจ
okay so bestie, welcome to the kernel API manual for enum pin_config_param, aka the actual list of every possible pin configuration parameter ever. this is lowkey the pin control glossary and it ate. ๐
๐ธ NAME ๐ธ
enum pin_config_param โ all the possible pin configuration parameters, like, literally all of them ๐
โจ SYNOPSIS โจ
enum pin_config_param {
PIN_CONFIG_BIAS_BUS_HOLD ,
PIN_CONFIG_BIAS_DISABLE ,
PIN_CONFIG_BIAS_HIGH_IMPEDANCE ,
PIN_CONFIG_BIAS_PULL_DOWN ,
PIN_CONFIG_BIAS_PULL_PIN_DEFAULT ,
PIN_CONFIG_BIAS_PULL_UP ,
PIN_CONFIG_DRIVE_OPEN_DRAIN ,
PIN_CONFIG_DRIVE_OPEN_SOURCE ,
PIN_CONFIG_DRIVE_PUSH_PULL ,
PIN_CONFIG_DRIVE_STRENGTH ,
PIN_CONFIG_DRIVE_STRENGTH_UA ,
PIN_CONFIG_INPUT_DEBOUNCE ,
PIN_CONFIG_INPUT_ENABLE ,
PIN_CONFIG_INPUT_SCHMITT ,
PIN_CONFIG_INPUT_SCHMITT_ENABLE ,
PIN_CONFIG_INPUT_SCHMITT_UV ,
PIN_CONFIG_INPUT_VOLTAGE_UV ,
PIN_CONFIG_MODE_LOW_POWER ,
PIN_CONFIG_MODE_PWM ,
PIN_CONFIG_LEVEL ,
PIN_CONFIG_OUTPUT_ENABLE ,
PIN_CONFIG_OUTPUT_IMPEDANCE_OHMS ,
PIN_CONFIG_PERSIST_STATE ,
PIN_CONFIG_POWER_SOURCE ,
PIN_CONFIG_SKEW_DELAY ,
PIN_CONFIG_SKEW_DELAY_INPUT_PS ,
PIN_CONFIG_SKEW_DELAY_OUTPUT_PS ,
PIN_CONFIG_SLEEP_HARDWARE_STATE ,
PIN_CONFIG_SLEW_RATE ,
PIN_CONFIG_END ,
PIN_CONFIG_MAX
};
look at that list. iconic. no notes. ๐
๐ฆ CONSTANTS ๐ฆ
PIN_CONFIG_BIAS_BUS_HOLDโ the pin gets set to weakly latch, so it weakly drives the last value that was on a tristate bus. yes queen, it's also known as a "bus holder", "bus keeper" or "repeater" ๐ what that means is: another device on the bus can still change the value by driving the bus high or low and then switching to tristate. the argument is ignored, she doesn't want it.PIN_CONFIG_BIAS_DISABLEโ disables any pin bias on the pin. so like, a transition from say pull-up to pull-down actually implies you disable pull-up along the way โ this setting right here disables all biasing. periodt.PIN_CONFIG_BIAS_HIGH_IMPEDANCEโ the pin is set to high impedance mode, also known as "third-state" (tristate) or "high-Z" or "floating" ๐ซง on output pins this effectively disconnects the pin, which is genuinely useful if, for example, some other pin is gonna drive the signal connected to it for a while. pins used for input are usually always high impedance anyway, main character energy.PIN_CONFIG_BIAS_PULL_DOWNโ the pin gets pulled down (usually with high impedance to GROUND ๐). if the argument is!= 0pull-down is enabled, and the value is interpreted by the driver โ so it can be custom or an SI unit such as Ohms.PIN_CONFIG_BIAS_PULL_PIN_DEFAULTโ the pin gets pulled up or down based on embedded knowledge of the controller hardware, like the current mux function. the pull direction and possibly strength too will normally be decided completely inside the hardware block and not be readable from the kernel side ๐ if the argument is!= 0pull up/down is enabled; if it is0, the configuration is ignored. and the proper way to disable it is to usePIN_CONFIG_BIAS_DISABLE. iykyk.PIN_CONFIG_BIAS_PULL_UPโ the pin gets pulled up (usually with high impedance to VDD โก). if the argument is!= 0pull-up is enabled, and the value is interpreted by the driver โ custom or an SI unit such as Ohms, dealer's choice.PIN_CONFIG_DRIVE_OPEN_DRAINโ the pin is driven with open drain (open collector), which means it's usually wired with other output ports that are then pulled up with an external resistor. setting this config enables open drain mode, and the argument is ignored ๐ฎPIN_CONFIG_DRIVE_OPEN_SOURCEโ the pin is driven with open source (open emitter). setting this config enables open source mode, argument ignored, we move.PIN_CONFIG_DRIVE_PUSH_PULLโ the pin is driven actively high and low. this is the most typical case and is typically achieved with two active transistors on the output ๐ฅ setting this config enables push-pull mode, and the argument is ignored.PIN_CONFIG_DRIVE_STRENGTHโ the pin will sink or source at most the current passed as argument. the argument is inmA.PIN_CONFIG_DRIVE_STRENGTH_UAโ the pin will sink or source at most the current passed as argument. the argument is inuA. yes, micro edition ๐PIN_CONFIG_INPUT_DEBOUNCEโ configures the pin into debounce mode, which means it waits for signals to settle when reading inputs. the argument gives the debounce time inusecs. setting the argument to zero turns debouncing off ๐ no cap.PIN_CONFIG_INPUT_ENABLEโ enables the pin's input. note that this does not affect the pin's ability to drive output โ ๏ธ1enables input,0disables input.PIN_CONFIG_INPUT_SCHMITTโ configures an input pin to run in schmitt-trigger mode. if the schmitt-trigger has adjustable hysteresis, the threshold value is given on a custom format as the argument when setting pins to this mode ๐๏ธPIN_CONFIG_INPUT_SCHMITT_ENABLEโ controls schmitt-trigger mode on the pin. if the argument!= 0, schmitt-trigger mode is enabled; if it's0, schmitt-trigger mode is disabled. simple as.PIN_CONFIG_INPUT_SCHMITT_UVโ configures an input pin to run in schmitt-trigger mode. the argument is inuV. tiny units, big vibes ๐งPIN_CONFIG_INPUT_VOLTAGE_UVโ configures the input voltage level of the pin. the argument is specified inmicrovolts.PIN_CONFIG_MODE_LOW_POWERโ configures the pin for low power operation ๐ค if several modes of operation are supported, these can be passed in the argument on a custom form โ otherwise just use argument1to indicate low power mode, and argument0turns low power mode off.PIN_CONFIG_MODE_PWMโ configures the pin for PWM ๐PIN_CONFIG_LEVELโ setting this configures the pin as an output and drives a value on the line. use argument1to indicate high level, argument0to indicate low level. conversely, the value of the line can be read using this parameter โ if and only if that value can be represented as a binary0or1, where0indicates a low voltage level and1indicates a high voltage level. (please seeDocumentation/driver-api/pin-control.rst, section "GPIO mode pitfalls" for a whole discussion around this parameter ๐)PIN_CONFIG_OUTPUT_ENABLEโ enables the pin's output mode without driving a value there. for most platforms this reduces to enabling the output buffers and then letting the pin controller current configuration (eg. the currently selected mux function) drive values on the line. use argument1to enable output mode, argument0to disable it ๐ซถPIN_CONFIG_OUTPUT_IMPEDANCE_OHMSโ configures the output impedance of the pin with the value passed as argument. the argument is inohms.PIN_CONFIG_PERSIST_STATEโ retains pin state across sleep or controller reset ๐ดโจPIN_CONFIG_POWER_SOURCEโ if the pin can select between different power supplies, the argument to this parameter (on a custom format) tells the driver which alternative power source to use ๐PIN_CONFIG_SKEW_DELAYโ if the pin has a programmable skew rate (on inputs) or latch delay (on outputs), this parameter (in a custom format) specifies the clock skew or latch delay. it typically controls how many double inverters are put in front of the line ๐PIN_CONFIG_SKEW_DELAY_INPUT_PSโ if the pin has independent values for the programmable skew rate (on inputs) and latch delay (on outputs), then this parameter specifies the clock skew only. the argument is inps.PIN_CONFIG_SKEW_DELAY_OUTPUT_PSโ if the pin has independent values for the programmable skew rate (on inputs) and latch delay (on outputs), then this parameter specifies the latch delay only. the argument is inps.PIN_CONFIG_SLEEP_HARDWARE_STATEโ indicates this is sleep related state ๐PIN_CONFIG_SLEW_RATEโ if the pin can select slew rate, the argument to this parameter (on a custom format) tells the driver which alternative slew rate to use ๐๏ธPIN_CONFIG_ENDโ this is the last enumerator for pin configurations. if you need to pass in custom configurations to the pin controller, usePIN_CONFIG_END+1as the base offset. noted, bestie ๐PIN_CONFIG_MAXโ this is the maximum configuration value that can be presented using the packed format ๐
๐ฅ SEE ALSO ๐ฅ
- Kernel file
./include/linux/pinctrl/pinconf-generic.hโ go read it, she's right there ๐ซถ
ok that's the whole enum, nothing skipped, every single flag accounted for. you're welcome ๐
and that's a wrap, bestie ๐ this lil page came from the kernel source tree at ./include/linux/pinctrl, dated October 2026 โ you're so welcome, go configure some pins, slay ๐
โจ๐
๐ฆ where this page comes from
- nixpkgs unstable: linux-manual 7.3.1
- ๐ girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms