• Home
  • Raw
  • Download

Lines Matching refs:ci

34 (struct ci_hdrc *ci, void (*function)(void *, unsigned long),  in otg_timer_initializer()  argument
39 timer = devm_kzalloc(ci->dev, sizeof(struct ci_otg_fsm_timer), in otg_timer_initializer()
55 struct ci_hdrc *ci = dev_get_drvdata(dev); in get_a_bus_req() local
59 t = scnprintf(next, size, "%d\n", ci->fsm.a_bus_req); in get_a_bus_req()
70 struct ci_hdrc *ci = dev_get_drvdata(dev); in set_a_bus_req() local
75 mutex_lock(&ci->fsm.lock); in set_a_bus_req()
77 ci->fsm.a_bus_req = 0; in set_a_bus_req()
80 if (ci->fsm.a_bus_drop) { in set_a_bus_req()
81 mutex_unlock(&ci->fsm.lock); in set_a_bus_req()
84 ci->fsm.a_bus_req = 1; in set_a_bus_req()
87 ci_otg_queue_work(ci); in set_a_bus_req()
88 mutex_unlock(&ci->fsm.lock); in set_a_bus_req()
99 struct ci_hdrc *ci = dev_get_drvdata(dev); in get_a_bus_drop() local
103 t = scnprintf(next, size, "%d\n", ci->fsm.a_bus_drop); in get_a_bus_drop()
114 struct ci_hdrc *ci = dev_get_drvdata(dev); in set_a_bus_drop() local
119 mutex_lock(&ci->fsm.lock); in set_a_bus_drop()
121 ci->fsm.a_bus_drop = 0; in set_a_bus_drop()
123 ci->fsm.a_bus_drop = 1; in set_a_bus_drop()
124 ci->fsm.a_bus_req = 0; in set_a_bus_drop()
127 ci_otg_queue_work(ci); in set_a_bus_drop()
128 mutex_unlock(&ci->fsm.lock); in set_a_bus_drop()
140 struct ci_hdrc *ci = dev_get_drvdata(dev); in get_b_bus_req() local
144 t = scnprintf(next, size, "%d\n", ci->fsm.b_bus_req); in get_b_bus_req()
155 struct ci_hdrc *ci = dev_get_drvdata(dev); in set_b_bus_req() local
160 mutex_lock(&ci->fsm.lock); in set_b_bus_req()
162 ci->fsm.b_bus_req = 0; in set_b_bus_req()
164 ci->fsm.b_bus_req = 1; in set_b_bus_req()
166 ci_otg_queue_work(ci); in set_b_bus_req()
167 mutex_unlock(&ci->fsm.lock); in set_b_bus_req()
177 struct ci_hdrc *ci = dev_get_drvdata(dev); in set_a_clr_err() local
182 mutex_lock(&ci->fsm.lock); in set_a_clr_err()
184 ci->fsm.a_clr_err = 1; in set_a_clr_err()
186 ci_otg_queue_work(ci); in set_a_clr_err()
187 mutex_unlock(&ci->fsm.lock); in set_a_clr_err()
209 static void ci_otg_add_timer(struct ci_hdrc *ci, enum ci_otg_fsm_timer_index t) in ci_otg_add_timer() argument
212 struct ci_otg_fsm_timer *timer = ci->fsm_timer->timer_list[t]; in ci_otg_add_timer()
213 struct list_head *active_timers = &ci->fsm_timer->active_timers; in ci_otg_add_timer()
232 if (!(hw_read_otgsc(ci, OTGSC_1MSIE))) in ci_otg_add_timer()
233 hw_write_otgsc(ci, OTGSC_1MSIE, OTGSC_1MSIE); in ci_otg_add_timer()
239 static void ci_otg_del_timer(struct ci_hdrc *ci, enum ci_otg_fsm_timer_index t) in ci_otg_del_timer() argument
242 struct ci_otg_fsm_timer *timer = ci->fsm_timer->timer_list[t]; in ci_otg_del_timer()
243 struct list_head *active_timers = &ci->fsm_timer->active_timers; in ci_otg_del_timer()
254 hw_write_otgsc(ci, OTGSC_1MSIE, 0); in ci_otg_del_timer()
261 static inline int ci_otg_tick_timer(struct ci_hdrc *ci) in ci_otg_tick_timer() argument
264 struct list_head *active_timers = &ci->fsm_timer->active_timers; in ci_otg_tick_timer()
272 tmp_timer->function(ci, tmp_timer->data); in ci_otg_tick_timer()
279 hw_write_otgsc(ci, OTGSC_1MSIE, 0); in ci_otg_tick_timer()
292 struct ci_hdrc *ci = (struct ci_hdrc *)ptr; in set_tmout_and_fsm() local
294 set_tmout(ci, indicator); in set_tmout_and_fsm()
296 ci_otg_queue_work(ci); in set_tmout_and_fsm()
301 struct ci_hdrc *ci = (struct ci_hdrc *)ptr; in a_wait_vfall_tmout_func() local
303 set_tmout(ci, indicator); in a_wait_vfall_tmout_func()
305 hw_write(ci, OP_PORTSC, PORTSC_W1C_BITS | PORTSC_PP, 0); in a_wait_vfall_tmout_func()
307 hw_write_otgsc(ci, OTGSC_DPIS, OTGSC_DPIS); in a_wait_vfall_tmout_func()
309 hw_write_otgsc(ci, OTGSC_DPIE, OTGSC_DPIE); in a_wait_vfall_tmout_func()
310 ci_otg_queue_work(ci); in a_wait_vfall_tmout_func()
315 struct ci_hdrc *ci = (struct ci_hdrc *)ptr; in b_ase0_brst_tmout_func() local
317 set_tmout(ci, indicator); in b_ase0_brst_tmout_func()
318 if (!hw_read_otgsc(ci, OTGSC_BSV)) in b_ase0_brst_tmout_func()
319 ci->fsm.b_sess_vld = 0; in b_ase0_brst_tmout_func()
321 ci_otg_queue_work(ci); in b_ase0_brst_tmout_func()
326 struct ci_hdrc *ci = (struct ci_hdrc *)ptr; in b_ssend_srp_tmout_func() local
328 set_tmout(ci, indicator); in b_ssend_srp_tmout_func()
331 if (ci->transceiver->state == OTG_STATE_B_IDLE) in b_ssend_srp_tmout_func()
332 ci_otg_queue_work(ci); in b_ssend_srp_tmout_func()
337 struct ci_hdrc *ci = (struct ci_hdrc *)ptr; in b_sess_vld_tmout_func() local
340 if (!(hw_read_otgsc(ci, OTGSC_BSV))) { in b_sess_vld_tmout_func()
341 ci->fsm.b_sess_vld = 0; in b_sess_vld_tmout_func()
342 ci_otg_add_timer(ci, B_SSEND_SRP); in b_sess_vld_tmout_func()
343 ci_otg_queue_work(ci); in b_sess_vld_tmout_func()
349 struct ci_hdrc *ci = (struct ci_hdrc *)ptr; in b_data_pulse_end() local
351 ci->fsm.b_srp_done = 1; in b_data_pulse_end()
352 ci->fsm.b_bus_req = 0; in b_data_pulse_end()
353 if (ci->fsm.power_up) in b_data_pulse_end()
354 ci->fsm.power_up = 0; in b_data_pulse_end()
356 hw_write_otgsc(ci, OTGSC_HABA, 0); in b_data_pulse_end()
358 ci_otg_queue_work(ci); in b_data_pulse_end()
362 static int ci_otg_init_timers(struct ci_hdrc *ci) in ci_otg_init_timers() argument
364 struct otg_fsm *fsm = &ci->fsm; in ci_otg_init_timers()
367 ci->fsm_timer->timer_list[A_WAIT_VRISE] = in ci_otg_init_timers()
368 otg_timer_initializer(ci, &set_tmout_and_fsm, TA_WAIT_VRISE, in ci_otg_init_timers()
370 if (ci->fsm_timer->timer_list[A_WAIT_VRISE] == NULL) in ci_otg_init_timers()
373 ci->fsm_timer->timer_list[A_WAIT_VFALL] = in ci_otg_init_timers()
374 otg_timer_initializer(ci, &a_wait_vfall_tmout_func, in ci_otg_init_timers()
376 if (ci->fsm_timer->timer_list[A_WAIT_VFALL] == NULL) in ci_otg_init_timers()
379 ci->fsm_timer->timer_list[A_WAIT_BCON] = in ci_otg_init_timers()
380 otg_timer_initializer(ci, &set_tmout_and_fsm, TA_WAIT_BCON, in ci_otg_init_timers()
382 if (ci->fsm_timer->timer_list[A_WAIT_BCON] == NULL) in ci_otg_init_timers()
385 ci->fsm_timer->timer_list[A_AIDL_BDIS] = in ci_otg_init_timers()
386 otg_timer_initializer(ci, &set_tmout_and_fsm, TA_AIDL_BDIS, in ci_otg_init_timers()
388 if (ci->fsm_timer->timer_list[A_AIDL_BDIS] == NULL) in ci_otg_init_timers()
391 ci->fsm_timer->timer_list[A_BIDL_ADIS] = in ci_otg_init_timers()
392 otg_timer_initializer(ci, &set_tmout_and_fsm, TA_BIDL_ADIS, in ci_otg_init_timers()
394 if (ci->fsm_timer->timer_list[A_BIDL_ADIS] == NULL) in ci_otg_init_timers()
397 ci->fsm_timer->timer_list[B_ASE0_BRST] = in ci_otg_init_timers()
398 otg_timer_initializer(ci, &b_ase0_brst_tmout_func, TB_ASE0_BRST, in ci_otg_init_timers()
400 if (ci->fsm_timer->timer_list[B_ASE0_BRST] == NULL) in ci_otg_init_timers()
403 ci->fsm_timer->timer_list[B_SE0_SRP] = in ci_otg_init_timers()
404 otg_timer_initializer(ci, &set_tmout_and_fsm, TB_SE0_SRP, in ci_otg_init_timers()
406 if (ci->fsm_timer->timer_list[B_SE0_SRP] == NULL) in ci_otg_init_timers()
409 ci->fsm_timer->timer_list[B_SSEND_SRP] = in ci_otg_init_timers()
410 otg_timer_initializer(ci, &b_ssend_srp_tmout_func, TB_SSEND_SRP, in ci_otg_init_timers()
412 if (ci->fsm_timer->timer_list[B_SSEND_SRP] == NULL) in ci_otg_init_timers()
415 ci->fsm_timer->timer_list[B_SRP_FAIL] = in ci_otg_init_timers()
416 otg_timer_initializer(ci, &set_tmout, TB_SRP_FAIL, in ci_otg_init_timers()
418 if (ci->fsm_timer->timer_list[B_SRP_FAIL] == NULL) in ci_otg_init_timers()
421 ci->fsm_timer->timer_list[B_DATA_PLS] = in ci_otg_init_timers()
422 otg_timer_initializer(ci, &b_data_pulse_end, TB_DATA_PLS, 0); in ci_otg_init_timers()
423 if (ci->fsm_timer->timer_list[B_DATA_PLS] == NULL) in ci_otg_init_timers()
426 ci->fsm_timer->timer_list[B_SESS_VLD] = otg_timer_initializer(ci, in ci_otg_init_timers()
428 if (ci->fsm_timer->timer_list[B_SESS_VLD] == NULL) in ci_otg_init_timers()
439 struct ci_hdrc *ci = container_of(fsm, struct ci_hdrc, fsm); in ci_otg_fsm_add_timer() local
442 ci_otg_add_timer(ci, t); in ci_otg_fsm_add_timer()
448 struct ci_hdrc *ci = container_of(fsm, struct ci_hdrc, fsm); in ci_otg_fsm_del_timer() local
451 ci_otg_del_timer(ci, t); in ci_otg_fsm_del_timer()
462 struct ci_hdrc *ci = container_of(fsm, struct ci_hdrc, fsm); in ci_otg_drv_vbus() local
466 hw_write(ci, OP_PORTSC, PORTSC_W1C_BITS | PORTSC_PP, in ci_otg_drv_vbus()
468 if (ci->platdata->reg_vbus) { in ci_otg_drv_vbus()
469 ret = regulator_enable(ci->platdata->reg_vbus); in ci_otg_drv_vbus()
471 dev_err(ci->dev, in ci_otg_drv_vbus()
478 hw_write_otgsc(ci, OTGSC_DPIE, 0); in ci_otg_drv_vbus()
483 if (ci->platdata->reg_vbus) in ci_otg_drv_vbus()
484 regulator_disable(ci->platdata->reg_vbus); in ci_otg_drv_vbus()
496 struct ci_hdrc *ci = container_of(fsm, struct ci_hdrc, fsm); in ci_otg_loc_conn() local
499 hw_write(ci, OP_USBCMD, USBCMD_RS, USBCMD_RS); in ci_otg_loc_conn()
501 hw_write(ci, OP_USBCMD, USBCMD_RS, 0); in ci_otg_loc_conn()
512 struct ci_hdrc *ci = container_of(fsm, struct ci_hdrc, fsm); in ci_otg_loc_sof() local
515 hw_write(ci, OP_PORTSC, PORTSC_W1C_BITS | PORTSC_FPR, in ci_otg_loc_sof()
518 hw_write(ci, OP_PORTSC, PORTSC_W1C_BITS | PORTSC_SUSP, in ci_otg_loc_sof()
528 struct ci_hdrc *ci = container_of(fsm, struct ci_hdrc, fsm); in ci_otg_start_pulse() local
531 hw_write_otgsc(ci, OTGSC_HADP, OTGSC_HADP); in ci_otg_start_pulse()
533 ci_otg_add_timer(ci, B_DATA_PLS); in ci_otg_start_pulse()
538 struct ci_hdrc *ci = container_of(fsm, struct ci_hdrc, fsm); in ci_otg_start_host() local
541 ci_role_stop(ci); in ci_otg_start_host()
542 ci_role_start(ci, CI_ROLE_HOST); in ci_otg_start_host()
544 ci_role_stop(ci); in ci_otg_start_host()
545 hw_device_reset(ci, USBMODE_CM_DC); in ci_otg_start_host()
546 ci_role_start(ci, CI_ROLE_GADGET); in ci_otg_start_host()
553 struct ci_hdrc *ci = container_of(fsm, struct ci_hdrc, fsm); in ci_otg_start_gadget() local
556 usb_gadget_vbus_connect(&ci->gadget); in ci_otg_start_gadget()
558 usb_gadget_vbus_disconnect(&ci->gadget); in ci_otg_start_gadget()
574 int ci_otg_fsm_work(struct ci_hdrc *ci) in ci_otg_fsm_work() argument
580 if (ci->fsm.id && !(ci->driver) && in ci_otg_fsm_work()
581 ci->transceiver->state < OTG_STATE_A_IDLE) in ci_otg_fsm_work()
584 if (otg_statemachine(&ci->fsm)) { in ci_otg_fsm_work()
585 if (ci->transceiver->state == OTG_STATE_A_IDLE) { in ci_otg_fsm_work()
594 if ((ci->fsm.id) || (ci->id_event) || in ci_otg_fsm_work()
595 (ci->fsm.power_up)) in ci_otg_fsm_work()
596 ci_otg_queue_work(ci); in ci_otg_fsm_work()
597 if (ci->id_event) in ci_otg_fsm_work()
598 ci->id_event = false; in ci_otg_fsm_work()
599 } else if (ci->transceiver->state == OTG_STATE_B_IDLE) { in ci_otg_fsm_work()
600 if (ci->fsm.b_sess_vld) { in ci_otg_fsm_work()
601 ci->fsm.power_up = 0; in ci_otg_fsm_work()
606 ci_otg_queue_work(ci); in ci_otg_fsm_work()
617 static void ci_otg_fsm_event(struct ci_hdrc *ci) in ci_otg_fsm_event() argument
620 struct otg_fsm *fsm = &ci->fsm; in ci_otg_fsm_event()
622 intr_sts = hw_read_intr_status(ci); in ci_otg_fsm_event()
623 otg_bsess_vld = hw_read_otgsc(ci, OTGSC_BSV); in ci_otg_fsm_event()
624 port_conn = hw_read(ci, OP_PORTSC, PORTSC_CCS); in ci_otg_fsm_event()
626 switch (ci->transceiver->state) { in ci_otg_fsm_event()
631 ci_otg_queue_work(ci); in ci_otg_fsm_event()
637 ci_otg_queue_work(ci); in ci_otg_fsm_event()
643 ci_otg_queue_work(ci); in ci_otg_fsm_event()
653 ci_otg_queue_work(ci); in ci_otg_fsm_event()
654 ci_otg_add_timer(ci, B_SESS_VLD); in ci_otg_fsm_event()
665 ci_otg_add_timer(ci, A_BIDL_ADIS); in ci_otg_fsm_event()
669 ci_otg_del_timer(ci, A_BIDL_ADIS); in ci_otg_fsm_event()
673 ci_otg_del_timer(ci, A_BIDL_ADIS); in ci_otg_fsm_event()
683 if (ci->driver) { in ci_otg_fsm_event()
685 ci->gadget.is_a_peripheral = 1; in ci_otg_fsm_event()
687 ci_otg_queue_work(ci); in ci_otg_fsm_event()
693 ci_otg_queue_work(ci); in ci_otg_fsm_event()
699 ci_otg_queue_work(ci); in ci_otg_fsm_event()
713 irqreturn_t ci_otg_fsm_irq(struct ci_hdrc *ci) in ci_otg_fsm_irq() argument
717 struct otg_fsm *fsm = &ci->fsm; in ci_otg_fsm_irq()
719 otgsc = hw_read_otgsc(ci, ~0); in ci_otg_fsm_irq()
725 hw_write_otgsc(ci, OTGSC_1MSIS, OTGSC_1MSIS); in ci_otg_fsm_irq()
726 retval = ci_otg_tick_timer(ci); in ci_otg_fsm_irq()
729 hw_write_otgsc(ci, OTGSC_DPIS, OTGSC_DPIS); in ci_otg_fsm_irq()
733 hw_write_otgsc(ci, OTGSC_IDIS, OTGSC_IDIS); in ci_otg_fsm_irq()
737 ci->id_event = true; in ci_otg_fsm_irq()
740 hw_write_otgsc(ci, OTGSC_BSVIS, OTGSC_BSVIS); in ci_otg_fsm_irq()
743 ci_otg_del_timer(ci, B_SSEND_SRP); in ci_otg_fsm_irq()
744 ci_otg_del_timer(ci, B_SRP_FAIL); in ci_otg_fsm_irq()
749 ci_otg_add_timer(ci, B_SSEND_SRP); in ci_otg_fsm_irq()
752 hw_write_otgsc(ci, OTGSC_AVVIS, OTGSC_AVVIS); in ci_otg_fsm_irq()
760 ci_otg_queue_work(ci); in ci_otg_fsm_irq()
764 ci_otg_fsm_event(ci); in ci_otg_fsm_irq()
769 void ci_hdrc_otg_fsm_start(struct ci_hdrc *ci) in ci_hdrc_otg_fsm_start() argument
771 ci_otg_queue_work(ci); in ci_hdrc_otg_fsm_start()
774 int ci_hdrc_otg_fsm_init(struct ci_hdrc *ci) in ci_hdrc_otg_fsm_init() argument
779 otg = devm_kzalloc(ci->dev, in ci_hdrc_otg_fsm_init()
782 dev_err(ci->dev, in ci_hdrc_otg_fsm_init()
787 otg->phy = ci->transceiver; in ci_hdrc_otg_fsm_init()
788 otg->gadget = &ci->gadget; in ci_hdrc_otg_fsm_init()
789 ci->fsm.otg = otg; in ci_hdrc_otg_fsm_init()
790 ci->transceiver->otg = ci->fsm.otg; in ci_hdrc_otg_fsm_init()
791 ci->fsm.power_up = 1; in ci_hdrc_otg_fsm_init()
792 ci->fsm.id = hw_read_otgsc(ci, OTGSC_ID) ? 1 : 0; in ci_hdrc_otg_fsm_init()
793 ci->transceiver->state = OTG_STATE_UNDEFINED; in ci_hdrc_otg_fsm_init()
794 ci->fsm.ops = &ci_otg_ops; in ci_hdrc_otg_fsm_init()
796 mutex_init(&ci->fsm.lock); in ci_hdrc_otg_fsm_init()
798 ci->fsm_timer = devm_kzalloc(ci->dev, in ci_hdrc_otg_fsm_init()
800 if (!ci->fsm_timer) { in ci_hdrc_otg_fsm_init()
801 dev_err(ci->dev, in ci_hdrc_otg_fsm_init()
806 INIT_LIST_HEAD(&ci->fsm_timer->active_timers); in ci_hdrc_otg_fsm_init()
807 retval = ci_otg_init_timers(ci); in ci_hdrc_otg_fsm_init()
809 dev_err(ci->dev, "Couldn't init OTG timers\n"); in ci_hdrc_otg_fsm_init()
813 retval = sysfs_create_group(&ci->dev->kobj, &inputs_attr_group); in ci_hdrc_otg_fsm_init()
815 dev_dbg(ci->dev, in ci_hdrc_otg_fsm_init()
821 hw_write_otgsc(ci, OTGSC_AVVIE, OTGSC_AVVIE); in ci_hdrc_otg_fsm_init()
823 if (ci->fsm.id) { in ci_hdrc_otg_fsm_init()
824 ci->fsm.b_ssend_srp = in ci_hdrc_otg_fsm_init()
825 hw_read_otgsc(ci, OTGSC_BSV) ? 0 : 1; in ci_hdrc_otg_fsm_init()
826 ci->fsm.b_sess_vld = in ci_hdrc_otg_fsm_init()
827 hw_read_otgsc(ci, OTGSC_BSV) ? 1 : 0; in ci_hdrc_otg_fsm_init()
829 hw_write_otgsc(ci, OTGSC_BSVIE, OTGSC_BSVIE); in ci_hdrc_otg_fsm_init()
835 void ci_hdrc_otg_fsm_remove(struct ci_hdrc *ci) in ci_hdrc_otg_fsm_remove() argument
837 sysfs_remove_group(&ci->dev->kobj, &inputs_attr_group); in ci_hdrc_otg_fsm_remove()