Consumer
APIs:
bool pinctrl_gpio_can_use_line(unsigned gpio);
int pinctrl_gpio_request(unsigned gpio);
void pinctrl_gpio_free(unsigned gpio);
int pinctrl_gpio_direction_input(unsigned gpio);
int pinctrl_gpio_direction_output(unsigned gpio);
int pinctrl_gpio_set_config(unsigned gpio, unsigned long config);
pinctrl_gpio_can_use_line: 如果 dts 没有定义 gpio-ranges-group-names, 将 gpio index 映射到 pin index, 总是返回 true。\
统一驱动设备模型会处理 pin control:
platform_driver_register()
driver_register();
bus_add_driver();
driver_attach();
__driver_attach();
device_driver_attach(drv, dev);
driver_probe_device(drv, dev);
really_probe(dev, drv);
really_probe(struct device *dev, struct device_driver *drv)
pinctrl_bind_pins(dev);
devm_pinctrl_get(dev);
pinctrl_lookup_state(dev->pins->p, PINCTRL_STATE_DEFAULT);
pinctrl_lookup_state(dev->pins->p, PINCTRL_STATE_INIT);
pinctrl_select_state(dev->pins->p, dev->pins->default_state);
Provider
Debug files
/sys/kernel/debug/pinctrl