1. 程式人生 > >linux驅動編寫(電源管理驅動)

linux驅動編寫(電源管理驅動)

【 宣告:版權所有,歡迎轉載,請勿用於商業用途。 聯絡信箱:feixiaoxing @163.com

    對於嵌入式裝置來說,合適的電源管理,不僅可以延長電池的壽命,而且可以省電,延長裝置執行時間,在提高使用者體驗方面有很大的好處。所以,各個soc廠家在這方面花了很多的功夫。下面,我們可以看看linux是如何處理電源管理驅動的。

1、程式碼目錄

drivers/regulator

2、檢視目錄下的Kconfig檔案

menuconfig REGULATOR
	bool "Voltage and Current Regulator Support"
	help
	  Generic Voltage and Current Regulator support.

	  This framework is designed to provide a generic interface to voltage
	  and current regulators within the Linux kernel. It's intended to
	  provide voltage and current control to client or consumer drivers and
	  also provide status information to user space applications through a
	  sysfs interface.

	  The intention is to allow systems to dynamically control regulator
	  output in order to save power and prolong battery life. This applies
	  to both voltage regulators (where voltage output is controllable) and
	  current sinks (where current output is controllable).

	  This framework safely compiles out if not selected so that client
	  drivers can still be used in systems with no software controllable
	  regulators.

	  If unsure, say no.

3、閱讀檔案,得知REGULATOR是最核心的模組macro,那我們可以找一個裝置的macro看看

config REGULATOR_STM32_VREFBUF
	tristate "STMicroelectronics STM32 VREFBUF"
	depends on ARCH_STM32 || COMPILE_TEST
	help
	  This driver supports STMicroelectronics STM32 VREFBUF (voltage
	  reference buffer) which can be used as voltage reference for
	  internal ADCs, DACs and also for external components through
	  dedicated Vref+ pin.

	  This driver can also be built as a module. If so, the module
	  will be called stm32-vrefbuf.

4、沒有找到s3c,可以看一下stm32晶片的依賴屬性,接著看Makefile

obj-$(CONFIG_REGULATOR) += core.o dummy.o fixed-helper.o helpers.o devres.o
obj-$(CONFIG_OF) += of_regulator.o
obj-$(CONFIG_REGULATOR_FIXED_VOLTAGE) += fixed.o
obj-$(CONFIG_REGULATOR_VIRTUAL_CONSUMER) += virtual.o
obj-$(CONFIG_REGULATOR_USERSPACE_CONSUMER) += userspace-consumer.o

obj-$(CONFIG_REGULATOR_STM32_VREFBUF) += stm32-vrefbuf.o

5、看的出來stm32只依賴於stm32-verfbuf.c檔案,繼續檢視

static const struct of_device_id stm32_vrefbuf_of_match[] = {
	{ .compatible = "st,stm32-vrefbuf", },
	{},
};
MODULE_DEVICE_TABLE(of, stm32_vrefbuf_of_match);

static struct platform_driver stm32_vrefbuf_driver = {
	.probe = stm32_vrefbuf_probe,
	.remove = stm32_vrefbuf_remove,
	.driver = {
		.name  = "stm32-vrefbuf",
		.of_match_table = of_match_ptr(stm32_vrefbuf_of_match),
	},
};
module_platform_driver(stm32_vrefbuf_driver);

6、確認驅動為platform驅動,尋找regulator特有的資料結構

static const struct regulator_ops stm32_vrefbuf_volt_ops = {
	.enable		= stm32_vrefbuf_enable,
	.disable	= stm32_vrefbuf_disable,
	.is_enabled	= stm32_vrefbuf_is_enabled,
	.get_voltage_sel = stm32_vrefbuf_get_voltage_sel,
	.set_voltage_sel = stm32_vrefbuf_set_voltage_sel,
	.list_voltage	= regulator_list_voltage_table,
};

static const struct regulator_desc stm32_vrefbuf_regu = {
	.name = "vref",
	.supply_name = "vdda",
	.volt_table = stm32_vrefbuf_voltages,
	.n_voltages = ARRAY_SIZE(stm32_vrefbuf_voltages),
	.ops = &stm32_vrefbuf_volt_ops,
	.type = REGULATOR_VOLTAGE,
	.owner = THIS_MODULE,
};

