我为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()
但那感觉很糟糕。
PCA9570_探针(
当前从芯片读取值。
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值的方法是否正确,而不是黑客攻击驱动程序?
P.S.DTS条款为:
pca9570: pca9570@48 {
compatible = "pca9570";
reg = <0x24>;
gpio-controller;
#gpio-cells = <4>;
};