当前位置:网站首页>一点点读懂regulator(三)
一点点读懂regulator(三)
2022-08-04 22:50:00 【szembed】
本节我们主要介绍Regulator Machine Driver Interface
The regulator machine driver interface用于配置regulator subsystem的board/machine特定初始化代码。
Consider the following machine:
Regulator-1 -+-> Regulator-2 --> [Consumer A @ 1.8 - 2.0V]
|
+-> [Consumer B @ 3.3V]
consumers A和B的驱动器必须映射到正确的regulator上才能控制其电源。通过为每个regulator创建一个结构体 regulator_consumer_supply就可以在machine initialisation code中实现此映射:
struct regulator_consumer_supply {
const char *dev_name; /* consumer dev_name() */
const char *supply; /* consumer supply - e.g. "vcc" */
};
e.g. for the machine above:
static struct regulator_consumer_supply regulator1_consumers[] = {
REGULATOR_SUPPLY("Vcc", "consumer B"),};
static struct regulator_consumer_supply regulator2_consumers[] = {
REGULATOR_SUPPLY("Vcc", "consumer A"),};
This maps Regulator-1 to the ‘Vcc’ supply for Consumer B and maps Regulator-2 to the ‘Vcc’ supply for Consumer A.
现在,可以通过为每个regulator电源域定义一个结构体regulator_init_data来注册约束。此结构还将consumers映射到其supply regulators:
static struct regulator_init_data regulator1_data = {
.constraints = {
.name = "Regulator-1",
.min_uV = 3300000,
.max_uV = 3300000,
.valid_modes_mask = REGULATOR_MODE_NORMAL,
},
.num_consumer_supplies = ARRAY_SIZE(regulator1_consumers),
.consumer_supplies = regulator1_consumers,
};
The name field should be set to something that is usefully descriptive for the board for configuration of supplies for other regulators and for use in logging and other diagnostic output. Normally the name used for the supply rail in the schematic is a good choice. If no name is provided then the subsystem will choose one.
Regulator-1 supplies power to Regulator-2. This relationship must be registered with the core so that Regulator-1 is also enabled when Consumer A enables its supply (Regulator-2). The supply regulator is set by the supply_regulator field below and co:
static struct regulator_init_data regulator2_data = {
.supply_regulator = "Regulator-1",
.constraints = {
.min_uV = 1800000,
.max_uV = 2000000,
.valid_ops_mask = REGULATOR_CHANGE_VOLTAGE,
.valid_modes_mask = REGULATOR_MODE_NORMAL,
},
.num_consumer_supplies = ARRAY_SIZE(regulator2_consumers),
.consumer_supplies = regulator2_consumers,
};
Finally the regulator devices must be registered in the usual manner:
static struct platform_device regulator_devices[] = {
{
.name = "regulator",
.id = DCDC_1,
.dev = {
.platform_data = ®ulator1_data,
},
},
{
.name = "regulator",
.id = DCDC_2,
.dev = {
.platform_data = ®ulator2_data,
},
},
};
/* register regulator 1 device */
platform_device_register(®ulator_devices[0]);
/* register regulator 2 device */
platform_device_register(®ulator_devices[1]);
边栏推荐
猜你喜欢
随机推荐
使用代理对象执行实现类目标方法异常
Linux系统重启和停止Mysql服务教程
PID控制器改进笔记之七:改进PID控制器之防超调设定
3D建模师为了让甲方爸爸过稿,还可以这么做,就是在赚血汗钱啊
golang打开文件和读写文件
Nacos配置中心之客户端长轮询
enumerate()函数
软测人面试 ,HR 会问到哪些问题?学会涨薪3000+
【组成原理 六 存储器类型】
ffplay视频播放原理分析
赶紧进来!!!教你C语言实现扫雷小游戏(文章最后有源码!!!)
使用cpolar优化树莓派上的网页(2)
[Mock Interview - 10 Years of Work] Are more projects an advantage?
测试薪资这么高?刚毕业20K,仅需3.5个月
被领导拒绝涨薪申请,跳槽后怒涨9.5K,这是我的心路历程
仪表板展示 | DataEase看中国:数据呈现中国资本市场
the warmest home
FinClip崁入式搭建生态平台,降低合作门槛
使用cpolar优化树莓派上的网页(1)
SRv6网络的安全解决方案









