我正在为嵌入式板上的 lirc 编写自定义红外发射器驱动程序。该板有一个 i2c-to-gpio 扩展器 ( FXL6408 )。
问题是我的驱动程序(因此 LIRC)只需要一个 GPIO 引脚,而其他应用程序需要其他引脚。像这样的东西:
我已经阅读了 LWM、LDD3 和大量关于i2c-slave
i2c适配器、总线pinctrl
、、、堆叠等gpio
的网站,但不清楚如何做我想做的事情:
my-driver
需要控制 GPIO 扩展器上的单个引脚,同时仍允许其他应用程序通过 控制其他 7 个引脚/dev/i2c-0
。
遵循这个 SO 建议很有希望但i2c_new_dummy
失败了,返回 NULL:
i2cAdaptor = i2c_get_adapter(ECP_I2CBUS); // 1 means i2c-1 bus
if (i2cAdaptor == NULL)
{
printk("ecp_gpio: Could not acquire i2c adaptor\n");
return -EBUSY;
}
i2cClient = i2c_new_dummy(i2cAdaptor, ECP_I2CDEV); // 0x43 - slave address on i2c bus
if (i2cClient == NULL)
{
printk("ecp_gpio: Could not acquire i2c client\n");
return -EBUSY;
}
if ( (rc = i2c_smbus_write_byte(i2cClient, 0xF0)) < 0)
{
printk("ecp_gpio: Error writing byte - error %d", rc);
return -EIO;
}
连接管道以实现我想要的正确方法是什么?
操作系统信息:
# uname -a
Linux ecp 4.4.127-1.el6.elrepo.i686 #1 SMP Sun Apr 8 09:44:43 EDT 2018 i686 i686 i386 GNU/Linux