我正在为pca9570 i2c GPO扩展器编写驱动程序。 (它有四个输出位,其值通过对其i2c地址的简单单字节写入来设置。)
我目前正在按如下方式设置GPIO:
define Py_DEBUG
该模块如何告诉内核它只能输出数据?即我希望用户空间struct gpio_chip *gc = &chip->gpio_chip;
gc->set = pca9570_gpio_set_value;
gc->get = pca9570_gpio_get_value;
gc->direction_output = pca9570_gpio_direction_output;
gc->direction_input = pca9570_gpio_direction_input;
gc->can_sleep = true;
gc->base = gpio_start;
gc->ngpio = PCA9570_GPIO_COUNT;
gc->label = chip->client->name;
gc->owner = THIS_MODULE;
gc->dev = &chip->client->dev;
的结果为root@arm:/sys/class/gpio/gpio508# cat direction
,而不是目前的out
。
我一半认为这个驱动程序需要添加一些客户端gpio调用,以便在初始化时将方向设置为输出,并且每当用户尝试将它们设置为输入时。这是正确的方法吗?
是否只有"输出"我可以复制的gpio驱动程序?
答案 0 :(得分:2)
根据数据表http://www.nxp.com/documents/data_sheet/PCA9570.pdf PCA9570是一款CMOS器件,可在低压处理器和手持电池供电的移动应用中提供4位通用并行输出(GPO)扩展。
为满足此要求,Linux内核中的驱动程序不得实现代码中所述的->get_direction()
和->direction_input()
回调:
if (chip->get_direction) {
...
} else if (!chip->direction_input) {
/*
* If the chip lacks the .direction_input callback
* we logically assume all lines are outputs.
*/
set_bit(FLAG_IS_OUT, &desc->flags);