一、linux 驱动里面probe有这样一段,自动从dts里面获取client->irq 中断号。在您的probe()函数中,client->irq将包含IRQ编号。
二、让我们看一下i2c_device_probe()函数(它probe()是调用驱动程序函数的地方)。
static int i2c_device_probe(struct device *dev)
{...if (dev->of_node) {...irq = of_irq_get(dev->of_node, 0);}...client->irq = irq;...status = driver->probe(client, i2c_match_id(driver->id_table, client));
}
因此,client->irq
在驱动程序的探测功能中已经包含IRQ编号。
三、我这里做个简单是测试,client->irq获取到irq编号和用gpio_to_irq方法、of_irq_get三个方法获取到中断编号是一样的。
1、dts和测试代码
2、看打印log,获取到中断编号都是96
3、执行cat /proc/interrupts看中断是否注册ok
五、参考文章
将设备树中断标志映射到devm_request_irq | 经验摘录
Linux 内核中断与驱动中应用_老理说的好的博客-CSDN博客
中断在设备树中的使用_弋阳yoga的博客-CSDN博客_中断设备树