一. 前言
由于工作中需要驱动mt7981的gpio,所以研究了下怎么使用mt7981的leds驱动子系统,记录如下文。
二. 将5g wifi灯复用为普通GPIO
1. 查看drivers/pinctrl/mediatek/pinctrl-mt7981.c
static const struct group_desc mt7981_groups[] = {
......
/* @GPIO(35): WF5G_LED(1) */
PINCTRL_PIN_GROUP("wf5g_led1", mt7981_wf5g_led1),
......
};
......
static const char *mt7981_led_groups[] = { "gbe_led0", "gbe_led1", "wf2g_led0",
"wf2g_led1", "wf5g_led0", "wf5g_led1", };
......
static const struct function_desc mt7981_functions[] = {
......
{"led", mt7981_led_groups, ARRAY_SIZE(mt7981_led_groups)},
......
};
三. 修改设备树
修改arch/arm64/boot/dts/mediatek/mt7981-spim-nor-rfb.dts文件
1. 修改"wf5g_led1" pin的复用关系为普通的GPIO。"led"表示mt7981_functions数组中的一项,"wf5g_led1"为mt7981_led_groups数组中的一项。
&pio {
......
ledc_pins: led-pins {
mux {
function = "led";
groups = "wf5g_led1";
};
};
};
2. 添加leds项,<&pio 35 0>表示普通wifi-led为gpio35。
/ {
model = "MediaTek MT7981 RFB";
compatible = "mediatek,mt7981-spim-nor-rfb";
chosen {
bootargs = "console=ttyS0,115200n1 loglevel=8 \
earlycon=uart8250,mmio32,0x11002000";
};
memory {
// fpga ddr2: 128MB*2
reg = <0 0x40000000 0 0x10000000>;
};
leds {
compatible = "gpio-leds";
wifi-led {
label = "wifi-led";
gpios = <&pio 35 0>;
};
};
};
如上是通过参考mt7622的dts文件修改的。
四. 修改内核配置选项
1. 修改内核的配置文件,添加如下选项
CONFIG_LEDS_CLASS=y
LEDS_TRIGGERS=y
CONFIG_LEDS_TRIGGER_TIMER=y
CONFIG_LEDS_TRIGGER_ONESHOT=y
CONFIG_LEDS_TRIGGER_HEARTBEAT=y
CONFIG_LEDS_CLASS表示可以通过sysfs文件系统控制led的状态。文章来源:https://www.toymoban.com/news/detail-709272.html
五. 查看结果
/ # ls /sys/class/leds/
wifi-led
/ # ls /sys/class/leds/wifi-led/
brightness device subsystem
delay_off max_brightness trigger
delay_on power uevent
六. 总结
本文通过简单的介绍了mt7981如何支持leds驱动。文章来源地址https://www.toymoban.com/news/detail-709272.html
到了这里,关于mt7981支持leds驱动 - 修改5g led为普通led的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!