Loading drivers/power/supply/qcom/smb5-lib.c +51 −1 Original line number Diff line number Diff line Loading @@ -3507,7 +3507,7 @@ int smblib_get_prop_die_health(struct smb_charger *chg) return POWER_SUPPLY_HEALTH_COOL; } int smblib_get_prop_connector_health(struct smb_charger *chg) static int smblib_get_typec_connector_temp_status(struct smb_charger *chg) { int rc; u8 stat; Loading Loading @@ -3547,6 +3547,56 @@ int smblib_get_prop_connector_health(struct smb_charger *chg) return POWER_SUPPLY_HEALTH_COOL; } static int smblib_get_skin_temp_status(struct smb_charger *chg) { int rc; u8 stat; rc = smblib_read(chg, SKIN_TEMP_STATUS_REG, &stat); if (rc < 0) { smblib_err(chg, "Couldn't read SKIN_TEMP_STATUS_REG, rc=%d\n", rc); return POWER_SUPPLY_HEALTH_UNKNOWN; } if (stat & SKIN_TEMP_RST_BIT) return POWER_SUPPLY_HEALTH_OVERHEAT; if (stat & SKIN_TEMP_UB_BIT) return POWER_SUPPLY_HEALTH_HOT; if (stat & SKIN_TEMP_LB_BIT) return POWER_SUPPLY_HEALTH_WARM; return POWER_SUPPLY_HEALTH_COOL; } int smblib_get_prop_connector_health(struct smb_charger *chg) { bool dc_present, usb_present; int input_present; int rc; rc = smblib_is_input_present(chg, &input_present); if (rc < 0) return POWER_SUPPLY_HEALTH_UNKNOWN; dc_present = input_present & INPUT_PRESENT_DC; usb_present = input_present & INPUT_PRESENT_USB; if (usb_present) return smblib_get_typec_connector_temp_status(chg); /* * In PM8150B, SKIN channel measures Wireless charger receiver * temp, used to regulate DC ICL. */ if (chg->smb_version == PM8150B_SUBTYPE && dc_present) return smblib_get_skin_temp_status(chg); return POWER_SUPPLY_HEALTH_COOL; } static int get_rp_based_dcp_current(struct smb_charger *chg, int typec_mode) { int rp_ua; Loading drivers/power/supply/qcom/smb5-reg.h +6 −0 Original line number Diff line number Diff line Loading @@ -464,6 +464,12 @@ enum { #define DIE_TEMP_UB_BIT BIT(1) #define DIE_TEMP_LB_BIT BIT(0) #define SKIN_TEMP_STATUS_REG (MISC_BASE + 0x08) #define SKIN_TEMP_SHDN_BIT BIT(3) #define SKIN_TEMP_RST_BIT BIT(2) #define SKIN_TEMP_UB_BIT BIT(1) #define SKIN_TEMP_LB_BIT BIT(0) #define CONNECTOR_TEMP_STATUS_REG (MISC_BASE + 0x09) #define CONNECTOR_TEMP_SHDN_BIT BIT(3) #define CONNECTOR_TEMP_RST_BIT BIT(2) Loading Loading
drivers/power/supply/qcom/smb5-lib.c +51 −1 Original line number Diff line number Diff line Loading @@ -3507,7 +3507,7 @@ int smblib_get_prop_die_health(struct smb_charger *chg) return POWER_SUPPLY_HEALTH_COOL; } int smblib_get_prop_connector_health(struct smb_charger *chg) static int smblib_get_typec_connector_temp_status(struct smb_charger *chg) { int rc; u8 stat; Loading Loading @@ -3547,6 +3547,56 @@ int smblib_get_prop_connector_health(struct smb_charger *chg) return POWER_SUPPLY_HEALTH_COOL; } static int smblib_get_skin_temp_status(struct smb_charger *chg) { int rc; u8 stat; rc = smblib_read(chg, SKIN_TEMP_STATUS_REG, &stat); if (rc < 0) { smblib_err(chg, "Couldn't read SKIN_TEMP_STATUS_REG, rc=%d\n", rc); return POWER_SUPPLY_HEALTH_UNKNOWN; } if (stat & SKIN_TEMP_RST_BIT) return POWER_SUPPLY_HEALTH_OVERHEAT; if (stat & SKIN_TEMP_UB_BIT) return POWER_SUPPLY_HEALTH_HOT; if (stat & SKIN_TEMP_LB_BIT) return POWER_SUPPLY_HEALTH_WARM; return POWER_SUPPLY_HEALTH_COOL; } int smblib_get_prop_connector_health(struct smb_charger *chg) { bool dc_present, usb_present; int input_present; int rc; rc = smblib_is_input_present(chg, &input_present); if (rc < 0) return POWER_SUPPLY_HEALTH_UNKNOWN; dc_present = input_present & INPUT_PRESENT_DC; usb_present = input_present & INPUT_PRESENT_USB; if (usb_present) return smblib_get_typec_connector_temp_status(chg); /* * In PM8150B, SKIN channel measures Wireless charger receiver * temp, used to regulate DC ICL. */ if (chg->smb_version == PM8150B_SUBTYPE && dc_present) return smblib_get_skin_temp_status(chg); return POWER_SUPPLY_HEALTH_COOL; } static int get_rp_based_dcp_current(struct smb_charger *chg, int typec_mode) { int rp_ua; Loading
drivers/power/supply/qcom/smb5-reg.h +6 −0 Original line number Diff line number Diff line Loading @@ -464,6 +464,12 @@ enum { #define DIE_TEMP_UB_BIT BIT(1) #define DIE_TEMP_LB_BIT BIT(0) #define SKIN_TEMP_STATUS_REG (MISC_BASE + 0x08) #define SKIN_TEMP_SHDN_BIT BIT(3) #define SKIN_TEMP_RST_BIT BIT(2) #define SKIN_TEMP_UB_BIT BIT(1) #define SKIN_TEMP_LB_BIT BIT(0) #define CONNECTOR_TEMP_STATUS_REG (MISC_BASE + 0x09) #define CONNECTOR_TEMP_SHDN_BIT BIT(3) #define CONNECTOR_TEMP_RST_BIT BIT(2) Loading