7、由程式碼得知,regulator_ops和regulator_desc才是特有的regulator資料結構,當然也少不了註冊函式

	rdev = regulator_register(&stm32_vrefbuf_regu, &config);
	if (IS_ERR(rdev)) {
		ret = PTR_ERR(rdev);
		dev_err(&pdev->dev, "register failed with error %d\n", ret);
		goto err_clk_dis;
	}
	platform_set_drvdata(pdev, rdev);

8、進一步確認of_device_id是不是真實存在,可以在arch/arm/boot/dts/stm32h743.dtsi找到對應內容

		vrefbuf: [email protected] {
			compatible = "st,stm32-vrefbuf";
			reg = <0x58003C00 0x8>;
			clocks = <&rcc VREF_CK>;
			regulator-min-microvolt = <1500000>;
			regulator-max-microvolt = <2500000>;
			status = "disabled";
		};

相關推薦

linux驅動編寫電源管理驅動

【 宣告:版權所有,歡迎轉載,請勿用於商業用途。 聯絡信箱:feixiaoxing @163.com】    對於嵌入式裝置來說,合適的電源管理,不僅可以延長電池的壽命,而且可以省電,延長裝置執行時間,

Linux驅動編寫塊裝置驅動程式碼

【 宣告:版權所有,歡迎轉載,請勿用於商業用途。  聯絡信箱:feixiaoxing @163.com】    按照ldd的說法,linux的裝置驅動包括了char,block,net三種裝置。char裝置是比較簡單的,只要分配了major、minor號,就可以進行讀寫處理了

linux驅動編寫音效卡驅動之asoc移植

【 宣告:版權所有,歡迎轉載,請勿用於商業用途。 聯絡信箱:feixiaoxing @163.com】    Linux下面的音效卡驅動很複雜,根本不是一篇部落格能夠說清楚的。所以,本片文章的目的就是讓

linux學習筆記系統管理命令

1 檢視當前日曆 cal cal -y 顯示當前年的所有月份,顯示當前年的日曆 2 顯示或設定時間 date 設定時間需要管理員許可權,時間格式為 date [MMDDhhmm[[CC]YY][.ss]]  其中的中括號表示可選,字母意思依次是月,日,時,分,年前兩位,年後

Linux I2C設備驅動編寫

ive AC ner 解決 args nali smb man lin http://blog.csdn.net/airk000/article/details/21345457 在Linux驅動中I2C系統中主要包含以下幾個成員: I2C adapter 即I2C適配

Linux I2C裝置驅動編寫

在Linux驅動中I2C系統中主要包含以下幾個成員: I2C adapter 即I2C介面卡 I2C driver 某個I2C裝置的裝置驅動,可以以driver理解。 I2C client 某個I2C裝置的裝置宣告,可以以device理解。 I2C adapter 是

從零開始之驅動發開、linux驅動四十一、Linux中舊的時鐘管理體系

老的時鐘管理和新的時鐘管理並無本質的差別。 這裡先列出新的新的common clock framework和老的區別,後面再分析老的實現。 1.老的時鐘框架沒有區分各種時鐘型別,新的框架把時鐘分成了五個不同的時鐘型別,固定頻率的,分頻的,開關型別的,多選一型別。 2.老的時鐘框架需要

linux驅動編寫觸控式螢幕驅動

【 宣告:版權所有,歡迎轉載,請勿用於商業用途。 聯絡信箱:feixiaoxing @163.com】    早在諾基亞手機還比較流行的時候,那時候觸控式螢幕用的還不多。但是隨著觸控式螢幕手機、即智慧手

Linux I2C裝置驅動編寫-例項分析AM3359

TI-AM3359 I2C介面卡例項分析 I2C Spec簡述 特性: 相容飛利浦I2C 2.1版本規格支援標準模式(100K bits/s)和快速模式(400K bits/s)多路接收、傳送模式支援7bit、10bit裝置地址模式32位元組FIFO緩衝區可程式設計時鐘發生

