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