Prechádzať zdrojové kódy

解决两个usb口同时使用出现的问题

huangliang 2 rokov pred
rodič
commit
9498f086d1

+ 16 - 4
linux/drivers/usb/musb/musb_ark.c

@@ -281,10 +281,22 @@ static int ark_musb_init(struct musb *musb)
 
 	glue->musb = musb;
 
-	musb->xceiv = usb_get_phy(USB_PHY_TYPE_USB2);
-	if (IS_ERR(musb->xceiv)) {
-		printk(KERN_ERR "*** ERROR: Failed to usb_get_phy\n");
-		return PTR_ERR(musb->xceiv);
+	if (NULL == musb->xceiv) {
+		char name[16] = {0};
+		struct device_node *phynode = NULL;
+		sprintf(name, "usb%d-phy", parent->id);
+		phynode = of_find_node_by_name(phynode, name);
+		if (NULL == phynode) {
+			printk(KERN_ERR "*** ERROR: Failed to of_find_node_by_name \n");
+			return PTR_ERR(musb->xceiv);
+		}
+
+		musb->xceiv = devm_usb_get_phy_by_node(&parent->dev, phynode, NULL);
+		of_node_put(phynode);
+		if (IS_ERR(musb->xceiv)) {
+			printk(KERN_ERR "*** ERROR: Failed to usb_get_phy\n");
+			return PTR_ERR(musb->xceiv);
+		}
 	}
 
 	if(is_host_enabled(musb)) {

+ 1 - 1
linux/drivers/usb/musb/musb_core.c

@@ -1219,7 +1219,7 @@ b_host:
 
 		switch (musb->xceiv->otg->state) {
 		case OTG_STATE_A_HOST:
-		case OTG_STATE_A_WAIT_BCON:
+		//case OTG_STATE_A_WAIT_BCON:
 		case OTG_STATE_A_SUSPEND:
 			musb_host_resume_root_hub(musb);
 			musb_root_disconnect(musb);