diff options
| author | Linux Build Service Account <lnxbuild@quicinc.com> | 2017-06-09 02:45:17 -0700 |
|---|---|---|
| committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2017-06-09 02:45:16 -0700 |
| commit | 8bb96fd0d34f48d151f4119ed044d25cd4d6effa (patch) | |
| tree | a2a8566326319abbc27c12d77b40cbb5194eeff5 /drivers | |
| parent | c42ce0551259c180fe45f757a97be47649a56620 (diff) | |
| parent | a64cc72e05e306c3b97559a00fb5cc8ab94c62a2 (diff) | |
Merge "PD: policy_engine: Add timeout for mode change through sysfs"
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/usb/pd/policy_engine.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/drivers/usb/pd/policy_engine.c b/drivers/usb/pd/policy_engine.c index 7a250c31f44d..0272800269eb 100644 --- a/drivers/usb/pd/policy_engine.c +++ b/drivers/usb/pd/policy_engine.c @@ -2552,6 +2552,7 @@ static int usbpd_dr_set_property(struct dual_role_phy_instance *dual_role, { struct usbpd *pd = dual_role_get_drvdata(dual_role); bool do_swap = false; + int wait_count = 5; if (!pd) return -ENODEV; @@ -2578,9 +2579,15 @@ static int usbpd_dr_set_property(struct dual_role_phy_instance *dual_role, set_power_role(pd, PR_NONE); /* wait until it takes effect */ - while (pd->forced_pr != POWER_SUPPLY_TYPEC_PR_NONE) + while (pd->forced_pr != POWER_SUPPLY_TYPEC_PR_NONE && + --wait_count) msleep(20); + if (!wait_count) { + usbpd_err(&pd->dev, "setting mode timed out\n"); + return -ETIMEDOUT; + } + break; case DUAL_ROLE_PROP_DR: |
