Lines Matching refs:fsm

34 static int otg_set_protocol(struct otg_fsm *fsm, int protocol)  in otg_set_protocol()  argument
38 if (fsm->protocol != protocol) { in otg_set_protocol()
40 fsm->protocol, protocol); in otg_set_protocol()
42 if (fsm->protocol == PROTO_HOST) in otg_set_protocol()
43 ret = otg_start_host(fsm, 0); in otg_set_protocol()
44 else if (fsm->protocol == PROTO_GADGET) in otg_set_protocol()
45 ret = otg_start_gadget(fsm, 0); in otg_set_protocol()
51 ret = otg_start_host(fsm, 1); in otg_set_protocol()
53 ret = otg_start_gadget(fsm, 1); in otg_set_protocol()
57 fsm->protocol = protocol; in otg_set_protocol()
67 static void otg_leave_state(struct otg_fsm *fsm, enum usb_otg_state old_state) in otg_leave_state() argument
71 otg_del_timer(fsm, B_SE0_SRP); in otg_leave_state()
72 fsm->b_se0_srp = 0; in otg_leave_state()
73 fsm->adp_sns = 0; in otg_leave_state()
74 fsm->adp_prb = 0; in otg_leave_state()
77 fsm->data_pulse = 0; in otg_leave_state()
78 fsm->b_srp_done = 0; in otg_leave_state()
83 otg_del_timer(fsm, B_ASE0_BRST); in otg_leave_state()
84 fsm->b_ase0_brst_tmout = 0; in otg_leave_state()
89 fsm->adp_prb = 0; in otg_leave_state()
92 otg_del_timer(fsm, A_WAIT_VRISE); in otg_leave_state()
93 fsm->a_wait_vrise_tmout = 0; in otg_leave_state()
96 otg_del_timer(fsm, A_WAIT_BCON); in otg_leave_state()
97 fsm->a_wait_bcon_tmout = 0; in otg_leave_state()
100 otg_del_timer(fsm, A_WAIT_ENUM); in otg_leave_state()
103 otg_del_timer(fsm, A_AIDL_BDIS); in otg_leave_state()
104 fsm->a_aidl_bdis_tmout = 0; in otg_leave_state()
105 fsm->a_suspend_req_inf = 0; in otg_leave_state()
108 otg_del_timer(fsm, A_BIDL_ADIS); in otg_leave_state()
109 fsm->a_bidl_adis_tmout = 0; in otg_leave_state()
112 otg_del_timer(fsm, A_WAIT_VFALL); in otg_leave_state()
113 fsm->a_wait_vfall_tmout = 0; in otg_leave_state()
114 otg_del_timer(fsm, A_WAIT_VRISE); in otg_leave_state()
124 static int otg_set_state(struct otg_fsm *fsm, enum usb_otg_state new_state) in otg_set_state() argument
127 if (fsm->otg->state == new_state) in otg_set_state()
130 otg_leave_state(fsm, fsm->otg->state); in otg_set_state()
133 otg_drv_vbus(fsm, 0); in otg_set_state()
134 otg_chrg_vbus(fsm, 0); in otg_set_state()
135 otg_loc_conn(fsm, 0); in otg_set_state()
136 otg_loc_sof(fsm, 0); in otg_set_state()
141 otg_start_adp_sns(fsm); in otg_set_state()
142 otg_set_protocol(fsm, PROTO_UNDEF); in otg_set_state()
143 otg_add_timer(fsm, B_SE0_SRP); in otg_set_state()
146 otg_start_pulse(fsm); in otg_set_state()
147 otg_loc_sof(fsm, 0); in otg_set_state()
148 otg_set_protocol(fsm, PROTO_UNDEF); in otg_set_state()
149 otg_add_timer(fsm, B_SRP_FAIL); in otg_set_state()
152 otg_chrg_vbus(fsm, 0); in otg_set_state()
153 otg_loc_sof(fsm, 0); in otg_set_state()
154 otg_set_protocol(fsm, PROTO_GADGET); in otg_set_state()
155 otg_loc_conn(fsm, 1); in otg_set_state()
158 otg_chrg_vbus(fsm, 0); in otg_set_state()
159 otg_loc_conn(fsm, 0); in otg_set_state()
160 otg_loc_sof(fsm, 0); in otg_set_state()
161 otg_set_protocol(fsm, PROTO_HOST); in otg_set_state()
162 otg_add_timer(fsm, B_ASE0_BRST); in otg_set_state()
163 fsm->a_bus_suspend = 0; in otg_set_state()
166 otg_chrg_vbus(fsm, 0); in otg_set_state()
167 otg_loc_conn(fsm, 0); in otg_set_state()
168 otg_loc_sof(fsm, 1); in otg_set_state()
169 otg_set_protocol(fsm, PROTO_HOST); in otg_set_state()
170 usb_bus_start_enum(fsm->otg->host, in otg_set_state()
171 fsm->otg->host->otg_port); in otg_set_state()
174 otg_drv_vbus(fsm, 0); in otg_set_state()
175 otg_chrg_vbus(fsm, 0); in otg_set_state()
176 otg_loc_conn(fsm, 0); in otg_set_state()
177 otg_loc_sof(fsm, 0); in otg_set_state()
178 otg_start_adp_prb(fsm); in otg_set_state()
179 otg_set_protocol(fsm, PROTO_HOST); in otg_set_state()
182 otg_drv_vbus(fsm, 1); in otg_set_state()
183 otg_loc_conn(fsm, 0); in otg_set_state()
184 otg_loc_sof(fsm, 0); in otg_set_state()
185 otg_set_protocol(fsm, PROTO_HOST); in otg_set_state()
186 otg_add_timer(fsm, A_WAIT_VRISE); in otg_set_state()
189 otg_drv_vbus(fsm, 1); in otg_set_state()
190 otg_loc_conn(fsm, 0); in otg_set_state()
191 otg_loc_sof(fsm, 0); in otg_set_state()
192 otg_set_protocol(fsm, PROTO_HOST); in otg_set_state()
193 otg_add_timer(fsm, A_WAIT_BCON); in otg_set_state()
196 otg_drv_vbus(fsm, 1); in otg_set_state()
197 otg_loc_conn(fsm, 0); in otg_set_state()
198 otg_loc_sof(fsm, 1); in otg_set_state()
199 otg_set_protocol(fsm, PROTO_HOST); in otg_set_state()
204 if (!fsm->a_bus_req || fsm->a_suspend_req_inf) in otg_set_state()
205 otg_add_timer(fsm, A_WAIT_ENUM); in otg_set_state()
208 otg_drv_vbus(fsm, 1); in otg_set_state()
209 otg_loc_conn(fsm, 0); in otg_set_state()
210 otg_loc_sof(fsm, 0); in otg_set_state()
211 otg_set_protocol(fsm, PROTO_HOST); in otg_set_state()
212 otg_add_timer(fsm, A_AIDL_BDIS); in otg_set_state()
216 otg_loc_sof(fsm, 0); in otg_set_state()
217 otg_set_protocol(fsm, PROTO_GADGET); in otg_set_state()
218 otg_drv_vbus(fsm, 1); in otg_set_state()
219 otg_loc_conn(fsm, 1); in otg_set_state()
220 otg_add_timer(fsm, A_BIDL_ADIS); in otg_set_state()
223 otg_drv_vbus(fsm, 0); in otg_set_state()
224 otg_loc_conn(fsm, 0); in otg_set_state()
225 otg_loc_sof(fsm, 0); in otg_set_state()
226 otg_set_protocol(fsm, PROTO_HOST); in otg_set_state()
227 otg_add_timer(fsm, A_WAIT_VFALL); in otg_set_state()
230 otg_drv_vbus(fsm, 0); in otg_set_state()
231 otg_loc_conn(fsm, 0); in otg_set_state()
232 otg_loc_sof(fsm, 0); in otg_set_state()
233 otg_set_protocol(fsm, PROTO_UNDEF); in otg_set_state()
239 fsm->otg->state = new_state; in otg_set_state()
244 int otg_statemachine(struct otg_fsm *fsm) in otg_statemachine() argument
248 mutex_lock(&fsm->lock); in otg_statemachine()
250 state = fsm->otg->state; in otg_statemachine()
256 VDBG("fsm->id = %d\n", fsm->id); in otg_statemachine()
257 if (fsm->id) in otg_statemachine()
258 otg_set_state(fsm, OTG_STATE_B_IDLE); in otg_statemachine()
260 otg_set_state(fsm, OTG_STATE_A_IDLE); in otg_statemachine()
263 if (!fsm->id) in otg_statemachine()
264 otg_set_state(fsm, OTG_STATE_A_IDLE); in otg_statemachine()
265 else if (fsm->b_sess_vld && fsm->otg->gadget) in otg_statemachine()
266 otg_set_state(fsm, OTG_STATE_B_PERIPHERAL); in otg_statemachine()
267 else if ((fsm->b_bus_req || fsm->adp_change || fsm->power_up) && in otg_statemachine()
268 fsm->b_ssend_srp && fsm->b_se0_srp) in otg_statemachine()
269 otg_set_state(fsm, OTG_STATE_B_SRP_INIT); in otg_statemachine()
272 if (!fsm->id || fsm->b_srp_done) in otg_statemachine()
273 otg_set_state(fsm, OTG_STATE_B_IDLE); in otg_statemachine()
276 if (!fsm->id || !fsm->b_sess_vld) in otg_statemachine()
277 otg_set_state(fsm, OTG_STATE_B_IDLE); in otg_statemachine()
278 else if (fsm->b_bus_req && fsm->otg-> in otg_statemachine()
279 gadget->b_hnp_enable && fsm->a_bus_suspend) in otg_statemachine()
280 otg_set_state(fsm, OTG_STATE_B_WAIT_ACON); in otg_statemachine()
283 if (fsm->a_conn) in otg_statemachine()
284 otg_set_state(fsm, OTG_STATE_B_HOST); in otg_statemachine()
285 else if (!fsm->id || !fsm->b_sess_vld) in otg_statemachine()
286 otg_set_state(fsm, OTG_STATE_B_IDLE); in otg_statemachine()
287 else if (fsm->a_bus_resume || fsm->b_ase0_brst_tmout) { in otg_statemachine()
288 fsm->b_ase0_brst_tmout = 0; in otg_statemachine()
289 otg_set_state(fsm, OTG_STATE_B_PERIPHERAL); in otg_statemachine()
293 if (!fsm->id || !fsm->b_sess_vld) in otg_statemachine()
294 otg_set_state(fsm, OTG_STATE_B_IDLE); in otg_statemachine()
295 else if (!fsm->b_bus_req || !fsm->a_conn || fsm->test_device) in otg_statemachine()
296 otg_set_state(fsm, OTG_STATE_B_PERIPHERAL); in otg_statemachine()
299 if (fsm->id) in otg_statemachine()
300 otg_set_state(fsm, OTG_STATE_B_IDLE); in otg_statemachine()
301 else if (!fsm->a_bus_drop && (fsm->a_bus_req || in otg_statemachine()
302 fsm->a_srp_det || fsm->adp_change || fsm->power_up)) in otg_statemachine()
303 otg_set_state(fsm, OTG_STATE_A_WAIT_VRISE); in otg_statemachine()
306 if (fsm->a_vbus_vld) in otg_statemachine()
307 otg_set_state(fsm, OTG_STATE_A_WAIT_BCON); in otg_statemachine()
308 else if (fsm->id || fsm->a_bus_drop || in otg_statemachine()
309 fsm->a_wait_vrise_tmout) in otg_statemachine()
310 otg_set_state(fsm, OTG_STATE_A_WAIT_VFALL); in otg_statemachine()
313 if (!fsm->a_vbus_vld) in otg_statemachine()
314 otg_set_state(fsm, OTG_STATE_A_VBUS_ERR); in otg_statemachine()
315 else if (fsm->b_conn) in otg_statemachine()
316 otg_set_state(fsm, OTG_STATE_A_HOST); in otg_statemachine()
317 else if (fsm->id || fsm->a_bus_drop || fsm->a_wait_bcon_tmout) in otg_statemachine()
318 otg_set_state(fsm, OTG_STATE_A_WAIT_VFALL); in otg_statemachine()
321 if (fsm->id || fsm->a_bus_drop) in otg_statemachine()
322 otg_set_state(fsm, OTG_STATE_A_WAIT_VFALL); in otg_statemachine()
323 else if ((!fsm->a_bus_req || fsm->a_suspend_req_inf) && in otg_statemachine()
324 fsm->otg->host->b_hnp_enable) in otg_statemachine()
325 otg_set_state(fsm, OTG_STATE_A_SUSPEND); in otg_statemachine()
326 else if (!fsm->b_conn) in otg_statemachine()
327 otg_set_state(fsm, OTG_STATE_A_WAIT_BCON); in otg_statemachine()
328 else if (!fsm->a_vbus_vld) in otg_statemachine()
329 otg_set_state(fsm, OTG_STATE_A_VBUS_ERR); in otg_statemachine()
332 if (!fsm->b_conn && fsm->otg->host->b_hnp_enable) in otg_statemachine()
333 otg_set_state(fsm, OTG_STATE_A_PERIPHERAL); in otg_statemachine()
334 else if (!fsm->b_conn && !fsm->otg->host->b_hnp_enable) in otg_statemachine()
335 otg_set_state(fsm, OTG_STATE_A_WAIT_BCON); in otg_statemachine()
336 else if (fsm->a_bus_req || fsm->b_bus_resume) in otg_statemachine()
337 otg_set_state(fsm, OTG_STATE_A_HOST); in otg_statemachine()
338 else if (fsm->id || fsm->a_bus_drop || fsm->a_aidl_bdis_tmout) in otg_statemachine()
339 otg_set_state(fsm, OTG_STATE_A_WAIT_VFALL); in otg_statemachine()
340 else if (!fsm->a_vbus_vld) in otg_statemachine()
341 otg_set_state(fsm, OTG_STATE_A_VBUS_ERR); in otg_statemachine()
344 if (fsm->id || fsm->a_bus_drop) in otg_statemachine()
345 otg_set_state(fsm, OTG_STATE_A_WAIT_VFALL); in otg_statemachine()
346 else if (fsm->a_bidl_adis_tmout || fsm->b_bus_suspend) in otg_statemachine()
347 otg_set_state(fsm, OTG_STATE_A_WAIT_BCON); in otg_statemachine()
348 else if (!fsm->a_vbus_vld) in otg_statemachine()
349 otg_set_state(fsm, OTG_STATE_A_VBUS_ERR); in otg_statemachine()
352 if (fsm->a_wait_vfall_tmout) in otg_statemachine()
353 otg_set_state(fsm, OTG_STATE_A_IDLE); in otg_statemachine()
356 if (fsm->id || fsm->a_bus_drop || fsm->a_clr_err) in otg_statemachine()
357 otg_set_state(fsm, OTG_STATE_A_WAIT_VFALL); in otg_statemachine()
362 mutex_unlock(&fsm->lock); in otg_statemachine()