为什么 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

我没有关闭就打开了多行注释,所有包含的属性都没有设置