* [v3,04/10] usb: ehci-orion: add S2RAM support
@ 2019-01-21 11:23 Miquel Raynal
0 siblings, 0 replies; 3+ messages in thread
From: Miquel Raynal @ 2019-01-21 11:23 UTC (permalink / raw)
To: Gregory Clement, Jason Cooper, Andrew Lunn, Sebastian Hesselbarth,
Kishon Vijay Abraham I, Rob Herring, Mark Rutland,
Greg Kroah-Hartman, Mathias Nyman, Alan Stern
Cc: devicetree, linux-arm-kernel, linux-usb, Thomas Petazzoni,
Antoine Tenart, Maxime Chevallier, Nadav Haklai, Miquel Raynal
Add suspend/resume callbacks to reset the host controller properly
during S2RAM operation.
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
---
drivers/usb/host/ehci-orion.c | 25 +++++++++++++++++++++++++
1 file changed, 25 insertions(+)
diff --git a/drivers/usb/host/ehci-orion.c b/drivers/usb/host/ehci-orion.c
index 3109f082949e..dab22aa57c0b 100644
--- a/drivers/usb/host/ehci-orion.c
+++ b/drivers/usb/host/ehci-orion.c
@@ -182,6 +182,30 @@ static int ehci_orion_drv_reset(struct usb_hcd *hcd)
return ret;
}
+static int __maybe_unused ehci_orion_drv_suspend(struct device *dev)
+{
+ struct usb_hcd *hcd = dev_get_drvdata(dev);
+ struct ehci_hcd *ehci = hcd_to_ehci(hcd);
+
+ ehci_prepare_ports_for_controller_suspend(ehci,
+ device_may_wakeup(dev));
+
+ return ehci_suspend(hcd, false);
+}
+
+static int __maybe_unused ehci_orion_drv_resume(struct device *dev)
+{
+ struct usb_hcd *hcd = dev_get_drvdata(dev);
+ struct ehci_hcd *ehci = hcd_to_ehci(hcd);
+
+ ehci_prepare_ports_for_controller_resume(ehci);
+
+ return ehci_resume(hcd, false);
+}
+
+static SIMPLE_DEV_PM_OPS(ehci_orion_pm_ops, ehci_orion_drv_suspend,
+ ehci_orion_drv_resume);
+
static const struct ehci_driver_overrides orion_overrides __initconst = {
.extra_priv_size = sizeof(struct orion_ehci_hcd),
.reset = ehci_orion_drv_reset,
@@ -334,6 +358,7 @@ static struct platform_driver ehci_orion_driver = {
.driver = {
.name = "orion-ehci",
.of_match_table = ehci_orion_dt_ids,
+ .pm = &ehci_orion_pm_ops,
},
};
^ permalink raw reply related [flat|nested] 3+ messages in thread
* [v3,04/10] usb: ehci-orion: add S2RAM support
@ 2019-01-23 19:58 Alan Stern
0 siblings, 0 replies; 3+ messages in thread
From: Alan Stern @ 2019-01-23 19:58 UTC (permalink / raw)
To: Miquel Raynal
Cc: Gregory Clement, Jason Cooper, Andrew Lunn, Sebastian Hesselbarth,
Kishon Vijay Abraham I, Rob Herring, Mark Rutland,
Greg Kroah-Hartman, Mathias Nyman, devicetree, linux-arm-kernel,
linux-usb, Thomas Petazzoni, Antoine Tenart, Maxime Chevallier,
Nadav Haklai
On Mon, 21 Jan 2019, Miquel Raynal wrote:
> Add suspend/resume callbacks to reset the host controller properly
> during S2RAM operation.
>
> Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
> ---
> drivers/usb/host/ehci-orion.c | 25 +++++++++++++++++++++++++
> 1 file changed, 25 insertions(+)
>
> diff --git a/drivers/usb/host/ehci-orion.c b/drivers/usb/host/ehci-orion.c
> index 3109f082949e..dab22aa57c0b 100644
> --- a/drivers/usb/host/ehci-orion.c
> +++ b/drivers/usb/host/ehci-orion.c
> @@ -182,6 +182,30 @@ static int ehci_orion_drv_reset(struct usb_hcd *hcd)
> return ret;
> }
>
> +static int __maybe_unused ehci_orion_drv_suspend(struct device *dev)
> +{
> + struct usb_hcd *hcd = dev_get_drvdata(dev);
> + struct ehci_hcd *ehci = hcd_to_ehci(hcd);
> +
> + ehci_prepare_ports_for_controller_suspend(ehci,
> + device_may_wakeup(dev));
> +
> + return ehci_suspend(hcd, false);
This is a little odd. Why not just call
ehci_suspend(hcd, device_may_wakeup(dev));
directly and let it take care of calling
ehci_prepare_ports_for_controller_suspend() for you? If you have a
good reason for doing things this way, please mention that reason in
the Changelog.
> +}
> +
> +static int __maybe_unused ehci_orion_drv_resume(struct device *dev)
> +{
> + struct usb_hcd *hcd = dev_get_drvdata(dev);
> + struct ehci_hcd *ehci = hcd_to_ehci(hcd);
> +
> + ehci_prepare_ports_for_controller_resume(ehci);
> +
> + return ehci_resume(hcd, false);
Same thing here.
> +}
> +
> +static SIMPLE_DEV_PM_OPS(ehci_orion_pm_ops, ehci_orion_drv_suspend,
> + ehci_orion_drv_resume);
> +
> static const struct ehci_driver_overrides orion_overrides __initconst = {
> .extra_priv_size = sizeof(struct orion_ehci_hcd),
> .reset = ehci_orion_drv_reset,
> @@ -334,6 +358,7 @@ static struct platform_driver ehci_orion_driver = {
> .driver = {
> .name = "orion-ehci",
> .of_match_table = ehci_orion_dt_ids,
> + .pm = &ehci_orion_pm_ops,
> },
> };
Alan Stern
^ permalink raw reply [flat|nested] 3+ messages in thread
* [v3,04/10] usb: ehci-orion: add S2RAM support
@ 2019-01-25 10:35 Miquel Raynal
0 siblings, 0 replies; 3+ messages in thread
From: Miquel Raynal @ 2019-01-25 10:35 UTC (permalink / raw)
To: Alan Stern
Cc: Gregory Clement, Jason Cooper, Andrew Lunn, Sebastian Hesselbarth,
Kishon Vijay Abraham I, Rob Herring, Mark Rutland,
Greg Kroah-Hartman, Mathias Nyman, devicetree, linux-arm-kernel,
linux-usb, Thomas Petazzoni, Antoine Tenart, Maxime Chevallier,
Nadav Haklai
Hi Alan,
Alan Stern <stern@rowland.harvard.edu> wrote on Wed, 23 Jan 2019
14:58:44 -0500 (EST):
> On Mon, 21 Jan 2019, Miquel Raynal wrote:
>
> > Add suspend/resume callbacks to reset the host controller properly
> > during S2RAM operation.
> >
> > Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
> > ---
> > drivers/usb/host/ehci-orion.c | 25 +++++++++++++++++++++++++
> > 1 file changed, 25 insertions(+)
> >
> > diff --git a/drivers/usb/host/ehci-orion.c b/drivers/usb/host/ehci-orion.c
> > index 3109f082949e..dab22aa57c0b 100644
> > --- a/drivers/usb/host/ehci-orion.c
> > +++ b/drivers/usb/host/ehci-orion.c
> > @@ -182,6 +182,30 @@ static int ehci_orion_drv_reset(struct usb_hcd *hcd)
> > return ret;
> > }
> >
> > +static int __maybe_unused ehci_orion_drv_suspend(struct device *dev)
> > +{
> > + struct usb_hcd *hcd = dev_get_drvdata(dev);
> > + struct ehci_hcd *ehci = hcd_to_ehci(hcd);
> > +
> > + ehci_prepare_ports_for_controller_suspend(ehci,
> > + device_may_wakeup(dev));
> > +
> > + return ehci_suspend(hcd, false);
>
> This is a little odd. Why not just call
>
> ehci_suspend(hcd, device_may_wakeup(dev));
>
> directly and let it take care of calling
> ehci_prepare_ports_for_controller_suspend() for you? If you have a
> good reason for doing things this way, please mention that reason in
> the Changelog.
There is no reason, I think I got the inspiration from an other driver
calling manually ehci_prepare_ports_for_controller_suspend(), but I did
not check it was already taken care of by ehci_suspend/resume().
Call removed in both paths, thanks!
Miquèl
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2019-01-25 10:35 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2019-01-25 10:35 [v3,04/10] usb: ehci-orion: add S2RAM support Miquel Raynal
-- strict thread matches above, loose matches on Subject: below --
2019-01-23 19:58 Alan Stern
2019-01-21 11:23 Miquel Raynal
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).