我无法通过GPIO中断从VLPS深度睡眠中唤醒k70(Kinetis)。
这是在uCLinux下,我启用了CONFIG_PM。之后,我可以通过" echo mem>将K70置于深度睡眠状态。 / SYS /功率/状态"并从UART调试控制台唤醒它。但我无法通过触发GPIO中断来唤醒。我已通过中断处理程序打印确认中断在睡眠之前和之后工作,并且我还确认在触发GPIO中断后睡眠期间GPIO引脚值从0变为1。
根据K70手册,我应该可以通过GPIO中断唤醒VLPS。有没有任何见解为什么我不能?
谢谢
答案 0 :(得分:1)
首先,您的GPIO驱动程序应该实现IRQ芯片。 (从上面的描述中我不知道什么是平台以及那里使用的是什么GPIO驱动程序。)
其次,IRQ芯片实现必须存在->irq_set_wake()
回调并正确实现。
第三,通过gpiod_get()
获得GPIO线路的呼叫者必须执行:
struct gpio_desc *gd;
int irq;
gd = gpiod_get(...);
if (IS_ERR(gd))
return PTR_ERR(gd);
irq = gpiod_to_irq(gd);
if (irq < 0)
return irq;
/* Now! */
enable_irq_wake(irq); /* This does the trick */