Я не вижу все ваше дерево устройств и не знаю, какое ядро вы используете ... поэтому я не могу указать, где именно ваша проблема. Но я могу дать некоторые рекомендации по устранению неполадок ...
Во-первых, кажется, что вы скопировали свой узел из документации ядра в Documentation/devicetree/bindings/serial/nxp,sc16is7xx.txt
. Это точка отсчета, но она просто предназначена для иллюстрации.
В дереве устройств нет ничего волшебного. Он анализируется драйверами в ядре для описания электрической конфигурации. Это означает, что в любое время, когда вы не уверены, как что-то работает, все, что вам нужно сделать, - это посмотреть на драйвер, чтобы увидеть, как он его анализирует.
У меня есть исходный код 4.19.0. Я нашел ваш драйвер NXP в drivers/tty/serial/sc16is7xx.c
. Через совместимый список я подтвердил, что он поддерживает nxp,sc16is752
.
Начните с зонда sc16is7xx_i2c_probe()
, где вводится драйвер, и вы сразу увидите, что значение IRQ передается через структуру i2c_client
а затем установить с помощью вызова на devm_request_irq()
в sc16is7xx_probe()
. Это означает, что свойства DT прерывания не обрабатываются в этом драйвере. Они передаются ему.
Затем вам нужно прочитать: https://www.kernel.org/doc/Documentation/devicetree/bindings/interrupt-controller/interrupts.txt, чтобы понять, как работают контроллеры прерываний. Ваш &gpio3
соответствует требованиям? Это настроено как контроллер прерывания? Это вообще существует?