power: qpnp-smbcharger: return UNKNOWN in case of no charger present
POWER_SUPPLY_TYPE_USB_DCP type is returned in read_usb_type() if no charger is connected, which might cause APSD to unnecessarily rerun. To fix it, POWER_SUPPLY_TYPE_UNKNOWN should be returned instead. A bug is also fixed by returning right after IDEV_STS register read error in this function . CRs-fixed: 963745 Change-Id: Ia399e05fe8d0ad13c2f1f272c6737e8798177174 Signed-off-by: Harry Yang <harryy@codeaurora.org>
This commit is contained in:
parent
c35b73cf03
commit
fe96617b87
1 changed files with 21 additions and 13 deletions
|
@ -845,17 +845,38 @@ static inline enum power_supply_type get_usb_supply_type(int type)
|
|||
return usb_type_enum[type];
|
||||
}
|
||||
|
||||
static bool is_src_detect_high(struct smbchg_chip *chip)
|
||||
{
|
||||
int rc;
|
||||
u8 reg;
|
||||
|
||||
rc = smbchg_read(chip, ®, chip->usb_chgpth_base + RT_STS, 1);
|
||||
if (rc < 0) {
|
||||
dev_err(chip->dev, "Couldn't read usb rt status rc = %d\n", rc);
|
||||
return false;
|
||||
}
|
||||
return reg &= USBIN_SRC_DET_BIT;
|
||||
}
|
||||
|
||||
static void read_usb_type(struct smbchg_chip *chip, char **usb_type_name,
|
||||
enum power_supply_type *usb_supply_type)
|
||||
{
|
||||
int rc, type;
|
||||
u8 reg;
|
||||
|
||||
if (!is_src_detect_high(chip)) {
|
||||
pr_smb(PR_MISC, "src det low\n");
|
||||
*usb_type_name = "Absent";
|
||||
*usb_supply_type = POWER_SUPPLY_TYPE_UNKNOWN;
|
||||
return;
|
||||
}
|
||||
|
||||
rc = smbchg_read(chip, ®, chip->misc_base + IDEV_STS, 1);
|
||||
if (rc < 0) {
|
||||
dev_err(chip->dev, "Couldn't read status 5 rc = %d\n", rc);
|
||||
*usb_type_name = "Other";
|
||||
*usb_supply_type = POWER_SUPPLY_TYPE_UNKNOWN;
|
||||
return;
|
||||
}
|
||||
type = get_type(reg);
|
||||
*usb_type_name = get_usb_type_name(type);
|
||||
|
@ -4552,19 +4573,6 @@ static void handle_usb_removal(struct smbchg_chip *chip)
|
|||
restore_from_hvdcp_detection(chip);
|
||||
}
|
||||
|
||||
static bool is_src_detect_high(struct smbchg_chip *chip)
|
||||
{
|
||||
int rc;
|
||||
u8 reg;
|
||||
|
||||
rc = smbchg_read(chip, ®, chip->usb_chgpth_base + RT_STS, 1);
|
||||
if (rc < 0) {
|
||||
dev_err(chip->dev, "Couldn't read usb rt status rc = %d\n", rc);
|
||||
return false;
|
||||
}
|
||||
return reg &= USBIN_SRC_DET_BIT;
|
||||
}
|
||||
|
||||
static bool is_usbin_uv_high(struct smbchg_chip *chip)
|
||||
{
|
||||
int rc;
|
||||
|
|
Loading…
Add table
Reference in a new issue