public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Mark Jackson <mpfj-list@newflow.co.uk>
To: linux-usb@vger.kernel.org
Cc: lkml <linux-kernel@vger.kernel.org>, Felipe Balbi <balbi@ti.com>,
	bigeasy@linutronix.de, Greg KH <gregkh@linuxfoundation.org>,
	jkosina@suse.cz, anatol.pomozov@gmail.com,
	"linux-omap@vger.kernel.org" <linux-omap@vger.kernel.org>
Subject: [PATCH] Allow MUSB DSPS to use "force host" mode
Date: Fri, 22 Nov 2013 15:55:59 +0000	[thread overview]
Message-ID: <528F7E8F.5050807@newflow.co.uk> (raw)

The IDDIG input pin is normally used to determine the USB mode
(i.e. HOST or DEVICE).

On some systems (e.g. AM335x) leaving this pin floating allows
the USB mode to be set via software.

This patch adds support for this via the device tree.

Signed-off-by: Mark Jackson <mpfj@newflow.co.uk>
---
 .../devicetree/bindings/usb/am33xx-usb.txt         |    2 ++
 drivers/usb/musb/musb_dsps.c                       |   14 ++++++++++++++
 include/linux/usb/musb.h                           |    1 +
 3 files changed, 17 insertions(+)

diff --git a/Documentation/devicetree/bindings/usb/am33xx-usb.txt b/Documentation/devicetree/bindings/usb/am33xx-usb.txt
index 20c2ff2..560b7ff 100644
--- a/Documentation/devicetree/bindings/usb/am33xx-usb.txt
+++ b/Documentation/devicetree/bindings/usb/am33xx-usb.txt
@@ -47,6 +47,8 @@ USB
 - dmas: specifies the dma channels
 - dma-names: specifies the names of the channels. Use "rxN" for receive
   and "txN" for transmit endpoints. N specifies the endpoint number.
+- ti,force-host: specifies that the IDDIG input be ignored and the device be
+  put into host mode regardless.
 
 The controller should have an "usb" alias numbered properly in the alias
 node.
diff --git a/drivers/usb/musb/musb_dsps.c b/drivers/usb/musb/musb_dsps.c
index 1901f6f..6439809 100644
--- a/drivers/usb/musb/musb_dsps.c
+++ b/drivers/usb/musb/musb_dsps.c
@@ -105,6 +105,7 @@ struct dsps_musb_wrapper {
 	unsigned	otg_disable:5;
 
 	/* bit positions for mode */
+	unsigned	iddig_mux:5;
 	unsigned	iddig:5;
 	/* miscellaneous stuff */
 	u8		poll_seconds;
@@ -387,6 +388,15 @@ static int dsps_musb_init(struct musb *musb)
 
 	musb->isr = dsps_interrupt;
 
+	/* Force host mode, rather than relying on IDDIG input */
+	if (musb->config->force_host) {
+		val = dsps_readl(reg_base, wrp->mode);
+		/* clear IDDIG bit, set IDDIG_MUX bit */
+		val &= ~(1 << wrp->iddig);
+		val |= (1 << wrp->iddig_mux);
+		dsps_writel(musb->ctrl_base, wrp->mode, val);
+	}
+
 	/* reset the otgdisable bit, needed for host mode to work */
 	val = dsps_readl(reg_base, wrp->phy_utmi);
 	val &= ~(1 << wrp->otg_disable);
@@ -512,6 +522,9 @@ static int dsps_create_musb_pdev(struct dsps_glue *glue,
 	pdata.power = get_int_prop(dn, "mentor,power") / 2;
 	config->multipoint = of_property_read_bool(dn, "mentor,multipoint");
 
+	if (of_property_read_bool(dn, "ti,force-host"))
+		config->force_host = true;
+
 	ret = platform_device_add_data(musb, &pdata, sizeof(pdata));
 	if (ret) {
 		dev_err(dev, "failed to add platform_data\n");
@@ -607,6 +620,7 @@ static const struct dsps_musb_wrapper am33xx_driver_data = {
 	.mode			= 0xe8,
 	.reset			= 0,
 	.otg_disable		= 21,
+	.iddig_mux		= 7,
 	.iddig			= 8,
 	.usb_shift		= 0,
 	.usb_mask		= 0x1ff,
diff --git a/include/linux/usb/musb.h b/include/linux/usb/musb.h
index eb50525..a0a81c5 100644
--- a/include/linux/usb/musb.h
+++ b/include/linux/usb/musb.h
@@ -75,6 +75,7 @@ struct musb_hdrc_config {
 	unsigned	high_iso_rx:1;	/* Rx ep required for HD iso */
 	unsigned	dma:1 __deprecated; /* supports DMA */
 	unsigned	vendor_req:1 __deprecated; /* vendor registers required */
+	unsigned	force_host:1;	/* force host mode */
 
 	u8		num_eps;	/* number of endpoints _with_ ep0 */
 	u8		dma_channels __deprecated; /* number of dma channels */
-- 
1.7.9.5


             reply	other threads:[~2013-11-22 15:56 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-11-22 15:55 Mark Jackson [this message]
2013-11-22 16:33 ` [PATCH] Allow MUSB DSPS to use "force host" mode Sebastian Andrzej Siewior
2013-11-22 16:49   ` Mark Jackson
2013-11-22 17:01     ` Sebastian Andrzej Siewior
2013-11-22 17:07       ` Mark Jackson
2013-11-22 17:22         ` Sebastian Andrzej Siewior
2013-11-22 16:38 ` Michael Grzeschik
2013-11-22 16:45   ` Mark Jackson
2013-11-25 21:24 ` Felipe Balbi

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=528F7E8F.5050807@newflow.co.uk \
    --to=mpfj-list@newflow.co.uk \
    --cc=anatol.pomozov@gmail.com \
    --cc=balbi@ti.com \
    --cc=bigeasy@linutronix.de \
    --cc=gregkh@linuxfoundation.org \
    --cc=jkosina@suse.cz \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-omap@vger.kernel.org \
    --cc=linux-usb@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