mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-11 07:03:09 -04:00
mmi_parallel_charger: Optimize 40w charging policy
-1, Add chrg ucp and ocp detection -2, Add chrg_policy_error_recovery policy -3, Add chrg_dev_init -4, change charger thermal cooling policy, remove THERMAL_COOLING chrg step, add thermal cooling process into CC loop and CV loop, that to avoid miss chrg step in cooling Change-Id: I57d66af338505c5ff9fd711de8b650afdb4a4027 Signed-off-by: xuwt2 <xuwt2@lenovo.com> Reviewed-on: https://gerrit.mot.com/1389618 SME-Granted: SME Approvals Granted SLTApproved: Slta Waiver Tested-by: Jira Key Reviewed-by: Jianqi Yang <yangj@motorola.com> Submit-Approved: Jira Key Reviewed-on: https://gerrit.mot.com/1893545 Reviewed-by: Xiangpo Zhao <zhaoxp3@motorola.com> Reviewed-by: Wei Xu <xuwei9@lenovo.com>
This commit is contained in:
parent
1beb503a64
commit
f6112d2bf5
6 changed files with 492 additions and 213 deletions
|
|
@ -63,7 +63,7 @@
|
|||
#define BAT_OCP_ALARM_SHIFT 1
|
||||
#define BUS_OVP_ALARM_SHIFT 2
|
||||
#define BUS_OCP_ALARM_SHIFT 3
|
||||
#define BAT_THERM_ALARM_SHIFT 4
|
||||
#define BUS_UCP_FAULT_SHIFT 4
|
||||
#define BUS_THERM_ALARM_SHIFT 5
|
||||
#define DIE_THERM_ALARM_SHIFT 6
|
||||
#define BAT_UCP_ALARM_SHIFT 7
|
||||
|
|
@ -72,7 +72,7 @@
|
|||
#define BAT_OCP_ALARM_MASK (1 << BAT_OCP_ALARM_SHIFT)
|
||||
#define BUS_OVP_ALARM_MASK (1 << BUS_OVP_ALARM_SHIFT)
|
||||
#define BUS_OCP_ALARM_MASK (1 << BUS_OCP_ALARM_SHIFT)
|
||||
#define BAT_THERM_ALARM_MASK (1 << BAT_THERM_ALARM_SHIFT)
|
||||
#define BUS_UCP_FAULT_MASK (1 << BUS_UCP_FAULT_SHIFT)
|
||||
#define BUS_THERM_ALARM_MASK (1 << BUS_THERM_ALARM_SHIFT)
|
||||
#define DIE_THERM_ALARM_MASK (1 << DIE_THERM_ALARM_SHIFT)
|
||||
#define BAT_UCP_ALARM_MASK (1 << BAT_UCP_ALARM_SHIFT)
|
||||
|
|
@ -225,8 +225,6 @@ static int bq2597x_update_charger_error_status(struct mmi_charger_device *chrg)
|
|||
!!(prop.intval & BUS_OCP_ALARM_MASK);
|
||||
chrg->charger_error.bat_ucp_alarm =
|
||||
!!(prop.intval & BAT_UCP_ALARM_MASK);
|
||||
chrg->charger_error.bat_therm_alarm =
|
||||
!!(prop.intval & BAT_THERM_ALARM_MASK);
|
||||
chrg->charger_error.bus_therm_alarm =
|
||||
!!(prop.intval & BUS_THERM_ALARM_MASK);
|
||||
chrg->charger_error.die_therm_alarm =
|
||||
|
|
@ -251,11 +249,27 @@ static int bq2597x_update_charger_error_status(struct mmi_charger_device *chrg)
|
|||
!!(prop.intval & SS_TIMEOUT_FAULT_MASK);
|
||||
chrg->charger_error.ts_shut_fault =
|
||||
!!(prop.intval & TS_SHUT_FAULT_MASK);
|
||||
chrg->charger_error.bus_ucp_alarm =
|
||||
!!(prop.intval & BUS_UCP_FAULT_MASK);
|
||||
}
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
static int bq2597x_clear_charger_error(struct mmi_charger_device *chrg)
|
||||
{
|
||||
int rc;
|
||||
union power_supply_propval prop = {0,};
|
||||
|
||||
if (!chrg->chrg_psy)
|
||||
return -ENODEV;
|
||||
|
||||
rc = power_supply_set_property(chrg->chrg_psy,
|
||||
POWER_SUPPLY_PROP_UPDATE_NOW, &prop);
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
struct mmi_charger_ops bq2597x_charger_ops = {
|
||||
.enable = bq2597x_enable_charging,
|
||||
.is_enabled = bq2597x_is_charging_enabled,
|
||||
|
|
@ -263,4 +277,5 @@ struct mmi_charger_ops bq2597x_charger_ops = {
|
|||
.get_input_current = bq2597x_get_input_current,
|
||||
.update_charger_status = bq2597x_update_charger_status,
|
||||
.update_charger_error = bq2597x_update_charger_error_status,
|
||||
.clear_charger_error = bq2597x_clear_charger_error,
|
||||
};
|
||||
|
|
|
|||
|
|
@ -110,6 +110,14 @@ int mmi_update_charger_error(struct mmi_charger_device *chrg)
|
|||
return -ENOTSUPP;
|
||||
}
|
||||
|
||||
int mmi_clear_charger_error(struct mmi_charger_device *chrg)
|
||||
{
|
||||
if(chrg != NULL && chrg->ops != NULL && chrg->ops->clear_charger_error)
|
||||
return chrg->ops->clear_charger_error(chrg);
|
||||
|
||||
return -ENOTSUPP;
|
||||
}
|
||||
|
||||
static void mmi_charger_device_release(struct device *dev)
|
||||
{
|
||||
struct mmi_charger_device *charger_dev = to_mmi_charger_device(dev);
|
||||
|
|
|
|||
|
|
@ -64,6 +64,7 @@ struct mmi_charger_error_info {
|
|||
bool bat_ocp_alarm;
|
||||
bool bus_ovp_alarm;
|
||||
bool bus_ocp_alarm;
|
||||
bool bus_ucp_alarm;
|
||||
bool bat_ucp_alarm;
|
||||
|
||||
bool bat_therm_alarm;
|
||||
|
|
@ -77,6 +78,9 @@ struct mmi_charger_error_info {
|
|||
bool conv_ocp_fault;
|
||||
bool ss_timeout_fault;
|
||||
bool ts_shut_fault;
|
||||
|
||||
int bus_ucp_err_cnt;
|
||||
int bus_ocp_err_cnt;
|
||||
};
|
||||
|
||||
struct mmi_charger_device {
|
||||
|
|
@ -87,6 +91,7 @@ struct mmi_charger_device {
|
|||
struct device dev;
|
||||
struct mmi_charger_info charger_data;
|
||||
struct mmi_charger_error_info charger_error;
|
||||
int *debug_mask;
|
||||
int input_curr_setted; /*save input current*/
|
||||
int charging_curr_limited; /*charger current limitation*/
|
||||
int charging_curr_min; /*The minimum charging current supported by this device*/
|
||||
|
|
@ -104,6 +109,7 @@ struct mmi_charger_ops {
|
|||
int (*set_input_current)(struct mmi_charger_device *chrg, u32 uA);
|
||||
int (*update_charger_status)(struct mmi_charger_device *chrg);
|
||||
int (*update_charger_error)(struct mmi_charger_device *chrg);
|
||||
int (*clear_charger_error)(struct mmi_charger_device *chrg);
|
||||
};
|
||||
|
||||
|
||||
|
|
@ -123,6 +129,7 @@ extern int mmi_get_input_current(struct mmi_charger_device *chrg, u32 *uA);
|
|||
extern int mmi_set_input_current(struct mmi_charger_device *chrg, u32 uA);
|
||||
extern int mmi_update_charger_status(struct mmi_charger_device *chrg);
|
||||
extern int mmi_update_charger_error(struct mmi_charger_device *chrg);
|
||||
extern int mmi_clear_charger_error(struct mmi_charger_device *chrg);
|
||||
extern struct mmi_charger_device *mmi_charger_device_register(const char *name,
|
||||
const char *psy_name,struct device *parent, void *devdata,
|
||||
const struct mmi_charger_ops *ops);
|
||||
|
|
|
|||
|
|
@ -59,7 +59,6 @@ static char *charge_rate[] = {
|
|||
};
|
||||
#define MIN_TEMP_C -20
|
||||
#define MAX_TEMP_C 60
|
||||
//#define MIN_MAX_TEMP_C 47
|
||||
#define HYSTERISIS_DEGC 2
|
||||
bool mmi_find_temp_zone(struct mmi_charger_manager *chip, int temp_c)
|
||||
{
|
||||
|
|
@ -345,6 +344,8 @@ void mmi_dump_charger_error(struct mmi_charger_manager *chip,
|
|||
chrg_dev->name, chrg_dev->charger_error.ss_timeout_fault);
|
||||
mmi_chrg_dbg(chip, PR_MOTO, "%s: ts_shut_fault %d\n",
|
||||
chrg_dev->name, chrg_dev->charger_error.ts_shut_fault);
|
||||
mmi_chrg_dbg(chip, PR_MOTO, "%s: bus_ucp_fault %d\n",
|
||||
chrg_dev->name, chrg_dev->charger_error.bus_ucp_alarm);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -402,7 +403,6 @@ static int batt_get_property(struct power_supply *psy,
|
|||
switch (psp) {
|
||||
case POWER_SUPPLY_PROP_CAPACITY:
|
||||
case POWER_SUPPLY_PROP_CURRENT_NOW:
|
||||
// case POWER_SUPPLY_PROP_VOLTAGE_NOW:
|
||||
case POWER_SUPPLY_PROP_TEMP:
|
||||
rc = power_supply_get_property(chip->extrn_psy,
|
||||
psp, &prop);
|
||||
|
|
@ -420,7 +420,8 @@ static int batt_get_property(struct power_supply *psy,
|
|||
psp, &prop);
|
||||
if (rc < 0) {
|
||||
mmi_chrg_err(chip, "Get Unknown prop %d rc = %d\n", psp, rc);
|
||||
return -EINVAL;
|
||||
rc = 0;
|
||||
val->intval = -EINVAL;
|
||||
} else
|
||||
val->intval = prop.intval;
|
||||
break;
|
||||
|
|
@ -789,6 +790,9 @@ void clear_chg_manager(struct mmi_charger_manager *chip)
|
|||
chip->pd_target_volt = 0;
|
||||
chip->pd_volt_max = pd_volt_max_init;
|
||||
chip->pd_curr_max = pd_curr_max_init;
|
||||
chip->recovery_pmic_chrg = false;
|
||||
chip->thermal_mitigation_doing = false;
|
||||
chip->pd_pps_support = false;
|
||||
|
||||
memset(chip->mmi_pdo_info, 0,
|
||||
sizeof(struct usbpd_pdo_info) * PD_MAX_PDO_NUM);
|
||||
|
|
|
|||
|
|
@ -134,7 +134,7 @@ struct mmi_chrg_dts_info {
|
|||
#define TYPEC_MIDDLE_CURRENT_UA 2000000
|
||||
#define SWITCH_CHARGER_PPS_VOLT 5000000
|
||||
#define PUMP_CHARGER_PPS_MIN_VOLT 8000000
|
||||
|
||||
#define COOLING_HYSTERISIS_DEGC 2
|
||||
struct mmi_charger_manager {
|
||||
const char *name;
|
||||
struct device *dev;
|
||||
|
|
@ -162,6 +162,7 @@ struct mmi_charger_manager {
|
|||
int batt_ovp_lmt; /*the battery over current limitation*/
|
||||
int pl_chrg_vbatt_min; /*the minimum battery voltage to enable parallel charging*/
|
||||
|
||||
int pps_volt_comp;
|
||||
int pd_request_volt;
|
||||
int pd_request_curr;
|
||||
/*the request PD power*/
|
||||
|
|
@ -191,6 +192,7 @@ struct mmi_charger_manager {
|
|||
bool extrn_sense;
|
||||
bool recovery_pmic_chrg;
|
||||
bool thermal_mitigation_doing;
|
||||
bool thermal_cooling;
|
||||
|
||||
struct delayed_work mmi_chrg_sm_work; /*mmi charger state machine work*/
|
||||
struct delayed_work heartbeat_work; /*cycle trig heartbeat work*/
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue