【问题标题】:Handling pin modes from devicetree to module处理从设备树到模块的引脚模式
【发布时间】:2019-08-13 06:35:46
【问题描述】:

我正在尝试使用 Atmels SAMA5d35 MPU 为 SPI 设备编写 linux 设备驱动程序。 Linux 版本为 4.19.30。

我已在设备树中配置引脚并将状态设置为“正常”。 之后,引脚按预期改变了模式。那么我的问题是,如何在运行时操作 pinmode?我的 SPI 设备并不总是打开,我的驱动程序也不总是加载。在这种情况下,我希望配置的 SPI 引脚将模式更改为普通 GPIO(用于功耗)。

这是驱动程序的任务,还是可以在设备树中定义的东西,例如当驱动程序没有加载时?

我尝试实现一个 pinctrl-0 用于将引脚设置为 SPI 模式,然后实现一个 pinctrl-1 用于将相同的引脚设置为普通 GPIO。我的想法是在设备驱动程序中切换这些引脚配置,但不幸的是,设备树抱怨对 pinctrl-0 和 pinctrl-1 使用相同的引脚(编译正常,但系统无法启动)。虽然这只是我的逻辑想法。我确信有一种更正确的方法来做我上面所说的事情。

        spi0: spi@f0004000 {
            status = "okay";

            ext_adc: ads1258@1 {
                compatible = "ti,ads1258";
                pinctrl-names = "default", "sleep";
                pinctrl-0 = <&pinctrl_spi0_default>;
                pinctrl-1 = <&pinctrl_spi0_sleep>;
                reg = <1>;                                  /* Hardware chipselect SPI0_NPCS1 */
                spi-max-frequency = <16000000>;             /* According to datasheet */
                start-gpios = <&pioD 5 GPIO_ACTIVE_HIGH>;
                drdy-gpios = <&pioD 22 GPIO_ACTIVE_LOW>;
                enaadc-gpios = <&pioA 26 GPIO_ACTIVE_HIGH>; 
            };
        };

【问题讨论】:

  • 引脚控制框架对状态进行操作。您已经定义了其中两个。因此,使用这样的名称,您可以告诉 pin control 将某个设备的 pin 切换到预定义的某个模式。
  • 这也是我的想法。但是当我定义超过 1 个状态时,系统将无法启动。我知道这是一个定制的引导程序,它也在启动设备树。我认为问题出在这。

标签: linux kernel-module device-tree


【解决方案1】:

那么我的问题是,如何在运行时操作 pinmode?​​p>

这称为“运行时 pinmuxing”,在 Documentation/pinctrl.txt 中有描述。
但您可能不必这样做。

在这种情况下,我希望配置的 SPI 引脚将模式更改为普通 GPIO(用于功耗)。

这是驱动程序的任务,还是可以在设备树中定义的东西,例如当驱动程序未加载时?

(Atmel/Microchip SoC 的)引脚的默认模式是未分配给任何外设模式,并且可用作 GPIO。
所有未分配给外设或由驱动程序作为 GPIO 获取的引脚最终都在可用 GPIO 池中。

因此,当您的 SPI 驱动程序未成功安装时,它将使用的那些引脚将位于可用 GPIO 池中。

我尝试实现 pinctrl-0 将引脚设置为 SPI 模式,然后实现 pinctrl-1 将相同的引脚设置为普通 GPIO。

分配引脚供 SPI 控制器使用是正确的,但 AFAIK 没有将引脚分配为可用 GPIO 的机制。

您只能在 DT 中定义设备(例如 SPI 控制器)所需的属性。
没有“替代”分配机制。

我确信有一个更正确的方法来做我上面所说的事情。

如果您的驱动程序未安装,则不应分配其引脚等资源。 SPI 将使用的引脚将保持未使用状态,并最终出现在可用 GPIO 池中(除非其他东西声称/请求这些引脚之一)。
因此,您的 DT 需要简单地定义您的设备使用什么,然后保留它。

如果您仍希望您的驱动程序修改其引脚的状态,请研究 Documentation/pinctrl.txt 中标题为“来自驱动程序的引脚控制请求”的部分。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-13
    • 1970-01-01
    相关资源
    最近更新 更多