潮声隔雨深 · 2021年12月27日

全志R系列Tina-Linux4.9部分平台唤醒源配置?

请问在整个R系列里Tina-Linux4.9部分平台唤醒源配置有哪些呢,求大佬解答

1 个回答 得票排序 · 时间排序
极术小姐姐 · 2021年12月29日
本回答来源全志R系列Tina-Linux4.9部分平台唤醒源配置

【简介】

在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唤醒等
你的回答
关注数
2
收藏数
0
浏览数
2410
赵小虎 极术小姐姐
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息