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