【发布时间】:2018-07-11 09:39:56
【问题描述】:
我已经为 PCA9570 编写了一个工作驱动程序。它的四个输出通过 Linux 的 GPIO 子系统设置(和回读)。例如
root@armbox:/sys/class/gpio# echo 508 > export
root@armbox:/sys/class/gpio# echo 509 > export
root@armbox:/sys/class/gpio# echo 510 > export
root@armbox:/sys/class/gpio# echo 511 > export
问题是芯片从输出高开始。 https://www.nxp.com/docs/en/data-sheet/PCA9570.pdf 8.1 节。
root@armbox:/sys/class/gpio# cat gpio508/value
1
root@armbox:/sys/class/gpio# cat gpio509/value
1
root@armbox:/sys/class/gpio# cat gpio510/value
1
root@armbox:/sys/class/gpio# cat gpio511/value
1
我可以在启动后从用户空间手动将它们设置为低。例如
root@armbox:/sys/class/gpio# echo 0 > gpio510/value
root@armbox:/sys/class/gpio# cat gpio510/value
0
如何在启动过程中尽早将芯片的输出设置为低电平?
在pca9570_probe() 期间,我可以破解我自己的驱动程序来执行此操作,但感觉非常hacky。 pca9570_probe() 当前正在从芯片中读取值。
static int pca9570_probe(struct i2c_client *client,
const struct i2c_device_id *id)
{
...
ret = pca9570_readb(chip, &chip->reg);
if (ret)
goto out_failed;
return 0;
out_failed:
if (chip->client)
i2c_unregister_device(chip->client);
return -1;
}
在 Linux 中是否有正确的方法在引导期间指定 GPIO 值,而不是破解驱动程序?
附: dts 子句是:
pca9570: pca9570@48 {
compatible = "pca9570";
reg = <0x24>;
gpio-controller;
#gpio-cells = <4>;
};
【问题讨论】:
-
旁注:AFAIU 驱动程序
gpio-pca953x服务于 PCA957[45]。您可以检查它是否可以轻松扩展以支持 PCA9570。
标签: linux arm embedded-linux gpio device-tree