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.

[参考译文] Linux/processor-SDK-AM437X:器件树和 GPIO

Guru**** 2535150 points
Other Parts Discussed in Thread: AM4372

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/710112/linux-processor-sdk-am437x-device-tree-and-gpio

器件型号:PROCESSOR-SDK-AM437X
主题中讨论的其他器件:AM4372

工具/软件:Linux

您好!

我在器件树中定义了以下 GPIO:

GPIO5_mux_Pins:GPIO5_mux_Pins{
pinctrl-single、pins =<
/* GPIO 5_8以选择 LCD / HDMI */
AM4372_IOPAD (0xa38、PIN_OUTPUT 上拉| MUX_MODE7)
/* GPIO 5_4以重置 LCD */
AM4372_IOPAD (0xa50、PIN_OUTPUT 上拉| MUX_MODE7)
>;
};

GPIO5{&G
pinctrl-names ="default";
pinctrl-0 =<&GPIO5_mux_pines>;
状态="正常";
TI、no-reset-on-init;

P8{
/*
* SelLCDorHDMI 在显示和音频路径之间进行选择:
*低:通过 HDMI 显示音频
*高:通过 aic3111编解码器显示模拟音频的 LCD
*
GPIO-hog;
GPIO =<8 GPIO_ACTIVE_HIGH_>;
输出高电平;
线路名称="SelLCDorHDMI";
};

P4{
/*
* LCD_Reset
*
GPIO-hog;
GPIO =<4 GPIO_ACTIVE_LOW>;
输出高电平;
line-name ="lcdReset";
};
};

在 c 代码中、devm_gpiod_get 函数返回错误。 这意味着 lcdReset 未在器件树中定义。

结构 GPIO_desc * GPIO;

GPIO = devm_gpiod_get (&SPI->dev、"lcdReset"、GPIOD_OUT_HIGH);
IF (IT_ERR (GPIO))

  dev_err (&spi->dev、"无法获取 lcdReset GPIO\n");
  printk ("开始探测:**** lcdreset_gpios 在设备树中未定义! ****\n");
  printk ("SPI dev 是%x\n"、&SPI->dev);
  返回 PTR_ERR (GPIO);

这种方法有什么问题?

另一方面、我尝试在 AM437X-gp-evm.dts 文件中添加以下行、我在行中遇到语法错误。 为什么?

lcdReset-GPIO =<&GPIO5 4 GPIO_ACTIVE_LOW>;

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

    我们没有"lcdReset-GPIOs" DTS 条目可供使用。 您应该使用"reset-GPIOs"和/或"enable-GPIOs" DTS 条目。 这在您的另一个 e2e 线程中进行了说明、链接如下:

    e2e.ti.com/.../708842

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

    我可能无法足够好地向您传达此问题。
    基本上、我们将修改您的 SDK 以适应我们的硬件、该硬件具有一个连接到 LCD 芯片并连接到 SPI 总线的 LCD 复位引脚。
    我们需要在 DTS 中添加此类引脚、我上面显示的语法没有错误。 我认为您的 SDK 还应允许客户添加/删除硬件。 请告知我在将此类信号添加到 SDK 中时出现了什么错误。

    谢谢。

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

    很抱歉耽误你的答覆,我不在办公室。

    [引用用户="Zhiwei Wang "]行名="lcdReset";[/quot]

    [引用用户="Zhihei Wang "]

    在 c 代码中、devm_gpiod_get 函数返回错误。 这意味着 lcdReset 未在器件树中定义。

    结构 GPIO_desc * GPIO;

    GPIO = devm_gpiod_get (&SPI->dev、"lcdReset"、GPIOD_OUT_HIGH);

    [/报价]

    [引用用户="Zhihwei Wang "]这种方法有什么错误?

    您不能以这种方式使用“线路名称”DTS 条目。

    这是 GPIO 标签名称。 这是为了根据 devicetree 说明将 GPIO 名称添加到内核。 由于 GPIO 名称信息是硬件说明、因此该系列使用由 GPIO 占用机制引入的 devicetree 绑定、特别是'line-name'来标识 GPIO。 sysfs 'export'文件被更改为接受名称作为回退。 GPIO 编号的优先级仍然较高、以确保向后兼容。 导出的 GPIO 仍使用其编号作为目录名称(GPIO) )。 但是目录现在包含一个'name'文件,对于不存在的名称和名称,该文件是'(null)'。

    devm_gpiod_get()将字符串从" -GPIO"或" -gpio" dts 条目、不是来自"line-name"。 请参阅、了解以下文件示例:

    linux-4.9.69/arch/arm/boot/dts/omap3-n900.dts

    TI、SSI-cawe-GPIO =<&GPIO5 23 GPIO_ACTIVE_HIGH>;/* 151 */

    linux-4.9.69/drivers/hsi/controllers/omap_ssi_port.c

    cawe_gpio = devm_gpiod_get (&pd->dev、"ti、ssi-cawe"、gpioD_in);
       if (is_ERR (cawe_gpio)){
          ERR = PTR_ERR (cawe_gpio);
          dev_err (&PD->dev、"无法获取唤醒 GPIO (err=%d)!\n"、err);
          转至错误;
       }

    此致、
    帕维尔

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

    [引用用户="Zhihei Wang "]

    另一方面、我尝试在 AM437X-gp-evm.dts 文件中添加以下行、我在行中遇到语法错误。 为什么?

    lcdReset-GPIO =<&GPIO5 4 GPIO_ACTIVE_LOW>;

    [/报价]

    最有可能、您的 LCD 驱动程序中不存在"lcdReset-GPIOs"。

    此致、
    帕维尔