[V2,01/10] USB: OHCI: Properly handle ohci-at91 suspend

Message ID 1371114989-2342-2-git-send-email-manjunath.goudar@linaro.org
State New
Headers show

Commit Message

manjunath.goudar@linaro.org June 13, 2013, 9:16 a.m.
Suspend scenario in case of ohci-at91 glue was not properly
handled as it was not suspending generic part of ohci controller.
Calling explicitly the ohci_suspend() routine in ohci_hcd_at91_drv_suspend()
will ensure proper handling of suspend scenario.

V2:
  -Incase ohci_suspend() fails, return right away without executing further.

Signed-off-by: Manjunath Goudar <manjunath.goudar@linaro.org>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: Alan Stern <stern@rowland.harvard.edu>
Cc: Greg KH <greg@kroah.com>
Cc: linux-usb@vger.kernel.org
---
 drivers/usb/host/ohci-at91.c |   14 ++++++++++++--
 1 file changed, 12 insertions(+), 2 deletions(-)

Comments

Alan Stern June 13, 2013, 7:14 p.m. | #1
On Thu, 13 Jun 2013, Manjunath Goudar wrote:

> Suspend scenario in case of ohci-at91 glue was not properly
> handled as it was not suspending generic part of ohci controller.
> Calling explicitly the ohci_suspend() routine in ohci_hcd_at91_drv_suspend()
> will ensure proper handling of suspend scenario.
> 
> V2:
>   -Incase ohci_suspend() fails, return right away without executing further.

