pinctrl 和gpio子系统是驱动分离与分层思想的产物。开发者只需要通过配置设备树节点,即可以实现io映射,电器属性设置等。相较于传统的裸机开发更简单,扩展程度更高。
pintctrl子系统(IO复用)
节点前缀一定为pinctril_XXX,在iomux节点内添加想要复用的pin。demo添加内容如下:
pinctrl_led: ledgrp{
fsl,pins = <
// 设备所使用的pin信息
MX6UL_PAD_GPIO1_IO03__GPIO1_IO03 0x10B0 /*0x0068 0x02F4 0x0000 0x5 0x0 0x10B0 */
>;
};
gpio子系统
在根节点下("/")创建子节点,demo如下所示。
gpioled{
#address-cells = <1>;
#size-cells = <1>;
compatible = "atkalpha-gpioled";
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_led>; /*上述pinctrl系统*/
led-gpio = <&gpio1 3 GPIO_ACTIVE_LOW>; /*gpio1组3口,低电平触发*/
status = "okay";
};
注意事项
在设备树中添加pin复用,电器属性等信息后,需要搜索当前arch下是否存在另外节点使用该pin,若存在,需要删除其他使用该pin的节点。
编译设备树,depmod后,/dev/内生成gpioled字符设备。