* Hans de Goede <[email protected]> [160915 07:00]:
> Hi,
>
> On 14-09-16 20:10, Tony Lindgren wrote:
> > Commit a83e17d0f73b ("usb: musb: Improve PM runtime and phy handling
> > for 2430 glue layer") moved PHY enable/disable calls to happen from
> > omap2430_musb_enable/disable(). That broke enumeration for several
> > devices as PM runtime in the PHY will never enable it.
> >
> > The root cause of the problem is unpaired calls from musb_core.c to
> > musb_platform_enable/disable in musb_core.c as reported by
> > Andreas Kemnade <[email protected]>.
> >
> > As musb_platform_enable/disable are being called from various functions,
> > let's not attempt to make them paiered immediately. This would require
> > fixing all the callers like musb_remove.
>
> Yeah, the sunxi glue actually has:
>
> static void sunxi_musb_enable(struct musb *musb)
> {
> struct sunxi_glue *glue = dev_get_drvdata(musb->controller->parent);
>
> glue->musb = musb;
>
> /* musb_core does not call us in a balanced manner */
> if (test_and_set_bit(SUNXI_MUSB_FL_ENABLED, &glue->flags))
> return;
Heh we're trying to get to the "balanced manner" point hopefully soon :)
> schedule_work(&glue->work);
> }
>
> static void sunxi_musb_disable(struct musb *musb)
> {
> struct sunxi_glue *glue = dev_get_drvdata(musb->controller->parent);
>
> clear_bit(SUNXI_MUSB_FL_ENABLED, &glue->flags);
> }
>
> Note that since the glue struct is kzalloc-ed, this makes calling
> sunxi_musb_disable() from sunxi_musb_init() a nop, so if this
> needs a respin please drop the sunxi changes, they are not
> necessary.
Hmm we have sunxi_musb_probe() do platform_device_register_full(),
then musb_probe() happens, and calls musb_init_controller().
In musb_init_controller() we do musb_platform_init() that finally
calls sunxi_musb_init().
So the sunxi glue is kzalloc'ed and initialized already in
sunxi_musb_probe(), and musb parts are already initialized in
musb_init_controller().
I don't quite follow what you mean how it's a nop.. Care to
clarify that a bit? Maybe you're thinking we're calling it from
sunxi_musb_probe() instead?
Anyways, calling sunxi_musb_disable() seems unnecessary from
sunxi_musb_init() because it does reset_control_deassert().
But that can be cleaned up later on if no other reasons for
changes for v4.8-rc cycle.
Regards,
Tony
--
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