This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] AM625:AM625 GPIO 不可在自定义内核字符驱动程序中访问

Guru**** 2465890 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1474918/am625-am625-gpio-not-accessible-in-custom-kernel-character-driver

器件型号:AM625

工具与软件:

大家好、团队成员:  

我正在尝试编写带有一些 附加提示音的自定义内核字符驱动器蜂鸣器。

我已实施以下更改:

  1. 在器件树中将引脚定义为 GPIO1_10 (E18)
  2. 使用上述引脚定义节点并将状态设置为"oke"
  3. 使用将自定义字符驱动程序编写为 Linux 可加载内核模块(LKM)(位于"drivers/misc/tfs_beon.c")以访问同一 GPIO  GPIO_Request API

AM62数据表:- https://www.variscite.com/wp-content/uploads/2023/01/VAR-SOM-AM62_Datasheet.pdf

基本映像:- https://variwiki.com/index.php?title=Yocto_Build_Release & release=am62-Yocto-kirkstone-6.1.83_09.02.01.10-v1.1

 

arch/arm64/boot/dts/ti/k3-am625-var-som-symphony.dts

 

/ {

    /*  Buzzer Enable */

    tfs_buzzer_enable_gpio: tfs-buzzer-enable-gpio {

        label = "BuzzerEnable";

        linux,default-trigger = "default-on";

        gpios = <&main_gpio0 22 GPIO_ACTIVE_HIGH>;

        status = "okay";

    };

 

    /*  Buzzer Tone */

    tfs_buzzer_tone_gpio: tfs-buzzer-tone-gpio {

        label = "BuzzerTone";

        linux,default-trigger = "default-on";

        gpios = <&main_gpio1 10 GPIO_ACTIVE_HIGH>;

        status = "okay";

    };

};

 

main_pmx0 {

    status = "okay";

    pinctrl-names = "default";

    pinctrl-0 = <&display_pins_default>;

 

    display_pins_default: display-default-pins {

        pinctrl-single,pins = <

            /* Buzzer Pins */

            AM62X_IOPAD(0x0058, PIN_OUTPUT_PULLUP, 7) /* (R23) GPMC0_AD7.GPIO0_22 */

            AM62X_IOPAD(0x01a0, PIN_OUTPUT_PULLUP, 7) /* (E18) MCASP0_AXR0.GPIO1_10 */

         >;

    };

};

驱动程序/MISC./TFS_BANGER.c

static int buzzer_gpio_init(void)

{

    int ret = -1;

    int gpio_num = 378;

 

    ret = gpio_request(gpio_num, "BUZZER_GPIO");

    if (ret) {

        if (ret == -EPROBE_DEFER) {

            pr_info("GPIO %d request deferred, retrying later\n", gpio_num);

        } else {

            pr_err("Failed to request GPIO %d for BUZZER_GPIO: %d\n", gpio_num, ret);

        }

        return ret;

    } else {

        gpio_direction_output(gpio_num, 1);

        gpio_set_value(gpio_num, 1); // default buzzer is disabled

        buzzer_dev->status = BUZZER_DISABLE;

    }

 

    return 0;

}
 

驱动程序错误

GPIO_request()返回-517对应于-EPROBE_DEFER的代码。 此错误代码表示 GPIO 请求被推迟、因为所需资源尚不可用

GPIO_Info

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    定制驱动程序和应用程序的支持非常有限、因为它超出了 E2E 论坛的范围。 我们只能对 Linux SDK 中提供的代码提供支持、因为它已由 TI 进行测试和验证。

    也就是说、可以检查以下几项:

    1.确保 GPIO 在用户空间中正常工作。

    尝试以下基本操作:

    &main_pmx0 {
    	main_gpio1_pins_default: main-gpio1-default-pins {
    		pinctrl-single,pins = <
    			AM62X_IOPAD(0x01a0, PIN_INPUT, 7) /* (E18) MCASP0_AXR0.GPIO1_10 */
    		>;
    	};
    };
    
    &main_gpio1 {
        status = "okay";
        pinctrl-names = "default";
        pinctrl-0 = <&main_gpio1_pins_default>;
    };

    将此引脚与 GPIO 用户空间命令一起用于设置 GPIO 高电平/低电平以测试其工作原理。

    2.从设备树中,Linux,default-trigger 通常用于 LED 应用程序,而调用特定驱动程序的 GPIO 通常会显示兼容的字符串。 这可能不适用于这种情况、因为我不知道您的驱动程序是如何工作的。 请参阅 TI EVM 上的 LED 示例: https://git.ti.com/cgit/ti-linux-kernel/ti-linux-kernel/tree/arch/arm64/boot/dts/ti/k3-am62x-sk-common.dtsi?h=ti-linux-6.6.y#n116

    3. Cat /sys/kernel/debug/gpio 可能会提供一些有用的信息。

    4.参阅 GPIO 的旧 API: https://git.ti.com/cgit/ti-linux-kernel/ti-linux-kernel/tree/Documentation/driver-api/gpio/legacy.rst?h=ti-linux-6.6.y

    同样、TI 可为定制应用提供的支持非常有限。

    此致、

    Anshu