强制内核模块的GPIO始终是输出

时间:2017-05-03 16:23:02

标签: linux-kernel gpio i2c

我正在为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驱动程序?

1 个答案:

答案 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);