| 1 | ==============================================
|
| 2 | ChipIdea Highspeed Dual Role Controller Driver
|
| 3 | ==============================================
|
| 4 |
|
| 5 | 1. How to test OTG FSM(HNP and SRP)
|
| 6 | -----------------------------------
|
| 7 |
|
| 8 | To show how to demo OTG HNP and SRP functions via sys input files
|
| 9 | with 2 Freescale i.MX6Q sabre SD boards.
|
| 10 |
|
| 11 | 1.1 How to enable OTG FSM
|
| 12 | -------------------------
|
| 13 |
|
| 14 | 1.1.1 Select CONFIG_USB_OTG_FSM in menuconfig, rebuild kernel
|
| 15 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| 16 |
|
| 17 | Image and modules. If you want to check some internal
|
| 18 | variables for otg fsm, mount debugfs, there are 2 files
|
| 19 | which can show otg fsm variables and some controller registers value::
|
| 20 |
|
| 21 | cat /sys/kernel/debug/ci_hdrc.0/otg
|
| 22 | cat /sys/kernel/debug/ci_hdrc.0/registers
|
| 23 |
|
| 24 | 1.1.2 Add below entries in your dts file for your controller node
|
| 25 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| 26 |
|
| 27 | ::
|
| 28 |
|
| 29 | otg-rev = <0x0200>;
|
| 30 | adp-disable;
|
| 31 |
|
| 32 | 1.2 Test operations
|
| 33 | -------------------
|
| 34 |
|
| 35 | 1) Power up 2 Freescale i.MX6Q sabre SD boards with gadget class driver loaded
|
| 36 | (e.g. g_mass_storage).
|
| 37 |
|
| 38 | 2) Connect 2 boards with usb cable: one end is micro A plug, the other end
|
| 39 | is micro B plug.
|
| 40 |
|
| 41 | The A-device (with micro A plug inserted) should enumerate B-device.
|
| 42 |
|
| 43 | 3) Role switch
|
| 44 |
|
| 45 | On B-device::
|
| 46 |
|
| 47 | echo 1 > /sys/bus/platform/devices/ci_hdrc.0/inputs/b_bus_req
|
| 48 |
|
| 49 | B-device should take host role and enumerate A-device.
|
| 50 |
|
| 51 | 4) A-device switch back to host.
|
| 52 |
|
| 53 | On B-device::
|
| 54 |
|
| 55 | echo 0 > /sys/bus/platform/devices/ci_hdrc.0/inputs/b_bus_req
|
| 56 |
|
| 57 | or, by introducing HNP polling, B-Host can know when A-peripheral wishes to
|
| 58 | be in the host role, so this role switch also can be triggered in
|
| 59 | A-peripheral side by answering the polling from B-Host. This can be done on
|
| 60 | A-device::
|
| 61 |
|
| 62 | echo 1 > /sys/bus/platform/devices/ci_hdrc.0/inputs/a_bus_req
|
| 63 |
|
| 64 | A-device should switch back to host and enumerate B-device.
|
| 65 |
|
| 66 | 5) Remove B-device (unplug micro B plug) and insert again in 10 seconds;
|
| 67 | A-device should enumerate B-device again.
|
| 68 |
|
| 69 | 6) Remove B-device (unplug micro B plug) and insert again after 10 seconds;
|
| 70 | A-device should NOT enumerate B-device.
|
| 71 |
|
| 72 | if A-device wants to use bus:
|
| 73 |
|
| 74 | On A-device::
|
| 75 |
|
| 76 | echo 0 > /sys/bus/platform/devices/ci_hdrc.0/inputs/a_bus_drop
|
| 77 | echo 1 > /sys/bus/platform/devices/ci_hdrc.0/inputs/a_bus_req
|
| 78 |
|
| 79 | if B-device wants to use bus:
|
| 80 |
|
| 81 | On B-device::
|
| 82 |
|
| 83 | echo 1 > /sys/bus/platform/devices/ci_hdrc.0/inputs/b_bus_req
|
| 84 |
|
| 85 | 7) A-device power down the bus.
|
| 86 |
|
| 87 | On A-device::
|
| 88 |
|
| 89 | echo 1 > /sys/bus/platform/devices/ci_hdrc.0/inputs/a_bus_drop
|
| 90 |
|
| 91 | A-device should disconnect with B-device and power down the bus.
|
| 92 |
|
| 93 | 8) B-device does data pulse for SRP.
|
| 94 |
|
| 95 | On B-device::
|
| 96 |
|
| 97 | echo 1 > /sys/bus/platform/devices/ci_hdrc.0/inputs/b_bus_req
|
| 98 |
|
| 99 | A-device should resume usb bus and enumerate B-device.
|
| 100 |
|
| 101 | 1.3 Reference document
|
| 102 | ----------------------
|
| 103 | "On-The-Go and Embedded Host Supplement to the USB Revision 2.0 Specification
|
| 104 | July 27, 2012 Revision 2.0 version 1.1a"
|
| 105 |
|
| 106 | 2. How to enable USB as system wakeup source
|
| 107 | --------------------------------------------
|
| 108 | Below is the example for how to enable USB as system wakeup source
|
| 109 | on an imx6 platform.
|
| 110 |
|
| 111 | 2.1 Enable core's wakeup::
|
| 112 |
|
| 113 | echo enabled > /sys/bus/platform/devices/ci_hdrc.0/power/wakeup
|
| 114 |
|
| 115 | 2.2 Enable glue layer's wakeup::
|
| 116 |
|
| 117 | echo enabled > /sys/bus/platform/devices/2184000.usb/power/wakeup
|
| 118 |
|
| 119 | 2.3 Enable PHY's wakeup (optional)::
|
| 120 |
|
| 121 | echo enabled > /sys/bus/platform/devices/20c9000.usbphy/power/wakeup
|
| 122 |
|
| 123 | 2.4 Enable roothub's wakeup::
|
| 124 |
|
| 125 | echo enabled > /sys/bus/usb/devices/usb1/power/wakeup
|
| 126 |
|
| 127 | 2.5 Enable related device's wakeup::
|
| 128 |
|
| 129 | echo enabled > /sys/bus/usb/devices/1-1/power/wakeup
|
| 130 |
|
| 131 | If the system has only one usb port, and you want usb wakeup at this port, you
|
| 132 | can use the below script to enable usb wakeup::
|
| 133 |
|
| 134 | for i in $(find /sys -name wakeup | grep usb);do echo enabled > $i;done;
|