All of lore.kernel.org
 help / color / mirror / Atom feed
From: Tony Lindgren <tony@atomide.com>
To: Robert Schuster <theBohemian@gmx.net>
Cc: linux-omap-open-source@linux.omap.com
Subject: Re: Nokia N800 - USB Host mode issues
Date: Wed, 11 Jul 2007 04:14:23 -0700	[thread overview]
Message-ID: <20070711111041.GE19166@atomide.com> (raw)
In-Reply-To: <468B9807.90707@gmx.net>

* Robert Schuster <theBohemian@gmx.net> [070704 05:53]:
> @Tony: Sorry have to send this again. The list does not like signed mails ..
> 
> Hi Tony,
> thanks preparing the 2.6.18 backport. I tried those patches and it works
> better generally. Throughput seems to be a bit higher now (tested with a
> USB Ethernet adapter) and device removal/attachment is solid.
> 
> Still I have some problems but I probably need to tell you how I have
> modified my N800. The boot process of the N770s detected whether they
> should set the USB chip to host or client via a configuration variable
> and loaded a bunch of drivers (usbnet, usbserial, pl2303, asix, usbhid
> ...). What I basically did is porting this behavior to the N800's
> linuxrc. So pegasus et al gets loaded when USB host mode is requested
> furthermore the musb driver is properly initialized (cat 'host' >
> /sys/.../mode).
> 
> All connections as host are made with a Mini-B to A cable at whose end a
>  type A gender changer is connected. I use the same cable without the
> gender changer for connections made as client.

OK

> So here comes the problems:
> 1) USB Hostmode is not activated when there was no client-connection
> first. That means I have to power on the N800 with the cable connected
> to a host. When the OS' desktop is visible I disconnect the cable and
> can connect it to the host side of a hub. Everything works fine.

Hmm, I'll take a look at that, but it won't happen until in August.
Could this be if you don't have any  driver loaded? I believe
currently the driver needs a gadget or host driver loaded in order
to be active.

> Here is how the contents of 'mode' and 'cable' behave during those
> activities:
> 
>  - N800 boots, echo "host" > ... happens, cable is connected to a host
>  mode: a_wait_bcon
>  cable: Mini-B
> 
>  - cable is unplugged:
>  mode: a_wait_bcon
>  cable: Mini-A
> 
>  - cable is plugged to a hub (as host, of course)
>  mode: a_host
>  cable: Mini-A
> 
> (the following is just for testing purposes)
>  - cable is unplugged:
>  mode: a_wait_bcon
>  cable: Mini-A
> 
>  - cable is connected to a host
>  mode: a_wait_bcon
>  cable: Mini-A
> 
> So cable does not change back to Mini-B. My guess is that there is some
> event missing in the driver's state machine that lets it switch to a
> 'wait for a connection with cable type Mini-A' state.

OK, sounds like there is something wrong with the status detection
still.

