From: Peter Chen Date: Wed, 5 Aug 2015 02:16:19 +0000 (+0800) Subject: usb: chipidea: host: override hcd reset API X-Git-Tag: firefly_0821_release~176^2~1219^2~34^2~8 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=11a27098e884b8eb797f1579ebc51cb0e0510cc3;p=firefly-linux-kernel-4.4.55.git 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 Cc: Alan Stern Acked-by: Alan Stern Signed-off-by: Peter Chen --- diff --git a/drivers/usb/chipidea/host.c b/drivers/usb/chipidea/host.c index ee38c5da211a..3d24304405b3 100644 --- a/drivers/usb/chipidea/host.c +++ b/drivers/usb/chipidea/host.c @@ -77,9 +77,25 @@ static int ehci_ci_portpower(struct usb_hcd *hcd, int portnum, bool enable) 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 = { .extra_priv_size = sizeof(struct ehci_ci_priv), .port_power = ehci_ci_portpower, + .reset = ehci_ci_reset, }; 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; disable_reg: