充电逻辑修改
authorp15692025051 <846603105@qq.com>
Thu, 6 Jul 2023 10:19:51 +0000 (18:19 +0800)
committerp15692025051 <846603105@qq.com>
Thu, 6 Jul 2023 10:19:51 +0000 (18:19 +0800)
2.sdk/sdk/product/craneg_modem/framework/hal/chip/charger/power_charger.c
2.sdk/sdk/product/craneg_modem/framework/hal/chip/charger/power_mmi.c

index 4222fc4..3bdd08a 100644 (file)
@@ -60,6 +60,7 @@ extern UINT8 charger_present;
 extern BOOL Battery_charge_full;
 PMIC_CHARGE_EVENT_T charger_event;
 PMIC_CONFIG_T* g_pmicConfig = NULL;
+UINT32 g_pmicChargeCycleStartTime = 0;
 PMIC_BATTERY_LEVEL_CFG* g_bat_level_cfg = NULL;
 extern unsigned int pm813_charge_full_cnt;
 extern U32 GetChargeStatus(void);
@@ -601,6 +602,8 @@ void ChargerManager(void)
                        charger_event = PMIC_CHARGE_TIMER;
                        if(Pmic_is_pm813s() || Pmic_is_pm813_a3())
                                g_pmicChargerHighTemperatureCheckFlag = TRUE;
+
+                g_pmicChargeCycleStartTime = mHAL_timer_count_read(MHAL_TS_TIMER_ID);
                        break;
                case PMIC_CHARGE_TIMER:
             if (nextState == PMIC_CHARGER_UNKNOWN ||
@@ -627,6 +630,14 @@ void ChargerManager(void)
                     nextState = PMIC_CHARGER_FAST_CHARGE;
                 }
             }
+                               
+                       if(Pmic_is_pm803() && (nextState != PMIC_CHARGER_FULL_CHARGE) 
+                           && (pmic_GetGpadcBatteryLevel() < g_pmicConfig->BatteryDischarger_table[0]) 
+                           && ((mHAL_timer_count_read(MHAL_TS_TIMER_ID) - g_pmicChargeCycleStartTime) > PMIC_CHG_TIMEOUT))
+                       {
+                           PMIC_TRACE("PMIC_CHG_TIMEOUT !!!!!!\n");
+                           nextState = PMIC_CHARGER_TIMED_OUT;
+                       }
         // Get current battery voltage
                        if(!Pmic_is_pm813s() && !Pmic_is_pm803())
                        {
index 6869bc8..7aa4b63 100644 (file)
@@ -144,6 +144,7 @@ Battery_Callback Send_battery_status = NULL;
 
 extern PMIC_CONFIG_T* g_pmicConfig;
 UINT16 ChangeVoltageToBatteryRate(UINT8 * pPercent);
+extern UINT32 g_pmicChargeCycleStartTime;
 
 BOOL ChargerCallbackRegister(Usb_PlugCallback Usb_charger_status,Sim_CallCallback get_call_status,Battery_Callback battery_status)
 {
@@ -709,6 +710,16 @@ PRIVATE INT pm_GetStableBatteryLevel(UINT8 * pPercent)
 #endif
                        }
                        break;
+        case PMIC_CHARGER_TIMED_OUT:
+            {
+                if (batLevel > 4050)
+                {
+                    g_pmBatteryStable.stable = g_pmBatteryStable.avg;
+                    g_pmBatteryStable.precent = 100;
+                    bcl = 100;
+                }
+            }
+            break;
                default:
                        break;
                }
@@ -859,10 +870,27 @@ VOID pm_ChargerHandler(void)
                UOS_ResumeTask((TASK_HANDLE*)get_usb_mon_task());
 #endif
 #endif
+        g_pmicChargeCycleStartTime = mHAL_timer_count_read(MHAL_TS_TIMER_ID);
+        {
+                 if(Pmic_is_pm803() && (!GetChargerEnableGpioStatus())){
+               ForceChargerFinished(FALSE);
+                 }     
+           }
        }else{
                charger_event = PMIC_CHARGE_DC_OFF;
                status = PMIC_CHARGER_UNPLUGGED;
         charger_present = 0;
+        
+               /*
+        use Magnetic contact USB cable produce Instantaneous overvoltage when it contact pin,
+               when usb open,  extern charger ic should disabled.
+               when usb close, extern charger ic must Delayed open in order to overvoltage
+               */  
+               {
+                 if(Pmic_is_pm803() && GetChargerEnableGpioStatus()){
+               ForceChargerFinished(TRUE);
+                 }     
+           }
 #ifndef        CONFIG_MINIPHONE
         if(DM_IsPowerOnByCharger())
         {
@@ -1291,6 +1319,12 @@ BOOL pm_BatteryInit(VOID)
     if(get_usb_connect_status()){
         pm_ChargerHandler();
     }
+    else{
+                 //extern charger ic is enalbe at default status
+                 if(Pmic_is_pm803()){
+               ForceChargerFinished(TRUE);
+                 }     
+       }
 #endif
     if(startup_is_silent_reset() && !get_usb_connect_status())
         silent_reset_usb_monitor_called_first = 1;
@@ -1460,7 +1494,7 @@ UINT16 ChangeVoltageToBatteryRate(UINT8 * pPercent)
        if(uVoltage >= g_pmicConfig->BatteryDischarger_table[0])
        {
 #ifdef PM_BAT_CUSTOM_CHANGES
-               if (charger_present)
+               if (charger_present && Pmic_is_pm803())
        {
            PMIC_DEBUG_TRACE("FullCharging status = %d, LastRate = %d, Count = %d\r\n", pmic_GetChargerStatus(), g_LastBatteryRate, uVolFullCount);
            if ((g_LastBatteryRate > 0) && (g_LastBatteryRate < 99))