赞
踩
目录
继上文,本文主要介绍第三部分介绍怎样配置irq中断可唤醒功能及注意事项。
irq_set_irq_wake该函数可以使能或者关闭指定中断的唤醒功能。通常该函数在suspend和resume时被调用,suspend时使能指定中断的唤醒功能,resume时关闭。
从下图函数调用流程可知,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的中断注册完侯设置也可以。
唤醒系统中断功能是在待机侯发挥作用的,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)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。