From: "Pali Rohár" <pali.rohar-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
To: Tony Lindgren <tony-4v6yS6AI5VpBDgjK7y7TUQ@public.gmane.org>
Cc: joerg Reisenweber <joerg-4Bgg8jF3iZdg9hUCZPvPmw@public.gmane.org>,
Felipe Balbi <balbi-l0cyMroinI0@public.gmane.org>,
Greg Kroah-Hartman
<gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r@public.gmane.org>,
linux-usb-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
linux-omap-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
Ivaylo Dimitrov
<ivo.g.dimitrov.75-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
Sebastian Reichel <sre-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>,
Aaro Koskinen <aaro.koskinen-X3B1VOXEql0@public.gmane.org>,
Pavel Machek <pavel-+ZI9xUNit7I@public.gmane.org>,
Nishanth Menon <nm-l0cyMroinI0@public.gmane.org>
Subject: Re: Nokia N900: musb is in wrong state after boot
Date: Sun, 29 May 2016 12:38:24 +0200 [thread overview]
Message-ID: <20160529103824.GM29844@pali> (raw)
In-Reply-To: <201601231357.32629@pali>
On Saturday 23 January 2016 13:57:32 Pali Rohár wrote:
> On Thursday 21 January 2016 20:21:13 Tony Lindgren wrote:
> > * joerg Reisenweber <joerg-4Bgg8jF3iZdg9hUCZPvPmw@public.gmane.org> [160121 10:45]:
> > > On Thu 21 January 2016 09:41:46 Tony Lindgren wrote:
> > > > Then for supporting the USB host mode.. We should add regulator
> > > > support to the USB PHY driver so if the ID pin is grounded, the
> > > > PHY driver enables the VBUS regulator. That too seems to need
> > > > some coordination between the drivers/phy/phy-twl4030-usb.c and
> > > > 1707 driver if the ID pin interrupt is only detected in
> > > > drivers/phy/phy-twl4030-usb.c.
> > >
> > > Note that, while this is probably a good thing to do, it needs to
> > > be sufficiently loose coupling to allow user to 'intercept' this
> > > VBOOS regulator enabling and instead allow device charging while
> > > in externally powered hostmode. There's even a spec for this in
> > > USB-docs-foo iirc, something along a certain resistor value on ID
> > > to GND - alas I guess the twl4030 is not capable to detect such
> > > sophisticated signaling, and anyway it's always desirable to allow
> > > user to manually override the VBOOST and enable VBUS-charging
> > > while in hostmode.
> >
> > OK, I think this is what's happening with the Motorola LapDock BTW.
> > It always feeds the VBUS, well most of the time. Do you have some
> > pointer to the "certain resistor value on ID to GND" spec? Is it
> > maybe part of the carkit related parts of the USB spec?
> >
> > > On N900 the situation is even more complex since the 1707 doesn't
> > > support genuine ID detection, neither does it support emulated ID
> > > grounding. And there's no other method than a ID=GND message from
> > > PHY to musb core to make the musb core state engine transfer into
> > > proper hostmode. Thus my H-E-N hostmode botch abuses debug flags
> > > to force the musb core into a "emulated" hostmode and this mode
> > > doesn't support USB speed detection. Thus speed settings are
> > > forced onto musb core and PHY by software, and the musb core speed
> > > bits are only effective before session enabled.
> > > Bottom line: you need VBUS to try and negotiate speed with the
> > > attached device in hostmode, but to actually set this speed you
> > > detected by software means, you need to disable and discharge VBUS
> > > again, or musb core won't care about the speed you set. To be
> > > utterly clear: unconditional enabling of VBUS in ID=GND won't
> > > work.
> > >
> > > This is quite complex and it's questionable if it could get handled
> > > reasonably in kernel space. *Very* N900 specific niche solution,
> > > I'd not think it's suited for upstreaming.
> >
> > Yeah OK. I think we should be able to support the aux VBUS regulator
> > part with mainline kernel though.
> >
> > Regards,
> >
> > Tony
>
> Hello, attached patch for musb debugfs adds option to force both
> hostmode with speed. It is just example, I tested only compilation.
>
> Something like that will be needed for usb host mode on Nokia N900.
>
> --
> Pali Rohár
> pali.rohar-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org
> From fd67b58e3538c0732750ecad915cde736da099dc Mon Sep 17 00:00:00 2001
> From: =?UTF-8?q?Pali=20Roh=C3=A1r?= <pali.rohar-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
> Date: Sat, 9 Jan 2016 16:57:59 +0100
> Subject: [PATCH] musb: debugfs: Add support in testmode for forcing host mode
> together with speed
>
> ---
> drivers/usb/musb/musb_debugfs.c | 44 +++++++++++++++++++++++++--------------
> 1 file changed, 28 insertions(+), 16 deletions(-)
>
> diff --git a/drivers/usb/musb/musb_debugfs.c b/drivers/usb/musb/musb_debugfs.c
> index 9b22d94..62c13a2 100644
> --- a/drivers/usb/musb/musb_debugfs.c
> +++ b/drivers/usb/musb/musb_debugfs.c
> @@ -147,28 +147,34 @@ static int musb_test_mode_show(struct seq_file *s, void *unused)
>
> test = musb_readb(musb->mregs, MUSB_TESTMODE);
>
> - if (test & MUSB_TEST_FORCE_HOST)
> + if (test & (MUSB_TEST_FORCE_HOST | MUSB_TEST_FORCE_FS))
> + seq_printf(s, "force host full-speed\n");
> +
> + else if (test & (MUSB_TEST_FORCE_HOST | MUSB_TEST_FORCE_HS))
> + seq_printf(s, "force host high-speed\n");
> +
> + else if (test & MUSB_TEST_FORCE_HOST)
> seq_printf(s, "force host\n");
>
> - if (test & MUSB_TEST_FIFO_ACCESS)
> + else if (test & MUSB_TEST_FIFO_ACCESS)
> seq_printf(s, "fifo access\n");
>
> - if (test & MUSB_TEST_FORCE_FS)
> + else if (test & MUSB_TEST_FORCE_FS)
> seq_printf(s, "force full-speed\n");
>
> - if (test & MUSB_TEST_FORCE_HS)
> + else if (test & MUSB_TEST_FORCE_HS)
> seq_printf(s, "force high-speed\n");
>
> - if (test & MUSB_TEST_PACKET)
> + else if (test & MUSB_TEST_PACKET)
> seq_printf(s, "test packet\n");
>
> - if (test & MUSB_TEST_K)
> + else if (test & MUSB_TEST_K)
> seq_printf(s, "test K\n");
>
> - if (test & MUSB_TEST_J)
> + else if (test & MUSB_TEST_J)
> seq_printf(s, "test J\n");
>
> - if (test & MUSB_TEST_SE0_NAK)
> + else if (test & MUSB_TEST_SE0_NAK)
> seq_printf(s, "test SE0 NAK\n");
>
> return 0;
> @@ -206,30 +212,36 @@ static ssize_t musb_test_mode_write(struct file *file,
> if (copy_from_user(buf, ubuf, min_t(size_t, sizeof(buf) - 1, count)))
> return -EFAULT;
>
> - if (strstarts(buf, "force host"))
> + if (strstarts(buf, "force host full-speed"))
> + test = MUSB_TEST_FORCE_HOST | MUSB_TEST_FORCE_FS;
> +
> + else if (strstarts(buf, "force host high-speed"))
> + test = MUSB_TEST_FORCE_HOST | MUSB_TEST_FORCE_HS;
> +
> + else if (strstarts(buf, "force host"))
> test = MUSB_TEST_FORCE_HOST;
>
> - if (strstarts(buf, "fifo access"))
> + else if (strstarts(buf, "fifo access"))
> test = MUSB_TEST_FIFO_ACCESS;
>
> - if (strstarts(buf, "force full-speed"))
> + else if (strstarts(buf, "force full-speed"))
> test = MUSB_TEST_FORCE_FS;
>
> - if (strstarts(buf, "force high-speed"))
> + else if (strstarts(buf, "force high-speed"))
> test = MUSB_TEST_FORCE_HS;
>
> - if (strstarts(buf, "test packet")) {
> + else if (strstarts(buf, "test packet")) {
> test = MUSB_TEST_PACKET;
> musb_load_testpacket(musb);
> }
>
> - if (strstarts(buf, "test K"))
> + else if (strstarts(buf, "test K"))
> test = MUSB_TEST_K;
>
> - if (strstarts(buf, "test J"))
> + else if (strstarts(buf, "test J"))
> test = MUSB_TEST_J;
>
> - if (strstarts(buf, "test SE0 NAK"))
> + else if (strstarts(buf, "test SE0 NAK"))
> test = MUSB_TEST_SE0_NAK;
>
> musb_writeb(musb->mregs, MUSB_TESTMODE, test);
> --
> 1.7.9.5
>
Tony, what do you think about that patch?
--
Pali Rohár
pali.rohar-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
WARNING: multiple messages have this Message-ID (diff)
From: "Pali Rohár" <pali.rohar@gmail.com>
To: Tony Lindgren <tony@atomide.com>
Cc: joerg Reisenweber <joerg@openmoko.org>,
Felipe Balbi <balbi@ti.com>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-omap@vger.kernel.org,
Ivaylo Dimitrov <ivo.g.dimitrov.75@gmail.com>,
Sebastian Reichel <sre@kernel.org>,
Aaro Koskinen <aaro.koskinen@iki.fi>, Pavel Machek <pavel@ucw.cz>,
Nishanth Menon <nm@ti.com>
Subject: Re: Nokia N900: musb is in wrong state after boot
Date: Sun, 29 May 2016 12:38:24 +0200 [thread overview]
Message-ID: <20160529103824.GM29844@pali> (raw)
In-Reply-To: <201601231357.32629@pali>
On Saturday 23 January 2016 13:57:32 Pali Rohár wrote:
> On Thursday 21 January 2016 20:21:13 Tony Lindgren wrote:
> > * joerg Reisenweber <joerg@openmoko.org> [160121 10:45]:
> > > On Thu 21 January 2016 09:41:46 Tony Lindgren wrote:
> > > > Then for supporting the USB host mode.. We should add regulator
> > > > support to the USB PHY driver so if the ID pin is grounded, the
> > > > PHY driver enables the VBUS regulator. That too seems to need
> > > > some coordination between the drivers/phy/phy-twl4030-usb.c and
> > > > 1707 driver if the ID pin interrupt is only detected in
> > > > drivers/phy/phy-twl4030-usb.c.
> > >
> > > Note that, while this is probably a good thing to do, it needs to
> > > be sufficiently loose coupling to allow user to 'intercept' this
> > > VBOOS regulator enabling and instead allow device charging while
> > > in externally powered hostmode. There's even a spec for this in
> > > USB-docs-foo iirc, something along a certain resistor value on ID
> > > to GND - alas I guess the twl4030 is not capable to detect such
> > > sophisticated signaling, and anyway it's always desirable to allow
> > > user to manually override the VBOOST and enable VBUS-charging
> > > while in hostmode.
> >
> > OK, I think this is what's happening with the Motorola LapDock BTW.
> > It always feeds the VBUS, well most of the time. Do you have some
> > pointer to the "certain resistor value on ID to GND" spec? Is it
> > maybe part of the carkit related parts of the USB spec?
> >
> > > On N900 the situation is even more complex since the 1707 doesn't
> > > support genuine ID detection, neither does it support emulated ID
> > > grounding. And there's no other method than a ID=GND message from
> > > PHY to musb core to make the musb core state engine transfer into
> > > proper hostmode. Thus my H-E-N hostmode botch abuses debug flags
> > > to force the musb core into a "emulated" hostmode and this mode
> > > doesn't support USB speed detection. Thus speed settings are
> > > forced onto musb core and PHY by software, and the musb core speed
> > > bits are only effective before session enabled.
> > > Bottom line: you need VBUS to try and negotiate speed with the
> > > attached device in hostmode, but to actually set this speed you
> > > detected by software means, you need to disable and discharge VBUS
> > > again, or musb core won't care about the speed you set. To be
> > > utterly clear: unconditional enabling of VBUS in ID=GND won't
> > > work.
> > >
> > > This is quite complex and it's questionable if it could get handled
> > > reasonably in kernel space. *Very* N900 specific niche solution,
> > > I'd not think it's suited for upstreaming.
> >
> > Yeah OK. I think we should be able to support the aux VBUS regulator
> > part with mainline kernel though.
> >
> > Regards,
> >
> > Tony
>
> Hello, attached patch for musb debugfs adds option to force both
> hostmode with speed. It is just example, I tested only compilation.
>
> Something like that will be needed for usb host mode on Nokia N900.
>
> --
> Pali Rohár
> pali.rohar@gmail.com
> From fd67b58e3538c0732750ecad915cde736da099dc Mon Sep 17 00:00:00 2001
> From: =?UTF-8?q?Pali=20Roh=C3=A1r?= <pali.rohar@gmail.com>
> Date: Sat, 9 Jan 2016 16:57:59 +0100
> Subject: [PATCH] musb: debugfs: Add support in testmode for forcing host mode
> together with speed
>
> ---
> drivers/usb/musb/musb_debugfs.c | 44 +++++++++++++++++++++++++--------------
> 1 file changed, 28 insertions(+), 16 deletions(-)
>
> diff --git a/drivers/usb/musb/musb_debugfs.c b/drivers/usb/musb/musb_debugfs.c
> index 9b22d94..62c13a2 100644
> --- a/drivers/usb/musb/musb_debugfs.c
> +++ b/drivers/usb/musb/musb_debugfs.c
> @@ -147,28 +147,34 @@ static int musb_test_mode_show(struct seq_file *s, void *unused)
>
> test = musb_readb(musb->mregs, MUSB_TESTMODE);
>
> - if (test & MUSB_TEST_FORCE_HOST)
> + if (test & (MUSB_TEST_FORCE_HOST | MUSB_TEST_FORCE_FS))
> + seq_printf(s, "force host full-speed\n");
> +
> + else if (test & (MUSB_TEST_FORCE_HOST | MUSB_TEST_FORCE_HS))
> + seq_printf(s, "force host high-speed\n");
> +
> + else if (test & MUSB_TEST_FORCE_HOST)
> seq_printf(s, "force host\n");
>
> - if (test & MUSB_TEST_FIFO_ACCESS)
> + else if (test & MUSB_TEST_FIFO_ACCESS)
> seq_printf(s, "fifo access\n");
>
> - if (test & MUSB_TEST_FORCE_FS)
> + else if (test & MUSB_TEST_FORCE_FS)
> seq_printf(s, "force full-speed\n");
>
> - if (test & MUSB_TEST_FORCE_HS)
> + else if (test & MUSB_TEST_FORCE_HS)
> seq_printf(s, "force high-speed\n");
>
> - if (test & MUSB_TEST_PACKET)
> + else if (test & MUSB_TEST_PACKET)
> seq_printf(s, "test packet\n");
>
> - if (test & MUSB_TEST_K)
> + else if (test & MUSB_TEST_K)
> seq_printf(s, "test K\n");
>
> - if (test & MUSB_TEST_J)
> + else if (test & MUSB_TEST_J)
> seq_printf(s, "test J\n");
>
> - if (test & MUSB_TEST_SE0_NAK)
> + else if (test & MUSB_TEST_SE0_NAK)
> seq_printf(s, "test SE0 NAK\n");
>
> return 0;
> @@ -206,30 +212,36 @@ static ssize_t musb_test_mode_write(struct file *file,
> if (copy_from_user(buf, ubuf, min_t(size_t, sizeof(buf) - 1, count)))
> return -EFAULT;
>
> - if (strstarts(buf, "force host"))
> + if (strstarts(buf, "force host full-speed"))
> + test = MUSB_TEST_FORCE_HOST | MUSB_TEST_FORCE_FS;
> +
> + else if (strstarts(buf, "force host high-speed"))
> + test = MUSB_TEST_FORCE_HOST | MUSB_TEST_FORCE_HS;
> +
> + else if (strstarts(buf, "force host"))
> test = MUSB_TEST_FORCE_HOST;
>
> - if (strstarts(buf, "fifo access"))
> + else if (strstarts(buf, "fifo access"))
> test = MUSB_TEST_FIFO_ACCESS;
>
> - if (strstarts(buf, "force full-speed"))
> + else if (strstarts(buf, "force full-speed"))
> test = MUSB_TEST_FORCE_FS;
>
> - if (strstarts(buf, "force high-speed"))
> + else if (strstarts(buf, "force high-speed"))
> test = MUSB_TEST_FORCE_HS;
>
> - if (strstarts(buf, "test packet")) {
> + else if (strstarts(buf, "test packet")) {
> test = MUSB_TEST_PACKET;
> musb_load_testpacket(musb);
> }
>
> - if (strstarts(buf, "test K"))
> + else if (strstarts(buf, "test K"))
> test = MUSB_TEST_K;
>
> - if (strstarts(buf, "test J"))
> + else if (strstarts(buf, "test J"))
> test = MUSB_TEST_J;
>
> - if (strstarts(buf, "test SE0 NAK"))
> + else if (strstarts(buf, "test SE0 NAK"))
> test = MUSB_TEST_SE0_NAK;
>
> musb_writeb(musb->mregs, MUSB_TESTMODE, test);
> --
> 1.7.9.5
>
Tony, what do you think about that patch?
--
Pali Rohár
pali.rohar@gmail.com
next prev parent reply other threads:[~2016-05-29 10:38 UTC|newest]
Thread overview: 53+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-01-09 15:16 Nokia N900: musb is in wrong state after boot Pali Rohár
2016-01-09 15:16 ` Pali Rohár
2016-01-19 20:33 ` Tony Lindgren
2016-01-19 20:33 ` Tony Lindgren
2016-01-21 8:40 ` Pali Rohár
2016-01-21 9:57 ` Ivaylo Dimitrov
2016-01-21 10:23 ` Pali Rohár
2016-01-21 10:27 ` Ivaylo Dimitrov
2016-01-21 10:29 ` joerg Reisenweber
2016-01-21 17:41 ` Tony Lindgren
2016-01-21 18:44 ` joerg Reisenweber
2016-01-21 19:21 ` Tony Lindgren
2016-01-21 19:34 ` joerg Reisenweber
2016-01-21 20:30 ` Tony Lindgren
2016-01-26 14:34 ` Pali Rohár
2016-01-26 17:26 ` Tony Lindgren
2016-02-21 11:12 ` Pali Rohár
2016-02-22 7:31 ` Felipe Balbi
2016-02-22 8:34 ` Pali Rohár
2016-02-22 8:54 ` Felipe Balbi
2016-02-22 8:54 ` Felipe Balbi
2016-02-22 15:36 ` Bin Liu
2016-02-22 15:36 ` Bin Liu
2016-02-22 15:49 ` Adam Ford
2016-02-22 15:49 ` Adam Ford
2016-01-23 12:57 ` Pali Rohár
2016-05-29 10:38 ` Pali Rohár [this message]
2016-05-29 10:38 ` Pali Rohár
2016-06-07 12:50 ` Pali Rohár
2016-06-08 9:53 ` Tony Lindgren
2016-06-08 10:02 ` Felipe Balbi
2016-06-08 10:19 ` Pali Rohár
[not found] ` <87h9d49exz.fsf-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
2016-06-08 10:20 ` joerg Reisenweber
2016-06-08 10:20 ` joerg Reisenweber
2016-06-08 12:04 ` Sergei Shtylyov
2016-06-08 12:04 ` Sergei Shtylyov
[not found] ` <71cb45ec-a269-d510-df34-eb6eaa781da8-M4DtvfQ/ZS1MRgGoP+s0PdBPR1lH4CV8@public.gmane.org>
2016-06-08 12:18 ` joerg Reisenweber
2016-06-08 12:18 ` joerg Reisenweber
2016-06-08 12:32 ` Sergei Shtylyov
2016-06-08 12:32 ` Sergei Shtylyov
2016-06-09 21:09 ` Bin Liu
2016-06-09 20:58 ` Bin Liu
2016-06-09 20:58 ` Bin Liu
2016-06-09 21:25 ` joerg Reisenweber
2016-06-09 21:25 ` joerg Reisenweber
2016-06-10 15:08 ` Bin Liu
2016-06-10 15:23 ` joerg Reisenweber
2016-06-10 15:59 ` Bin Liu
2016-06-10 16:15 ` joerg Reisenweber
2016-06-10 17:04 ` Nishanth Menon
[not found] ` <575AF32B.2090705-l0cyMroinI0@public.gmane.org>
2016-06-10 17:21 ` joerg Reisenweber
2016-06-10 17:21 ` joerg Reisenweber
2016-06-10 17:37 ` Bin Liu
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=20160529103824.GM29844@pali \
--to=pali.rohar-re5jqeeqqe8avxtiumwx3w@public.gmane.org \
--cc=aaro.koskinen-X3B1VOXEql0@public.gmane.org \
--cc=balbi-l0cyMroinI0@public.gmane.org \
--cc=gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r@public.gmane.org \
--cc=ivo.g.dimitrov.75-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
--cc=joerg-4Bgg8jF3iZdg9hUCZPvPmw@public.gmane.org \
--cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-omap-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-usb-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=nm-l0cyMroinI0@public.gmane.org \
--cc=pavel-+ZI9xUNit7I@public.gmane.org \
--cc=sre-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
--cc=tony-4v6yS6AI5VpBDgjK7y7TUQ@public.gmane.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.