使用regulator_get时的一个小注意事项
Linux kernel 使用 regulator 框架来管理电源,比如 PMIC 芯片上常见的LDO。使用 regulator 的常规流程如以下代码所示:
void set_vbus_voltage(struct device *dev)
{
struct regulator *vbus;
vbus = regulator_get(dev, "vbus");
if (IS_ERR(vbus)) {
ret = PTR_ERR(vbus);
goto reg_put;
}
regulator_set_voltage(vbus, 5000000, 5000000);
regulator_enable(vbus); reg_put:
regulator_put(vbus);
}
IS_ERR宏用来判断 regulator_get 的返回值是否有错误,如果没有错误,表示成功 get 到这个 regulator,那么就可以进行后续的 set 和 enable 操作了。这个设计符合我们的思维习惯。
那么对于上例,当 IS_ERR(vbus) 返回假时,也就是成功 get 到了名为 vbus 的 regulator,是否代表 vbus 这个 regulator 一定会起作用,输出 5V 呢?答案是不一定。
假设我们并没有在设备树中定义或者代码中创建“vbus”这个 regulator,比如我们一不小心搞错了regulator的名字,这个 regulator 的正确名字应该是 “vusbhost”,而不是 “vbus”,那么IS_ERR宏能判定出来吗?按我们的思维习惯应该是会返回真,也就是判定 get regulator 出错了;但是实际情况恰恰相反,IS_ERR宏仍然返回假,也就是判定 get regulator 成功。为什么会发生这种情况呢,这就需要看一下 regulator_get 函数的具体实现。
如上图,regulator_get 最终会调用到 _regulator_get。结合红色箭头1和2所指向的代码,可以看出代码逻辑是:如果找不到对应名字的 regulator,那么就返回 dummy regulator,并且在 kernel log 中输出相关 warning 信息。比如上例中如果找不到 “vbus”,则会输出如下 warning:
supply vbus not found, using dummy regulator
同时作者还在注释中给出了理由:“假设某个 regulator 是物理硬件上存在并已经使能了的,如果软件中找不到,那么就提供一个 dummy regulator 设备”。
所以当我们在调试驱动时,如果发现某个 regulator 没有按预期输出,且跟踪代码流程也没有发现中途出错返回,那么不妨考虑一下上述情况,仔细看看 kernel log 中有没有相关的 warning。
作者:bigfish99
博客:https://www.cnblogs.com/bigfish0506/
公众号:大鱼嵌入式
使用regulator_get时的一个小注意事项的更多相关文章
- QT:窗口最小化时显示一个小浮标
有些窗口在自身最小化时要在桌面上显示一个小浮标,让用户利用这个小浮标进行各种操作(例如迅雷的悬浮窗一样),我试着用QT实现一下这个功能. PS:本来以为这个功能很简单,却搞了我两个晚上,泪奔... 思 ...
- Python list遍历remove()时的一个小BUG
有这样一个列表: s=list('abcdefg') 现在因为某种原因我们需要从s中踢出一些不需要的元素,方便起见这里直接以踢出所有元素的循环代替: for e in s: s.remove(e) 结 ...
- Java中用Scanner扫描控制台输入时的一个小问题
package com.hxl; import java.util.Scanner; public class Test { public static void main(String[] args ...
- 两个宝藏|关于我在github上冲浪时的一个小技巧。
你好呀,我是歪歪. 前几天在 github 上冲浪的时候,发现了两个宝藏东西. 我也不藏着掖着了,拿出来给大家分享一下. 这两个宝藏是关于 arthas 和 SOFARegistry 的,这两个东西都 ...
- Ubuntu格式化分区时的一个小错误
admin@gpc:/$ sudo mkfs -t ext3 -c /dev/sdb1 mkfs.ext3: inode_size (128) * inodes_count (0) too big ...
- activiti设置customSessionFactories时的一个小坑
现象:activiti设置customSessionFactories不起作用,流程还是走原来的查询方法原因:新实现的XXXEntityManagerFactory的getSessionType方法返 ...
- 关于一个小bug的修正
python初学者,非常喜欢虫师的文章. 练习时发现一个小bug,http://www.cnblogs.com/fnng/p/3782515.html 验证邮箱格式一题中,第三个x不允许有数字,但是测 ...
- autium designer smart pdf一个小问题
今天在使用ad的smart pdf时遇到一个小问题 就是 使用的是AD17,生成PDF,PDF没有把芯片的引脚标号显示出来(还有其它的芯片也是一样的,但是奇怪的是:只有在原理图元器件右边的没有显示 ...
- 在STM32F401上移植uC/OS的一个小问题 [原创]
STM32F401xx是意法半导体新推出的Cortex-M4内核的MCU,相较于已经非常流行的STM32F407xx和STM32F427xx等相同内核的MCU而言,其特点是功耗仅为128uA/MHz, ...
随机推荐
- web php wrong nginx config
web php wrong nginx config 目录 web php wrong nginx config 题目描述 解题过程 信息收集 robots.txt hint.php Hack.php ...
- Http协议有什么特点,能说说这些特点体现在哪些方面吗?
Http协议有什么特点,能说说这些特点体现在哪些方面吗? Http协议是我们最常用的接口,那它有什么特点呢? 无连接 无状态 还有呢? 灵活,简单快速 还有它的这些特点体现在哪些方面?你也要能说一说. ...
- Webpack5构建速度提升令人惊叹,早升级早受益
为什么要升级? webpack4用的好好的,运行稳定,为什么要升级到webpack5, 每次升级,都要经历一场地震,处理许多loader和plugin API的破坏性改变. 请给我们一个充分的升级理由 ...
- Dom树,什么是dom树?
相信很多初学前端的小伙伴,学了html,css,js之后,欣喜之余还有一丝小傲娇,没有想到那些大佬们口中又 提到了DOM树.你两眼一抹黑,年轻人总是要接受社会的爱(du)护(da). DOM 是 Do ...
- Windows 程序自动更新方案: Squirrel.Windows
Windows 程序自动更新方案: Squirrel.Windows 1. Squirrel Squirrel 是一组工具和适用于.Net的库,用于管理 Desktop Windows 应用程序的安装 ...
- C#读写内置类型的数据时是否原子操作
Reads and writes of the following data types are atomic: bool, char, byte, sbyte, short, ushort, uin ...
- Python正则表达式的七个使用范例
本文由 伯乐在线 - 左手的灵魂 翻译.未经许可,禁止转载!英文出处:thegeekstuff.欢迎加入翻译组.http://blog.jobbole.com/74844/ 作为一个概念而言,正则表达 ...
- 3D高清电商购物小图标图片_在线商城三维icon图标素材大全
3D高清电商购物小图标图片_在线商城三维icon图标素材大全
- 11.13 ethtool:查询网卡参数
ethtool命令用于查询或设置网卡参数. ethtool [devname] [root@linuxprobe ~]# ethtool eth0 Settings for eth0: Suppor ...
- 7.10-11 visudo、sudo
7.10 visudo:编辑 sudoers文件 visudo命令是专门用来编辑/etc/sudoers这个文件的,同时提供语法检查等功能./etc/sudoers文件是sudo命令的配置文件 ...