项目情况:

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", &reg_vmodem))ret |= (1 << MTK_REGULATOR_VMODEM);+#ifdef LDO_SUPPORT
+       if (mtk_regulator_get("vcamio", &reg_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(&reg_vproc12));pal_log_info("vgpu = %d uV\n", mtk_regulator_get_voltage(&reg_vgpu));pal_log_info("vmodem = %d uV\n", mtk_regulator_get_voltage(&reg_vmodem));
+#ifdef LDO_SUPPORT
+    if (mtk_regulator_enable(&reg_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电源相关推荐

  1. MTK Android部分配置修改

    MTK Android浏览器输入框字数限制 /mediatek/frameworks/base/res/res/values/config.xml:    <integer name=" ...

  2. MTK 驱动(4)---MTK Android Driver知识大全

    MTK Android Driver知识大全 一.Display 1.lcm 相关概念 1.1) MIPI接口:一共有三种接口:DBI(也做CPU或MCU接口).DPI(也叫RGB接口).DSI. 在 ...

  3. MTK Android Driver知识大全

    一.Display 1.lcm 相关概念 1.1) MIPI接口:一共有三种接口:DBI(也做CPU或MCU接口).DPI(也叫RGB接口).DSI. 在使用DSI接口时,目前75/77都只支持到2条 ...

  4. MTK android打版软件配置

    MTK6515 android打版软件配置  1 一.配置GPIO 2 二.配置emmc 3 三.配置LCM 3.1 1.增加LCM驱动文件 3.2 2.配置驱动文件 3.3 3.配置背光 4 四.配 ...

  5. MTK Android

    转载请注明出处:http://blog.csdn.net/cbk861110/article/details/40931835 一.Display 1.lcm 相关概念 1.1) MIPI接口:一共有 ...

  6. 【转】MTK Android Driver知识大全

    原文网址:http://www.cnblogs.com/biglucky/p/4413797.html 一.Display 1.lcm 相关概念 1.1) MIPI接口:一共有三种接口:DBI(也做C ...

  7. Android 系统(123)---MTK android 常用修改点

    MTK android 常用修改点 1. *#06#等关键码判断文件 SpecialCharSequenceMgr.java 2.音效 ControlPanelEffect.java 3.版本号修改 ...

  8. camera(21)---MTK android AF调试总结

    MTK android AF调试总结 如何读懂马达曲线来调试AF功能 MTK Android平台,我们是有一些手段可以自行调试Camera AF的功能的. 首先,需要从供应商处得到AF马达的震动曲线. ...

  9. MTK平台 配置GNSS的不同模式

    MTK平台 配置GNSS的不同模式 Android 5.1 相关源码: hardware/mediatek/gps/mnl/mnl_aosp/mnld/src/mnld.c hardware/medi ...

  10. MTK Android Driver :Camera

    MTK Android Driver :camera 1.相关代码位置: mediatek\config\XXXX(红色字为具体的项目名) 文件:ProjectConfig.mk CUSTOM_KER ...

最新文章

  1. android audiotrack使用问题:listener不回调的原因
  2. nessus安装后进不去了_Centos7安装图形化界面
  3. [转]Android fragment 重叠问题——通过hide,show方式导致的解决方法
  4. linux qemu 源码编译
  5. Java:Java的jar包之POI的简介、安装、使用方法(基于POI将Word、Excel、PPT转换为html)之详细攻略
  6. Oracle 自己主动诊断资料档案库 (ADR)、自己主动诊断工作流、ADRCI工具
  7. Goalng软件包推荐
  8. string类的写时拷贝
  9. mysql语法中的join_MySQL JOIN 语法说明与 图解
  10. 创龙DSP6748开发板驱动LCD屏
  11. 韩国各大银行纷纷开始引进区块链技术
  12. 在matlab中如何构建加权邻接矩阵,如何构建图像的加权邻接矩阵
  13. 【java实现简单的登录界面】
  14. 几经沉浮,人工智能(AI)前路何方?
  15. 《第三节》解读Logback的配置文件
  16. PDF文件怎么加密?这两种加密方法很靠谱
  17. python 绘制多分类变量折线图
  18. QGIS编译---QGIS3.22.4 + Qt5.15.3 + VS2019 ---64位版本
  19. 画了一个田径场,可以踢世界杯吗?
  20. 微信小程序 image图片组件实现宽度固定 高度自适应

热门文章

  1. cadsee plus看图纸 7.2.0.1
  2. 方便快速地创建新浪微博表情选择对话框——jQuery Sina Emotion
  3. 以计算机基础知识做二十张ppt,计算机基础知识教程.ppt
  4. getch方法_c语言中中getch()函数为什么不起作用?
  5. java开发环境有哪些_Java学习开发环境配置大全
  6. 【R语言】地图信息数据可视化
  7. 让你轻松驾驭分布式系统设计-阿里P8纯手工打造架构师修炼手册
  8. Windows下VS2008使用ZeroMQ说明
  9. SitePoint播客#160:坐在树上的Adobe和HTML
  10. 图神经网络-图与图学习笔记-中