查看datasheet和确认GPIO复用引脚scheme
通过查看mt7628 datasheet可以明确复用关系:
在这里我以I2S对应的GPIO引脚为例。
查看 mt7628an.dtsi 文件中对gpio的注册
$(TOPDIR)假定为宿主机上 OpenWrt 的编译目录。
在$(TOPDIR)/target/linux/ramips/dts/mt7628an.dtsi 里找到gpio注册,结合 datasheet 中 GPIO pin share scheme 与 mt7628an.dtsi 中的定义可以知道:
mt7628 的 GPIO 一共被分为3组,gpio0,gpio1,gpio2,@后紧跟的数字为寄存器起始地址。
查看 mt7620.c 文件中对 gpio 及相应复用功能的定义
引脚复用的定义在$(TOPDIR)/build_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2/linux-ramips_mt7620n/linux-3.18.29/arch/mips/ralink/mt7620.c 文件中,(注:内核版本因实际情况而定,我选用的为3.18.29)在这里我们只需要查看我们关注的gpio即可,在这里只需要注意 i2s 功能相应的定义,结果如下:
之后需要查看 ralink group 包括的 group,结果如下:
可以看到 234 行 i2s 被包括在其中,下面就需要进行最关键的操作了。
修改 WRTNODE2R.dts 中的 ralink group 设定
也即把要使用的gpio对应的复用功能释放掉,将功能名称添加到 ralink group 即可。如下所示,添加 "i2s"。
在 WRTNODE2R.dts 中对 GPIO 进行注册
注册的方法可以参照 $(TOPDIR)/target/linux/ramips/dts/RT-N14U.dts
注:dts里对设备的注册很简单,如gpio-leds的注册,compatible要与Led的驱动leds-gpio.c里compatible对应,label是设备的名字,设备注册成功,在WRTnode文件系统下就会有相应的label设备名,在这里我以i2s 功能中 I2S_SDO对应的 GPIO#1 为例,注册如下:
注:dts里对设备的注册很简单,如gpio-leds的注册,compatible要与Led的驱动leds-gpio.c里compatible对应,label是设备的名字,设备注册成功,在WRTnode文件系统下就会有相应的label设备名,在这里我以i2s 功能中 I2S_SDO对应的 GPIO#1 为例,注册如下:
gpios = <&gpio0 1 1>, 这是指定对应的gpio引脚为gpio0分组中的1号引脚 GPIO#1,编号从0号开始。到了这一步就已经万事具备了,我们重编译内核,然后把新的 firmware 烧录到我们的板子里面就可以啦。
查看GPIO对应设备名与使用
新的固件烧录重启后,进入 /sys/class/leds 查看即可。
到了这里,完整的分析与注册使用过程就结束了。
如果觉得对你有帮助,就给我点赞吧,有问题也可以直接给我评论或者补充,:-D