OSDN Git Service

USB: pd: Send PS_RDY within tNewSrc after PS_RDY received
authorVijayavardhan Vennapusa <vvreddy@codeaurora.org>
Tue, 3 Jul 2018 10:17:18 +0000 (15:47 +0530)
committerGerrit - the friendly Code Review server <code-review@localhost>
Fri, 27 Jul 2018 07:12:43 +0000 (00:12 -0700)
USBPD spec mentions max time within which device that transitions
from sink power role to source needs to send PS_RDY message after
PS_RDY received from other device as part of PR_SWAP. Currently
USB PD driver is taking time around 380msec i.e greater than tNewSrc
(275msec) and resulting in USB PD complaince test "2.2.3.1.2
Procedure/Checks for Tester (Source) Originated Swap" failure. Fix it
by waiting only till VBUS voltage reaches VSafe5Vmin.

Change-Id: I3138e6d31ba964507230fe5f914aaaf2e261647d
Signed-off-by: Vijayavardhan Vennapusa <vvreddy@codeaurora.org>
drivers/usb/pd/policy_engine.c

index aef8de0..d9508db 100644 (file)
@@ -1826,6 +1826,22 @@ enable_reg:
        else
                pd->vbus_enabled = true;
 
+       count = 10;
+       /*
+        * Check to make sure VBUS voltage reaches above Vsafe5Vmin (4.75v)
+        * before proceeding.
+        */
+       while (count--) {
+               ret = power_supply_get_property(pd->usb_psy,
+                               POWER_SUPPLY_PROP_VOLTAGE_NOW, &val);
+               if (ret || val.intval >= 4750000) /*vsafe5Vmin*/
+                       break;
+               usleep_range(10000, 12000); /* Delay between two reads */
+       }
+
+       if (ret)
+               msleep(100); /* Delay to wait for VBUS ramp up if read fails */
+
        return ret;
 }
 
@@ -2747,7 +2763,6 @@ static void usbpd_sm(struct work_struct *w)
 
        case PE_PRS_SNK_SRC_SOURCE_ON:
                enable_vbus(pd);
-               msleep(200); /* allow time VBUS ramp-up, must be < tNewSrc */
 
                ret = pd_send_msg(pd, MSG_PS_RDY, NULL, 0, SOP_MSG);
                if (ret) {