summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/power/supply/qcom/qpnp-smbcharger.c45
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");