Lines Matching refs:ci
39 struct ci_hdrc *ci = dev_get_drvdata(dev); in get_a_bus_req() local
43 t = scnprintf(next, size, "%d\n", ci->fsm.a_bus_req); in get_a_bus_req()
54 struct ci_hdrc *ci = dev_get_drvdata(dev); in set_a_bus_req() local
59 mutex_lock(&ci->fsm.lock); in set_a_bus_req()
61 ci->fsm.a_bus_req = 0; in set_a_bus_req()
64 if (ci->fsm.a_bus_drop) { in set_a_bus_req()
65 mutex_unlock(&ci->fsm.lock); in set_a_bus_req()
68 ci->fsm.a_bus_req = 1; in set_a_bus_req()
71 ci_otg_queue_work(ci); in set_a_bus_req()
72 mutex_unlock(&ci->fsm.lock); in set_a_bus_req()
83 struct ci_hdrc *ci = dev_get_drvdata(dev); in get_a_bus_drop() local
87 t = scnprintf(next, size, "%d\n", ci->fsm.a_bus_drop); in get_a_bus_drop()
98 struct ci_hdrc *ci = dev_get_drvdata(dev); in set_a_bus_drop() local
103 mutex_lock(&ci->fsm.lock); in set_a_bus_drop()
105 ci->fsm.a_bus_drop = 0; in set_a_bus_drop()
107 ci->fsm.a_bus_drop = 1; in set_a_bus_drop()
108 ci->fsm.a_bus_req = 0; in set_a_bus_drop()
111 ci_otg_queue_work(ci); in set_a_bus_drop()
112 mutex_unlock(&ci->fsm.lock); in set_a_bus_drop()
124 struct ci_hdrc *ci = dev_get_drvdata(dev); in get_b_bus_req() local
128 t = scnprintf(next, size, "%d\n", ci->fsm.b_bus_req); in get_b_bus_req()
139 struct ci_hdrc *ci = dev_get_drvdata(dev); in set_b_bus_req() local
144 mutex_lock(&ci->fsm.lock); in set_b_bus_req()
146 ci->fsm.b_bus_req = 0; in set_b_bus_req()
148 ci->fsm.b_bus_req = 1; in set_b_bus_req()
150 ci_otg_queue_work(ci); in set_b_bus_req()
151 mutex_unlock(&ci->fsm.lock); in set_b_bus_req()
161 struct ci_hdrc *ci = dev_get_drvdata(dev); in set_a_clr_err() local
166 mutex_lock(&ci->fsm.lock); in set_a_clr_err()
168 ci->fsm.a_clr_err = 1; in set_a_clr_err()
170 ci_otg_queue_work(ci); in set_a_clr_err()
171 mutex_unlock(&ci->fsm.lock); in set_a_clr_err()
211 static void ci_otg_add_timer(struct ci_hdrc *ci, enum otg_fsm_timer t) in ci_otg_add_timer() argument
218 spin_lock_irqsave(&ci->lock, flags); in ci_otg_add_timer()
221 ci->hr_timeouts[t] = ktime_add(ktime_get(), in ci_otg_add_timer()
223 ci->enabled_otg_timer_bits |= (1 << t); in ci_otg_add_timer()
224 if ((ci->next_otg_timer == NUM_OTG_FSM_TIMERS) || in ci_otg_add_timer()
225 (ci->hr_timeouts[ci->next_otg_timer].tv64 > in ci_otg_add_timer()
226 ci->hr_timeouts[t].tv64)) { in ci_otg_add_timer()
227 ci->next_otg_timer = t; in ci_otg_add_timer()
228 hrtimer_start_range_ns(&ci->otg_fsm_hrtimer, in ci_otg_add_timer()
229 ci->hr_timeouts[t], NSEC_PER_MSEC, in ci_otg_add_timer()
232 spin_unlock_irqrestore(&ci->lock, flags); in ci_otg_add_timer()
238 static void ci_otg_del_timer(struct ci_hdrc *ci, enum otg_fsm_timer t) in ci_otg_del_timer() argument
244 !(ci->enabled_otg_timer_bits & (1 << t))) in ci_otg_del_timer()
247 spin_lock_irqsave(&ci->lock, flags); in ci_otg_del_timer()
248 ci->enabled_otg_timer_bits &= ~(1 << t); in ci_otg_del_timer()
249 if (ci->next_otg_timer == t) { in ci_otg_del_timer()
250 if (ci->enabled_otg_timer_bits == 0) { in ci_otg_del_timer()
252 hrtimer_cancel(&ci->otg_fsm_hrtimer); in ci_otg_del_timer()
253 ci->next_otg_timer = NUM_OTG_FSM_TIMERS; in ci_otg_del_timer()
256 enabled_timer_bits = ci->enabled_otg_timer_bits; in ci_otg_del_timer()
260 (ci->hr_timeouts[next_timer].tv64 < in ci_otg_del_timer()
261 ci->hr_timeouts[cur_timer].tv64)) in ci_otg_del_timer()
267 ci->next_otg_timer = next_timer; in ci_otg_del_timer()
268 hrtimer_start_range_ns(&ci->otg_fsm_hrtimer, in ci_otg_del_timer()
269 ci->hr_timeouts[next_timer], NSEC_PER_MSEC, in ci_otg_del_timer()
272 spin_unlock_irqrestore(&ci->lock, flags); in ci_otg_del_timer()
276 static int a_wait_vrise_tmout(struct ci_hdrc *ci) in a_wait_vrise_tmout() argument
278 ci->fsm.a_wait_vrise_tmout = 1; in a_wait_vrise_tmout()
282 static int a_wait_vfall_tmout(struct ci_hdrc *ci) in a_wait_vfall_tmout() argument
284 ci->fsm.a_wait_vfall_tmout = 1; in a_wait_vfall_tmout()
288 static int a_wait_bcon_tmout(struct ci_hdrc *ci) in a_wait_bcon_tmout() argument
290 ci->fsm.a_wait_bcon_tmout = 1; in a_wait_bcon_tmout()
294 static int a_aidl_bdis_tmout(struct ci_hdrc *ci) in a_aidl_bdis_tmout() argument
296 ci->fsm.a_aidl_bdis_tmout = 1; in a_aidl_bdis_tmout()
300 static int b_ase0_brst_tmout(struct ci_hdrc *ci) in b_ase0_brst_tmout() argument
302 ci->fsm.b_ase0_brst_tmout = 1; in b_ase0_brst_tmout()
306 static int a_bidl_adis_tmout(struct ci_hdrc *ci) in a_bidl_adis_tmout() argument
308 ci->fsm.a_bidl_adis_tmout = 1; in a_bidl_adis_tmout()
312 static int b_se0_srp_tmout(struct ci_hdrc *ci) in b_se0_srp_tmout() argument
314 ci->fsm.b_se0_srp = 1; in b_se0_srp_tmout()
318 static int b_srp_fail_tmout(struct ci_hdrc *ci) in b_srp_fail_tmout() argument
320 ci->fsm.b_srp_done = 1; in b_srp_fail_tmout()
324 static int b_data_pls_tmout(struct ci_hdrc *ci) in b_data_pls_tmout() argument
326 ci->fsm.b_srp_done = 1; in b_data_pls_tmout()
327 ci->fsm.b_bus_req = 0; in b_data_pls_tmout()
328 if (ci->fsm.power_up) in b_data_pls_tmout()
329 ci->fsm.power_up = 0; in b_data_pls_tmout()
330 hw_write_otgsc(ci, OTGSC_HABA, 0); in b_data_pls_tmout()
331 pm_runtime_put(ci->dev); in b_data_pls_tmout()
335 static int b_ssend_srp_tmout(struct ci_hdrc *ci) in b_ssend_srp_tmout() argument
337 ci->fsm.b_ssend_srp = 1; in b_ssend_srp_tmout()
339 if (ci->fsm.otg->state == OTG_STATE_B_IDLE) in b_ssend_srp_tmout()
368 struct ci_hdrc *ci = container_of(t, struct ci_hdrc, otg_fsm_hrtimer); in ci_otg_hrtimer_func() local
375 spin_lock_irqsave(&ci->lock, flags); in ci_otg_hrtimer_func()
376 enabled_timer_bits = ci->enabled_otg_timer_bits; in ci_otg_hrtimer_func()
377 ci->next_otg_timer = NUM_OTG_FSM_TIMERS; in ci_otg_hrtimer_func()
381 if (now.tv64 >= ci->hr_timeouts[cur_timer].tv64) { in ci_otg_hrtimer_func()
382 ci->enabled_otg_timer_bits &= ~(1 << cur_timer); in ci_otg_hrtimer_func()
384 ret = otg_timer_handlers[cur_timer](ci); in ci_otg_hrtimer_func()
387 (ci->hr_timeouts[cur_timer].tv64 < in ci_otg_hrtimer_func()
388 ci->hr_timeouts[next_timer].tv64)) in ci_otg_hrtimer_func()
394 timeout = &ci->hr_timeouts[next_timer]; in ci_otg_hrtimer_func()
395 hrtimer_start_range_ns(&ci->otg_fsm_hrtimer, *timeout, in ci_otg_hrtimer_func()
397 ci->next_otg_timer = next_timer; in ci_otg_hrtimer_func()
399 spin_unlock_irqrestore(&ci->lock, flags); in ci_otg_hrtimer_func()
402 ci_otg_queue_work(ci); in ci_otg_hrtimer_func()
408 static int ci_otg_init_timers(struct ci_hdrc *ci) in ci_otg_init_timers() argument
410 hrtimer_init(&ci->otg_fsm_hrtimer, CLOCK_MONOTONIC, HRTIMER_MODE_ABS); in ci_otg_init_timers()
411 ci->otg_fsm_hrtimer.function = ci_otg_hrtimer_func; in ci_otg_init_timers()
421 struct ci_hdrc *ci = container_of(fsm, struct ci_hdrc, fsm); in ci_otg_fsm_add_timer() local
424 ci_otg_add_timer(ci, t); in ci_otg_fsm_add_timer()
430 struct ci_hdrc *ci = container_of(fsm, struct ci_hdrc, fsm); in ci_otg_fsm_del_timer() local
433 ci_otg_del_timer(ci, t); in ci_otg_fsm_del_timer()
444 struct ci_hdrc *ci = container_of(fsm, struct ci_hdrc, fsm); in ci_otg_drv_vbus() local
448 hw_write(ci, OP_PORTSC, PORTSC_W1C_BITS | PORTSC_PP, in ci_otg_drv_vbus()
450 if (ci->platdata->reg_vbus) { in ci_otg_drv_vbus()
451 ret = regulator_enable(ci->platdata->reg_vbus); in ci_otg_drv_vbus()
453 dev_err(ci->dev, in ci_otg_drv_vbus()
460 hw_write_otgsc(ci, OTGSC_DPIE, 0); in ci_otg_drv_vbus()
465 if (ci->platdata->reg_vbus) in ci_otg_drv_vbus()
466 regulator_disable(ci->platdata->reg_vbus); in ci_otg_drv_vbus()
478 struct ci_hdrc *ci = container_of(fsm, struct ci_hdrc, fsm); in ci_otg_loc_conn() local
481 hw_write(ci, OP_USBCMD, USBCMD_RS, USBCMD_RS); in ci_otg_loc_conn()
483 hw_write(ci, OP_USBCMD, USBCMD_RS, 0); in ci_otg_loc_conn()
494 struct ci_hdrc *ci = container_of(fsm, struct ci_hdrc, fsm); in ci_otg_loc_sof() local
497 hw_write(ci, OP_PORTSC, PORTSC_W1C_BITS | PORTSC_FPR, in ci_otg_loc_sof()
500 hw_write(ci, OP_PORTSC, PORTSC_W1C_BITS | PORTSC_SUSP, in ci_otg_loc_sof()
510 struct ci_hdrc *ci = container_of(fsm, struct ci_hdrc, fsm); in ci_otg_start_pulse() local
513 hw_write_otgsc(ci, OTGSC_HADP, OTGSC_HADP); in ci_otg_start_pulse()
515 pm_runtime_get(ci->dev); in ci_otg_start_pulse()
516 ci_otg_add_timer(ci, B_DATA_PLS); in ci_otg_start_pulse()
521 struct ci_hdrc *ci = container_of(fsm, struct ci_hdrc, fsm); in ci_otg_start_host() local
524 ci_role_stop(ci); in ci_otg_start_host()
525 ci_role_start(ci, CI_ROLE_HOST); in ci_otg_start_host()
527 ci_role_stop(ci); in ci_otg_start_host()
528 hw_device_reset(ci); in ci_otg_start_host()
529 ci_role_start(ci, CI_ROLE_GADGET); in ci_otg_start_host()
536 struct ci_hdrc *ci = container_of(fsm, struct ci_hdrc, fsm); in ci_otg_start_gadget() local
539 usb_gadget_vbus_connect(&ci->gadget); in ci_otg_start_gadget()
541 usb_gadget_vbus_disconnect(&ci->gadget); in ci_otg_start_gadget()
557 int ci_otg_fsm_work(struct ci_hdrc *ci) in ci_otg_fsm_work() argument
563 if (ci->fsm.id && !(ci->driver) && in ci_otg_fsm_work()
564 ci->fsm.otg->state < OTG_STATE_A_IDLE) in ci_otg_fsm_work()
567 pm_runtime_get_sync(ci->dev); in ci_otg_fsm_work()
568 if (otg_statemachine(&ci->fsm)) { in ci_otg_fsm_work()
569 if (ci->fsm.otg->state == OTG_STATE_A_IDLE) { in ci_otg_fsm_work()
578 if ((ci->fsm.id) || (ci->id_event) || in ci_otg_fsm_work()
579 (ci->fsm.power_up)) { in ci_otg_fsm_work()
580 ci_otg_queue_work(ci); in ci_otg_fsm_work()
583 hw_write(ci, OP_PORTSC, PORTSC_W1C_BITS | in ci_otg_fsm_work()
585 hw_write_otgsc(ci, OTGSC_DPIS, OTGSC_DPIS); in ci_otg_fsm_work()
586 hw_write_otgsc(ci, OTGSC_DPIE, OTGSC_DPIE); in ci_otg_fsm_work()
588 if (ci->id_event) in ci_otg_fsm_work()
589 ci->id_event = false; in ci_otg_fsm_work()
590 } else if (ci->fsm.otg->state == OTG_STATE_B_IDLE) { in ci_otg_fsm_work()
591 if (ci->fsm.b_sess_vld) { in ci_otg_fsm_work()
592 ci->fsm.power_up = 0; in ci_otg_fsm_work()
597 ci_otg_queue_work(ci); in ci_otg_fsm_work()
599 } else if (ci->fsm.otg->state == OTG_STATE_A_HOST) { in ci_otg_fsm_work()
600 pm_runtime_mark_last_busy(ci->dev); in ci_otg_fsm_work()
601 pm_runtime_put_autosuspend(ci->dev); in ci_otg_fsm_work()
605 pm_runtime_put_sync(ci->dev); in ci_otg_fsm_work()
613 static void ci_otg_fsm_event(struct ci_hdrc *ci) in ci_otg_fsm_event() argument
616 struct otg_fsm *fsm = &ci->fsm; in ci_otg_fsm_event()
618 intr_sts = hw_read_intr_status(ci); in ci_otg_fsm_event()
619 otg_bsess_vld = hw_read_otgsc(ci, OTGSC_BSV); in ci_otg_fsm_event()
620 port_conn = hw_read(ci, OP_PORTSC, PORTSC_CCS); in ci_otg_fsm_event()
622 switch (ci->fsm.otg->state) { in ci_otg_fsm_event()
627 ci_otg_queue_work(ci); in ci_otg_fsm_event()
633 ci_otg_queue_work(ci); in ci_otg_fsm_event()
639 ci_otg_queue_work(ci); in ci_otg_fsm_event()
649 ci_otg_queue_work(ci); in ci_otg_fsm_event()
660 ci_otg_add_timer(ci, A_BIDL_ADIS); in ci_otg_fsm_event()
664 ci_otg_del_timer(ci, A_BIDL_ADIS); in ci_otg_fsm_event()
668 ci_otg_del_timer(ci, A_BIDL_ADIS); in ci_otg_fsm_event()
678 if (ci->driver) { in ci_otg_fsm_event()
680 ci->gadget.is_a_peripheral = 1; in ci_otg_fsm_event()
682 ci_otg_queue_work(ci); in ci_otg_fsm_event()
688 ci_otg_queue_work(ci); in ci_otg_fsm_event()
694 ci_otg_queue_work(ci); in ci_otg_fsm_event()
708 irqreturn_t ci_otg_fsm_irq(struct ci_hdrc *ci) in ci_otg_fsm_irq() argument
712 struct otg_fsm *fsm = &ci->fsm; in ci_otg_fsm_irq()
714 otgsc = hw_read_otgsc(ci, ~0); in ci_otg_fsm_irq()
720 hw_write_otgsc(ci, OTGSC_DPIS, OTGSC_DPIS); in ci_otg_fsm_irq()
724 hw_write_otgsc(ci, OTGSC_IDIS, OTGSC_IDIS); in ci_otg_fsm_irq()
728 ci->id_event = true; in ci_otg_fsm_irq()
731 hw_write_otgsc(ci, OTGSC_BSVIS, OTGSC_BSVIS); in ci_otg_fsm_irq()
734 ci_otg_del_timer(ci, B_SSEND_SRP); in ci_otg_fsm_irq()
735 ci_otg_del_timer(ci, B_SRP_FAIL); in ci_otg_fsm_irq()
740 ci_otg_add_timer(ci, B_SSEND_SRP); in ci_otg_fsm_irq()
743 hw_write_otgsc(ci, OTGSC_AVVIS, OTGSC_AVVIS); in ci_otg_fsm_irq()
751 ci_otg_queue_work(ci); in ci_otg_fsm_irq()
755 ci_otg_fsm_event(ci); in ci_otg_fsm_irq()
760 void ci_hdrc_otg_fsm_start(struct ci_hdrc *ci) in ci_hdrc_otg_fsm_start() argument
762 ci_otg_queue_work(ci); in ci_hdrc_otg_fsm_start()
765 int ci_hdrc_otg_fsm_init(struct ci_hdrc *ci) in ci_hdrc_otg_fsm_init() argument
769 if (ci->phy) in ci_hdrc_otg_fsm_init()
770 ci->otg.phy = ci->phy; in ci_hdrc_otg_fsm_init()
772 ci->otg.usb_phy = ci->usb_phy; in ci_hdrc_otg_fsm_init()
774 ci->otg.gadget = &ci->gadget; in ci_hdrc_otg_fsm_init()
775 ci->fsm.otg = &ci->otg; in ci_hdrc_otg_fsm_init()
776 ci->fsm.power_up = 1; in ci_hdrc_otg_fsm_init()
777 ci->fsm.id = hw_read_otgsc(ci, OTGSC_ID) ? 1 : 0; in ci_hdrc_otg_fsm_init()
778 ci->fsm.otg->state = OTG_STATE_UNDEFINED; in ci_hdrc_otg_fsm_init()
779 ci->fsm.ops = &ci_otg_ops; in ci_hdrc_otg_fsm_init()
781 mutex_init(&ci->fsm.lock); in ci_hdrc_otg_fsm_init()
783 retval = ci_otg_init_timers(ci); in ci_hdrc_otg_fsm_init()
785 dev_err(ci->dev, "Couldn't init OTG timers\n"); in ci_hdrc_otg_fsm_init()
788 ci->enabled_otg_timer_bits = 0; in ci_hdrc_otg_fsm_init()
789 ci->next_otg_timer = NUM_OTG_FSM_TIMERS; in ci_hdrc_otg_fsm_init()
791 retval = sysfs_create_group(&ci->dev->kobj, &inputs_attr_group); in ci_hdrc_otg_fsm_init()
793 dev_dbg(ci->dev, in ci_hdrc_otg_fsm_init()
799 hw_write_otgsc(ci, OTGSC_AVVIE, OTGSC_AVVIE); in ci_hdrc_otg_fsm_init()
801 if (ci->fsm.id) { in ci_hdrc_otg_fsm_init()
802 ci->fsm.b_ssend_srp = in ci_hdrc_otg_fsm_init()
803 hw_read_otgsc(ci, OTGSC_BSV) ? 0 : 1; in ci_hdrc_otg_fsm_init()
804 ci->fsm.b_sess_vld = in ci_hdrc_otg_fsm_init()
805 hw_read_otgsc(ci, OTGSC_BSV) ? 1 : 0; in ci_hdrc_otg_fsm_init()
807 hw_write_otgsc(ci, OTGSC_BSVIE, OTGSC_BSVIE); in ci_hdrc_otg_fsm_init()
813 void ci_hdrc_otg_fsm_remove(struct ci_hdrc *ci) in ci_hdrc_otg_fsm_remove() argument
815 sysfs_remove_group(&ci->dev->kobj, &inputs_attr_group); in ci_hdrc_otg_fsm_remove()