浏览代码

usb: chipidea: host: override hcd reset API

The system configuration API should be called before the controller
run, otherwise, undefined results may occur. So, we override hcd
reset API, and add system configuration API after controller reset.

Cc: Li Jun <peter.chen@freescale.com>
Cc: Alan Stern <stern@rowland.harvard.edu>
Acked-by: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Peter Chen <peter.chen@freescale.com>
Peter Chen 10 年之前
父节点
当前提交
11a27098e8
共有 1 个文件被更改,包括 16 次插入2 次删除
  1. 16 2
      drivers/usb/chipidea/host.c

+ 16 - 2
drivers/usb/chipidea/host.c

@@ -77,9 +77,25 @@ static int ehci_ci_portpower(struct usb_hcd *hcd, int portnum, bool enable)
 	return 0;
 	return 0;
 };
 };
 
 
+static int ehci_ci_reset(struct usb_hcd *hcd)
+{
+	struct device *dev = hcd->self.controller;
+	struct ci_hdrc *ci = dev_get_drvdata(dev);
+	int ret;
+
+	ret = ehci_setup(hcd);
+	if (ret)
+		return ret;
+
+	ci_platform_configure(ci);
+
+	return ret;
+}
+
 static const struct ehci_driver_overrides ehci_ci_overrides = {
 static const struct ehci_driver_overrides ehci_ci_overrides = {
 	.extra_priv_size = sizeof(struct ehci_ci_priv),
 	.extra_priv_size = sizeof(struct ehci_ci_priv),
 	.port_power	 = ehci_ci_portpower,
 	.port_power	 = ehci_ci_portpower,
+	.reset		 = ehci_ci_reset,
 };
 };
 
 
 static irqreturn_t host_irq(struct ci_hdrc *ci)
 static irqreturn_t host_irq(struct ci_hdrc *ci)
@@ -151,8 +167,6 @@ static int host_start(struct ci_hdrc *ci)
 		}
 		}
 	}
 	}
 
 
-	ci_platform_configure(ci);
-
 	return ret;
 	return ret;
 
 
 disable_reg:
 disable_reg: