Итак, мы прочитали код, как это предлагалось в комментариях, и нашли раздел патча, в котором система может зайти в бесконечный цикл (в irq) и не выйдет из этого.
Однако, когда мы поместили printk в эту функцию irq, проблема не воспроизводилась. (проблема с синхронизацией, вы знаете!)
Итак, наконец, мой коллега попробовал старый метод переключения GPIO, и это помогло. Это также было сложно, поскольку более двух записей переключателя GPIO предотвратили бы проблему с воспроизведением.
внутри функции он использовал переключатель GPIO следующим образом:
func()
{
//set gpio high
some doubtfull code..
....
//set gpio low
}
Вот как он отследил проблемный код и его решение доступно в linux-4.1. Он исправил и тестирует.
@ShankarSM: Если вы читаете это, вся заслуга в том, что вы его выследили: -)