16 Jun, 2009

3 commits

  • Adjust HNP state machines in MUSB driver so that they handle the
    case where the cable is disconnected. The A-side machine was
    very wrong (unrecoverable); the B-Side was much less so.

    - A_PERIPHERAL ... as usual, the non-observability of the ID
    pin through Mentor's registers makes trouble. We can't go
    directly to A_WAIT_VFALL to end the session and start the
    disconnect processing. We can however sense link suspending,
    go to A_WAIT_BCON, and from there use OTG timeouts to finally
    trigger that A_WAIT_VFALL transition. (Hoping that nobody
    reconnects quickly to that port and notices the wrong state.)

    - B_HOST ... actually clear the Host Request (HR) bit as the
    messages say, disconnect the peripheral from the root hub,
    and don't detour through a suspend state. (In some cases
    this would eventually have cleaned up.)

    Also adjust the A_SUSPEND transition to respect the A_AIDL_BDIS
    timeout, so if HNP doesn't trigger quickly enough the A_WAIT_VFALL
    transition happens as it should.

    Signed-off-by: David Brownell
    Signed-off-by: Greg Kroah-Hartman

    David Brownell
     
  • Minor HNP bugfixes, so the initial role switch works:

    - A-Device:
    * disconnect-during-suspend enters A_PERIPHERAL state
    * kill OTG timer after reset as A_PERIPHERAL ...
    * ... and also pass that reset to the gadget
    * once HNP succeeds, clear the "ignore_disconnect" flag
    * from A_PERIPHERAL, disconnect transitions to A_WAIT_BCON

    - B-Device:
    * kill OTG timer on entry to B_HOST state (HNP succeeded)
    * once HNP succeeds, clear "ignore_disconnect" flag
    * kick the root hub only _after_ the state is adjusted

    Other state transitions are left alone. Notably, exit paths from
    the "roles have switched" state ... A_PERIPHERAL handling of that
    stays seriously broken.

    Signed-off-by: David Brownell
    Signed-off-by: Greg Kroah-Hartman

    David Brownell
     
  • Let the otg_transceiver in MUSB be managed by an external driver;
    don't assume it's integrated. OMAP3 chips need it to be external,
    and there may be ways to interact with the transceiver which add
    functionality to the system.

    Platform init code is responsible for setting up the transeciver,
    probably using the NOP transceiver for integrated transceivers.
    External ones will use whatever the board init code provided,
    such as twl4030 or something more hands-off.

    Signed-off-by: David Brownell
    Signed-off-by: Greg Kroah-Hartman

    David Brownell
     

25 Mar, 2009

1 commit


14 Aug, 2008

1 commit

  • This patch adds support for MUSB and TUSB controllers
    integrated into omap2430 and davinci. It also adds support
    for external tusb6010 controller.

    Cc: David Brownell
    Cc: Tony Lindgren
    Signed-off-by: Felipe Balbi
    Signed-off-by: Greg Kroah-Hartman

    Felipe Balbi