MTK Android 配置pmic电源
项目情况:
pmic 的 vcamio_pmu ,vcama2_pmu,vcamd_pmu 这几个供电引脚默认情况下并未打开,项目中一些外设的电源由这几个引脚提供需要系统启动时默认打开
这里有两种方法打开这些供电引脚,第一种在kernel阶段pmic regulator驱动初始化时打开,另外一种在preloader阶段pmic初始化时打开
一.系统启动后在kernel阶段通过 pmic的 regulator 驱动的初始化阶段打开这些引脚的电源
驱动源码路径:
/kernel-4.14/drivers/regulator/mt6358-regulator.cmt6358_regulator_probe
{→ for (i = 0; i < regulator_init_data->size; i++)rdev = devm_regulator_register(&pdev->dev,&(mt_regulators + i)->desc, &config); //通过devm_regulator_register 注册 regulator
}regulator_register(struct device *dev, const struct regulator_desc *regulator_desc,const struct regulator_config *config)
{→ rdev = regulator_register(regulator_desc, config);→ init_data = regulator_of_get_init_data(dev, regulator_desc, config&rdev->dev.of_node);→ for_each_available_child_of_node(search, child) {....init_data = of_get_regulator_init_data(dev, child, desc);//获取设备树信息进行初始化配置regulator}→ ret = set_machine_constraints(rdev, constraints);→ if (rdev->constraints->always_on || rdev->constraints->boot_on)ret = _regulator_do_enable(rdev);//根据 boot_on参数调用 _regulator_do_enable使能regulator从而使对应引//脚输出电压
}boot_on参数的初始化:of_get_regulator_init_data(dev, child, desc);
{ → of_get_regulation_constraints(node, &init_data, desc);→ constraints->boot_on = of_property_read_bool(np, "regulator-boot-on");//根据设备树节点regulator-boot-on 初始化boot_on属性
}即在对应的vcamio ,vcamd或者vcama2的设备树节点加入 regulator-boot-on 属性即可在kernel阶段pmic初始化regulators时让其供电例:mt_pmic_vcamd_ldo_reg: ldo_vcamd {regulator-name = "vcamd"; regulator-min-microvolt = <900000>;regulator-max-microvolt = <1800000>;regulator-enable-ramp-delay = <270>;regulator-boot-on; //加入此属性即可};
二.preloader阶段 pmic初始化时打开 vcamio, vcamd, vcama2
目录:/vendor/mediatek/proprietary/bootable/bootloader/preloader
preloader目录下涉及的文件:
platform/mt6768/src/drivers/inc/mt6358.h
platform/mt6768/src/drivers/mt6358.c
platform/mt6768/src/drivers/pmic_initial_setting.c
此处以打开vcamio为例,vcamd 以及vcama2打开的步骤与之相同1./platform/mt6768/src/drivers/inc/mt6358.h 1.1.添加对应的id:enum {MTK_REGULATOR_VDRAM2,MTK_REGULATOR_LDO_SUPPORT = MTK_REGULATOR_VDRAM2,MTK_REGULATOR_VIO18,+ MTK_REGULATOR_VCAMIO, //添加id.......};1.2 添加寄存器,电压参数:+ #define vcamio_vol_reg PMIC_RG_VCAMIO_VOCAL_ADDR + #define vcamio_vol_mask 0+ #define vcamio_vol_shift 0+ #define vcamio_da_vol_reg 0+ #define vcamio_da_vol_mask 0+ #define vcamio_da_vol_shift 0+ #define vcamio_enable_reg PMIC_RG_LDO_VCAMIO_EN_ADDR+ #define vcamio_enable_shift PMIC_RG_LDO_VCAMIO_EN_SHIFT+ #define vcamio_mode_reg 0+ #define vcamio_mode_shift 0+ #define vcamio_trim_reg PMIC_RG_VCAMIO_VOTRIM_ADDR+ #define vcamio_trim_mask PMIC_RG_VCAMIO_VOTRIM_MASK+ #define vcamio_trim_shift PMIC_RG_VCAMIO_VOTRIM_SHIFT+ #define vcamio_min_uV 1800000+ #define vcamio_max_uV 1800000+ #define vcamio_step_uV 0+ #define vcamio_volt_type FIXED_REGULAR_VOLTAGE+ #define vcamio_stb 270 preloader下的platform/mt6768/src/drivers/inc/upmu_hw.h文件定义了PMIC_RG_VCAMIO_VOCAL_ADDR ,PMIC_RG_LDO_VCAMIO_EN_ADDR 这些寄存器按照具体需求进行修改对应的寄存器vcamio_min_uV ,vcamio_max_uV,vcamio_stb 这三参数的数值可以按照pmic的dtsi文件去填写例:.kernel-4.14/arch/arm64/boot/dts/mediatek/mt6358.dtsivcamio的节点信息:mt_pmic_vcamio_ldo_reg: ldo_vcamio {compatible = "regulator-fixed";regulator-name = "vcamio"; regulator-min-microvolt = <1800000>; //vcamio_min_uVregulator-max-microvolt = <1800000>; //vcamio_max_uVregulator-enable-ramp-delay = <270>; //vcamio_stb};vcamio_volt_type 可以依据kernel阶段vcamio regulator的定义类型进行赋值例:/drivers/regulator/mt6358-regulator.cMT_REG_FIXED("ldo_vcamio", VCAMIO, PMIC_RG_LDO_VCAMIO_EN_ADDR,PMIC_DA_VCAMIO_EN_ADDR, 1800000, MT_LDO_EN),MT_REG_FIXED接口定义的是fixed这种类型的所以: #define vcamio_volt_type FIXED_REGULAR_VOLTAGE2. /platform/mt6768/src/drivers/mt6358.c2.1 添加电压配置:+static const unsigned int vcamio_volts[] = {
+ 1800000,
+};+static const int vcamio_idxs[] = {
+ 0,
+};static struct mt6358_ldo_info ldo_ext_info[] = {mt6358_ldo_decl(vdram2_volts, vdram2_idxs),mt6358_ldo_decl(vio18_volts, fix_idxs),
+ mt6358_ldo_decl(vcamio_volts, vcamio_idxs),};static struct mt6358_regulator_info mt6358_regu_info[] = {#ifdef LDO_SUPPORTmt6358_decl(vdram2),mt6358_decl(vio18),
+ mt6358_decl(vcamio),#endif /*--LDO_SUPPORT--*/#endif /*--CFG_MTK_TINYSYS_SSPM_SUPPORT--*/};static struct mtk_regulator mt6358_regulator[] = {.id = MTK_REGULATOR_VIO18,.reg_ops = &mt6358_regulator_ctrl,},
+ {
+ .name = "vcamio",
+ .id = MTK_REGULATOR_VCAMIO,
+ .reg_ops = &mt6358_regulator_ctrl,
+ },#endif /*--LDO_SUPPORT--*/#endif /*--CFG_MTK_TINYSYS_SSPM_SUPPORT--*/};vcamio_volts,以及vcamio_idxs 可以依据kernel阶段vcamio regulator的定义类型进行定义例:/drivers/regulator/mt6358-regulator.cstatic const u32 vcamio_voltages[] = { 1800000,};
vcamio_volts 与vcamio_voltages定义一致即可,1800000是vcamio_voltages中的第一个元素
index:0所以vcamio_idxs一个元素初始化为03./platform/mt6768/src/drivers/pmic_initial_setting.c3.1 pmic初始化阶段添加vcamio enable操作打开vcamiovoid pmic_default_voltage(void)
{struct mtk_regulator reg_vproc12 = empty_regulator;struct mtk_regulator reg_vgpu = empty_regulator;struct mtk_regulator reg_vmodem = empty_regulator;
+
+#ifdef LDO_SUPPORT
+ struct mtk_regulator reg_vcamio = empty_regulator;
+#endifint vmodem_vol = 750000, vproc11_vol = 962500, vproc12_vol = 962500,vsram_proc11_vol = 1062500, vsram_proc12_vol = 1062500;.............if (mtk_regulator_get("vmodem", ®_vmodem))ret |= (1 << MTK_REGULATOR_VMODEM);+#ifdef LDO_SUPPORT
+ if (mtk_regulator_get("vcamio", ®_vcamio))
+ ret |= (1 << MTK_REGULATOR_VCAMIO);
+
+#endifif (ret) {pal_log_err("mtk_regulator_get failed.(0x%x)\n", ret);return;..............pal_log_info("vproc12 = %d uV\n",mtk_regulator_get_voltage(®_vproc12));pal_log_info("vgpu = %d uV\n", mtk_regulator_get_voltage(®_vgpu));pal_log_info("vmodem = %d uV\n", mtk_regulator_get_voltage(®_vmodem));
+#ifdef LDO_SUPPORT
+ if (mtk_regulator_enable(®_vcamio, 1)) //打开vcamio
+ ret |= (1 << MTK_REGULATOR_VCAMIO); +#endif
}
*系统启动后vcamio ,vcamd上电正常,但是kernel阶段出现电压输出为0的情况,这种情况下需要修改mtk 的imgsensor驱动,因为驱动会控制vcamio,camd以及vcama 的上下电时序把camio ,vcamd关闭了
具体逻辑在 kernel-4.14/drivers/misc/mediatek/imgsensor/src/mt6768/camera_hw/regulator/regulator.c,通过regulator_set函数设置电压输出关闭
此处修改摄像头的上电下电时序修复该问题
文件 kernel-4.14/drivers/misc/mediatek/imgsensor/src/mt6768/camera_hw/imgsensor_cfg_table.c
根据项目具体使用的摄像头情况,修改vcama,vcamd以及vcamio 的上电下电时序
以只使用main camera,型号为OV2718A_MIPI_RAW为例:
struct IMGSENSOR_HW_POWER_SEQ sensor_power_sequence[]= {....#if defined(OV2718A_MIPI_RAW) {SENSOR_DRVNAME_OV2718A_MIPI_RAW,{{SensorMCLK, Vol_High, 2},{PDN, Vol_Low, 0}, {RST, Vol_Low, 0},{DVDD, Vol_1200, 0}, //改为 {DVDD, Vol_1200, 0, Vol_High, 0}{DOVDD, Vol_1800, 10},//改为 {DOVDD, Vol_1800, 10, Vol_High, 0}{AVDD, Vol_1100, 100},//改为 {AVDD, Vol_1100, 100, Vol_High, 0}{PDN, Vol_High, 2},{RST, Vol_High, 50},},},738 #endif}{DVDD, Vol_1200, 0} 改为 {DVDD, Vol_1200, 0, Vol_High, 0}
主要是添加了Vol_High, 0两个参数规定了摄像头 dvdd:VCAMD的下电压时序
让camera关闭的时候不关闭该引脚
引脚与pmic电源的对应关系如下:
REGULATOR_TYPE_VCAMA | IMGSENSOR_HW_PIN_AVDD |
REGULATOR_TYPE_VCAMD | IMGSENSOR_HW_PIN_DVDD |
REGULATOR_TYPE_VCAMIO | IMGSENSOR_HW_PIN_DOVDD |
如果使用到sub camera ,sub camera的下电时序也需修改,因为根据设备树的以下配置:
cam0_vcamd-supply = <&mt_pmic_vcamd_ldo_reg>;
cam1_vcamd-supply = <&mt_pmic_vcamd_ldo_reg>;
cam0_vcamio-supply = <&mt_pmic_vcamio_ldo_reg>;
cam1_vcamio-supply = <&mt_pmic_vcamio_ldo_reg>;
cam0: main camera 和 cam1:sub camera的vamio以及vcamd使用的是同一个regulator所以他们dvdd,dovdd的上下电控制的是同一个pmic的vcamd以及vcamio
MTK Android 配置pmic电源相关推荐
- MTK Android部分配置修改
MTK Android浏览器输入框字数限制 /mediatek/frameworks/base/res/res/values/config.xml: <integer name=" ...
- MTK 驱动(4)---MTK Android Driver知识大全
MTK Android Driver知识大全 一.Display 1.lcm 相关概念 1.1) MIPI接口:一共有三种接口:DBI(也做CPU或MCU接口).DPI(也叫RGB接口).DSI. 在 ...
- MTK Android Driver知识大全
一.Display 1.lcm 相关概念 1.1) MIPI接口:一共有三种接口:DBI(也做CPU或MCU接口).DPI(也叫RGB接口).DSI. 在使用DSI接口时,目前75/77都只支持到2条 ...
- MTK android打版软件配置
MTK6515 android打版软件配置 1 一.配置GPIO 2 二.配置emmc 3 三.配置LCM 3.1 1.增加LCM驱动文件 3.2 2.配置驱动文件 3.3 3.配置背光 4 四.配 ...
- MTK Android
转载请注明出处:http://blog.csdn.net/cbk861110/article/details/40931835 一.Display 1.lcm 相关概念 1.1) MIPI接口:一共有 ...
- 【转】MTK Android Driver知识大全
原文网址:http://www.cnblogs.com/biglucky/p/4413797.html 一.Display 1.lcm 相关概念 1.1) MIPI接口:一共有三种接口:DBI(也做C ...
- Android 系统(123)---MTK android 常用修改点
MTK android 常用修改点 1. *#06#等关键码判断文件 SpecialCharSequenceMgr.java 2.音效 ControlPanelEffect.java 3.版本号修改 ...
- camera(21)---MTK android AF调试总结
MTK android AF调试总结 如何读懂马达曲线来调试AF功能 MTK Android平台,我们是有一些手段可以自行调试Camera AF的功能的. 首先,需要从供应商处得到AF马达的震动曲线. ...
- MTK平台 配置GNSS的不同模式
MTK平台 配置GNSS的不同模式 Android 5.1 相关源码: hardware/mediatek/gps/mnl/mnl_aosp/mnld/src/mnld.c hardware/medi ...
- MTK Android Driver :Camera
MTK Android Driver :camera 1.相关代码位置: mediatek\config\XXXX(红色字为具体的项目名) 文件:ProjectConfig.mk CUSTOM_KER ...
最新文章
- android audiotrack使用问题:listener不回调的原因
- nessus安装后进不去了_Centos7安装图形化界面
- [转]Android fragment 重叠问题——通过hide,show方式导致的解决方法
- linux qemu 源码编译
- Java:Java的jar包之POI的简介、安装、使用方法(基于POI将Word、Excel、PPT转换为html)之详细攻略
- Oracle 自己主动诊断资料档案库 (ADR)、自己主动诊断工作流、ADRCI工具
- Goalng软件包推荐
- string类的写时拷贝
- mysql语法中的join_MySQL JOIN 语法说明与 图解
- 创龙DSP6748开发板驱动LCD屏
- 韩国各大银行纷纷开始引进区块链技术
- 在matlab中如何构建加权邻接矩阵,如何构建图像的加权邻接矩阵
- 【java实现简单的登录界面】
- 几经沉浮,人工智能(AI)前路何方?
- 《第三节》解读Logback的配置文件
- PDF文件怎么加密?这两种加密方法很靠谱
- python 绘制多分类变量折线图
- QGIS编译---QGIS3.22.4 + Qt5.15.3 + VS2019 ---64位版本
- 画了一个田径场,可以踢世界杯吗?
- 微信小程序 image图片组件实现宽度固定 高度自适应
热门文章
- cadsee plus看图纸 7.2.0.1
- 方便快速地创建新浪微博表情选择对话框——jQuery Sina Emotion
- 以计算机基础知识做二十张ppt,计算机基础知识教程.ppt
- getch方法_c语言中中getch()函数为什么不起作用?
- java开发环境有哪些_Java学习开发环境配置大全
- 【R语言】地图信息数据可视化
- 让你轻松驾驭分布式系统设计-阿里P8纯手工打造架构师修炼手册
- Windows下VS2008使用ZeroMQ说明
- SitePoint播客#160:坐在树上的Adobe和HTML
- 图神经网络-图与图学习笔记-中