Skip to content

LV550-gpio使用pinctrl

gpio 怎么与 pinctrl 产生联系?gpio 怎么使用 pinctrl?若笔记中有错误或者不合适的地方,欢迎批评指正 😃。

一、一个示例

1. 硬件原理

假设使用这个虚拟的 GPIO Controller 的 pin0 来控制 LED:

image-20260121170814287

要使用 pin0 来控制 LED,首先要通过 Pinctrl 子系统把它设置为 GPIO 功能,然后才能设置它为输出引脚、设置它的输出值。

2. 设备树

2.1 pincontroller 节点

c
virtual_pincontroller {
	compatible = "100ask,virtual_pinctrl";
	myled_pin: myled_pin {
			functions = "gpio";
			groups = "pin0";
			configs = <0x11223344>;
	};
};

2.2 GPIO controller 节点

c
gpio_virt: virtual_gpiocontroller {
	compatible = "100ask,virtual_gpio";
    gpio-controller;
    #gpio-cells = <2>;
    ngpios = <4>;
};

2.3 led 设备节点

c
myled {
	compatible = "100ask,leddrv";
	led-gpios = <&gpio_virt 0 GPIO_ACTIVE_LOW>;
	pinctrl-names = "default";
	pinctrl-0 = <&myled_pin>;	
};