|
@@ -268,13 +268,8 @@ static void omap_musb_mailbox_work(struct work_struct *mailbox_work)
|
|
{
|
|
{
|
|
struct omap2430_glue *glue = container_of(mailbox_work,
|
|
struct omap2430_glue *glue = container_of(mailbox_work,
|
|
struct omap2430_glue, omap_musb_mailbox_work);
|
|
struct omap2430_glue, omap_musb_mailbox_work);
|
|
- struct musb *musb = glue_to_musb(glue);
|
|
|
|
- struct device *dev = musb->controller;
|
|
|
|
|
|
|
|
- pm_runtime_get_sync(dev);
|
|
|
|
omap_musb_set_mailbox(glue);
|
|
omap_musb_set_mailbox(glue);
|
|
- pm_runtime_mark_last_busy(dev);
|
|
|
|
- pm_runtime_put_autosuspend(dev);
|
|
|
|
}
|
|
}
|
|
|
|
|
|
static irqreturn_t omap2430_musb_interrupt(int irq, void *__hci)
|
|
static irqreturn_t omap2430_musb_interrupt(int irq, void *__hci)
|
|
@@ -343,16 +338,6 @@ static int omap2430_musb_init(struct musb *musb)
|
|
musb->isr = omap2430_musb_interrupt;
|
|
musb->isr = omap2430_musb_interrupt;
|
|
phy_init(musb->phy);
|
|
phy_init(musb->phy);
|
|
|
|
|
|
- /*
|
|
|
|
- * Enable runtime PM for musb parent (this driver). We can't
|
|
|
|
- * do it earlier as struct musb is not yet allocated and we
|
|
|
|
- * need to touch the musb registers for runtime PM.
|
|
|
|
- */
|
|
|
|
- pm_runtime_enable(glue->dev);
|
|
|
|
- status = pm_runtime_get_sync(glue->dev);
|
|
|
|
- if (status < 0)
|
|
|
|
- goto err1;
|
|
|
|
-
|
|
|
|
l = musb_readl(musb->mregs, OTG_INTERFSEL);
|
|
l = musb_readl(musb->mregs, OTG_INTERFSEL);
|
|
|
|
|
|
if (data->interface_type == MUSB_INTERFACE_UTMI) {
|
|
if (data->interface_type == MUSB_INTERFACE_UTMI) {
|
|
@@ -376,11 +361,7 @@ static int omap2430_musb_init(struct musb *musb)
|
|
if (glue->status != MUSB_UNKNOWN)
|
|
if (glue->status != MUSB_UNKNOWN)
|
|
omap_musb_set_mailbox(glue);
|
|
omap_musb_set_mailbox(glue);
|
|
|
|
|
|
- pm_runtime_put(glue->dev);
|
|
|
|
return 0;
|
|
return 0;
|
|
-
|
|
|
|
-err1:
|
|
|
|
- return status;
|
|
|
|
}
|
|
}
|
|
|
|
|
|
static void omap2430_musb_enable(struct musb *musb)
|
|
static void omap2430_musb_enable(struct musb *musb)
|
|
@@ -588,11 +569,9 @@ static int omap2430_probe(struct platform_device *pdev)
|
|
goto err2;
|
|
goto err2;
|
|
}
|
|
}
|
|
|
|
|
|
- /*
|
|
|
|
- * Note that we cannot enable PM runtime yet for this
|
|
|
|
- * driver as we need struct musb initialized first.
|
|
|
|
- * See omap2430_musb_init above.
|
|
|
|
- */
|
|
|
|
|
|
+ pm_runtime_enable(glue->dev);
|
|
|
|
+ pm_runtime_use_autosuspend(glue->dev);
|
|
|
|
+ pm_runtime_set_autosuspend_delay(glue->dev, 500);
|
|
|
|
|
|
ret = platform_device_add(musb);
|
|
ret = platform_device_add(musb);
|
|
if (ret) {
|
|
if (ret) {
|
|
@@ -618,6 +597,7 @@ static int omap2430_remove(struct platform_device *pdev)
|
|
platform_device_unregister(glue->musb);
|
|
platform_device_unregister(glue->musb);
|
|
omap2430_set_power(musb, false, false);
|
|
omap2430_set_power(musb, false, false);
|
|
pm_runtime_put_sync(glue->dev);
|
|
pm_runtime_put_sync(glue->dev);
|
|
|
|
+ pm_runtime_dont_use_autosuspend(glue->dev);
|
|
pm_runtime_disable(glue->dev);
|
|
pm_runtime_disable(glue->dev);
|
|
|
|
|
|
return 0;
|
|
return 0;
|