亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android如何修改電源管理芯片8767電壓輸出

發布時間:2022-01-12 15:34:53 來源:億速云 閱讀:404 作者:iii 欄目:互聯網科技

這篇“Android如何修改電源管理芯片8767電壓輸出”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“Android如何修改電源管理芯片8767電壓輸出”文章吧。

S5M8767電源管理芯片是三星專門針對4412研發的,S5M8767提供9路BUCK和28路LDO輸出,每路電壓的大小可以通過軟件進行設置。這里我們以迅為-4412精英底板VDD28_AF,VDD28_CAM這倆路為例。
原理圖分析
在底板原理圖中找到camera擴展端子,camera攝像頭驅動中將這倆路電壓設置為2.8v 的電壓。所以在后面我們修改這倆路電壓的時候要先去掉攝像的驅動。

Android如何修改電源管理芯片8767電壓輸出

通過核心板原理圖可知,VDD28_AF和VDD28_CAM分別對應電源芯片 S5M8767A 的VLDO20和VLDO21。如下圖所示:

Android如何修改電源管理芯片8767電壓輸出

然后我們打開8767的datasheet,找到對這倆路的描述,下圖最上面的紅框中,表示輸出的電流是150mA,最低輸出電壓是0.8v,最大電壓是3.95v。最下面的紅框中,介紹的是默認輸出電壓,可以看到LDO20和LDO21,默認輸出的是3.0v。如下圖所示:

Android如何修改電源管理芯片8767電壓輸出

軟件分析

     確定完硬件原理之后,我們知道這倆路的電壓范圍是0.8v到3.95v。然后我們打開內核源碼里面的平臺文件。

平臺文件位置:

rch/arm/mach-exynos/mach-itop4412.c
然后我們找到對應ldo20和ldo21的代碼,如下圖所示:

Android如何修改電源管理芯片8767電壓輸出

 我們將紅框的中的代碼2800000修改為3950000,紅框函數中的第一個參數表示8767電源芯片的第20路,第三個參數表示輸出最低電壓,第四個參數表示輸出最高電壓。

     最后我們還要在menuconfig里面將5640的驅動去掉。這樣我們軟件的配置就完成了。

測試

     測試代碼如下:

#include <linux/init.h>
#include <linux/module.h>
#include <linux/i2c.h>
#include <linux/platform_device.h>
#include <linux/delay.h>
#include <linux/regulator/consumer.h>
#include <mach/gpio.h>
#include <plat/gpio-cfg.h>
#include <mach/regs-gpio.h>
#include <mach/regs-clock.h>
#include <linux/fs.h>
#include <linux/err.h>
struct regulator *ov_vddaf_cam_regulator = NULL;
struct regulator *ov_vdd5m_cam_regulator = NULL;
struct regulator *ov_vdd18_cam_regulator = NULL;
struct regulator *ov_vdd28_cam_regulator = NULL;
MODULE_LICENSE("Dual BSD/GPL");
MODULE_AUTHOR("iTOPEET_dz");
static int power(int flag)
{
if(1 == flag){regulator_enable(ov_vdd18_cam_regulator);
udelay(10);
regulator_enable(ov_vdd28_cam_regulator);
udelay(10);
regulator_enable(ov_vdd5m_cam_regulator); //DOVDD DVDD 1.8v
udelay(10);
regulator_enable(ov_vddaf_cam_regulator); //AVDD 2.8v
udelay(10);
}
else if(0 == flag){
regulator_disable(ov_vdd18_cam_regulator);
udelay(10);
regulator_disable(ov_vdd28_cam_regulator);
udelay(10);regulator_disable(ov_vdd5m_cam_regulator);
udelay(10);regulator_disable(ov_vddaf_cam_regulator);
udelay(10);
}
return 0 ;
}
static void power_init(void)
{
int ret;
ov_vdd18_cam_regulator = regulator_get(NULL, "vdd18_cam");
if (IS_ERR(ov_vdd18_cam_regulator)) {
printk("%s: failed to get %s\n", __func__, "vdd18_cam");
ret = -ENODEV;
goto err_regulator;}ov_vdd28_cam_regulator = regulator_get(NULL, "vdda28_2m");
if (IS_ERR(ov_vdd28_cam_regulator)) {
printk("%s: failed to get %s\n", __func__, "vdda28_2m");
ret = -ENODEV;
goto err_regulator;
}
ov_vddaf_cam_regulator = regulator_get(NULL, "vdd28_af");
if (IS_ERR(ov_vddaf_cam_regulator)) {
printk("%s: failed to get %s\n", __func__, "vdd28_af");
ret = -ENODEV;goto err_regulator;
}
ov_vdd5m_cam_regulator = regulator_get(NULL, "vdd28_cam");
if (IS_ERR(ov_vdd5m_cam_regulator)) {
printk("%s: failed to get %s\n", __func__, "vdd28_cam");
ret = -ENODEV;goto err_regulator;
}
err_regulator:
regulator_put(ov_vddaf_cam_regulator);
regulator_put(ov_vdd5m_cam_regulator);
regulator_put(ov_vdd18_cam_regulator);
regulator_put(ov_vdd28_cam_regulator);
}
static int hello_init(void)
{
power_init();
power(1);
printk(KERN_EMERG "Hello World enter!\n");
return 0;
}
static void hello_exit(void)
{
power(0);
printk(KERN_EMERG "Hello world exit!\n");
}
module_init(hello_init);
module_exit(hello_exit);
 
Makefile如下所示。
#!/bin/bash
obj-m += power_s5m8767a_test.o
KDIR := /home/topeet/android4.0/iTop4412_Kernel_3.0
PWD ?= $(shell pwd)
all:
make -C $(KDIR) M=$(PWD) modules
clean:
rm -rf *.o modules.order *.ko *mod.c Module.symvers
我們加載驅動之后,測量電壓大約為3V左右,有壓降,卸載驅動之后,電壓為0。說明驅動運行成功,如果在自己的項目中,假如需要用到電源控制,也可以參考本例程來實現。

以上就是關于“Android如何修改電源管理芯片8767電壓輸出”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

商南县| 贵定县| 长泰县| 新宁县| 申扎县| 新田县| 长海县| 乌兰县| 梓潼县| 大田县| 宜川县| 铁岭市| 滨海县| 新蔡县| 平安县| 旌德县| 济阳县| 彭水| 阜阳市| 始兴县| 东光县| 德格县| 绩溪县| 邛崃市| 巴彦淖尔市| 信阳市| 延津县| 福清市| 新宾| 云南省| 宿松县| 嘉兴市| 金塔县| 富顺县| 鲜城| 施甸县| 尚志市| 柞水县| 神池县| 大埔区| 洞头县|