linux runtime framwork

1.概念

区别于resum、suspend,能够单独控制某个设备resum、suspend达到省电的目的
——通常在驱动程序里,在open函数中打开电源,在close函数中关闭电源
——计数值的引入: 多个APP使用该设备时可能造成干扰,给驱动添加使用计数值: 当该计数大于0时打开电源, 等于0时关闭电源
pm_runtime_enable / pm_runtime_disable : 使能/禁止runtime PM, 修改disable_depth变量
pm_runtime_get_sync / pm_runtime_put_sync : 增加/减小计数值, 并且让设备处于resume或suspend状态

2. 如何使用runtime PM:

echo on > /sys/devices/…/power/control // 导致control_store -> pm_runtime_forbid(dev); :
atomic_inc(&dev->power.usage_count);
rpm_resume(dev, 0);

echo auto > /sys/devices/…/power/control // 导致control_store -> pm_runtime_allow(dev); :
atomic_dec_and_test(&dev->power.usage_count)
rpm_idle(dev, RPM_AUTO);

3. 修改驱动程序和使用

这里写图片描述
3.1 在dev_pm_ops里提供3个回调函数: runtime_suspend, runtime_resume, runtime_idle

3.2 对于runtime PM,默认状态下设备的状态是suspended, 如果硬件上它是运行状态,需要调用 pm_runtime_set_active() 来修改它的状态
然后调用pm_runtime_enable()来使能runtime PM ( 一般是在probe函数里调用上述函数)

3.3 在对应的系统调用接口里调用: pm_runtime_get_sync / pm_runtime_put_sync : 增加/减小计数值, 并且让设备处于resume或suspend状态 (一般在open/close里面分别调用get/put)

3.4 在remove函数里调用 pm_runtime_disable()

3.5 autosuspend: 如果不想让设备频繁地开、关,可以使用autosuspend功能
—— 驱动里: 执行 pm_runtime_use_autosuspend 来设置启动autosuspend功能,

put设备时, 执行这2个函数替换 pm_runtime_put_sync
    pm_runtime_mark_last_busy
    pm_runtime_put_sync_autosuspend

用户空间, 执行以下命令设置时间值:
echo 2000 > /sys/devices/platform/mylcd/power/autosuspend_delay_ms

4.demo
http://download.csdn.net/detail/u012719256/9591783

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值