volt e手机为什么会进入到selectbootmode解除 boot mode的时候该怎么办

这里的regulator结构是相当复杂的其中彩色框代表最终的regulator抽象,它的前一级表示regulator的载体(可以是PMIC、CPU、等等)下面将会详细说明:

注1:单纯从硬件的角度看,是不存在图中"regulators“、PMIC等实体的它们的出现,已经包含了软件设计的思路之所以画在这里,是方便后面的描述

2.2 使用DTS,将硬件拓扑呈现出来

我们都知道DTS的功能是描述设备的拓扑结构,并在系统初始化的时候为被描述的设备创建并注册对应的platform device,最终和相应的platform driver相遇执行其probe接口,实现设备的枚举功能但是,在这些基本原则之外还需要一些更深的思考:

DTS节点(node)怎么和设备对应?是以设备的“物理界限”为单位还是以设備的“功能”为单位?

是不是所有的“设备”都应该在kernel中创建一个platform device如果不是,创建的依据是什么

这些思考在本文的例子(NVIDIA Tegra Dalmore A04的regulator)中体现尤为突出,它的本质是软件设计中的模块划分从而决定了regulator在DTS中的呈现方式和层次。

tps51632是一个简单的器件位于i2c总线下面,包含一个regulator器件洇此其DTS比较简单,如下:

注3:kernel在初始化时只会为二级node(即“/”下面的节点,本文的例子是”)创建platform设备至于三级node(这里的”),则由其bus(i2c)创建后面我们会遇到其它的情况,到时再介绍

tps65090相对比较复杂,它位于相同的i2c总线下面但包含两个相对复杂的功能实体,charger和PMIC峩们看看其DTS怎么写的:

回到本文的主题上,虽然这里的regulators没有compatible字段也会创建相应的platform device(具体可参考“drivers/mfd/tps65090.c”),这从侧面回答了上面的一个思考:从物理范畴tps65090是一个独立的设备,但它内部有两个功能模块因此会存在两个platform device

这一类regulator比较特殊直接集成在CPU内部,DTS如下:

这些driver的存在形式是多种多样的但所做的工作基本类似:

1)初始化regulator的宿主(如上面的tps5163、PMIC、等等),最终的目的是通过宿主提供的接口,修改regulator的输出

3. DTS相关的实现逻辑

回忆一下“”中介绍的machine的主要功能:使用软件语言(struct

always_on,是否一直保持使能状态;

boot_on是否在启动时使能;

rapm_delay,由于模拟器件嘚特性电压改变,需要一定的生效时间在一定的范围内,生效时间和电压的变化值成比例该变量就是描述regulator器件的这个特性,单位为uV/us即1us可以产生多大的电压变化。在rapm_disable不为1的情况下当consumer要求改变电压时,regulator framework core会根据该变量以及电压改变量,计算出需要等待的时间进行延時操作;

regulator的DTS信息,可以通过两种方法解析:

该接口有两个输入参数:设备指针以及包含了DTS信息的node指针(以3.1中的例子,即”所在的node)

它夲质上是一种通用的DTS匹配逻辑(和kernel解析platform device的标准资源类似),大致如下:

总结:1、2两种DTS解析的方法各有优缺点:1直接,方便容易理解,泹会有冗余代码;2简洁但需要regulator driver开发者非常熟悉解析的原理,并以此设计DTS和struct regulator_desc变量大家可以根据实际情况,灵活使用

在注册regulator的时候,需偠使用struct regulator_desc结构提供该regulator的静态描述所谓的静态,是指这些描述不会在运行时改变代表了设备的一种属性,如下:

ops该regulator的操作函数集,见后媔;

其它字段和regulator的输出控制有关,后面会以专题的形式介绍

这些回调函数的具体意义,请参考后续的描述

struct regulator_config保存了regulator的动态信息,所谓嘚动态信息是指那些会在driver运行过程中改变、或者driver运行后才会确定的信息,如下:

regmap参考后续描述;

desc,保存了regulator静态描述信息的指针(从这個角度看所谓的静态描述,其变量必须为全局变量);

本章简单的分析一下regulator driver相关的实现逻辑如果要理解有些逻辑,必须具备一些regulator的基礎知识因此在需要的时候,会穿插介绍这些知识

2)注册用于调试的debugfs。

22~49检查参数的合法性。其中35~49行涉及到电压控制的方式,后面后詳细说明;

114~120将从DTS中解析的constraints,应用起来(这个过程比较复杂就不介绍了,感兴趣的读者可以自行分析);

注4:register map是kernel提供的一种管理寄存器嘚机制特别是较为复杂的寄存器,如codec等本文不会过多描述,如需要会专门写一篇文章介绍该机制。

regulator的主要功能是输出电压/电流的調整(或改变)。由于模拟器件的特性电压/电流的改变,是需要一定的时间的对有些regulator而言,可以工作在不同的模式这些模式有不同嘚改变速度,可想而知较快的速度,有较大的功耗下面是operation mode定义(位于include/linux/regulator/consumer.h中):

kernel抽象了两种电压操作的方法:

其中set_voltage用于将电压设置为min_uV和max_uV范圍内、和min_uV最接近的电压。该接口可以返回一个selectbootmode解除or参数用于告知调用者,实际的电压值;

get_voltage用于返回当前的电压值;

注5:有关selectbootmode解除or的描述,可参考下面的介绍

regulator driver可以根据实际情况,选择一种实现方式

这篇文章写的相当纠结,相当混乱我相信读者很难看懂……

本以为会佷容易写,但里面的知识点太零碎了以至于无法很好的归纳、抽象、突出重点。崩溃!

时间原因就先这样了,有机会再回头来整理唏望读者谅解。

}

我要回帖

更多关于 selectbootmode解除 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信