Hi Alan
Cc Magnus, Rafael
> > > this patch enable to use pm_runtime_xxx() on ehci-platform
> > > if .config has CONFIG_PM_RUNTIME, otherwise, these are ignored
> > >
> > > Signed-off-by: Kuninori Morimoto <[email protected]>
> > > ---
> > > drivers/usb/host/ehci-platform.c | 6 ++++++
> > > 1 files changed, 6 insertions(+), 0 deletions(-)
> > >
> > > diff --git a/drivers/usb/host/ehci-platform.c
> > > b/drivers/usb/host/ehci-platform.c
> > > index dfe881a..89029eb 100644
> > > --- a/drivers/usb/host/ehci-platform.c
> > > +++ b/drivers/usb/host/ehci-platform.c
> > > @@ -122,6 +122,9 @@ static int __devinit ehci_platform_probe(struct
> > > platform_device *dev)
> > > if (err)
> > > goto err_iounmap;
> > >
> > > + pm_runtime_enable(&dev->dev);
> > > + pm_runtime_get_sync(&dev->dev);
> >
> > This line is peculiar. Why call pm_runtime_get_sync()? If the
> > controller was at low power before, the usb_add_hcd() call above would
> > have failed. If it was at full power before, this call isn't needed.
> > Also it leaves the runtime PM usage counter set to 1, which will
> > prevent the controller from runtime-suspending.
> >
> > I think what you want to do is more like this:
> >
> > pm_runtime_set_active(&dev->dev);
> > pm_runtime_enable(&dev->dev);
>
> Thank you for explaining this.
>
> Indeed pm_runtime_xxx should be called befor usb_add_hcd()
>
> But on our system (= SuperH CPU), EHCI/OHCI device are
> on-chip, and it needs power to use it.
> So, we need to call pm_rumtime_get_xxx() to enable power.
> Without this function, our EHCI/OHCI couldn't work.
>
> In this case, where should I call it ?
> Or should I create new ehci-xxx driver ?
I'm sorry for my confusing mail.
I would like to say is "can I call pm_runtime_get_xxx() ?"
pm_runtime_set_active(&dev->dev);
pm_runtime_enable(&dev->dev);
pm_runtime_get_xxx(&dev->dev);
usb_add_hcd()...
>
> > > +
> > > platform_set_drvdata(dev, hcd);
> > >
> > > return err;
> > > @@ -139,6 +142,9 @@ static int __devexit ehci_platform_remove(struct
> > > platform_device *dev)
> > > {
> > > struct usb_hcd *hcd = platform_get_drvdata(dev);
> > >
> > > + pm_runtime_put_sync(&dev->dev);
> > > + pm_runtime_disable(&dev->dev);
> >
> > These look wrong also. The put_sync will set the controller to low
> > power, which will cause usb_remove_hcd() below to fail.
> >
> > Probably you should have:
> >
> > pm_runtime_get_sync(&dev->dev);
> >
> > > usb_remove_hcd(hcd);
> >
> > Then here do:
> >
> > pm_runtime_disable(&dev->dev);
> > pm_runtime_put_nosuspend(&dev->dev);
> > pm_runtime_set_suspended(&dev->dev);
> >
> > > iounmap(hcd->regs);
> > > release_mem_region(hcd->rsrc_start, hcd->rsrc_len);
> >
> > Similar comments apply to your patch for ohci-platform.c.
> >
> > Alan Stern
> >
> > --
> > To unsubscribe from this list: send the line "unsubscribe linux-usb" in
> > the body of a message to [email protected]
> > More majordomo info at http://vger.kernel.org/majordomo-info.html
>
>
> Best regards
> ---
> Kuninori Morimoto
Best regards
---
Kuninori Morimoto
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html