Re: musb host mode suspend mode

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi

On Sat, Dec 7, 2013 at 6:22 PM, Michael Trimarchi
<michael@xxxxxxxxxxxxxxxxxxxx> wrote:
> Hi
>
> On Wed, Nov 27, 2013 at 4:26 PM, Michael Trimarchi
> <michael@xxxxxxxxxxxxxxxxxxxx> wrote:
>> Hi Felipe,
>>
>> I'm trying to understand how dpll_usb and vbus should work in suspend mode.
>> What I have in my kernel 3.0.31 from ti is that if I suspend the device with id
>> pin ground and no device connected I have:
>>
>> - vbus 5v
>> - dpll_usb locked problem so l3domain can not suspend
>>
>> If I have the id pin floating (device mode) and no device connected I
>> can suspend
>> without problem. I'm not care about remote wakeup and I would like to understand
>> what is the reason of having no complete suspend in host mode. Can you give
>> some insight?
>
> I get a bit further and if I do something like that so basically force
> device mode I can suspend.
>
> +       if (val) {
> +               twl->force_device = false;
> +               twl6030_writeb(twl, TWL_MODULE_USB, 0x14, USB_ID_CTRL_SET);
> +               twl6030_usb_irq(twl->irq2, twl);
> +               twl6030_usbotg_irq(twl->irq1, twl);
> +       } else {
> +               twl->force_device = true;
> +               twl6030_writeb(twl, TWL_MODULE_USB, 0x14, USB_ID_CTRL_CLR);
> +               twl6030_usb_irq(twl->irq2, twl);
> +               twl6030_usbotg_irq(twl->irq1, twl);
> +       }
>
> So my problem is let the device connect host mode (remote wakeup
> disable) and let the system suspend in the correct way.
>

I think that I have almost fixed the problem of suspend resume of the
otg host mode in this old
version of the kernel. But I would like to share my short summary:

- I have implemented the suspend/resume hooks of the omap2430 and manually
call the omap_device_idle and omap_device_disable because in old
version of the kernel
this hooks are not implemented in the omap_device structure

- I understand the reason in not having the runtime_suspend the otg in
host mode but I'm not sure:
  * the runtime_get_sync is taken on the ID_GND event so as soon it's
host connected the use_count
go to 1 but I did't find where it is released

- I still have a

<4>[   41.856445] WARNING: at
/home/michael/work/amarula/wincor/paypad/kernel/arch/arm/mach-omap2/omap_l3_noc.c:135
l3_interrupt_handler+0x254/0x344()
<4>[   41.856475] CUSTOM SRESP error with SOURCE:L4CFG
<4>[   41.856506] Modules linked in: pvrsrvkm_sgx540_120 gps_drv
wl12xx mac80211 cfg80211 compat
<4>[   41.856567] Backtrace:
<4>[   41.856597] [<c00e43e0>] (dump_backtrace+0x0/0x10c) from
[<c0679db0>] (dump_stack+0x18/0x1c)
<4>[   41.856628]  r7:00000009 r6:00000087 r5:c010652c r4:c783dc80
<4>[   41.856689] [<c0679d98>] (dump_stack+0x0/0x1c) from [<c012b31c>]
(warn_slowpath_common+0x54/0x6c)
<4>[   41.856750] [<c012b2c8>] (warn_slowpath_common+0x0/0x6c) from
[<c012b3d8>] (warn_slowpath_fmt+0x38/0x40)
<4>[   41.856781]  r9:00000000 r8:f8000400 r7:00080003 r6:c08ce948 r5:00000448
<4>[   41.856811] r4:f8000000
<4>[   41.856842] [<c012b3a0>] (warn_slowpath_fmt+0x0/0x40) from
[<c010652c>] (l3_interrupt_handler+0x254/0x344)
<4>[   41.856872]  r3:c07ee514 r2:c07ee4b0
<4>[   41.856933] [<c01062d8>] (l3_interrupt_handler+0x0/0x344) from
[<c017291c>] (handle_irq_event_percpu+0x6c/0x290)
<4>[   41.856964] [<c01728b0>] (handle_irq_event_percpu+0x0/0x290)
from [<c0172b84>] (handle_irq_event+0x44/0x64)
<4>[   41.857025] [<c0172b40>] (handle_irq_event+0x0/0x64) from
[<c01751fc>] (handle_fasteoi_irq+0xa0/0x144)
<4>[   41.857055]  r7:0000002a r6:c783c000 r5:c08a1b8c r4:c08a1b40
<4>[   41.857116] [<c017515c>] (handle_fasteoi_irq+0x0/0x144) from
[<c017246c>] (generic_handle_irq+0x3c/0x48)
<4>[   41.857116]  r5:c00d9020 r4:c08b0898
<4>[   41.857177] [<c0172430>] (generic_handle_irq+0x0/0x48) from
[<c00da054>] (asm_do_IRQ+0x54/0xb4)
<4>[   41.857238] [<c00da000>] (asm_do_IRQ+0x0/0xb4) from [<c067db88>]
(__irq_svc+0x48/0xe0)
<4>[   41.857238] Exception stack(0xc783dd80 to 0xc783ddc8)

But maybe somenthing is wrong in the sequence

+       struct omap2430_glue            *glue = dev_get_drvdata(dev);
+       struct musb                     *musb = glue_to_musb(glue);
+       struct platform_device          *pdev = to_platform_device(dev);
+
+       if (pm_runtime_suspended(dev))
+               return 0;
+
+       if (pdev)
+               omap_device_enable(pdev);
+
+       omap2430_low_level_init(musb);
+       musb_writel(musb->mregs, OTG_INTERFSEL,
+                                       musb->context.otg_interfsel);
+
+       otg_set_suspend(musb->xceiv, 0);
+
+       return 0;
+}


Michael



> Michael
>
>>
>> Michael



-- 
| Michael Nazzareno Trimarchi                     Amarula Solutions BV |
| COO  -  Founder
Cruquiuskade 47 |
| +31(0)851119172                                   Amsterdam 1018 AM NL |
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux Arm (vger)]     [ARM Kernel]     [ARM MSM]     [Linux Tegra]     [Linux WPAN Networking]     [Linux Wireless Networking]     [Maemo Users]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux