diff options
Diffstat (limited to 'include')
| -rw-r--r-- | include/linux/pinctrl/devinfo.h | 10 | ||||
| -rw-r--r-- | include/linux/pinctrl/pinconf-generic.h | 64 | ||||
| -rw-r--r-- | include/linux/pinctrl/pinctrl-state.h | 8 | 
3 files changed, 50 insertions, 32 deletions
diff --git a/include/linux/pinctrl/devinfo.h b/include/linux/pinctrl/devinfo.h index 281cb91ddcf5..05082e407c4a 100644 --- a/include/linux/pinctrl/devinfo.h +++ b/include/linux/pinctrl/devinfo.h @@ -24,10 +24,14 @@   * struct dev_pin_info - pin state container for devices   * @p: pinctrl handle for the containing device   * @default_state: the default state for the handle, if found + * @init_state: the state at probe time, if found + * @sleep_state: the state at suspend time, if found + * @idle_state: the state at idle (runtime suspend) time, if found   */  struct dev_pin_info {  	struct pinctrl *p;  	struct pinctrl_state *default_state; +	struct pinctrl_state *init_state;  #ifdef CONFIG_PM  	struct pinctrl_state *sleep_state;  	struct pinctrl_state *idle_state; @@ -35,6 +39,7 @@ struct dev_pin_info {  };  extern int pinctrl_bind_pins(struct device *dev); +extern int pinctrl_init_done(struct device *dev);  #else @@ -45,5 +50,10 @@ static inline int pinctrl_bind_pins(struct device *dev)  	return 0;  } +static inline int pinctrl_init_done(struct device *dev) +{ +	return 0; +} +  #endif /* CONFIG_PINCTRL */  #endif /* PINCTRL_DEVINFO_H */ diff --git a/include/linux/pinctrl/pinconf-generic.h b/include/linux/pinctrl/pinconf-generic.h index fe65962b264f..d921afd5f109 100644 --- a/include/linux/pinctrl/pinconf-generic.h +++ b/include/linux/pinctrl/pinconf-generic.h @@ -20,6 +20,11 @@  /**   * enum pin_config_param - possible pin configuration parameters + * @PIN_CONFIG_BIAS_BUS_HOLD: the pin will be set to weakly latch so that it + *	weakly drives the last value on a tristate bus, also known as a "bus + *	holder", "bus keeper" or "repeater". This allows another device on the + *	bus to change the value by driving the bus high or low and switching to + *	tristate. The argument is ignored.   * @PIN_CONFIG_BIAS_DISABLE: disable any pin bias on the pin, a   *	transition from say pull-up to pull-down implies that you disable   *	pull-up in the process, this setting disables all biasing. @@ -29,14 +34,6 @@   *	if for example some other pin is going to drive the signal connected   *	to it for a while. Pins used for input are usually always high   *	impedance. - * @PIN_CONFIG_BIAS_BUS_HOLD: the pin will be set to weakly latch so that it - *	weakly drives the last value on a tristate bus, also known as a "bus - *	holder", "bus keeper" or "repeater". This allows another device on the - *	bus to change the value by driving the bus high or low and switching to - *	tristate. The argument is ignored. - * @PIN_CONFIG_BIAS_PULL_UP: the pin will be pulled up (usually with high - *	impedance to VDD). If the argument is != 0 pull-up is enabled, - *	if it is 0, pull-up is total, i.e. the pin is connected to VDD.   * @PIN_CONFIG_BIAS_PULL_DOWN: the pin will be pulled down (usually with high   *	impedance to GROUND). If the argument is != 0 pull-down is enabled,   *	if it is 0, pull-down is total, i.e. the pin is connected to GROUND. @@ -48,10 +45,9 @@   *	If the argument is != 0 pull up/down is enabled, if it is 0, the   *	configuration is ignored. The proper way to disable it is to use   *	@PIN_CONFIG_BIAS_DISABLE. - * @PIN_CONFIG_DRIVE_PUSH_PULL: the pin will be 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 will enable - *	push-pull mode, the argument is ignored. + * @PIN_CONFIG_BIAS_PULL_UP: the pin will be pulled up (usually with high + *	impedance to VDD). If the argument is != 0 pull-up is enabled, + *	if it is 0, pull-up is total, i.e. the pin is connected to VDD.   * @PIN_CONFIG_DRIVE_OPEN_DRAIN: the pin will be driven with open drain (open   *	collector) which means it is usually wired with other output ports   *	which are then pulled up with an external resistor. Setting this @@ -59,28 +55,26 @@   * @PIN_CONFIG_DRIVE_OPEN_SOURCE: the pin will be driven with open source   *	(open emitter). Setting this config will enable open source mode, the   *	argument is ignored. + * @PIN_CONFIG_DRIVE_PUSH_PULL: the pin will be 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 will enable + *	push-pull mode, the argument is ignored.   * @PIN_CONFIG_DRIVE_STRENGTH: the pin will sink or source at most the current   *	passed as argument. The argument is in mA. + * @PIN_CONFIG_INPUT_DEBOUNCE: this will configure the pin to debounce mode, + *	which means it will wait for signals to settle when reading inputs. The + *	argument gives the debounce time in usecs. Setting the + *	argument to zero turns debouncing off.   * @PIN_CONFIG_INPUT_ENABLE: enable the pin's input.  Note that this does not   *	affect the pin's ability to drive output.  1 enables input, 0 disables   *	input. - * @PIN_CONFIG_INPUT_SCHMITT_ENABLE: control schmitt-trigger mode on the pin. - *      If the argument != 0, schmitt-trigger mode is enabled. If it's 0, - *      schmitt-trigger mode is disabled.   * @PIN_CONFIG_INPUT_SCHMITT: this will configure 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 argument when   *	setting pins to this mode. - * @PIN_CONFIG_INPUT_DEBOUNCE: this will configure the pin to debounce mode, - *	which means it will wait for signals to settle when reading inputs. The - *	argument gives the debounce time in usecs. Setting the - *	argument to zero turns debouncing off. - * @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_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_INPUT_SCHMITT_ENABLE: control schmitt-trigger mode on the pin. + *      If the argument != 0, schmitt-trigger mode is enabled. If it's 0, + *      schmitt-trigger mode is disabled.   * @PIN_CONFIG_LOW_POWER_MODE: this will configure the pin for low power   *	operation, if several modes of operation are supported these can be   *	passed in the argument on a custom form, else just use argument 1 @@ -89,29 +83,35 @@   *	1 to indicate high level, argument 0 to indicate low level. (Please   *	see Documentation/pinctrl.txt, section "GPIO mode pitfalls" for a   *	discussion around this parameter.) + * @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_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, use   *	PIN_CONFIG_END+1 as the base offset.   */  enum pin_config_param { +	PIN_CONFIG_BIAS_BUS_HOLD,  	PIN_CONFIG_BIAS_DISABLE,  	PIN_CONFIG_BIAS_HIGH_IMPEDANCE, -	PIN_CONFIG_BIAS_BUS_HOLD, -	PIN_CONFIG_BIAS_PULL_UP,  	PIN_CONFIG_BIAS_PULL_DOWN,  	PIN_CONFIG_BIAS_PULL_PIN_DEFAULT, -	PIN_CONFIG_DRIVE_PUSH_PULL, +	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_INPUT_DEBOUNCE,  	PIN_CONFIG_INPUT_ENABLE, -	PIN_CONFIG_INPUT_SCHMITT_ENABLE,  	PIN_CONFIG_INPUT_SCHMITT, -	PIN_CONFIG_INPUT_DEBOUNCE, -	PIN_CONFIG_POWER_SOURCE, -	PIN_CONFIG_SLEW_RATE, +	PIN_CONFIG_INPUT_SCHMITT_ENABLE,  	PIN_CONFIG_LOW_POWER_MODE,  	PIN_CONFIG_OUTPUT, +	PIN_CONFIG_POWER_SOURCE, +	PIN_CONFIG_SLEW_RATE,  	PIN_CONFIG_END = 0x7FFF,  }; diff --git a/include/linux/pinctrl/pinctrl-state.h b/include/linux/pinctrl/pinctrl-state.h index b5919f8e6d1a..23073519339f 100644 --- a/include/linux/pinctrl/pinctrl-state.h +++ b/include/linux/pinctrl/pinctrl-state.h @@ -9,6 +9,13 @@   *	hogs to configure muxing and pins at boot, and also as a state   *	to go into when returning from sleep and idle in   *	.pm_runtime_resume() or ordinary .resume() for example. + * @PINCTRL_STATE_INIT: normally the pinctrl will be set to "default" + *	before the driver's probe() function is called.  There are some + *	drivers where that is not appropriate becausing doing so would + *	glitch the pins.  In those cases you can add an "init" pinctrl + *	which is the state of the pins before drive probe.  After probe + *	if the pins are still in "init" state they'll be moved to + *	"default".   * @PINCTRL_STATE_IDLE: the state the pinctrl handle shall be put into   *	when the pins are idle. This is a state where the system is relaxed   *	but not fully sleeping - some power may be on but clocks gated for @@ -20,5 +27,6 @@   *	ordinary .suspend() function.   */  #define PINCTRL_STATE_DEFAULT "default" +#define PINCTRL_STATE_INIT "init"  #define PINCTRL_STATE_IDLE "idle"  #define PINCTRL_STATE_SLEEP "sleep"  | 
