diff --git a/msm/dp/dp_altmode.c b/msm/dp/dp_altmode.c index 98d3a1e98e..b6df1b5e76 100644 --- a/msm/dp/dp_altmode.c +++ b/msm/dp/dp_altmode.c @@ -28,6 +28,7 @@ struct dp_altmode_private { struct dp_altmode dp_altmode; struct altmode_client *amclient; bool connected; + u32 lanes; }; enum dp_altmode_pin_assignment { @@ -47,7 +48,6 @@ static int dp_altmode_set_usb_dp_mode(struct dp_altmode_private *altmode) struct device_node *usb_node; struct platform_device *usb_pdev; int timeout = 250; - u32 lanes = 4; if (!altmode || !altmode->dev) { DP_ERR("invalid args\n"); @@ -56,9 +56,6 @@ static int dp_altmode_set_usb_dp_mode(struct dp_altmode_private *altmode) np = altmode->dev->of_node; - if (altmode->connected && altmode->dp_altmode.base.force_multi_func) - lanes = 2; - usb_node = of_parse_phandle(np, "usb-controller", 0); if (!usb_node) { DP_ERR("unable to get usb node\n"); @@ -73,7 +70,7 @@ static int dp_altmode_set_usb_dp_mode(struct dp_altmode_private *altmode) } while (timeout) { - rc = dwc3_msm_set_dp_mode(&usb_pdev->dev, altmode->connected, lanes); + rc = dwc3_msm_set_dp_mode(&usb_pdev->dev, altmode->connected, altmode->lanes); if (rc != -EBUSY) break; @@ -167,6 +164,12 @@ static int dp_altmode_notify(void *priv, void *data, size_t len) altmode->connected = true; altmode->dp_altmode.base.alt_mode_cfg_done = true; altmode->forced_disconnect = false; + altmode->lanes = 4; + + if (altmode->dp_altmode.base.multi_func) + altmode->lanes = 2; + + DP_DEBUG("Connected=%d, lanes=%d\n",altmode->connected,altmode->lanes); switch (orientation) { case 0: