Lines Matching refs:dum
241 struct dummy *dum; member
290 static inline struct usb_hcd *dummy_hcd_to_hcd(struct dummy_hcd *dum) in dummy_hcd_to_hcd() argument
292 return container_of((void *) dum, struct usb_hcd, hcd_priv); in dummy_hcd_to_hcd()
295 static inline struct device *dummy_dev(struct dummy_hcd *dum) in dummy_dev() argument
297 return dummy_hcd_to_hcd(dum)->self.controller; in dummy_dev()
300 static inline struct device *udc_dev(struct dummy *dum) in udc_dev() argument
302 return dum->gadget.dev.parent; in udc_dev()
312 struct dummy *dum = container_of(gadget, struct dummy, gadget); in gadget_to_dummy_hcd() local
313 if (dum->gadget.speed == USB_SPEED_SUPER) in gadget_to_dummy_hcd()
314 return dum->ss_hcd; in gadget_to_dummy_hcd()
316 return dum->hs_hcd; in gadget_to_dummy_hcd()
329 static void nuke(struct dummy *dum, struct dummy_ep *ep) in nuke() argument
338 spin_unlock(&dum->lock); in nuke()
340 spin_lock(&dum->lock); in nuke()
345 static void stop_activity(struct dummy *dum) in stop_activity() argument
350 dum->address = 0; in stop_activity()
356 nuke(dum, &dum->ep[i]); in stop_activity()
371 struct dummy *dum = dum_hcd->dum; in set_link_state_by_speed() local
376 } else if (!dum->pullup || dum->udc_suspended) { in set_link_state_by_speed()
401 } else if (!dum->pullup || dum->udc_suspended) { in set_link_state_by_speed()
430 __must_hold(&dum->lock) in set_link_state()
432 struct dummy *dum = dum_hcd->dum; in set_link_state() local
436 if (dum->pullup) in set_link_state()
438 dum->gadget.speed != USB_SPEED_SUPER) || in set_link_state()
440 dum->gadget.speed == USB_SPEED_SUPER)) in set_link_state()
460 if (dum->ints_enabled && (disconnect || reset)) { in set_link_state()
461 stop_activity(dum); in set_link_state()
462 ++dum->callback_usage; in set_link_state()
463 spin_unlock(&dum->lock); in set_link_state()
465 usb_gadget_udc_reset(&dum->gadget, dum->driver); in set_link_state()
467 dum->driver->disconnect(&dum->gadget); in set_link_state()
468 spin_lock(&dum->lock); in set_link_state()
469 --dum->callback_usage; in set_link_state()
472 dum->ints_enabled) { in set_link_state()
473 ++dum->callback_usage; in set_link_state()
474 spin_unlock(&dum->lock); in set_link_state()
475 if (dum_hcd->old_active && dum->driver->suspend) in set_link_state()
476 dum->driver->suspend(&dum->gadget); in set_link_state()
477 else if (!dum_hcd->old_active && dum->driver->resume) in set_link_state()
478 dum->driver->resume(&dum->gadget); in set_link_state()
479 spin_lock(&dum->lock); in set_link_state()
480 --dum->callback_usage; in set_link_state()
496 #define is_enabled(dum) \ argument
497 (dum->port_status & USB_PORT_STAT_ENABLE)
502 struct dummy *dum; in dummy_enable() local
512 dum = ep_to_dummy(ep); in dummy_enable()
513 if (!dum->driver) in dummy_enable()
516 dum_hcd = gadget_to_dummy_hcd(&dum->gadget); in dummy_enable()
542 switch (dum->gadget.speed) { in dummy_enable()
564 switch (dum->gadget.speed) { in dummy_enable()
587 switch (dum->gadget.speed) { in dummy_enable()
610 dev_err(udc_dev(dum), "Can't enable stream support on " in dummy_enable()
618 dev_dbg(udc_dev(dum), "enabled %s (ep%d%s-%s) maxpacket %d stream %s\n", in dummy_enable()
637 struct dummy *dum; in dummy_disable() local
643 dum = ep_to_dummy(ep); in dummy_disable()
645 spin_lock_irqsave(&dum->lock, flags); in dummy_disable()
648 nuke(dum, ep); in dummy_disable()
649 spin_unlock_irqrestore(&dum->lock, flags); in dummy_disable()
651 dev_dbg(udc_dev(dum), "disabled %s\n", _ep->name); in dummy_disable()
693 struct dummy *dum; in dummy_queue() local
705 dum = ep_to_dummy(ep); in dummy_queue()
706 dum_hcd = gadget_to_dummy_hcd(&dum->gadget); in dummy_queue()
707 if (!dum->driver || !is_enabled(dum_hcd)) in dummy_queue()
711 dev_dbg(udc_dev(dum), "ep %p queue req %p to %s, len %d buf %p\n", in dummy_queue()
716 spin_lock_irqsave(&dum->lock, flags); in dummy_queue()
720 list_empty(&dum->fifo_req.queue) && in dummy_queue()
723 req = &dum->fifo_req; in dummy_queue()
725 req->req.buf = dum->fifo_buf; in dummy_queue()
726 memcpy(dum->fifo_buf, _req->buf, _req->length); in dummy_queue()
727 req->req.context = dum; in dummy_queue()
731 spin_unlock(&dum->lock); in dummy_queue()
735 spin_lock(&dum->lock); in dummy_queue()
738 spin_unlock_irqrestore(&dum->lock, flags); in dummy_queue()
749 struct dummy *dum; in dummy_dequeue() local
757 dum = ep_to_dummy(ep); in dummy_dequeue()
759 if (!dum->driver) in dummy_dequeue()
763 spin_lock(&dum->lock); in dummy_dequeue()
772 spin_unlock(&dum->lock); in dummy_dequeue()
775 dev_dbg(udc_dev(dum), in dummy_dequeue()
788 struct dummy *dum; in dummy_set_halt_and_wedge() local
793 dum = ep_to_dummy(ep); in dummy_set_halt_and_wedge()
794 if (!dum->driver) in dummy_set_halt_and_wedge()
853 if (!(dum_hcd->dum->devstatus & ((1 << USB_DEVICE_B_HNP_ENABLE) in dummy_wakeup()
873 struct dummy *dum; in dummy_set_selfpowered() local
876 dum = gadget_to_dummy_hcd(_gadget)->dum; in dummy_set_selfpowered()
878 dum->devstatus |= (1 << USB_DEVICE_SELF_POWERED); in dummy_set_selfpowered()
880 dum->devstatus &= ~(1 << USB_DEVICE_SELF_POWERED); in dummy_set_selfpowered()
884 static void dummy_udc_update_ep0(struct dummy *dum) in dummy_udc_update_ep0() argument
886 if (dum->gadget.speed == USB_SPEED_SUPER) in dummy_udc_update_ep0()
887 dum->ep[0].ep.maxpacket = 9; in dummy_udc_update_ep0()
889 dum->ep[0].ep.maxpacket = 64; in dummy_udc_update_ep0()
895 struct dummy *dum; in dummy_pullup() local
898 dum = gadget_dev_to_dummy(&_gadget->dev); in dummy_pullup()
901 spin_lock_irqsave(&dum->lock, flags); in dummy_pullup()
902 dum->pullup = (value != 0); in dummy_pullup()
913 while (dum->callback_usage > 0) { in dummy_pullup()
914 spin_unlock_irqrestore(&dum->lock, flags); in dummy_pullup()
916 spin_lock_irqsave(&dum->lock, flags); in dummy_pullup()
919 spin_unlock_irqrestore(&dum->lock, flags); in dummy_pullup()
928 struct dummy *dum; in dummy_udc_set_speed() local
930 dum = gadget_dev_to_dummy(&_gadget->dev); in dummy_udc_set_speed()
931 dum->gadget.speed = speed; in dummy_udc_set_speed()
932 dummy_udc_update_ep0(dum); in dummy_udc_set_speed()
955 struct dummy *dum = gadget_dev_to_dummy(dev); in function_show() local
957 if (!dum->driver || !dum->driver->function) in function_show()
959 return scnprintf(buf, PAGE_SIZE, "%s\n", dum->driver->function); in function_show()
983 struct dummy *dum = dum_hcd->dum; in dummy_udc_start() local
1003 spin_lock_irq(&dum->lock); in dummy_udc_start()
1004 dum->devstatus = 0; in dummy_udc_start()
1005 dum->driver = driver; in dummy_udc_start()
1006 dum->ints_enabled = 1; in dummy_udc_start()
1007 spin_unlock_irq(&dum->lock); in dummy_udc_start()
1015 struct dummy *dum = dum_hcd->dum; in dummy_udc_stop() local
1017 spin_lock_irq(&dum->lock); in dummy_udc_stop()
1018 dum->ints_enabled = 0; in dummy_udc_stop()
1019 stop_activity(dum); in dummy_udc_stop()
1020 dum->driver = NULL; in dummy_udc_stop()
1021 spin_unlock_irq(&dum->lock); in dummy_udc_stop()
1030 static void init_dummy_udc_hw(struct dummy *dum) in init_dummy_udc_hw() argument
1034 INIT_LIST_HEAD(&dum->gadget.ep_list); in init_dummy_udc_hw()
1036 struct dummy_ep *ep = &dum->ep[i]; in init_dummy_udc_hw()
1043 list_add_tail(&ep->ep.ep_list, &dum->gadget.ep_list); in init_dummy_udc_hw()
1049 ep->gadget = &dum->gadget; in init_dummy_udc_hw()
1054 dum->gadget.ep0 = &dum->ep[0].ep; in init_dummy_udc_hw()
1055 list_del_init(&dum->ep[0].ep.ep_list); in init_dummy_udc_hw()
1056 INIT_LIST_HEAD(&dum->fifo_req.queue); in init_dummy_udc_hw()
1059 dum->gadget.is_otg = 1; in init_dummy_udc_hw()
1065 struct dummy *dum; in dummy_udc_probe() local
1068 dum = *((void **)dev_get_platdata(&pdev->dev)); in dummy_udc_probe()
1070 memzero_explicit(&dum->gadget, sizeof(struct usb_gadget)); in dummy_udc_probe()
1071 dum->gadget.name = gadget_name; in dummy_udc_probe()
1072 dum->gadget.ops = &dummy_ops; in dummy_udc_probe()
1074 dum->gadget.max_speed = USB_SPEED_SUPER; in dummy_udc_probe()
1076 dum->gadget.max_speed = USB_SPEED_HIGH; in dummy_udc_probe()
1078 dum->gadget.max_speed = USB_SPEED_FULL; in dummy_udc_probe()
1080 dum->gadget.dev.parent = &pdev->dev; in dummy_udc_probe()
1081 init_dummy_udc_hw(dum); in dummy_udc_probe()
1083 rc = usb_add_gadget_udc(&pdev->dev, &dum->gadget); in dummy_udc_probe()
1087 rc = device_create_file(&dum->gadget.dev, &dev_attr_function); in dummy_udc_probe()
1090 platform_set_drvdata(pdev, dum); in dummy_udc_probe()
1094 usb_del_gadget_udc(&dum->gadget); in dummy_udc_probe()
1101 struct dummy *dum = platform_get_drvdata(pdev); in dummy_udc_remove() local
1103 device_remove_file(&dum->gadget.dev, &dev_attr_function); in dummy_udc_remove()
1104 usb_del_gadget_udc(&dum->gadget); in dummy_udc_remove()
1108 static void dummy_udc_pm(struct dummy *dum, struct dummy_hcd *dum_hcd, in dummy_udc_pm() argument
1111 spin_lock_irq(&dum->lock); in dummy_udc_pm()
1112 dum->udc_suspended = suspend; in dummy_udc_pm()
1114 spin_unlock_irq(&dum->lock); in dummy_udc_pm()
1119 struct dummy *dum = platform_get_drvdata(pdev); in dummy_udc_suspend() local
1120 struct dummy_hcd *dum_hcd = gadget_to_dummy_hcd(&dum->gadget); in dummy_udc_suspend()
1123 dummy_udc_pm(dum, dum_hcd, 1); in dummy_udc_suspend()
1130 struct dummy *dum = platform_get_drvdata(pdev); in dummy_udc_resume() local
1131 struct dummy_hcd *dum_hcd = gadget_to_dummy_hcd(&dum->gadget); in dummy_udc_resume()
1134 dummy_udc_pm(dum, dum_hcd, 0); in dummy_udc_resume()
1265 spin_lock_irqsave(&dum_hcd->dum->lock, flags); in dummy_urb_enqueue()
1297 spin_unlock_irqrestore(&dum_hcd->dum->lock, flags); in dummy_urb_enqueue()
1310 spin_lock_irqsave(&dum_hcd->dum->lock, flags); in dummy_urb_dequeue()
1317 spin_unlock_irqrestore(&dum_hcd->dum->lock, flags); in dummy_urb_dequeue()
1391 struct dummy *dum = dum_hcd->dum; in transfer() local
1503 spin_unlock(&dum->lock); in transfer()
1505 spin_lock(&dum->lock); in transfer()
1522 static int periodic_bytes(struct dummy *dum, struct dummy_ep *ep) in periodic_bytes() argument
1526 if (dum->gadget.speed == USB_SPEED_HIGH) { in periodic_bytes()
1534 if (dum->gadget.speed == USB_SPEED_SUPER) { in periodic_bytes()
1557 static struct dummy_ep *find_endpoint(struct dummy *dum, u8 address) in find_endpoint() argument
1561 if (!is_active((dum->gadget.speed == USB_SPEED_SUPER ? in find_endpoint()
1562 dum->ss_hcd : dum->hs_hcd))) in find_endpoint()
1564 if (!dum->ints_enabled) in find_endpoint()
1567 return &dum->ep[0]; in find_endpoint()
1569 struct dummy_ep *ep = &dum->ep[i]; in find_endpoint()
1606 struct dummy *dum = dum_hcd->dum; in handle_control_request() local
1617 dum->address = w_value; in handle_control_request()
1619 dev_dbg(udc_dev(dum), "set_address = %d\n", in handle_control_request()
1630 dum->gadget.b_hnp_enable = 1; in handle_control_request()
1633 dum->gadget.a_hnp_support = 1; in handle_control_request()
1636 dum->gadget.a_alt_hnp_support = 1; in handle_control_request()
1663 dum->devstatus |= (1 << w_value); in handle_control_request()
1668 ep2 = find_endpoint(dum, w_index); in handle_control_request()
1711 dum->devstatus &= ~(1 << w_value); in handle_control_request()
1716 ep2 = find_endpoint(dum, w_index); in handle_control_request()
1740 ep2 = find_endpoint(dum, w_index); in handle_control_request()
1748 buf[0] = (u8)dum->devstatus; in handle_control_request()
1770 struct dummy *dum = dum_hcd->dum; in dummy_timer() local
1778 switch (dum->gadget.speed) { in dummy_timer()
1801 spin_lock_irqsave(&dum->lock, flags); in dummy_timer()
1806 spin_unlock_irqrestore(&dum->lock, flags); in dummy_timer()
1814 dum->ep[i].already_seen = 0; in dummy_timer()
1843 ep = find_endpoint(dum, address); in dummy_timer()
1856 if (ep == &dum->ep[0] && urb->error_count) { in dummy_timer()
1870 if (ep == &dum->ep[0] && ep->setup_stage) { in dummy_timer()
1879 dev_dbg(udc_dev(dum), "stale req = %p\n", in dummy_timer()
1882 spin_unlock(&dum->lock); in dummy_timer()
1884 spin_lock(&dum->lock); in dummy_timer()
1904 ++dum->callback_usage; in dummy_timer()
1905 spin_unlock(&dum->lock); in dummy_timer()
1906 value = dum->driver->setup(&dum->gadget, in dummy_timer()
1908 spin_lock(&dum->lock); in dummy_timer()
1909 --dum->callback_usage; in dummy_timer()
1921 dev_dbg(udc_dev(dum), in dummy_timer()
1944 limit = max(limit, periodic_bytes(dum, ep)); in dummy_timer()
1952 limit = max(limit, periodic_bytes(dum, ep)); in dummy_timer()
1973 spin_unlock(&dum->lock); in dummy_timer()
1975 spin_lock(&dum->lock); in dummy_timer()
1988 spin_unlock_irqrestore(&dum->lock, flags); in dummy_timer()
2008 spin_lock_irqsave(&dum_hcd->dum->lock, flags); in dummy_hub_status()
2027 spin_unlock_irqrestore(&dum_hcd->dum->lock, flags); in dummy_hub_status()
2096 spin_lock_irqsave(&dum_hcd->dum->lock, flags); in dummy_hub_control()
2186 if (dum_hcd->dum->pullup) { in dummy_hub_control()
2190 switch (dum_hcd->dum->gadget.speed) { in dummy_hub_control()
2196 dum_hcd->dum->gadget.ep0-> in dummy_hub_control()
2254 & dum_hcd->dum->devstatus) != 0) in dummy_hub_control()
2294 dum_hcd->dum->devstatus &= in dummy_hub_control()
2342 spin_unlock_irqrestore(&dum_hcd->dum->lock, flags); in dummy_hub_control()
2355 spin_lock_irq(&dum_hcd->dum->lock); in dummy_bus_suspend()
2359 spin_unlock_irq(&dum_hcd->dum->lock); in dummy_bus_suspend()
2370 spin_lock_irq(&dum_hcd->dum->lock); in dummy_bus_resume()
2380 spin_unlock_irq(&dum_hcd->dum->lock); in dummy_bus_resume()
2439 spin_lock_irqsave(&dum_hcd->dum->lock, flags); in urbs_show()
2447 spin_unlock_irqrestore(&dum_hcd->dum->lock, flags); in urbs_show()
2483 spin_lock_init(&dum_hcd->dum->lock); in dummy_start()
2516 struct dummy *dum; in dummy_setup() local
2518 dum = *((void **)dev_get_platdata(hcd->self.controller)); in dummy_setup()
2521 dum->hs_hcd = hcd_to_dummy_hcd(hcd); in dummy_setup()
2522 dum->hs_hcd->dum = dum; in dummy_setup()
2531 dum->ss_hcd = hcd_to_dummy_hcd(hcd); in dummy_setup()
2532 dum->ss_hcd->dum = dum; in dummy_setup()
2554 spin_lock_irqsave(&dum_hcd->dum->lock, flags); in dummy_alloc_streams()
2582 spin_unlock_irqrestore(&dum_hcd->dum->lock, flags); in dummy_alloc_streams()
2597 spin_lock_irqsave(&dum_hcd->dum->lock, flags); in dummy_free_streams()
2614 spin_unlock_irqrestore(&dum_hcd->dum->lock, flags); in dummy_free_streams()
2643 struct dummy *dum; in dummy_hcd_probe() local
2649 dum = *((void **)dev_get_platdata(&pdev->dev)); in dummy_hcd_probe()
2686 dum->hs_hcd = dum->ss_hcd = NULL; in dummy_hcd_probe()
2692 struct dummy *dum; in dummy_hcd_remove() local
2694 dum = hcd_to_dummy_hcd(platform_get_drvdata(pdev))->dum; in dummy_hcd_remove()
2696 if (dum->ss_hcd) { in dummy_hcd_remove()
2697 usb_remove_hcd(dummy_hcd_to_hcd(dum->ss_hcd)); in dummy_hcd_remove()
2698 usb_put_hcd(dummy_hcd_to_hcd(dum->ss_hcd)); in dummy_hcd_remove()
2701 usb_remove_hcd(dummy_hcd_to_hcd(dum->hs_hcd)); in dummy_hcd_remove()
2702 usb_put_hcd(dummy_hcd_to_hcd(dum->hs_hcd)); in dummy_hcd_remove()
2704 dum->hs_hcd = NULL; in dummy_hcd_remove()
2705 dum->ss_hcd = NULL; in dummy_hcd_remove()
2759 struct dummy *dum[MAX_NUM_UDC] = {}; in init() local
2792 dum[i] = kzalloc(sizeof(struct dummy), GFP_KERNEL); in init()
2793 if (!dum[i]) { in init()
2797 retval = platform_device_add_data(the_hcd_pdev[i], &dum[i], in init()
2801 retval = platform_device_add_data(the_udc_pdev[i], &dum[i], in init()
2824 if (!dum[i]->hs_hcd || in init()
2825 (!dum[i]->ss_hcd && mod_data.is_super_speed)) { in init()
2869 kfree(dum[i]); in init()
2884 struct dummy *dum; in cleanup() local
2886 dum = *((void **)dev_get_platdata(&the_udc_pdev[i]->dev)); in cleanup()
2890 kfree(dum); in cleanup()