【发布时间】: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