> 2) Attaching a USB Keyboard which has two USB 1.1 ports built-in fails.
> First case is that I try to connect it directly (without a hub in
> between). dmesg gives this:
> 
> [  647.438598] usb 1-1: new full speed USB device using musb_hdrc and
> address 8
> [  647.587036] usb 1-1: ep0 maxpacket = 8
> [  647.587829] usb 1-1: default language 0x0409
> [  647.588317] usb 1-1: new device strings: Mfr=1, Product=2, SerialNumber=0
> [  647.588348] usb 1-1: Product: USB Keyboard + 2P Hub
> [  647.588592] usb 1-1: uevent
> [  647.589050] usb 1-1: configuration #1 chosen from 1 choice
> [  647.589508] usb 1-1: adding 1-1:1.0 (config #1, interface 0)
> [  647.589660] usb 1-1:1.0: uevent
> [  647.589813] hub 1-1:1.0: usb_probe_interface
> [  647.589843] hub 1-1:1.0: usb_probe_interface - got id
> [  647.589874] hub 1-1:1.0: USB hub found
> [  647.590118] hub 1-1:1.0: 3 ports detected
> [  647.590179] hub 1-1:1.0: compound device; port removable status: FRR
> [  647.590209] hub 1-1:1.0: individual port power switching
> [  647.590240] hub 1-1:1.0: individual port over-current protection
> [  647.590270] hub 1-1:1.0: power on to power good time: 44ms
> [  647.590454] hub 1-1:1.0: hub controller current requirement: 100mA
> [  647.590484] hub 1-1:1.0: 100mA bus power budget for each child
> [  647.590637] hub 1-1:1.0: enabling power on all ports
> [  647.591613] musb_stage0_irq 537: VBUS_ERROR in a_host (91,
> <VBusValid), retry  #1, port1 00020103
> [  647.786224] musb_stage0_irq 598: CONNECT (a_host) devctl 5d
> [  652.696411] usb 1-1: khubd timed out on ep0in len=0/255
> 
> After the timeout the driver tries it over and over again.
> 
> If I connect the keyboard through a USB 2.0 hub it shows:
> 
> [  252.340789] usb 1-1.1.1: new full speed USB device using musb_hdrc
> and address 7
> [  252.426483] usb 1-1.1.1: device descriptor read/64, error -71
> [  252.621673] usb 1-1.1.1: device descriptor read/64, error -71
> [  252.817535] usb 1-1.1.1: new full speed USB device using musb_hdrc
> and address 8
> [  252.903167] usb 1-1.1.1: device descriptor read/64, error -71
> [  253.098937] usb 1-1.1.1: device descriptor read/64, error -71
> [  253.294067] usb 1-1.1.1: new full speed USB device using musb_hdrc
> and address 9
> [  253.715484] usb 1-1.1.1: device not accepting address 9, error -71
> [  253.801910] usb 1-1.1.1: new full speed USB device using musb_hdrc
> and address 10
> [  254.223297] usb 1-1.1.1: device not accepting address 10, error -71
> [  254.223968] hub 1-1.1:1.0: state 7 ports 3 chg 0000 evt 0002
> 
> After that:
> 
> [  267.701049] musb_stage0_irq 621: BUS RESET
> [  267.701110] musb_stage2_irq 695: DISCONNECT (a_peripheral) as
> Peripheral, devctl 19
> 
> ... (all devices disconnecting) ...
> 
> [  267.854461] musb_stage0_irq 537: VBUS_ERROR in a_wait_vfall (98,
> VALID), retry #0, port1 00000100
> [  267.854522] tusb_source_power 544: VBUS b_idle, devctl 98 otg 171
> conf c0000001 prcm 00a80500
> 
> After that I cannot get the driver to enter "a_host" again: Switching to
> "peripheral" and connecting as client is ok. But if I try "host" cable
> will show "disconnected" when it is really disconnected but also when it
> is plugged into the hub (mode contains "a_wait_bcon" all the time).

This is because the keyboard and hubs eat up more than the 100mA N800
can provide. I assume it works through a powered hub?

But still there's a problem if after the VBUS_ERROR it is unable to
detect other devices.

> This was a lot of text. I will try to understand the behavior from the
> sources but I hope that someone with better knowledge about the driver
> may get a clue faster.

Thanks for the information, it helps track down remaining issues. BTW,
my response time may be long right now as I'm mostly on vacation :)

Tony

  reply	other threads:[~2007-07-11 11:14 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-06-29 16:39 Nokia N800 - USB Host mode issues Robert Schuster
2007-07-03  9:26 ` Tony Lindgren
2007-07-04  0:20   ` robert.vogt
2007-07-11 11:03     ` Tony Lindgren
2007-07-04 12:52   ` Robert Schuster
2007-07-11 11:14     ` Tony Lindgren [this message]
2007-07-11 13:45       ` 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=20070711111041.GE19166@atomide.com \
    --to=tony@atomide.com \
    --cc=linux-omap-open-source@linux.omap.com \
    --cc=theBohemian@gmx.net \
    /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.