高通msm8953 SBL阶段修改充电电流

1 篇文章 0 订阅
1 篇文章 0 订阅

最近遇到一个需求.就是修改不同的项目中在SBL下充电的电流.项目平台是高通msm8953+pmi8952.刚拿到需求就是看了下SBL的代码.SBL的代码还是比较容易梳理的.
首先是找下SBL充电相关pm_sbl_chg_init(),在这个函数中做了

err_flag |= pm_sbl_config_chg_parameters(device_index);
            //Configure FG parameters to SRAM
err_flag |= pm_sbl_config_fg_sram(device_index);  //Needs to be called before DBC check
err_flag |= pm_sbl_chg_check_weak_battery_status(device_index);

pm_sbl_config_chg_parameters这个是配置充电的参数,在本平台是有这么一个table来配置相关参数的

smbchg_specific_data[1] = {
{
      //Configuration Value,                             Enable config
      {PM_SMBCHG_BAT_IF_LOW_BATTERY_THRESH_3P25,         PM_DISABLE_CONFIG },  //Vlowbatt Threshold
      {PM_SMBCHG_USBCHGPTH_INPUT_PRIORITY_USBIN,         PM_DISABLE_CONFIG },  //Charger Path Input Priority
      {PM_SMBCHG_BAT_IF_BAT_MISS_DETECT_SRC_BMD_PIN,     PM_DISABLE_CONFIG },  //Battery Missing Detection Source
      {PM_SMBCHG_MISC_WD_TMOUT_18S,                      PM_DISABLE_CONFIG },  //WDOG Timeout
      {FALSE,                                            PM_DISABLE_CONFIG },  //Enable WDOG
      {1000,                                             PM_DISABLE_CONFIG },  //FAST Charging Current
      {250,                                              PM_DISABLE_CONFIG },  //PRE Charge Current
      {3000,                                             PM_DISABLE_CONFIG },  //PRE to Fast Charge Current
      {4350,                                             PM_ENABLE_CONFIG },  //Float Voltage
      {2100,                                             PM_DISABLE_CONFIG },  //USBIN Input Current Limit
//      {1000,                                             PM_DISABLE_CONFIG },  //DCIN Input Current Limit
      {200,                                              PM_ENABLE_CONFIG },  //apsd_reset_theshold_mv
      BOOTUP_VOLTAGE,                                                     //bootup_battery_theshold_mv
      3800,                                                                    //wipowr bootup battery thesholdmv
      FALSE,                                                                   //Enable/Disable JEITA Hard Temp Limit Check in SBL
          FALSE,                                                                   // dbc_high_current_mode
   }
};

pm_sbl_chg_check_weak_battery_status这个是主要的函数.首先充电时候pre-charge,fast-charge.平台定义的话在pre-charge将type手动设置了USB(限流)所以不论怎么样都最大使用500ma的电流.

    boot_log_message("Manually set to USB500 mode");
    CHG_VERIFY(pm_smbchg_usb_chgpth_set_cmd_il(device_index, PM_SMBCHG_USBCHGPTH_CMD_IL__USB51_MODE, TRUE));
    CHG_VERIFY(pm_smbchg_usb_chgpth_set_cmd_il(device_index, PM_SMBCHG_USBCHGPTH_CMD_IL__USBIN_MODE_CHG, FALSE));

根据这些我们首先需要去掉这个限制,

       err_flag |= pm_smbchg_usb_chgpth_en_hvdcp(device_index, FALSE); //Disable HVDCP
       err_flag |= pm_smbchg_usb_chgpth_config_aicl(device_index, PM_SMBCHG_USB_CHGPTH_AICL_CFG__AICL_EN, FALSE); //Disable AICL
       err_flag |= pm_smbchg_usb_chgpth_set_cmd_il(device_index, PM_SMBCHG_USBCHGPTH_CMD_IL__USBIN_MODE_CHG, TRUE); //set HC mode
       err_flag |= pm_smbchg_usb_chgpth_set_cmd_il(device_index, PM_SMBCHG_USBCHGPTH_CMD_IL__ICL_OVERRIDE, TRUE); //Set ICL_OVERRIDE

然后在设置寄存器将pre-charge current设置到550ma.这样的话预充电阶段能做的只有这么多.然后在设置pre_to_fast的值.将pre_to_fastcharge的值降低.在提高fastcharge的电流.具体设置可以再上面的smbchg_specific_data[1]数组中 enable 配置然后设置大小.也可以在pm_sbl_config_chg_parameters()函数中去设置.

最后就是根据不同项目GPIO口的状态做匹配.首先我是想用tlmm模块中的接口来获取gpio的状态,但是发现tlmm初始化在我们充电的后面.所以直接来读取寄存器.

#define GPIO_CFG    (*(uint32 *)0x1083000)       //TLMM_GPIO_CFG1
#define GPIO_IN_OUT (*(uint32 *)0x1083004)       //TLMM_GPIO_IN_OUT

指针大法好!!!

  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值