Loading drivers/power/qpnp-smbcharger.c +65 −49 Original line number Diff line number Diff line Loading @@ -5387,49 +5387,63 @@ out: #define APSD_RERUN BIT(0) static int rerun_apsd(struct smbchg_chip *chip) { int rc; int rc = 0; chip->hvdcp_3_det_ignore_uv = true; if (chip->schg_version == QPNP_SCHG_LITE) { pr_smb(PR_STATUS, "Re-running APSD\n"); reinit_completion(&chip->src_det_raised); reinit_completion(&chip->usbin_uv_lowered); reinit_completion(&chip->src_det_lowered); reinit_completion(&chip->usbin_uv_raised); /* re-run APSD */ rc = smbchg_masked_write(chip, chip->usb_chgpth_base + USB_CMD_APSD, rc = smbchg_masked_write(chip, chip->usb_chgpth_base + USB_CMD_APSD, APSD_RERUN, APSD_RERUN); if (rc) { pr_err("Couldn't re-run APSD rc=%d\n", rc); return rc; goto out; } pr_smb(PR_MISC, "Waiting on rising usbin uv\n"); rc = wait_for_usbin_uv(chip, true); if (rc < 0) { pr_err("wait for usbin uv failed rc = %d\n", rc); return rc; goto out; } pr_smb(PR_MISC, "Waiting on falling src det\n"); rc = wait_for_src_detect(chip, false); if (rc < 0) { pr_err("wait for src detect failed rc = %d\n", rc); return rc; goto out; } pr_smb(PR_MISC, "Waiting on falling usbin uv\n"); rc = wait_for_usbin_uv(chip, false); if (rc < 0) { pr_err("wait for usbin uv failed rc = %d\n", rc); return rc; goto out; } pr_smb(PR_MISC, "Waiting on rising src det\n"); rc = wait_for_src_detect(chip, true); if (rc < 0) { pr_err("wait for src detect failed rc = %d\n", rc); return rc; goto out; } } else { pr_smb(PR_STATUS, "Faking Removal\n"); rc = fake_insertion_removal(chip, false); msleep(500); pr_smb(PR_STATUS, "Faking Insertion\n"); rc = fake_insertion_removal(chip, true); } out: chip->hvdcp_3_det_ignore_uv = false; return rc; } Loading Loading @@ -5506,8 +5520,6 @@ static int smbchg_prepare_for_pulsing_lite(struct smbchg_chip *chip) smbchg_sec_masked_write(chip, chip->usb_chgpth_base + USB_AICL_CFG, AICL_EN_BIT, 0); chip->hvdcp_3_det_ignore_uv = true; /* re-run APSD */ rc = rerun_apsd(chip); if (rc) { Loading @@ -5515,8 +5527,6 @@ static int smbchg_prepare_for_pulsing_lite(struct smbchg_chip *chip) goto out; } chip->hvdcp_3_det_ignore_uv = false; pr_smb(PR_MISC, "Enable AICL\n"); smbchg_sec_masked_write(chip, chip->usb_chgpth_base + USB_AICL_CFG, AICL_EN_BIT, AICL_EN_BIT); Loading Loading @@ -7977,20 +7987,18 @@ static void rerun_hvdcp_det_if_necessary(struct smbchg_chip *chip) pr_err("Couldn't vote for 300mA for suspend wa, going ahead rc=%d\n", rc); pr_smb(PR_STATUS, "Faking Removal\n"); fake_insertion_removal(chip, false); msleep(500); pr_smb(PR_STATUS, "Faking Insertion\n"); fake_insertion_removal(chip, true); rc = rerun_apsd(chip); if (rc) pr_err("APSD rerun failed rc=%d\n", rc); read_usb_type(chip, &usb_type_name, &usb_supply_type); if (usb_supply_type != POWER_SUPPLY_TYPE_USB_DCP) { msleep(500); pr_smb(PR_STATUS, "Fake Removal again as type!=DCP\n"); fake_insertion_removal(chip, false); msleep(500); pr_smb(PR_STATUS, "Fake Insert again as type!=DCP\n"); fake_insertion_removal(chip, true); pr_smb(PR_STATUS, "Rerun APSD as type !=DCP\n"); rc = rerun_apsd(chip); if (rc) pr_err("APSD rerun failed rc=%d\n", rc); } rc = vote(chip->usb_icl_votable, Loading @@ -7998,6 +8006,14 @@ static void rerun_hvdcp_det_if_necessary(struct smbchg_chip *chip) if (rc < 0) pr_err("Couldn't vote for 0 for suspend wa, going ahead rc=%d\n", rc); /* Schedule work for HVDCP detection */ if (!chip->hvdcp_not_supported) { cancel_delayed_work_sync(&chip->hvdcp_det_work); smbchg_stay_awake(chip, PM_DETECT_HVDCP); schedule_delayed_work(&chip->hvdcp_det_work, msecs_to_jiffies(HVDCP_NOTIFY_MS)); } } } Loading Loading
drivers/power/qpnp-smbcharger.c +65 −49 Original line number Diff line number Diff line Loading @@ -5387,49 +5387,63 @@ out: #define APSD_RERUN BIT(0) static int rerun_apsd(struct smbchg_chip *chip) { int rc; int rc = 0; chip->hvdcp_3_det_ignore_uv = true; if (chip->schg_version == QPNP_SCHG_LITE) { pr_smb(PR_STATUS, "Re-running APSD\n"); reinit_completion(&chip->src_det_raised); reinit_completion(&chip->usbin_uv_lowered); reinit_completion(&chip->src_det_lowered); reinit_completion(&chip->usbin_uv_raised); /* re-run APSD */ rc = smbchg_masked_write(chip, chip->usb_chgpth_base + USB_CMD_APSD, rc = smbchg_masked_write(chip, chip->usb_chgpth_base + USB_CMD_APSD, APSD_RERUN, APSD_RERUN); if (rc) { pr_err("Couldn't re-run APSD rc=%d\n", rc); return rc; goto out; } pr_smb(PR_MISC, "Waiting on rising usbin uv\n"); rc = wait_for_usbin_uv(chip, true); if (rc < 0) { pr_err("wait for usbin uv failed rc = %d\n", rc); return rc; goto out; } pr_smb(PR_MISC, "Waiting on falling src det\n"); rc = wait_for_src_detect(chip, false); if (rc < 0) { pr_err("wait for src detect failed rc = %d\n", rc); return rc; goto out; } pr_smb(PR_MISC, "Waiting on falling usbin uv\n"); rc = wait_for_usbin_uv(chip, false); if (rc < 0) { pr_err("wait for usbin uv failed rc = %d\n", rc); return rc; goto out; } pr_smb(PR_MISC, "Waiting on rising src det\n"); rc = wait_for_src_detect(chip, true); if (rc < 0) { pr_err("wait for src detect failed rc = %d\n", rc); return rc; goto out; } } else { pr_smb(PR_STATUS, "Faking Removal\n"); rc = fake_insertion_removal(chip, false); msleep(500); pr_smb(PR_STATUS, "Faking Insertion\n"); rc = fake_insertion_removal(chip, true); } out: chip->hvdcp_3_det_ignore_uv = false; return rc; } Loading Loading @@ -5506,8 +5520,6 @@ static int smbchg_prepare_for_pulsing_lite(struct smbchg_chip *chip) smbchg_sec_masked_write(chip, chip->usb_chgpth_base + USB_AICL_CFG, AICL_EN_BIT, 0); chip->hvdcp_3_det_ignore_uv = true; /* re-run APSD */ rc = rerun_apsd(chip); if (rc) { Loading @@ -5515,8 +5527,6 @@ static int smbchg_prepare_for_pulsing_lite(struct smbchg_chip *chip) goto out; } chip->hvdcp_3_det_ignore_uv = false; pr_smb(PR_MISC, "Enable AICL\n"); smbchg_sec_masked_write(chip, chip->usb_chgpth_base + USB_AICL_CFG, AICL_EN_BIT, AICL_EN_BIT); Loading Loading @@ -7977,20 +7987,18 @@ static void rerun_hvdcp_det_if_necessary(struct smbchg_chip *chip) pr_err("Couldn't vote for 300mA for suspend wa, going ahead rc=%d\n", rc); pr_smb(PR_STATUS, "Faking Removal\n"); fake_insertion_removal(chip, false); msleep(500); pr_smb(PR_STATUS, "Faking Insertion\n"); fake_insertion_removal(chip, true); rc = rerun_apsd(chip); if (rc) pr_err("APSD rerun failed rc=%d\n", rc); read_usb_type(chip, &usb_type_name, &usb_supply_type); if (usb_supply_type != POWER_SUPPLY_TYPE_USB_DCP) { msleep(500); pr_smb(PR_STATUS, "Fake Removal again as type!=DCP\n"); fake_insertion_removal(chip, false); msleep(500); pr_smb(PR_STATUS, "Fake Insert again as type!=DCP\n"); fake_insertion_removal(chip, true); pr_smb(PR_STATUS, "Rerun APSD as type !=DCP\n"); rc = rerun_apsd(chip); if (rc) pr_err("APSD rerun failed rc=%d\n", rc); } rc = vote(chip->usb_icl_votable, Loading @@ -7998,6 +8006,14 @@ static void rerun_hvdcp_det_if_necessary(struct smbchg_chip *chip) if (rc < 0) pr_err("Couldn't vote for 0 for suspend wa, going ahead rc=%d\n", rc); /* Schedule work for HVDCP detection */ if (!chip->hvdcp_not_supported) { cancel_delayed_work_sync(&chip->hvdcp_det_work); smbchg_stay_awake(chip, PM_DETECT_HVDCP); schedule_delayed_work(&chip->hvdcp_det_work, msecs_to_jiffies(HVDCP_NOTIFY_MS)); } } } Loading