> diff --git a/drivers/usb/host/ohci-at91.c b/drivers/usb/host/ohci-at91.c
> index fb2f127..6620e3a 100644
> --- a/drivers/usb/host/ohci-at91.c
> +++ b/drivers/usb/host/ohci-at91.c
> @@ -619,8 +619,18 @@ ohci_hcd_at91_drv_suspend(struct platform_device *pdev, pm_message_t mesg)
>  {
>  	struct usb_hcd	*hcd = platform_get_drvdata(pdev);
>  	struct ohci_hcd	*ohci = hcd_to_ohci(hcd);
> +	bool do_wakeup = device_may_wakeup(&pdev->dev);
> +	int ret;

Please use tab characters so that "do_wakeup" and "ret" are lined up 
directly beneath "*hcd" and "*ohci".  The rest of this patch is okay.

Acked-by: Alan Stern <stern@rowland.harvard.edu>
manjunath.goudar@linaro.org June 17, 2013, 9:22 a.m. | #2
On 14 June 2013 00:44, Alan Stern <stern@rowland.harvard.edu> wrote:

> On Thu, 13 Jun 2013, Manjunath Goudar wrote:
>
> > Suspend scenario in case of ohci-at91 glue was not properly
> > handled as it was not suspending generic part of ohci controller.
> > Calling explicitly the ohci_suspend() routine in
> ohci_hcd_at91_drv_suspend()
> > will ensure proper handling of suspend scenario.
> >
> > V2:
> >   -Incase ohci_suspend() fails, return right away without executing
> further.
>
> > diff --git a/drivers/usb/host/ohci-at91.c b/drivers/usb/host/ohci-at91.c
> > index fb2f127..6620e3a 100644
> > --- a/drivers/usb/host/ohci-at91.c
> > +++ b/drivers/usb/host/ohci-at91.c
> > @@ -619,8 +619,18 @@ ohci_hcd_at91_drv_suspend(struct platform_device
> *pdev, pm_message_t mesg)
> >  {
> >       struct usb_hcd  *hcd = platform_get_drvdata(pdev);
> >       struct ohci_hcd *ohci = hcd_to_ohci(hcd);
> > +     bool do_wakeup = device_may_wakeup(&pdev->dev);
> > +     int ret;
>
> Please use tab characters so that "do_wakeup" and "ret" are lined up
> directly beneath "*hcd" and "*ohci".  The rest of this patch is okay.
>
>
when we are using tab characters  before "do_wakeup" and "ret" variable,we
will be getting error below.

WARNING: please, no space before tabs
#31: FILE: drivers/usb/host/ohci-at91.c:622:
+^Ibool ^I^Ido_wakeup = device_may_wakeup(&pdev->dev);$

WARNING: please, no space before tabs
#32: FILE: drivers/usb/host/ohci-at91.c:623:
+^Iint ^I^Iret;$

total: 0 errors, 2 warnings, 27 lines checked


Acked-by: Alan Stern <stern@rowland.harvard.edu>
>
>
Viresh Kumar June 17, 2013, 9:25 a.m. | #3
On 17 June 2013 14:52, Manjunath Goudar <manjunath.goudar@linaro.org> wrote:
> when we are using tab characters  before "do_wakeup" and "ret" variable,we
> will be getting error below.
>
> WARNING: please, no space before tabs
> #31: FILE: drivers/usb/host/ohci-at91.c:622:
> +^Ibool ^I^Ido_wakeup = device_may_wakeup(&pdev->dev);$
>
> WARNING: please, no space before tabs
> #32: FILE: drivers/usb/host/ohci-at91.c:623:
> +^Iint ^I^Iret;$
>
> total: 0 errors, 2 warnings, 27 lines checked

That's because you are using both tabs and spaces to align. Just use
multiple tabs and remove all spaces.
manjunath.goudar@linaro.org June 17, 2013, 9:32 a.m. | #4
On 17 June 2013 14:55, Viresh Kumar <viresh.kumar@linaro.org> wrote:

> On 17 June 2013 14:52, Manjunath Goudar <manjunath.goudar@linaro.org>
> wrote:
> > when we are using tab characters  before "do_wakeup" and "ret"
> variable,we
> > will be getting error below.
> >
> > WARNING: please, no space before tabs
> > #31: FILE: drivers/usb/host/ohci-at91.c:622:
> > +^Ibool ^I^Ido_wakeup = device_may_wakeup(&pdev->dev);$
> >
> > WARNING: please, no space before tabs
> > #32: FILE: drivers/usb/host/ohci-at91.c:623:
> > +^Iint ^I^Iret;$
> >
> > total: 0 errors, 2 warnings, 27 lines checked
>
> That's because you are using both tabs and spaces to align. Just use
> multiple tabs and remove all spaces.
>

Ya its solved,thanks

Manjunath Goudar

Patch

diff --git a/drivers/usb/host/ohci-at91.c b/drivers/usb/host/ohci-at91.c
index fb2f127..6620e3a 100644
--- a/drivers/usb/host/ohci-at91.c
+++ b/drivers/usb/host/ohci-at91.c
@@ -619,8 +619,18 @@  ohci_hcd_at91_drv_suspend(struct platform_device *pdev, pm_message_t mesg)
 {
 	struct usb_hcd	*hcd = platform_get_drvdata(pdev);
 	struct ohci_hcd	*ohci = hcd_to_ohci(hcd);
+	bool do_wakeup = device_may_wakeup(&pdev->dev);
+	int ret;
 
-	if (device_may_wakeup(&pdev->dev))
+	ret = ohci_suspend(hcd, do_wakeup);
+	if (ret == 0 && do_wakeup && HCD_WAKEUP_PENDING(hcd)) {
+		ohci_resume(hcd, false);
+		ret = -EBUSY;
+	}
+	if (ret)
+		return ret;
+
+	if (do_wakeup)
 		enable_irq_wake(hcd->irq);
 
 	/*
@@ -637,7 +647,7 @@  ohci_hcd_at91_drv_suspend(struct platform_device *pdev, pm_message_t mesg)
 		at91_stop_clock();
 	}
 
-	return 0;
+	return ret;
 }
 
 static int ohci_hcd_at91_drv_resume(struct platform_device *pdev)