diff options
| -rw-r--r-- | drivers/power/supply/qcom/qpnp-smbcharger.c | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/drivers/power/supply/qcom/qpnp-smbcharger.c b/drivers/power/supply/qcom/qpnp-smbcharger.c index ecdd80b70977..e61a9c96d681 100644 --- a/drivers/power/supply/qcom/qpnp-smbcharger.c +++ b/drivers/power/supply/qcom/qpnp-smbcharger.c @@ -47,6 +47,10 @@ #define SUPPORT_CCLOGIC_EVENT_TYPE +#ifdef CONFIG_MACH_ZUK_Z2_PLUS +#define SUPPORT_ONLY_5V_CHARGER +#endif + /* Mask/Bit helpers */ #define _SMB_MASK(BITS, POS) \ ((unsigned char)(((1 << (BITS)) - 1) << (POS))) @@ -3884,6 +3888,7 @@ struct regulator_ops smbchg_otg_reg_ops = { #define USBIN_ADAPTER_9V 0x3 #define USBIN_ADAPTER_5V_9V_CONT 0x2 #define USBIN_ADAPTER_5V_UNREGULATED_9V 0x5 +#define USBIN_ADAPTER_5V 0x0 static int smbchg_external_otg_regulator_enable(struct regulator_dev *rdev) { int rc = 0; @@ -3913,9 +3918,15 @@ static int smbchg_external_otg_regulator_enable(struct regulator_dev *rdev) return rc; } +#ifdef SUPPORT_ONLY_5V_CHARGER + rc = smbchg_sec_masked_write(chip, + chip->usb_chgpth_base + USBIN_CHGR_CFG, + 0xFF, USBIN_ADAPTER_5V); +#else rc = smbchg_sec_masked_write(chip, chip->usb_chgpth_base + USBIN_CHGR_CFG, 0xFF, USBIN_ADAPTER_9V); +#endif if (rc < 0) { dev_err(chip->dev, "Couldn't write usb allowance rc=%d\n", rc); return rc; @@ -4678,10 +4689,19 @@ static void restore_from_hvdcp_detection(struct smbchg_chip *chip) if (rc < 0) pr_err("Couldn't configure HVDCP 9V rc=%d\n", rc); +#ifdef SUPPORT_ONLY_5V_CHARGER + /* disable HVDCP */ + rc = smbchg_sec_masked_write(chip, + chip->usb_chgpth_base + CHGPTH_CFG, + HVDCP_EN_BIT, 0); + if (rc < 0) + pr_err("Couldn't disable HVDCP rc=%d\n", rc); +#else /* enable HVDCP */ rc = vote(chip->hvdcp_enable_votable, HVDCP_PULSING_VOTER, false, 1); if (rc < 0) pr_err("Couldn't enable HVDCP rc=%d\n", rc); +#endif /* enable APSD */ rc = smbchg_sec_masked_write(chip, @@ -4691,9 +4711,15 @@ static void restore_from_hvdcp_detection(struct smbchg_chip *chip) pr_err("Couldn't enable APSD rc=%d\n", rc); /* Reset back to 5V unregulated */ +#ifdef SUPPORT_ONLY_5V_CHARGER + rc = smbchg_sec_masked_write(chip, + chip->usb_chgpth_base + USBIN_CHGR_CFG, + ADAPTER_ALLOWANCE_MASK, USBIN_ADAPTER_5V); +#else rc = smbchg_sec_masked_write(chip, chip->usb_chgpth_base + USBIN_CHGR_CFG, ADAPTER_ALLOWANCE_MASK, USBIN_ADAPTER_5V_UNREGULATED_9V); +#endif if (rc < 0) pr_err("Couldn't write usb allowance rc=%d\n", rc); @@ -5144,11 +5170,18 @@ static int fake_insertion_removal(struct smbchg_chip *chip, bool insertion) pr_smb(PR_MISC, "Allow only %s charger\n", insertion ? "5-9V" : "9V only"); +#ifdef SUPPORT_ONLY_5V_CHARGER + rc = smbchg_sec_masked_write(chip, + chip->usb_chgpth_base + USBIN_CHGR_CFG, + ADAPTER_ALLOWANCE_MASK, + USBIN_ADAPTER_5V); +#else rc = smbchg_sec_masked_write(chip, chip->usb_chgpth_base + USBIN_CHGR_CFG, ADAPTER_ALLOWANCE_MASK, insertion ? USBIN_ADAPTER_5V_9V_CONT : USBIN_ADAPTER_9V); +#endif if (rc < 0) { pr_err("Couldn't write usb allowance rc=%d\n", rc); return rc; @@ -5330,6 +5363,17 @@ static int smbchg_unprepare_for_pulsing(struct smbchg_chip *chip) return rc; } +#ifdef SUPPORT_ONLY_5V_CHARGER + /* disable HVDCP */ + pr_smb(PR_MISC, "Disable HVDCP\n"); + rc = smbchg_sec_masked_write(chip, + chip->usb_chgpth_base + CHGPTH_CFG, + HVDCP_EN_BIT, 0); + if (rc < 0) { + pr_err("Couldn't disable HVDCP rc=%d\n", rc); + return rc; + } +#else /* enable HVDCP */ pr_smb(PR_MISC, "Enable HVDCP\n"); rc = vote(chip->hvdcp_enable_votable, HVDCP_PULSING_VOTER, false, 1); @@ -5337,6 +5381,7 @@ static int smbchg_unprepare_for_pulsing(struct smbchg_chip *chip) pr_err("Couldn't enable HVDCP rc=%d\n", rc); return rc; } +#endif /* enable APSD */ pr_smb(PR_MISC, "Enabling APSD\n"); |
