diff options
Diffstat (limited to 'include/linux/pinctrl')
| -rw-r--r-- | include/linux/pinctrl/consumer.h | 6 | ||||
| -rw-r--r-- | include/linux/pinctrl/pinconf-generic.h | 29 | ||||
| -rw-r--r-- | include/linux/pinctrl/pinctrl.h | 12 | 
3 files changed, 44 insertions, 3 deletions
| diff --git a/include/linux/pinctrl/consumer.h b/include/linux/pinctrl/consumer.h index 18eccefea06e..72c0415d6c21 100644 --- a/include/linux/pinctrl/consumer.h +++ b/include/linux/pinctrl/consumer.h @@ -82,7 +82,7 @@ static inline int pinctrl_gpio_direction_output(unsigned gpio)  static inline struct pinctrl * __must_check pinctrl_get(struct device *dev)  { -	return NULL; +	return ERR_PTR(-ENOSYS);  }  static inline void pinctrl_put(struct pinctrl *p) @@ -93,7 +93,7 @@ static inline struct pinctrl_state * __must_check pinctrl_lookup_state(  							struct pinctrl *p,  							const char *name)  { -	return NULL; +	return ERR_PTR(-ENOSYS);  }  static inline int pinctrl_select_state(struct pinctrl *p, @@ -104,7 +104,7 @@ static inline int pinctrl_select_state(struct pinctrl *p,  static inline struct pinctrl * __must_check devm_pinctrl_get(struct device *dev)  { -	return NULL; +	return ERR_PTR(-ENOSYS);  }  static inline void devm_pinctrl_put(struct pinctrl *p) diff --git a/include/linux/pinctrl/pinconf-generic.h b/include/linux/pinctrl/pinconf-generic.h index d578a60eff23..fe65962b264f 100644 --- a/include/linux/pinctrl/pinconf-generic.h +++ b/include/linux/pinctrl/pinconf-generic.h @@ -115,6 +115,18 @@ enum pin_config_param {  	PIN_CONFIG_END = 0x7FFF,  }; +#ifdef CONFIG_DEBUG_FS +#define PCONFDUMP(a, b, c, d) { .param = a, .display = b, .format = c, \ +				.has_arg = d } + +struct pin_config_item { +	const enum pin_config_param param; +	const char * const display; +	const char * const format; +	bool has_arg; +}; +#endif /* CONFIG_DEBUG_FS */ +  /*   * Helpful configuration macro to be used in tables etc.   */ @@ -150,6 +162,12 @@ static inline unsigned long pinconf_to_config_packed(enum pin_config_param param  struct pinctrl_dev;  struct pinctrl_map; +struct pinconf_generic_params { +	const char * const property; +	enum pin_config_param param; +	u32 default_value; +}; +  int pinconf_generic_dt_subnode_to_map(struct pinctrl_dev *pctldev,  		struct device_node *np, struct pinctrl_map **map,  		unsigned *reserved_maps, unsigned *num_maps, @@ -174,6 +192,17 @@ static inline int pinconf_generic_dt_node_to_map_pin(  			PIN_MAP_TYPE_CONFIGS_PIN);  } +static inline int pinconf_generic_dt_node_to_map_all( +		struct pinctrl_dev *pctldev, struct device_node *np_config, +		struct pinctrl_map **map, unsigned *num_maps) +{ +	/* +	 * passing the type as PIN_MAP_TYPE_INVALID causes the underlying parser +	 * to infer the map type from the DT properties used. +	 */ +	return pinconf_generic_dt_node_to_map(pctldev, np_config, map, num_maps, +			PIN_MAP_TYPE_INVALID); +}  #endif  #endif /* CONFIG_GENERIC_PINCONF */ diff --git a/include/linux/pinctrl/pinctrl.h b/include/linux/pinctrl/pinctrl.h index cc8e1aff0e28..66e4697516de 100644 --- a/include/linux/pinctrl/pinctrl.h +++ b/include/linux/pinctrl/pinctrl.h @@ -24,6 +24,7 @@ struct pinctrl_dev;  struct pinctrl_map;  struct pinmux_ops;  struct pinconf_ops; +struct pin_config_item;  struct gpio_chip;  struct device_node; @@ -117,6 +118,12 @@ struct pinctrl_ops {   * @confops: pin config operations vtable, if you support pin configuration in   *	your driver   * @owner: module providing the pin controller, used for refcounting + * @num_custom_params: Number of driver-specific custom parameters to be parsed + *	from the hardware description + * @custom_params: List of driver_specific custom parameters to be parsed from + *	the hardware description + * @custom_conf_items: Information how to print @params in debugfs, must be + *	the same size as the @custom_params, i.e. @num_custom_params   */  struct pinctrl_desc {  	const char *name; @@ -126,6 +133,11 @@ struct pinctrl_desc {  	const struct pinmux_ops *pmxops;  	const struct pinconf_ops *confops;  	struct module *owner; +#ifdef CONFIG_GENERIC_PINCONF +	unsigned int num_custom_params; +	const struct pinconf_generic_params *custom_params; +	const struct pin_config_item *custom_conf_items; +#endif  };  /* External interface to pin controller */ |