dm: pinctrl: Add get_pin_muxing() ops

Add get_pin_muxing() which allows to display the muxing
of a given pin belonging to a pin-controller.

Signed-off-by: Patrice Chotard <patrice.chotard@st.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
Patrice Chotard 2018-10-24 14:10:13 +02:00 committed by Tom Rini
parent f9c87adc47
commit f55a0c0a20
2 changed files with 45 additions and 0 deletions

View file

@ -249,6 +249,17 @@ int pinctrl_get_gpio_mux(struct udevice *dev, int banknum, int index)
return ops->get_gpio_mux(dev, banknum, index);
}
int pinctrl_get_pin_muxing(struct udevice *dev, int selector, char *buf,
int size)
{
struct pinctrl_ops *ops = pinctrl_get_ops(dev);
if (!ops->get_pin_muxing)
return -ENOSYS;
return ops->get_pin_muxing(dev, selector, buf, size);
}
/**
* pinconfig_post_bind() - post binding for PINCTRL uclass
* Recursively bind child nodes as pinconfig devices in case of full pinctrl.

View file

@ -66,6 +66,7 @@ struct pinconf_param {
* pointing a config node. (necessary for pinctrl_full)
* @set_state_simple: do needed pinctrl operations for a peripherl @periph.
* (necessary for pinctrl_simple)
* @get_pin_muxing: display the muxing of a given pin.
*/
struct pinctrl_ops {
int (*get_pins_count)(struct udevice *dev);
@ -129,6 +130,24 @@ struct pinctrl_ops {
* @return mux value (SoC-specific, e.g. 0 for input, 1 for output)
*/
int (*get_gpio_mux)(struct udevice *dev, int banknum, int index);
/**
* get_pin_muxing() - show pin muxing
*
* This allows to display the muxing of a given pin. It's useful for
* debug purpose to know if a pin is configured as GPIO or as an
* alternate function and which one.
* Typically it is used by a PINCTRL driver with knowledge of the SoC
* pinctrl setup.
*
* @dev: Pinctrl device to use
* @selector: Pin selector
* @buf Pin's muxing description
* @size Pin's muxing description length
* return 0 if OK, -ve on error
*/
int (*get_pin_muxing)(struct udevice *dev, unsigned int selector,
char *buf, int size);
};
#define pinctrl_get_ops(dev) ((struct pinctrl_ops *)(dev)->driver->ops)
@ -348,4 +367,19 @@ int pinctrl_decode_pin_config(const void *blob, int node);
*/
int pinctrl_get_gpio_mux(struct udevice *dev, int banknum, int index);
/**
* pinctrl_get_pin_muxing() - Returns the muxing description
*
* This allows to display the muxing description of the given pin for
* debug purpose
*
* @dev: Pinctrl device to use
* @selector Pin index within pin-controller
* @buf Pin's muxing description
* @size Pin's muxing description length
* @return 0 if OK, -ve on error
*/
int pinctrl_get_pin_muxing(struct udevice *dev, int selector, char *buf,
int size);
#endif /* __PINCTRL_H */