Main index | Section 9 | Options |
#include <dev/fdt/fdt_pinctrl.h>
fdt_pinctrl_configure() is used by client device client to request a pin configuration described by the pinctrl-N property with index index.
fdt_pinctrl_configure_by_name() is used by client device client to request the pin configuration with name name.
fdt_pinctrl_register() registers a pinctrl driver so that it can be used by other devices which call fdt_pinctrl_configure() or fdt_pinctrl_configure_by_name(). It also registers each child node of the pinctrl driver's node which contains a property with the name given in pinprop. If pinprop is NULL, every descendant node is registered. It is possible for the driver to register itself as a pinmux controller for more than one pin property type by calling fdt_pinctrl_register() multiple types.
fdt_pinctrl_configure_tree() walks through enabled devices in the device tree. If the pinctrl-0 property contains references to child nodes of the specified pinctrl device, their pins are configured.
static int foo_configure_pins(device_t dev, phandle_t cfgxref) { phandle_t cfgnode; uint32_t *pins, *functions; int npins, nfunctions;cfgnode = OF_node_from_xref(cfgxref); pins = NULL; npins = OF_getencprop_alloc_multi(cfgnode, "foo,pins", sizeof(*pins), (void **)&pins); functions = NULL; nfunctions = OF_getencprop_alloc_multi(cfgnode, "foo,functions", sizeof(*functions), (void **)&functions); ... }
static int foo_is_gpio(device_t dev, device_t gpiodev, bool *is_gpio) { return (foo_is_pin_func_gpio(is_gpio)); }
static int foo_set_flags(device_t dev, device_t gpiodev, uint32_t pin, uint32_t flags) { int rv;
rv = foo_is_pin_func_gpio(is_gpio); if (rv != 0) return (rv); foo_set_flags(pin, flags); return (0); }
static int foo_get_flags(device_t dev, device_t gpiodev, uint32_t pin, uint32_t *flags) { int rv;
rv = foo_is_pin_func_gpio(is_gpio); if (rv != 0) return (rv); foo_get_flags(pin, flags); return (0); }
static int foo_attach(device_t dev) { ...
fdt_pinctrl_register(dev, "foo,pins"); /* * It is possible to register more than one pinprop handler */ fdt_pinctrl_register(dev, "bar,pins"); fdt_pinctrl_configure_tree(dev);
return (0); }
static device_method_t foo_methods[] = { ...
/* fdt_pinctrl interface */ DEVMETHOD(fdt_pinctrl_configure, foo_configure_pins), DEVMETHOD(fdt_pinctrl_is_gpio, foo_is_gpio), DEVMETHOD(fdt_pinctrl_set_flags, foo_set_flags), DEVMETHOD(fdt_pinctrl_get_flags, foo_get_flags),
/* Terminate method list */ DEVMETHOD_END };
DRIVER_MODULE(foo, simplebus, foo_driver, foo_devclass, NULL, NULL);
fdt_pinctrl (9) | June 23, 2018 |
Main index | Section 9 | Options |
Please direct any comments about this manual page service to Ben Bullock. Privacy policy.
“ | An ASCII character walks into a bar and orders a double. "Having a bad day?" asks the barman. "Yeah, I have a parity error," replies the ASCII character. The barman says, "Yeah, I thought you looked a bit off." | ” |