summaryrefslogtreecommitdiff
path: root/drivers/usb/dwc3/dwc3-msm.c
diff options
context:
space:
mode:
authordianlujitao <dianlujitao@lineageos.org>2020-02-07 15:45:41 +0800
committerMichael Bestas <mkbestas@lineageos.org>2020-05-01 18:21:39 +0300
commit278243e54cb978b1cbb36fdbc6dec1e2bcec4a2f (patch)
treeedeb67264c590c55e650a1fd5b36bb75121c45e5 /drivers/usb/dwc3/dwc3-msm.c
parent4251235731fc7c9c933c0329486293bbf529c0cd (diff)
usb: Import Xiaomi MI changes
Change-Id: I61dbdc8087489bbcc388f15cb935309a68695cd5
Diffstat (limited to 'drivers/usb/dwc3/dwc3-msm.c')
-rw-r--r--drivers/usb/dwc3/dwc3-msm.c25
1 files changed, 22 insertions, 3 deletions
diff --git a/drivers/usb/dwc3/dwc3-msm.c b/drivers/usb/dwc3/dwc3-msm.c
index 569697e89365..6f21cf858fdf 100644
--- a/drivers/usb/dwc3/dwc3-msm.c
+++ b/drivers/usb/dwc3/dwc3-msm.c
@@ -1,4 +1,5 @@
/* Copyright (c) 2012-2019, The Linux Foundation. All rights reserved.
+ * Copyright (C) 2019 XiaoMi, Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and
@@ -55,7 +56,7 @@
#include "debug.h"
#include "xhci.h"
-#ifdef CONFIG_MACH_LONGCHEER
+#ifdef CONFIG_MACH_XIAOMI_SDM660
#define SDP_CONNETION_CHECK_TIME 5000 /* in ms */
#else
#define SDP_CONNETION_CHECK_TIME 10000 /* in ms */
@@ -2738,7 +2739,7 @@ static void check_for_sdp_connection(struct work_struct *w)
struct dwc3_msm *mdwc =
container_of(w, struct dwc3_msm, sdp_check.work);
struct dwc3 *dwc = platform_get_drvdata(mdwc->dwc3);
-#ifdef CONFIG_MACH_LONGCHEER
+#ifdef CONFIG_MACH_XIAOMI_SDM660
union power_supply_propval pval = {0};
int ret;
#endif
@@ -2757,7 +2758,7 @@ static void check_for_sdp_connection(struct work_struct *w)
if (dwc->gadget.state < USB_STATE_DEFAULT &&
dwc3_gadget_get_link_state(dwc) != DWC3_LINK_STATE_CMPLY) {
mdwc->vbus_active = 0;
-#ifdef CONFIG_MACH_LONGCHEER
+#ifdef CONFIG_MACH_XIAOMI_SDM660
if (!mdwc->usb_psy)
mdwc->usb_psy = power_supply_get_by_name("usb");
if (mdwc->usb_psy) {
@@ -3897,22 +3898,40 @@ int get_psy_type(struct dwc3_msm *mdwc)
return pval.intval;
}
+#ifdef CONFIG_MACH_MI
+#define ENUMERATE_MA 500
+#endif
static int dwc3_msm_gadget_vbus_draw(struct dwc3_msm *mdwc, unsigned mA)
{
union power_supply_propval pval = {0};
int ret, psy_type;
psy_type = get_psy_type(mdwc);
+#ifdef CONFIG_MACH_MI
+ if ((psy_type == POWER_SUPPLY_TYPE_USB_FLOAT && mA != ENUMERATE_MA)
+#else
if (psy_type == POWER_SUPPLY_TYPE_USB_FLOAT
+#endif
|| (mdwc->check_for_float && mdwc->float_detected)) {
+#ifdef CONFIG_MACH_MI
+ pval.intval = -ETIMEDOUT;
+#else
if (!mA)
pval.intval = -ETIMEDOUT;
else
pval.intval = 1000 * mA;
+#endif
goto set_prop;
}
+#ifdef CONFIG_MACH_MI
+ if (mdwc->max_power == mA
+ || (psy_type == POWER_SUPPLY_TYPE_USB_CDP)
+ || ((psy_type != POWER_SUPPLY_TYPE_USB)
+ && (mA != ENUMERATE_MA)))
+#else
if (mdwc->max_power == mA || psy_type != POWER_SUPPLY_TYPE_USB)
+#endif
return 0;
dev_info(mdwc->dev, "Avail curr from USB = %u\n", mA);