我已经根据 Linux 设备树设置了 PWM 驱动的蜂鸣器 documentation .我看到这会在/sys/class/input 中产生一个额外的输入设备:
root:/sys/class/input/input0# ls
capabilities device event0 id modalias name phys power properties subsystem uevent uniq
root:/sys/class/input/input0# cat name
pwm-beeper
但是,我没有看到任何与占空比、极性等相关的内容来实际控制蜂鸣器。也许我对 pwm-beeper 有很大误解,因为它显然是作为一个输入 设备创建的。请帮忙!
[更新]
我的 dts
的变化:
pwm15: dmtimer-pwm@15 {
compatible = "ti,omap-dmtimer-pwm";
ti,timers = <&timer15>;
#pwm-cells = <3>;
};
beeper: pwm-beeper {
compatible = "pwm-beeper";
pwms = <&pwm15 0 5000>;
volume-levels = <0 8 20 40 500>;
default-volume-level = <4>;
};
相关dmesg
:
[ 6.716560] OF: /pwm-beeper: arguments longer than property
[ 6.716566] of_pwm_get(): can't parse "pwms" property
[ 6.716574] pwm-beeper pwm-beeper: Failed to request PWM device: -22
[ 6.716590] pwm-beeper: probe of pwm-beeper failed with error -22
我非常困惑,因为关于这个在 Linux 中主流化的设备驱动程序的信息太少了!
最佳答案
你能发布你添加的 DT block 的片段吗? 试试这个 block
pwm-beeper {
compatible = "pwm-beeper";
pwms = <&pwm4 0 5000>;
volume-levels = <0 8 20 40 500>;
default-volume-level = <4>;
};
更新1
TLDR;要么将你的#pwm-cells 减少到 2 或者再添加一个字段,即要列出的第三个字段 喜欢 pwms = <&pwm4 0 5000 1>;
phandle1: node1 {
#list-cells = <2>;
}
phandle2: node2 {
#list-cells = <1>;
}
node3 {
list = <&phandle1 1 2 &phandle2 3>;
}
这里注意列表有#list-cells 不同
phadle1 有 2 个
phadle2 有 1
因此相应地列表有条目。
这会起作用 你的linux版本是多少?你能在最新的稳定版上测试它吗?
关于linux - 我如何在 Linux 内核中使用 pwm-beeper 模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56497094/