All of lore.kernel.org
 help / color / mirror / Atom feed
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

  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 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.