前言 本文从regulator driver的角度,描述怎样基于regulator framework编写regulator驱动。...DTS相关的实现逻辑 3.1 DTS的内容 回忆一下“Linux Regulator Framework(1)_概述”中介绍的machine的主要功能:使用软件语言(struct regulator_init_data...主要数据结构 4.1 struct regulator_desc 1: /* include/linux/regulator/driver.h */ 2: 3: struct regulator_desc...两个类型的参数,调用regulator_register将regulator注册到kernel之后,regulator就会分配一个struct regulator_dev变量,后续所有的regulator...下面是operation mode定义(位于include/linux/regulator/consumer.h中): 1: /* 2: * Regulator operating modes
那么,linux kernel的regulator framework到底要做什么呢?...背后的思考 Linux regulator framework的目的很直接:提供标准的内核接口,控制系统的voltage/current regulators,并提供相应的机制,在系统运行的过程中,动态改变...(即该regulator的输出是另一个regulator的输入,简称supply regulator)和后级regulator(即该regulator的输入是其它regulator的输出,简称consumer...4.1 consumer模块向内核空间consumer提供的接口 regulator framework向内核空间consumer提供的接口位于“include/linux/regulator/consumer.h...4.4 driver模块向regulator driver提供的接口 regulator framework向regulator driver提供的接口位于“include/linux/regulator
如果一个系统只有一个regulator,而且只对一个设备控制的话,完全没必要使用linux regulator framework机制。...但是如果一个系统几个甚至十几个regulator,每个regulator之间还存在级连关系,这时候就需要Linux regulator framework。 2....如果一个regulator控制多个设备,而每个设备的电压或电流需求方式不同,linux regulator framework会怎么管理这些设备? 3....regulator的错误配置可能也会对硬件有非常严重的后果,所以需要小心设计regulaor,同时也要规范的使用regulator。 Linux Regulator Framework 1....Linux Regulator Framework分为四个部分,分别是machine,regulator,consumer,sys-class-regulator。
#include #include #include #include ...#include #include #include <linux/regulator/machine.h...所以必须实现一个consumer设备,代码如下: #include #include #include #...include #include #include static...regulator_register分析 struct regulator_dev *regulator_register(const struct regulator_desc *regulator_desc
/sys/class/regulator下有所有的regular,如 每个节点有如下的属性 cpu0-cpu 使用者名字 device max_microvolts...suspend_disk_state suspend_mem_state suspend_standby_state type 电源类型(电压或电流) uevent 查看/d/regulator.../regulator_summary有所有电源的信息,如 use 同上面的num_users(use_count) (_regulator_enable+1 _regulator_disable...-1)该参数可表明当前ldo的开光状态 open当前打开次数(open_count)(_regulator_get+1 _regulator_put-1)
下面,我们可以看看linux是如何处理电源管理驱动的。...1、代码目录 drivers/regulator 2、查看目录下的Kconfig文件 menuconfig REGULATOR bool "Voltage and Current Regulator...framework is designed to provide a generic interface to voltage and current regulators within the Linux...If unsure, say no. 3、阅读文件,得知REGULATOR是最核心的模块macro,那我们可以找一个设备的macro看看 config REGULATOR_STM32_VREFBUF..., .owner = THIS_MODULE, }; 7、由代码得知,regulator_ops和regulator_desc才是特有的regulator数据结构,当然也少不了注册函数 rdev
Tina Linux PMU开发指南 1 前言 1.1 文档简介 介绍使用Tina PMU 驱动的使用方法。 1.2 目标读者 适用于使用全志AXP 平台PMU 的开发人员。...regulator Linux 内核对LDO、DC-DC 的管理核心。 USB-Power-Supply USB 接口对系统的供电。...Power-Supply Linux 内核对USB、ACIN、BAT 供电的管理核心。...MFD Multi Function Device,Linux 内核对多功能设备PMU 的管理核心 regmap Linux 内核用于管理片外模块寄存器的方法。...#include struct regulator *regu= NULL; int ret = 0; regu= regulator_get
] compatible = "axp221s-regulator" regulator_count = 20 ...... regulator2 = "axp221s_dcdc2 none vdd-cpua..." regulator3 = "axp221s_dcdc3 none vdd-sys vdd-gpu" regulator4 = "axp221s_dcdc4 none" regulator5 = "axp221s_dcdc5..." regulator8 = "axp221s_aldo2 none vcc-ephy0" regulator9 = "axp221s_aldo3 none avcc vcc-pll" regulator10..." /*power1 挂在dld02上*/ regulator12 = "axp221s_dldo3 none vcc-wifi2" /*power2 挂在dld03上*/ regulator13 =..."axp221s_dldo4 none vdd-sata-25 vcc-pf" regulator14 = "axp221s_eldo1 none vcc-pe csi-iovcc" linux 3.4
"; regulator-name = "vcc-3v3"; regulator-min-microvolt = ; regulator-max-microvolt = <3300000...for WiFi and BT */ compatible = "<em>regulator</em>-fixed"; regulator-name = "vcc33-wifi"; regulator-min-microvolt...= ; regulator-max-microvolt = ; regulator-always-on; vin-supply = ;...= "regulator-fixed"; regulator-name = "vcc-wifi-io"; regulator-min-microvolt = ; regulator-max-microvolt...] axp20x-regulator: probe of axp20x-regulator.1 failed with error -5 [ 0.294520] axp20x-rsb sunxi-rsb
6、Regulator 驱动 Regulator是Linux系统中电源管理的基础设施之一,用于稳压电源的管理,是各种驱动子系统中设置电压的标准接口。...而Regulator则可以管理系统中的供电单元,即稳压器(Low Dropout Regulator,LDO,即低压差线性稳压器),并提供获取和设置这些供电单元电压的接口。...一般在ARM电路板上,各个稳压器和设备会形成一个Regulator树形结构,如图所示。...Linux的Regulator子系统提供如下API以用于注册/注销一个稳压器: structregulator_dev * regulator_register(conststructregulator_desc...Linux运行时PM最早是在Linux2.6.32内核中被合并的。
regulator found [ 2.947761] sunxi-mmc sdc0: No vd33sw regulator found [ 2.953419] sunxi-mmc sdc0.../linux_wpa.c:linux_supplicant_init:1355]: linux supplicant init now 1970-01-01 00:01:07:113: WMG_INFO...:linux_monitor_nl_init:250]: linux monitor nl init now 1970-01-01 00:01:07:114: WMG_DEBUG [src/os/linux...[src/os/linux/linux_wpa.c:linux_connect_to_supplicant:1436]: start wpa_supplicant success 1970-01-01...1970-01-01 00:01:08:222: WMG_DUMP [src/os/linux/linux_wpa.c:linux_connect_to_supplicant:1471]: create
高通平台8953 Linux DTS(Device Tree Source)设备树详解之三(高通MSM8953 android7.1实例分析篇) 本系列导航: 高通平台8953 Linux DTS...(Device Tree Source)设备树详解之一(背景基础知识篇) 高通平台8953 Linux DTS(Device Tree Source)设备树详解之二(DTS设备树匹配过程) 高通平台8953...Linux DTS(Device Tree Source)设备树详解之三(高通MSM8953 android7.1实例分析篇) 在前两篇中我们了解了DTS的背景基础知识以及发挥作用的流程,这篇文章我们以..._l5: regulator-l5 { regulator-min-microvolt = ; regulator-max-microvolt...相关知识可以参考: 高通平台8953 Linux DTS(Device Tree Source)设备树详解之二(DTS设备树匹配过程) ##############################
[ 0.000000] Linux version 5.4.61 (ubuntu@ubuntu1804) (riscv64-unknown-linux-gnu-gcc (C-SKY RISCV...[ 0.000000] Linux version 5.4.61 (ubuntu@ubuntu1804) (riscv64-unknown-linux-gnu-gcc (C-SKY RISCV...学习Git工具: https://www.bilibili.com/video/BV1CL4y1A7YG 学习Linux C编程: 参考小甲鱼课程 学习嵌入式Linux 基本知识 : https://...学习嵌入式Linux 基本知识 : https://www.bilibili.com/video/BV1VN4y137Tf 熟悉嵌入式Linux开发 学习Tina-SDK开发 学习Linux驱动开发...学习专题课程(比如RISC-V架构专题) 工作岗位 嵌入式Linux 应用开发 初级 高级 嵌入式Linux驱动开发 初级 中级 高级 嵌入式系统开发 嵌入式Linux系统优化工程师
[ 0.000000] Booting Linux on physical CPU 0x0 [ 0.000000] Linux version 5.4.61 (ubuntu@ubuntu1804...) (arm-openwrt-linux-muslgnueabi-gcc.bin (OpenWrt/Linaro GCC 6.4-2017.11 2017-11) 6.4.1, GNU ld (GNU...new interface driver hub [ 0.271281] usbcore: registered new device driver usb [ 0.276486] mc: Linux...media interface: v0.10 [ 0.280780] videodev: Linux video capture interface: v2.00 [ 0.286981]...---------------------------------------------- Tina Linux (Neptune, 61CC0487) ---------------------
---------------------------------------------- Tina Linux -----------------------------------------...对于Linux系统 可以查看是否多出一个/dev/tty 设备,一般情况设备节点为 /dev/ttyACM0 。 2....[ 0.000000] Booting Linux on physical CPU 0x0 [ 0.000000] Linux version 5.4.61 (ubuntu@ubuntu1804...) (arm-openwrt-linux-muslgnueabi-gcc.bin (OpenWrt/Linaro GCC 6.4-2017.11 2017-11) 6.4.1, GNU ld (GNU...media interface: v0.10 [ 0.280780] videodev: Linux video capture interface: v2.00 [ 0.286981]
---------------------------------------------- Tina Linux -----------------------------------------...对于Linux系统 可以查看是否多出一个/dev/tty 设备,一般情况设备节点为 /dev/ttyACM0 。 2....media interface: v0.10 videodev: Linux video capture interface: v2.00 Advanced Linux Sound Architecture...---------------------------------------------- Tina Linux (Neptune, 61CC0487) ---------------------...media interface: v0.10 videodev: Linux video capture interface: v2.00 Advanced Linux Sound Architecture
/linux-5.4/board.dts index 963aa17..fb8d344 100755 --- a/configs/nezha/linux-5.4/board.dts +++ b/configs..."; + regulator-name = "vdd_3v3"; + regulator-min-microvolt = ; + regulator-max-microvolt.../linux-5.4/config-5.4 +++ b/configs/nezha/linux-5.4/config-5.4 @@ -1368,6 +1368,7 @@ CONFIG_XR829_WLAN...,修改以下文件 tina-d1-h/device/config/chips/d1-h/configs/nezha/linux-5.4/board.dts tina-d1-h/lichee/linux-5.4..."; + regulator-name = "vdd_3v3"; + regulator-min-microvolt = ; + regulator-max-microvolt
[ 0.000000] Booting Linux...on physical CPU 0x0 [ 0.000000] Linux version 4.9.191 (kunyao@Exdroid78...0.472290] ion_heap_create: Invalid heap type 6 [ 0.479872] Advanced Linux...0.480036] ion_heap_create: Invalid heap type 6 [ 0.487628] Advanced Linux...---------------------------------------------- Tina Linux (Neptune,
该修改主要是针对regulator使用pwm进行调压,会在dts中配置pwm调压的极性,为了保证与uboot阶段的电压一致,现在需要把dts中配置的极性的值置位1。...reg_vdd_cpu: vdd-cpu { compatible = "sunxi-pwm-regulator"; - pwms = ; // 第一个参数是使用的...= "vdd_cpu"; regulator-min-microvolt = ; regulator-max-microvolt = ; regulator-ramp-delay...= ; regulator-always-on; regulator-boot-on; status = "okay"; }; 在修改完成后,编译打包,确认版型后烧录测试...成功起来后还需要测试一下pwm功能是否正常,最好使用示波器来测一下board.dts里配置的pwm通道的管脚,然后调试该通道看有无波形变化,具体方法如下: 进入/sys/class/pwm目录,该目录是linux
领取专属 10元无门槛券
手把手带您无忧上云