MT7628如何控制GPIO

查看datasheet和确认GPIO复用引脚scheme

通过查看mt7628 datasheet可以明确复用关系:

MT7628如何控制GPIO_第1张图片

在这里我以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,@后紧跟的数字为寄存器起始地址。

MT7628如何控制GPIO_第2张图片


查看 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 功能相应的定义,结果如下:

MT7628如何控制GPIO_第3张图片
可以看到其中164 行FUNC中对于功能和引脚的说明,其中第一个参数 "i2s" 为功能名称,第二个参数 “0” 为功能编号,第三个参数 "0" 为起始的 GPIO 编号,第四个参数 “4” 为该功能共占用的 GPIO 管脚数目,总结起来就是 i2s 复用的 gpio 是从 GPIO#0 开始,共4个引脚,为 GPIO#0~GPIO#3。

之后需要查看 ralink group 包括的 group,结果如下:

MT7628如何控制GPIO_第4张图片 

可以看到 234 行 i2s 被包括在其中,下面就需要进行最关键的操作了。


修改 WRTNODE2R.dts 中的 ralink group 设定

也即把要使用的gpio对应的复用功能释放掉,将功能名称添加到 ralink group 即可。如下所示,添加 "i2s"。

MT7628如何控制GPIO_第5张图片


在 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 为例,注册如下:
MT7628如何控制GPIO_第6张图片
gpios = <&gpio0 1 1>, 这是指定对应的gpio引脚为gpio0分组中的1号引脚 GPIO#1,编号从0号开始。到了这一步就已经万事具备了,我们重编译内核,然后把新的 firmware 烧录到我们的板子里面就可以啦。

查看GPIO对应设备名与使用

新的固件烧录重启后,进入 /sys/class/leds 查看即可。

在这里,就看到我们在上一步执行成功的结果了。控制也很容易,进入该设备目录,里面会有 brigtness 文件,往该sysfs文件写入 0 或者 1 就可以控制高低电平了,这里默认direction 为输出,需要改变方向,修改 direction 文件。如下所示:
MT7628如何控制GPIO_第7张图片

到了这里,完整的分析与注册使用过程就结束了。

如果觉得对你有帮助,就给我点赞吧,有问题也可以直接给我评论或者补充,:-D

你可能感兴趣的:(Linux,Openwrt)