Linux I2C裝置驅動編寫

在(一)中簡述了Linux I2C子系統的三個主要成員i2c_adapter、i2c_driver、i2c_client。三者的關係也在上一節進行了描述。應該已經算是對Linux I2C子系統有了初步的瞭解。下面再對他們之間的關係進行程式碼層的深入分析,我認為對他們的關係

linux驅動編寫入門

【 宣告:版權所有,歡迎轉載,請勿用於商業用途。  聯絡信箱:feixiaoxing @163.com】     在我離職之前,工作內容幾乎不涉及到驅動方面的知識。我所要做的內容就是把客戶對裝

Linux串列埠serial、uart驅動程式設計

一、核心資料結構串列埠驅動有3個核心資料結構,它們都定義在<#include linux/serial_core.h>1、uart_driveruart_driver包含了串列埠裝置名、串列埠驅動名、主次裝置號、串列埠控制檯(可選)等資訊,還封裝了tty_dri

宋寶華《Linux裝置驅動開發詳解》——sysfs檔案系統與linux裝置模型5.4.2

以下讀書筆記內容,摘自宋寶華《Linux裝置驅動開發詳解》一書。 1、sysfs檔案系統的簡介 (1)linux2.6以後的核心引進syfs檔案系統,是虛擬檔案系統; (2)產生一個包括所有系統硬體

Linux裝置驅動程式學習12 -Linux裝置模型底層原理簡介

以《LDD3》的說法:Linux裝置模型這部分內容可以認為是高階教材,對於多數程式作者來說是不必要的。但是我個人認為:對於一個嵌入式Linux的底層程式設計師來說,這部分內容是很重要的。 以我學習的ARM9為例,有很多匯流排(如SPI、IIC、IIS等等)在Linux下已經被

Linux 學習總結二十二 系統管理技巧

w vmstat top sar nload 1 命令w 查看系統負載: USER —登錄的用戶名TTY —登錄後系統分配的終端號FROM—遠程主機名,即從哪兒登錄來的LOGIN—何時登錄IDLE—空閑了多長時間,表示用戶閑置的時間。這是一個計時器,一旦用戶執行任何操作,該計時器便會被

Linux 學習總結二十五 系統管理4

iptables filter nat netfilter iptables 應用實例 一 filter表案例 1 需求:只針對filter表,預設INPUT 鏈DROP ,其他兩個鏈ACCEPT,然後針對192.169.188.0/24開通22端口,對所有網段開放80端口,21端口。我們編寫sh

selenium自動化測試瀏覽器驅動安裝屬於轉載文章

edge 轉載 app alt sele blank chrome borde ads 1.下載selenium壓縮包 http://pypi.python.org/pypi/selenium 下載後壓縮在python文件下的lib>site-package文件夾下

C#怎麼獲取已知USB裝置驅動資訊請看內容

工具條問題如何才能使子類和父類的非預設建構函式和預設建構函式都執行一次工具條問題如何才能使子類和父類的非預設建構函式和預設建構函式都執行一次 請問如何獲取比例字型的寬度這個的主要意思是請問如何獲取比例字型的寬度這個的主要意思是 請問mschart如何能畫出來一條豎線WebBr

Linux基礎知識使用者管理

使用者管理 一、使用者理解 使用者就是系統使用者的身份,在系統中使用者儲存為若干字元+若干個系統配置檔案。我們可以使用whoami命令來檢視當前使用者身份,但我們在切換使用者時不可以一直用su命令頻繁切換,這樣會導致之後操作中會出現報錯,我們要學會用exit命令

嵌入式系統移植筆記 --第三方驅動移植黑盒子移植

由於嵌入式系統分層,應用層要想操作硬體需通過核心層。驅動對上提供系統呼叫函式,對下封裝了對底層硬體的一些基本操作。筆者是不瞭解驅動程式的編輯,所以本章是在已經有驅動程式(fs4412_led_drv.c)和對應的應用程式(fs4412_led_app.c),來實現黑盒子移植(