В моем случае пин ID USB OTG - PI11.
Настроил следующим образом файл дерева устройств:
USB-OTG работает, но проблема в том, что своё состояние host или client он определяет единственный раз при старте по пину ID.
Для меня все выглядит так, как будто драйвер настраивается на работу через прерывание по пину GPIO PI11, c отладочными принтами в подсистеме прерываний есть регистрация EINT23 в драйвере pinctrl:
Но по какой-то причине запуска обработчика прерывания не происходит.
Реально проверил - пин ID меняет свое состояние в зависимости от подключения разъема OTG.
Внешнее прерывание на пине возможно - PI11/SPI0_CLK/UART5_RX/EINT23.
Прошу по возможности помочь с диагностикой и посоветовать ресурсы/направления диагностики, буду очень благодарен, если требуется какая-либо дополнительная информация - пожалуйста сообщите.
на нашей плате так же, и даже обычные хосты не работают на майнстримном ядре, такое ощущение usb кроме бананыпи ниукого не работает, поэтому драйвер usb phy скопирован из ядра wirenboard и у него другая реализация otg
С таким device tree и ядром из вашего buildroot USB-OTG корректно работает, переключает на горячую Host-Client по пину OTG.
Проблема была в том, что не работали прерывания по GPIO.
После выполнения рекомендации из даташита на А40:
(24).A 10MΩ resister is connected in parallel between X32KOUT and X32KIN, the resistor can create negative feedback in an inverter to ensure amplifier in linear amplifier region.
Прерывания начали работать и USB-OTG начал работать корректно.
судя по всему на наших модулях работает с коррекцией DTS, а прерываний от gpio не было на собственной плате автора темы из-за отсутствия у него резистора 10М параллельно резонатору - у нас он есть - ZQ2 -> R28 на sodimm и прерывния от gpio у нас работают, проверено