Эх сурвалжийг харах

disp: msm: dp: update number of lanes used to usb driver

This change fixes issue, where USB driver was not properly updated
with the number of dp lanes being used for altmode usecase.

Change-Id: Ic93d3e3b37aa8ad2d664e006ede3cf6c27d7133a
Signed-off-by: Vara Reddy <[email protected]>
Vara Reddy 4 жил өмнө
parent
commit
396c3acc01
1 өөрчлөгдсөн 8 нэмэгдсэн , 5 устгасан
  1. 8 5
      msm/dp/dp_altmode.c

+ 8 - 5
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: