OSDN Git Service

smb-lib: add support of DP/DM pulsing for fix 5V, 9V and 12V
authorUmang Agrawal <uagrawal@codeaurora.org>
Tue, 8 May 2018 11:42:30 +0000 (17:12 +0530)
committerUmang Agrawal <uagrawal@codeaurora.org>
Tue, 8 May 2018 11:45:50 +0000 (17:15 +0530)
This change will enable userspace to control adapter's output
voltage. Userspace can force adapter's output voltage to
5V/9V/12V.

Change-Id: I4a60a681c136df6864294dbd19849503a2be2e7b
Signed-off-by: Umang Agrawal <uagrawal@codeaurora.org>
drivers/power/supply/qcom/smb-lib.c
include/linux/power_supply.h

index 6d3316b..56a42e2 100644 (file)
@@ -2012,6 +2012,18 @@ static int smblib_dm_pulse(struct smb_charger *chg)
        return rc;
 }
 
+static int smblib_force_vbus_voltage(struct smb_charger *chg, u8 val)
+{
+       int rc;
+
+       rc = smblib_masked_write(chg, CMD_HVDCP_2_REG, val, val);
+       if (rc < 0)
+               smblib_err(chg, "Couldn't write to CMD_HVDCP_2_REG rc=%d\n",
+                               rc);
+
+       return rc;
+}
+
 int smblib_dp_dm(struct smb_charger *chg, int val)
 {
        int target_icl_ua, rc = 0;
@@ -2063,6 +2075,21 @@ int smblib_dp_dm(struct smb_charger *chg, int val)
                smblib_dbg(chg, PR_PARALLEL, "ICL DOWN ICL=%d reduction=%d\n",
                                target_icl_ua, chg->usb_icl_delta_ua);
                break;
+       case POWER_SUPPLY_DP_DM_FORCE_5V:
+               rc = smblib_force_vbus_voltage(chg, FORCE_5V_BIT);
+               if (rc < 0)
+                       pr_err("Failed to force 5V\n");
+               break;
+       case POWER_SUPPLY_DP_DM_FORCE_9V:
+               rc = smblib_force_vbus_voltage(chg, FORCE_9V_BIT);
+               if (rc < 0)
+                       pr_err("Failed to force 9V\n");
+               break;
+       case POWER_SUPPLY_DP_DM_FORCE_12V:
+               rc = smblib_force_vbus_voltage(chg, FORCE_12V_BIT);
+               if (rc < 0)
+                       pr_err("Failed to force 12V\n");
+               break;
        case POWER_SUPPLY_DP_DM_ICL_UP:
        default:
                break;
index 8b8a46c..64d0797 100644 (file)
@@ -103,6 +103,9 @@ enum {
        POWER_SUPPLY_DP_DM_HVDCP3_SUPPORTED = 10,
        POWER_SUPPLY_DP_DM_ICL_DOWN = 11,
        POWER_SUPPLY_DP_DM_ICL_UP = 12,
+       POWER_SUPPLY_DP_DM_FORCE_5V = 13,
+       POWER_SUPPLY_DP_DM_FORCE_9V = 14,
+       POWER_SUPPLY_DP_DM_FORCE_12V = 15,
 };
 
 enum {