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()
565 switch (dum->gadget.speed) { in dummy_enable()
588 switch (dum->gadget.speed) { in dummy_enable()
612 dev_err(udc_dev(dum), "Can't enable stream support on " in dummy_enable()
620 dev_dbg(udc_dev(dum), "enabled %s (ep%d%s-%s) maxpacket %d stream %s\n", in dummy_enable()
639 struct dummy *dum; in dummy_disable() local
645 dum = ep_to_dummy(ep); in dummy_disable()
647 spin_lock_irqsave(&dum->lock, flags); in dummy_disable()
650 nuke(dum, ep); in dummy_disable()
651 spin_unlock_irqrestore(&dum->lock, flags); in dummy_disable()
653 dev_dbg(udc_dev(dum), "disabled %s\n", _ep->name); in dummy_disable()
695 struct dummy *dum; in dummy_queue() local
707 dum = ep_to_dummy(ep); in dummy_queue()
708 dum_hcd = gadget_to_dummy_hcd(&dum->gadget); in dummy_queue()
709 if (!dum->driver || !is_enabled(dum_hcd)) in dummy_queue()
713 dev_dbg(udc_dev(dum), "ep %p queue req %p to %s, len %d buf %p\n", in dummy_queue()
718 spin_lock_irqsave(&dum->lock, flags); in dummy_queue()
722 list_empty(&dum->fifo_req.queue) && in dummy_queue()
725 req = &dum->fifo_req; in dummy_queue()
727 req->req.buf = dum->fifo_buf; in dummy_queue()
728 memcpy(dum->fifo_buf, _req->buf, _req->length); in dummy_queue()
729 req->req.context = dum; in dummy_queue()
733 spin_unlock(&dum->lock); in dummy_queue()
737 spin_lock(&dum->lock); in dummy_queue()
740 spin_unlock_irqrestore(&dum->lock, flags); in dummy_queue()
751 struct dummy *dum; in dummy_dequeue() local
759 dum = ep_to_dummy(ep); in dummy_dequeue()
761 if (!dum->driver) in dummy_dequeue()
765 spin_lock(&dum->lock); in dummy_dequeue()
775 spin_unlock(&dum->lock); in dummy_dequeue()
778 dev_dbg(udc_dev(dum), in dummy_dequeue()
791 struct dummy *dum; in dummy_set_halt_and_wedge() local
796 dum = ep_to_dummy(ep); in dummy_set_halt_and_wedge()
797 if (!dum->driver) in dummy_set_halt_and_wedge()
856 if (!(dum_hcd->dum->devstatus & ((1 << USB_DEVICE_B_HNP_ENABLE) in dummy_wakeup()
876 struct dummy *dum; in dummy_set_selfpowered() local
879 dum = gadget_to_dummy_hcd(_gadget)->dum; in dummy_set_selfpowered()
881 dum->devstatus |= (1 << USB_DEVICE_SELF_POWERED); in dummy_set_selfpowered()
883 dum->devstatus &= ~(1 << USB_DEVICE_SELF_POWERED); in dummy_set_selfpowered()
887 static void dummy_udc_update_ep0(struct dummy *dum) in dummy_udc_update_ep0() argument
889 if (dum->gadget.speed == USB_SPEED_SUPER) in dummy_udc_update_ep0()
890 dum->ep[0].ep.maxpacket = 9; in dummy_udc_update_ep0()
892 dum->ep[0].ep.maxpacket = 64; in dummy_udc_update_ep0()
898 struct dummy *dum; in dummy_pullup() local
901 dum = gadget_dev_to_dummy(&_gadget->dev); in dummy_pullup()
904 spin_lock_irqsave(&dum->lock, flags); in dummy_pullup()
905 dum->pullup = (value != 0); in dummy_pullup()
916 while (dum->callback_usage > 0) { in dummy_pullup()
917 spin_unlock_irqrestore(&dum->lock, flags); in dummy_pullup()
919 spin_lock_irqsave(&dum->lock, flags); in dummy_pullup()
922 spin_unlock_irqrestore(&dum->lock, flags); in dummy_pullup()
931 struct dummy *dum; in dummy_udc_set_speed() local
933 dum = gadget_dev_to_dummy(&_gadget->dev); in dummy_udc_set_speed()
934 dum->gadget.speed = speed; in dummy_udc_set_speed()
935 dummy_udc_update_ep0(dum); in dummy_udc_set_speed()
940 struct dummy *dum = gadget_dev_to_dummy(&_gadget->dev); in dummy_udc_async_callbacks() local
942 spin_lock_irq(&dum->lock); in dummy_udc_async_callbacks()
943 dum->ints_enabled = enable; in dummy_udc_async_callbacks()
944 spin_unlock_irq(&dum->lock); in dummy_udc_async_callbacks()
968 struct dummy *dum = gadget_dev_to_dummy(dev); in function_show() local
970 if (!dum->driver || !dum->driver->function) in function_show()
972 return scnprintf(buf, PAGE_SIZE, "%s\n", dum->driver->function); in function_show()
996 struct dummy *dum = dum_hcd->dum; in dummy_udc_start() local
1016 spin_lock_irq(&dum->lock); in dummy_udc_start()
1017 dum->devstatus = 0; in dummy_udc_start()
1018 dum->driver = driver; in dummy_udc_start()
1019 spin_unlock_irq(&dum->lock); in dummy_udc_start()
1027 struct dummy *dum = dum_hcd->dum; in dummy_udc_stop() local
1029 spin_lock_irq(&dum->lock); in dummy_udc_stop()
1030 dum->ints_enabled = 0; in dummy_udc_stop()
1031 stop_activity(dum); in dummy_udc_stop()
1032 dum->driver = NULL; in dummy_udc_stop()
1033 spin_unlock_irq(&dum->lock); in dummy_udc_stop()
1042 static void init_dummy_udc_hw(struct dummy *dum) in init_dummy_udc_hw() argument
1046 INIT_LIST_HEAD(&dum->gadget.ep_list); in init_dummy_udc_hw()
1048 struct dummy_ep *ep = &dum->ep[i]; in init_dummy_udc_hw()
1055 list_add_tail(&ep->ep.ep_list, &dum->gadget.ep_list); in init_dummy_udc_hw()
1061 ep->gadget = &dum->gadget; in init_dummy_udc_hw()
1066 dum->gadget.ep0 = &dum->ep[0].ep; in init_dummy_udc_hw()
1067 list_del_init(&dum->ep[0].ep.ep_list); in init_dummy_udc_hw()
1068 INIT_LIST_HEAD(&dum->fifo_req.queue); in init_dummy_udc_hw()
1071 dum->gadget.is_otg = 1; in init_dummy_udc_hw()
1077 struct dummy *dum; in dummy_udc_probe() local
1080 dum = *((void **)dev_get_platdata(&pdev->dev)); in dummy_udc_probe()
1082 memzero_explicit(&dum->gadget, sizeof(struct usb_gadget)); in dummy_udc_probe()
1083 dum->gadget.name = gadget_name; in dummy_udc_probe()
1084 dum->gadget.ops = &dummy_ops; in dummy_udc_probe()
1086 dum->gadget.max_speed = USB_SPEED_SUPER; in dummy_udc_probe()
1088 dum->gadget.max_speed = USB_SPEED_HIGH; in dummy_udc_probe()
1090 dum->gadget.max_speed = USB_SPEED_FULL; in dummy_udc_probe()
1092 dum->gadget.dev.parent = &pdev->dev; in dummy_udc_probe()
1093 init_dummy_udc_hw(dum); in dummy_udc_probe()
1095 rc = usb_add_gadget_udc(&pdev->dev, &dum->gadget); in dummy_udc_probe()
1099 rc = device_create_file(&dum->gadget.dev, &dev_attr_function); in dummy_udc_probe()
1102 platform_set_drvdata(pdev, dum); in dummy_udc_probe()
1106 usb_del_gadget_udc(&dum->gadget); in dummy_udc_probe()
1113 struct dummy *dum = platform_get_drvdata(pdev); in dummy_udc_remove() local
1115 device_remove_file(&dum->gadget.dev, &dev_attr_function); in dummy_udc_remove()
1116 usb_del_gadget_udc(&dum->gadget); in dummy_udc_remove()
1120 static void dummy_udc_pm(struct dummy *dum, struct dummy_hcd *dum_hcd, in dummy_udc_pm() argument
1123 spin_lock_irq(&dum->lock); in dummy_udc_pm()
1124 dum->udc_suspended = suspend; in dummy_udc_pm()
1126 spin_unlock_irq(&dum->lock); in dummy_udc_pm()
1131 struct dummy *dum = platform_get_drvdata(pdev); in dummy_udc_suspend() local
1132 struct dummy_hcd *dum_hcd = gadget_to_dummy_hcd(&dum->gadget); in dummy_udc_suspend()
1135 dummy_udc_pm(dum, dum_hcd, 1); in dummy_udc_suspend()
1142 struct dummy *dum = platform_get_drvdata(pdev); in dummy_udc_resume() local
1143 struct dummy_hcd *dum_hcd = gadget_to_dummy_hcd(&dum->gadget); in dummy_udc_resume()
1146 dummy_udc_pm(dum, dum_hcd, 0); in dummy_udc_resume()
1277 spin_lock_irqsave(&dum_hcd->dum->lock, flags); in dummy_urb_enqueue()
1309 spin_unlock_irqrestore(&dum_hcd->dum->lock, flags); in dummy_urb_enqueue()
1322 spin_lock_irqsave(&dum_hcd->dum->lock, flags); in dummy_urb_dequeue()
1329 spin_unlock_irqrestore(&dum_hcd->dum->lock, flags); in dummy_urb_dequeue()
1403 struct dummy *dum = dum_hcd->dum; in transfer() local
1515 spin_unlock(&dum->lock); in transfer()
1517 spin_lock(&dum->lock); in transfer()
1534 static int periodic_bytes(struct dummy *dum, struct dummy_ep *ep) in periodic_bytes() argument
1538 if (dum->gadget.speed == USB_SPEED_HIGH) { in periodic_bytes()
1546 if (dum->gadget.speed == USB_SPEED_SUPER) { in periodic_bytes()
1569 static struct dummy_ep *find_endpoint(struct dummy *dum, u8 address) in find_endpoint() argument
1573 if (!is_active((dum->gadget.speed == USB_SPEED_SUPER ? in find_endpoint()
1574 dum->ss_hcd : dum->hs_hcd))) in find_endpoint()
1576 if (!dum->ints_enabled) in find_endpoint()
1579 return &dum->ep[0]; in find_endpoint()
1581 struct dummy_ep *ep = &dum->ep[i]; in find_endpoint()
1618 struct dummy *dum = dum_hcd->dum; in handle_control_request() local
1629 dum->address = w_value; in handle_control_request()
1631 dev_dbg(udc_dev(dum), "set_address = %d\n", in handle_control_request()
1642 dum->gadget.b_hnp_enable = 1; in handle_control_request()
1645 dum->gadget.a_hnp_support = 1; in handle_control_request()
1648 dum->gadget.a_alt_hnp_support = 1; in handle_control_request()
1675 dum->devstatus |= (1 << w_value); in handle_control_request()
1680 ep2 = find_endpoint(dum, w_index); in handle_control_request()
1723 dum->devstatus &= ~(1 << w_value); in handle_control_request()
1728 ep2 = find_endpoint(dum, w_index); in handle_control_request()
1752 ep2 = find_endpoint(dum, w_index); in handle_control_request()
1760 buf[0] = (u8)dum->devstatus; in handle_control_request()
1784 struct dummy *dum = dum_hcd->dum; in dummy_timer() local
1792 switch (dum->gadget.speed) { in dummy_timer()
1815 spin_lock_irqsave(&dum->lock, flags); in dummy_timer()
1820 spin_unlock_irqrestore(&dum->lock, flags); in dummy_timer()
1828 dum->ep[i].already_seen = 0; in dummy_timer()
1857 ep = find_endpoint(dum, address); in dummy_timer()
1870 if (ep == &dum->ep[0] && urb->error_count) { in dummy_timer()
1884 if (ep == &dum->ep[0] && ep->setup_stage) { in dummy_timer()
1893 dev_dbg(udc_dev(dum), "stale req = %p\n", in dummy_timer()
1896 spin_unlock(&dum->lock); in dummy_timer()
1898 spin_lock(&dum->lock); in dummy_timer()
1918 ++dum->callback_usage; in dummy_timer()
1919 spin_unlock(&dum->lock); in dummy_timer()
1920 value = dum->driver->setup(&dum->gadget, in dummy_timer()
1922 spin_lock(&dum->lock); in dummy_timer()
1923 --dum->callback_usage; in dummy_timer()
1935 dev_dbg(udc_dev(dum), in dummy_timer()
1958 limit = max(limit, periodic_bytes(dum, ep)); in dummy_timer()
1966 limit = max(limit, periodic_bytes(dum, ep)); in dummy_timer()
1987 spin_unlock(&dum->lock); in dummy_timer()
1989 spin_lock(&dum->lock); in dummy_timer()
2002 spin_unlock_irqrestore(&dum->lock, flags); in dummy_timer()
2022 spin_lock_irqsave(&dum_hcd->dum->lock, flags); in dummy_hub_status()
2041 spin_unlock_irqrestore(&dum_hcd->dum->lock, flags); in dummy_hub_status()
2110 spin_lock_irqsave(&dum_hcd->dum->lock, flags); in dummy_hub_control()
2200 if (dum_hcd->dum->pullup) { in dummy_hub_control()
2204 switch (dum_hcd->dum->gadget.speed) { in dummy_hub_control()
2210 dum_hcd->dum->gadget.ep0-> in dummy_hub_control()
2268 & dum_hcd->dum->devstatus) != 0) in dummy_hub_control()
2308 dum_hcd->dum->devstatus &= in dummy_hub_control()
2356 spin_unlock_irqrestore(&dum_hcd->dum->lock, flags); in dummy_hub_control()
2369 spin_lock_irq(&dum_hcd->dum->lock); in dummy_bus_suspend()
2373 spin_unlock_irq(&dum_hcd->dum->lock); in dummy_bus_suspend()
2384 spin_lock_irq(&dum_hcd->dum->lock); in dummy_bus_resume()
2394 spin_unlock_irq(&dum_hcd->dum->lock); in dummy_bus_resume()
2453 spin_lock_irqsave(&dum_hcd->dum->lock, flags); in urbs_show()
2461 spin_unlock_irqrestore(&dum_hcd->dum->lock, flags); in urbs_show()
2497 spin_lock_init(&dum_hcd->dum->lock); in dummy_start()
2530 struct dummy *dum; in dummy_setup() local
2532 dum = *((void **)dev_get_platdata(hcd->self.controller)); in dummy_setup()
2535 dum->hs_hcd = hcd_to_dummy_hcd(hcd); in dummy_setup()
2536 dum->hs_hcd->dum = dum; in dummy_setup()
2545 dum->ss_hcd = hcd_to_dummy_hcd(hcd); in dummy_setup()
2546 dum->ss_hcd->dum = dum; in dummy_setup()
2568 spin_lock_irqsave(&dum_hcd->dum->lock, flags); in dummy_alloc_streams()
2596 spin_unlock_irqrestore(&dum_hcd->dum->lock, flags); in dummy_alloc_streams()
2611 spin_lock_irqsave(&dum_hcd->dum->lock, flags); in dummy_free_streams()
2628 spin_unlock_irqrestore(&dum_hcd->dum->lock, flags); in dummy_free_streams()
2657 struct dummy *dum; in dummy_hcd_probe() local
2663 dum = *((void **)dev_get_platdata(&pdev->dev)); in dummy_hcd_probe()
2700 dum->hs_hcd = dum->ss_hcd = NULL; in dummy_hcd_probe()
2706 struct dummy *dum; in dummy_hcd_remove() local
2708 dum = hcd_to_dummy_hcd(platform_get_drvdata(pdev))->dum; in dummy_hcd_remove()
2710 if (dum->ss_hcd) { in dummy_hcd_remove()
2711 usb_remove_hcd(dummy_hcd_to_hcd(dum->ss_hcd)); in dummy_hcd_remove()
2712 usb_put_hcd(dummy_hcd_to_hcd(dum->ss_hcd)); in dummy_hcd_remove()
2715 usb_remove_hcd(dummy_hcd_to_hcd(dum->hs_hcd)); in dummy_hcd_remove()
2716 usb_put_hcd(dummy_hcd_to_hcd(dum->hs_hcd)); in dummy_hcd_remove()
2718 dum->hs_hcd = NULL; in dummy_hcd_remove()
2719 dum->ss_hcd = NULL; in dummy_hcd_remove()
2773 struct dummy *dum[MAX_NUM_UDC] = {}; in dummy_hcd_init() local
2806 dum[i] = kzalloc(sizeof(struct dummy), GFP_KERNEL); in dummy_hcd_init()
2807 if (!dum[i]) { in dummy_hcd_init()
2811 retval = platform_device_add_data(the_hcd_pdev[i], &dum[i], in dummy_hcd_init()
2815 retval = platform_device_add_data(the_udc_pdev[i], &dum[i], in dummy_hcd_init()
2838 if (!dum[i]->hs_hcd || in dummy_hcd_init()
2839 (!dum[i]->ss_hcd && mod_data.is_super_speed)) { in dummy_hcd_init()
2883 kfree(dum[i]); in dummy_hcd_init()
2898 struct dummy *dum; in dummy_hcd_cleanup() local
2900 dum = *((void **)dev_get_platdata(&the_udc_pdev[i]->dev)); in dummy_hcd_cleanup()
2904 kfree(dum); in dummy_hcd_cleanup()