【FAQ】全志R系列Tina-Linux4.9部分平台唤醒源配置
-
【背景】
Tina 休眠唤醒框架一直处于不断迭代,向内核标准配置过渡的过程,因此唤醒源配置也从自己实现的接口向内核配置接口过度,因此本文简要说明,Linux4.9部分平台MR813,R818,R329,R311,MR133,R328平台唤醒源配置说明。
【简介】
在Linux-4.9中, 存在两种配置配置唤醒源
-
策略1:向内核声明wakeup-source,由内核保证唤醒中断使能。
-
策略2:本质上是设置一个全局标志位,然后通过参数传递给底层休眠接口,并在休眠流程末,由平台注册的休眠函数重新使能标记中断。
其中,策略1 为Linux内核提供的配置方式,也是Tina日后主流推广使用的方式, 策略2是由于过度阶段,部分GPIO唤醒源未能兼容Linux配置,所做的兼容配置
【分析】
-
策略1: 向内核声明wakeup-source,由内核保证唤醒中断使能
常用平台有: MR813,R818,R329等 -
方法1: 通过device_init_wakeup申请wakup_source,然后通过dev_pm_set_wake_irq注册中断号即可
参考: linux-4.9/drivers/rtc/rtc-sunxi.c
方法2: 通过device_init_wakeup申请wakup_source,然后在suspend/resume函数中,调用enable/disable_irq_wake即可
参考: linux-4.9/drivers/input/keyboard/gpio_keys.c -
策略2: 设置一个标志位,在休眠后期,由平台注册的休眠函数重新使能中断
常用平台有: R311,MR133,R328等 -
方法1: 通过调用 int enable_gpio_wakeup_src(int para) 函数接口配置。(para 为KERNEL对GPIO解析得到的标号)
-
参考: linux-4.9/drivers/bluetooth/rtl_btlpm.c
上述方法1只能支持使用GPIO中断的外部唤醒源的配置,内部唤醒源配置一般也采用策略1中的两种方法。
参考: linux-4.9/drivers/rtc/rtc-sunxi.c
参考: linux-4.9/drivers/input/keyboard/sunxi-keyboard.c
【其他】
-
需要注意的是,本文所指的唤醒源配置仅是指 使能中断。
例如,配置一个GPIO唤醒源,除了使能中断(配置唤醒源)外,还需驱动自己保证该IO的复用功能,上下拉状态配置正确。 -
内部唤醒源和外部唤醒源
内部唤醒源是指: 具有独立中断号的核内外设配置的唤醒源,如 lradc按键,RTC闹钟等
外部唤醒源是指: 需要借助GPIO中断实现唤醒的外部设备,如WIFI唤醒,TP唤醒等
-
-
-
-
-
-
Copyright © 2024 深圳全志在线有限公司 粤ICP备2021084185号 粤公网安备44030502007680号