From: Kishon Vijay Abraham I <kishon@ti.com>
To: <gregkh@linuxfoundation.org>
Cc: <kishon@ti.com>, <linux-kernel@vger.kernel.org>
Subject: [PATCH 17/20] phy_sun4i_usb: set_mode: Allow using set_mode to force end the current session
Date: Fri, 18 Nov 2016 18:58:40 +0530 [thread overview]
Message-ID: <1479475723-4857-18-git-send-email-kishon@ti.com> (raw)
In-Reply-To: <1479475723-4857-1-git-send-email-kishon@ti.com>
From: Hans de Goede <hdegoede@redhat.com>
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 modifies sun4i_usb_phy_set_mode so that it will force
end the current session when called with the current mode, before this
commit calling set_mode with the current mode was a nop since id_det
would stay the same resulting in the detect_work not doing anything.
This allows the sunxi-musb glue to use sun4i_usb_phy_set_mode to force
end the current session without changing the mode, to fixup the stuck
state after a babble error.
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Kishon Vijay Abraham I <kishon@ti.com>
---
drivers/phy/phy-sun4i-usb.c | 14 ++++++++++----
1 file changed, 10 insertions(+), 4 deletions(-)
diff --git a/drivers/phy/phy-sun4i-usb.c b/drivers/phy/phy-sun4i-usb.c
index fec34f5..bf28a0f 100644
--- a/drivers/phy/phy-sun4i-usb.c
+++ b/drivers/phy/phy-sun4i-usb.c
@@ -436,25 +436,31 @@ static int sun4i_usb_phy_set_mode(struct phy *_phy, enum phy_mode mode)
{
struct sun4i_usb_phy *phy = phy_get_drvdata(_phy);
struct sun4i_usb_phy_data *data = to_sun4i_usb_phy_data(phy);
+ int new_mode;
if (phy->index != 0)
return -EINVAL;
switch (mode) {
case PHY_MODE_USB_HOST:
- data->dr_mode = USB_DR_MODE_HOST;
+ new_mode = USB_DR_MODE_HOST;
break;
case PHY_MODE_USB_DEVICE:
- data->dr_mode = USB_DR_MODE_PERIPHERAL;
+ new_mode = USB_DR_MODE_PERIPHERAL;
break;
case PHY_MODE_USB_OTG:
- data->dr_mode = USB_DR_MODE_OTG;
+ new_mode = USB_DR_MODE_OTG;
break;
default:
return -EINVAL;
}
- dev_info(&_phy->dev, "Changing dr_mode to %d\n", (int)data->dr_mode);
+ if (new_mode != data->dr_mode) {
+ dev_info(&_phy->dev, "Changing dr_mode to %d\n", new_mode);
+ data->dr_mode = new_mode;
+ }
+
+ data->id_det = -1; /* Force reprocessing of id */
data->force_session_end = true;
queue_delayed_work(system_wq, &data->detect, 0);
--
1.7.9.5
next prev parent reply other threads:[~2016-11-18 13:30 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-11-18 13:28 [GIT PULL] phy: for 4.10 Kishon Vijay Abraham I
2016-11-18 13:28 ` [PATCH 01/20] Documentation: dt-bindings: update the meson-usb2-phy example Kishon Vijay Abraham I
2016-11-18 13:28 ` [PATCH 02/20] Documentation: dt-bindings: rename meson-usb2-phy to meson8b-usb2-phy Kishon Vijay Abraham I
2016-11-18 13:28 ` [PATCH 03/20] phy: meson: add USB2 PHY support for Meson8b and GXBB Kishon Vijay Abraham I
2016-11-18 13:28 ` [PATCH 04/20] phy: meson8b-usb2: fix missing clk_disable_unprepare() on error Kishon Vijay Abraham I
2016-11-18 13:28 ` [PATCH 05/20] phy: meson8b-usb2: request a shared reset line Kishon Vijay Abraham I
2016-11-18 13:28 ` [PATCH 06/20] phy: rockchip-inno-usb2: support otg-port for rk3399 Kishon Vijay Abraham I
2016-11-18 13:28 ` [PATCH 07/20] phy: rockchip-inno-usb2: correct clk_ops callback Kishon Vijay Abraham I
2016-11-18 13:28 ` [PATCH 08/20] phy: rockchip-inno-usb2: correct 480MHz output clock stable time Kishon Vijay Abraham I
2016-11-18 13:28 ` [PATCH 09/20] phy: phy-miphy365x: Remove miphy365 driver and dt binding documentation Kishon Vijay Abraham I
2016-11-18 13:28 ` [PATCH 10/20] phy: stih41x-usb: Remove usb phy " Kishon Vijay Abraham I
2016-11-18 13:28 ` [PATCH 11/20] phy: da8xx-usb: Configure CFGCHIP2 to support OTG workaround Kishon Vijay Abraham I
2016-11-18 13:28 ` [PATCH 12/20] phy: rcar-gen3-usb2: add sysfs for usb role swap Kishon Vijay Abraham I
2016-11-18 13:28 ` [PATCH 13/20] phy: exynos-mipi-video: simplify check for coupled phy status Kishon Vijay Abraham I
2016-11-18 13:28 ` [PATCH 14/20] phy: fix semicolon.cocci warnings Kishon Vijay Abraham I
2016-11-18 13:28 ` [PATCH 15/20] phy: Fix ptr_ret.cocci warnings Kishon Vijay Abraham I
2016-11-18 13:28 ` [PATCH 16/20] phy: fix returnvar.cocci warnings Kishon Vijay Abraham I
2016-11-18 13:28 ` Kishon Vijay Abraham I [this message]
2016-11-18 13:28 ` [PATCH 18/20] phy: phy-twl4030-usb: emit VBUS status events to userspace Kishon Vijay Abraham I
2016-11-18 13:28 ` [PATCH 19/20] phy: rockchip-inno-usb2: fix uninitialized tmout variable Kishon Vijay Abraham I
2016-11-18 13:28 ` [PATCH 20/20] phy: rockchip-inno-usb2: select USB_COMMON Kishon Vijay Abraham I
2016-11-28 7:46 ` [GIT PULL] phy: for 4.10 Greg KH
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=1479475723-4857-18-git-send-email-kishon@ti.com \
--to=kishon@ti.com \
--cc=gregkh@linuxfoundation.org \
--cc=linux-kernel@vger.kernel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Powered by JetHome