Прерывание пользовательского пространства для выводов gpio, у которых нет пограничной sysfs
На моей платформе есть CMOS-устройство PCA9555 с 16 контактами GPIO и отдельным контактом INT для прерываний. Пока мое приложение периодически считывало конкретный пин gpio. Мне нужно изменить его на способ, управляемый прерываниями. Из спецификации: он имеет вывод прерывания с открытым стоком, который активируется, когда один из выводов 16 порта меняет состояние, и вывод настроен как вход. Вывод, настроенный как выход, не может вызывать прерывание.
Ни у одного из 16 контактов нет поддержки прерывания, и я не вижу
edge
sysfs в / sys / class / gpio / gpio / [pin_no]. Скоро
value
файл не блокируется. И я делаю вывод из спецификации, что прерывание будет инициировано для ЦП, если состояние любого из входных контактов изменится. Как мне поймать это прерывание в пользовательском пространстве?
Я вижу в
gpiolib-cdev.c
о линейных событиях.
static irqreturn_t lineevent_irq_handler(int irq, void *p)
Могу ли я использовать
/dev/gpiochip<n>
устройство персонажа и
poll()
для прерываний? или это поддерживается только для вывода gpio, который поддерживает прерывание?