如何解决为什么 MaxTouch amtel_mxt_ts 驱动程序无法在 Yocto BeagleBone am335x 上注册中断?
我需要将 Maxtouch Touchpanel (atmel_mxt_ts) 驱动程序集成到基于 BeagleBoneBlack 的 Yocto Dunfell 3.1 和 linux-ti-staging Kernel 5.4 系统。驱动程序设置为可加载的内核模块。 Yocto 项目集成了来自 Dunfell 分支的 Meta-ti 和 Meta-arm。
中断应在 BeagleBones P9 标头上的地址 0x870 处使用 gpio0[30]。为此,我将 gpio 的模式设置为 7。
我向源代码写入了一个 DTS,并将生成的 DTB 添加到它以在启动时加载。到目前为止,一切正常。 DTB 是在启动期间创建和加载的。 唯一的问题是,当内核加载驱动程序时,它抱怨无法注册中断。
[2.823173] atmel_mxt_ts 1-004a:注册中断失败
[3.040633] atmel_mxt_ts:1-004a 探测失败,错误为 -22
谁能解释一下我做错了什么?
这是我的主要 DTS 文件
function ArticlePageUI(props) {
return (
<>
<p>{"Article Page"}</p>
<p>{props.targetArticle?.content}</p>
</>
);
}
这是bbb-i2c1.dtsi的内容
/*
* copyright (C) 2015 JumpNow Technologies,LLC - http://jumpNowtek.com
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*/
/dts-v1/;
#include "am33xx.dtsi"
#include "am335x-bone-common.dtsi"
#include "bbb-i2c1.dtsi"
#include "bbb-dcan1.dtsi"
/ {
model = "TI AM335x BeagleBone Black";
compatible = "ti,am335x-bone-black","ti,am33xx";
};
&ldo3_reg {
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
regulator-always-on;
};
&mmc1 {
vmmc-supply = <&vmmcsd_fixed>;
};
&mmc2 {
vmmc-supply = <&vmmcsd_fixed>;
pinctrl-names = "default";
pinctrl-0 = <&emmc_pins>;
bus-width = <8>;
status = "okay";
};
&am33xx_pinmux {
touch_pins: touch_pins {
pinctrl-single,pins = <
AM33XX_PADCONF(AM335X_PIN_GPMC_WAIT0,PIN_INPUT_PULLDOWN,MUX_MODE7) /* P9.11 0x870 Touch IRQ */
AM33XX_PADCONF(AM335X_PIN_MCASP0_AXR0,PIN_OUTPUT_PULLUP,MUX_MODE7) /* P9.30 0x998 Touch RST */
>;
};
can_pins: can_pins {
pinctrl-single,pins = <
AM33XX_PADCONF(AM335X_PIN_UART1_TXD,PIN_INPUT_PULLUP,MUX_MODE2) /* P9.24 0x984 CAN rx */
AM33XX_PADCONF(AM335X_PIN_UART1_RXD,MUX_MODE2) /* P9.26 0x980 CAN tx */
>;
};
};
&dcan0 {
status = "disabled";
};
&rtc {
system-power-controller;
};
&i2c1 {
status = "okay";
pinctrl-names = "default";
clock-frequency = <100000>;
atmel_mxt_ts@4a {
status = "okay";
compatible = "atmel,atmel_mxt_ts";
reg = <0x4a>;
interrupt-parent = <&gpio0>; /* P9.11 gpio0
interrupts = <30>; /* gpio0[30],Falling edge only 0x02*/
pinctrl-names = "default";
pinctrl-0 = <&touch_pins>;
};
};
&i2c2 {
status = "okay";
};
&dcan1 {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&can_pins>;
};
这是bbb-dcan1.dtsi的内容
&am33xx_pinmux {
i2c1_pins: i2c1_pins {
pinctrl-single,pins = <
AM33XX_IOPAD(0x958,SLEWCTRL_SLOW | PIN_INPUT_PULLUP | MUX_MODE2) /* P9.18,i2c1_sda */
AM33XX_IOPAD(0x95c,SLEWCTRL_SLOW | PIN_INPUT_PULLUP | MUX_MODE2) /* P9.17,i2c1_scl */
>;
};
};
&i2c1 {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&i2c1_pins>;
clock-frequency = <100000>;
};
感谢您的支持
解决方法
我自己发现了这个错误。这里缺少关闭命令标签
interrupt-parent = <&gpio0>; /* P9.11 gpio0
我没有关闭就打开了多行注释,所有包含的属性都没有设置
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。