通过GPIO中断从VLPS深度睡眠中唤醒k70

时间:2017-05-02 13:37:52

标签: linux-kernel interrupt gpio power-management nxp-microcontroller

我无法通过GPIO中断从VLPS深度睡眠中唤醒k70(Kinetis)。

这是在uCLinux下,我启用了CONFIG_PM。之后,我可以通过" echo mem>将K70置于深度睡眠状态。 / SYS /功率/状态"并从UART调试控制台唤醒它。但我无法通过触发GPIO中断来唤醒。我已通过中断处理程序打印确认中断在睡眠之前和之后工作,并且我还确认在触发GPIO中断后睡眠期间GPIO引脚值从0变为1。

根据K70手册,我应该可以通过GPIO中断唤醒VLPS。有没有任何见解为什么我不能?

谢谢

1 个答案:

答案 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 */