Linux唤醒系统irq处理流程(2/2)

        

目录

可唤醒系统中断函数 irq_set_irq_wake

      1.使能中断的唤醒功能设置为什么通常在suspend阶段?

      2.irq_set_irq_wake函数使用注意


 

        继上文,本文主要介绍第三部分介绍怎样配置irq中断可唤醒功能及注意事项。

  • 可唤醒系统中断函数 irq_set_irq_wake

        irq_set_irq_wake该函数可以使能或者关闭指定中断的唤醒功能。通常该函数在suspend和resume时被调用,suspend时使能指定中断的唤醒功能,resume时关闭。

        

      1.使能中断的唤醒功能设置为什么通常在suspend阶段?

       从下图函数调用流程可知,irq_set_irq_wake函数最终会调用平台的中断控制器(非GIC)irq_set_wake函数来设置wake_mask变量,该变量在suspend过程中的suspend_noirq阶段调用平台中断控制器的mtk_eint_suspend函数将wake_mask设置到对应寄存器。

从suspend flow流程看在suspend_suspend阶段只是设置了中断可唤醒的标志,在之后的suspend_noirq阶段才将该标志设置到对应的中断控制寄存器。通常外设的驱动的suspend函数在suspend_suspend阶段被执行,suspend_suspend在suspend_noirq之前。所以要设置中断唤醒功能时,通常会外设驱动的suspend函数中使能。

       当然,如果要设置中断的唤醒功能,在suspend_noirq阶段前设置都可以,如在probe的中断注册完侯设置也可以。

f0e94b978e6c448684770c7e4499c805.png

 

      2.irq_set_irq_wake函数使用注意

      唤醒系统中断功能是在待机侯发挥作用的,irq_set_irq_wake该函数使用有几点需要注意:

      a.irq_set_irq_wake函数独立使用,当该中断处理函数中要处理内容耗时较短、没有交互行为,可以仅使用irq_set_irq_wake来设置中断来唤醒系统。

      b.当可唤醒系统的中断其对应的处理函数要唤醒应用层(有交互行为)时,建议不仅要使用irq_set_irq_wake设置中断可唤醒系统,要同时注册可唤醒系统的源(wakeup_source_register

-);当该中断触发时,可在该中断处理函数中调用__pm_stay_awake/__pm_wakeup_event持有该唤醒源,这样能够有效保证中断要处理的事件可以传递给应用层,确保在应用层可以接受到该事件。防止中断事件发出侯系统很快再度进入待机状态,导致应用层无法接受到该事件。可参考power_key中断的处理过程。

      c.当可唤醒系统中断其对应的处理函数与其他设备进行交互时,建议在使用irq_set_irq_wake设置中断可唤醒系统,要同时设置该中断对应设备的唤醒能力(device_init_wakeup)

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值