From: b-liu@ti.com (Bin Liu)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v3 3/3] musb: sunxi: Force session end on babble errors in host-mode
Date: Tue, 15 Nov 2016 15:14:21 -0600 [thread overview]
Message-ID: <20161115211421.GF11011@uda0271908> (raw)
In-Reply-To: <20160923134058.26828-3-hdegoede@redhat.com>
On Fri, Sep 23, 2016 at 04:40:58PM +0300, Hans de Goede wrote:
> The sunxi musb has a bug where sometimes it will generate a babble
> error on device disconnect instead of a disconnect irq. When this
> happens the musb-controller switches from host mode to device mode
> (it clears MUSB_DEVCTL_SESSION and sets MUSB_DEVCTL_BDEVICE) and
> gets stuck in this state.
>
> Clearing this requires reporting Vbus low for 200 or more ms, but
> on some devices Vbus is simply always high (host-only mode, no Vbus
> control).
>
> This commit adds a sunxi_musb_recover() callback which makes
> sunxi_musb_work call phy_set_mode with the current mode, which
> will force end the current session.
>
> This fixes the musb controller getting stuck in this state on systems
> without Vbus control; and also fixes the need to unplug the usb-b ->
> usb-a cable to get out of this state on systems with Vbus control.
>
> Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Applied. Thanks.
-Bin.
> ---
> Changes in v2:
> -Use musb_platform_recover callback instead of using DYI code in the
> interrupt handler
> -Call phy_set_mode with the current mode instead of adding a new custom
> sunxi phy callback
> ---
> drivers/usb/musb/sunxi.c | 15 +++++++++++++++
> 1 file changed, 15 insertions(+)
>
> diff --git a/drivers/usb/musb/sunxi.c b/drivers/usb/musb/sunxi.c
> index 82eba92..d0be0ea 100644
> --- a/drivers/usb/musb/sunxi.c
> +++ b/drivers/usb/musb/sunxi.c
> @@ -380,6 +380,20 @@ static int sunxi_musb_set_mode(struct musb *musb, u8 mode)
> return 0;
> }
>
> +static int sunxi_musb_recover(struct musb *musb)
> +{
> + struct sunxi_glue *glue = dev_get_drvdata(musb->controller->parent);
> +
> + /*
> + * Schedule a phy_set_mode with the current glue->phy_mode value,
> + * this will force end the current session.
> + */
> + set_bit(SUNXI_MUSB_FL_PHY_MODE_PEND, &glue->flags);
> + schedule_work(&glue->work);
> +
> + return 0;
> +}
> +
> /*
> * sunxi musb register layout
> * 0x00 - 0x17 fifo regs, 1 long per fifo
> @@ -608,6 +622,7 @@ static const struct musb_platform_ops sunxi_musb_ops = {
> .dma_init = sunxi_musb_dma_controller_create,
> .dma_exit = sunxi_musb_dma_controller_destroy,
> .set_mode = sunxi_musb_set_mode,
> + .recover = sunxi_musb_recover,
> .set_vbus = sunxi_musb_set_vbus,
> .pre_root_reset_end = sunxi_musb_pre_root_reset_end,
> .post_root_reset_end = sunxi_musb_post_root_reset_end,
> --
> 2.9.3
>
next prev parent reply other threads:[~2016-11-15 21:14 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-09-23 13:40 [PATCH v3 1/3] phy_sun4i_usb: set_mode: Allow using set_mode to force end the current session Hans de Goede
2016-09-23 13:40 ` [PATCH v3 2/3] musb: sunxi: Remove custom babble handling Hans de Goede
2016-11-15 21:14 ` Bin Liu
2016-09-23 13:40 ` [PATCH v3 3/3] musb: sunxi: Force session end on babble errors in host-mode Hans de Goede
2016-11-15 21:14 ` Bin Liu [this message]
2016-11-15 13:48 ` [PATCH v3 1/3] phy_sun4i_usb: set_mode: Allow using set_mode to force end the current session Kishon Vijay Abraham I
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20161115211421.GF11011@uda0271908 \
--to=b-liu@ti.com \
--cc=linux-arm-kernel@lists.infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.