Lines Matching refs:dum
167 struct dummy *dum; member
212 static inline struct usb_hcd *dummy_hcd_to_hcd(struct dummy_hcd *dum) in dummy_hcd_to_hcd() argument
214 return container_of((void *) dum, struct usb_hcd, hcd_priv); in dummy_hcd_to_hcd()
217 static inline struct device *dummy_dev(struct dummy_hcd *dum) in dummy_dev() argument
219 return dummy_hcd_to_hcd(dum)->self.controller; in dummy_dev()
222 static inline struct device *udc_dev(struct dummy *dum) in udc_dev() argument
224 return dum->gadget.dev.parent; in udc_dev()
234 struct dummy *dum = container_of(gadget, struct dummy, gadget); in gadget_to_dummy_hcd() local
235 if (dum->gadget.speed == USB_SPEED_SUPER) in gadget_to_dummy_hcd()
236 return dum->ss_hcd; in gadget_to_dummy_hcd()
238 return dum->hs_hcd; in gadget_to_dummy_hcd()
251 static void nuke(struct dummy *dum, struct dummy_ep *ep) in nuke() argument
260 spin_unlock(&dum->lock); in nuke()
262 spin_lock(&dum->lock); in nuke()
267 static void stop_activity(struct dummy *dum) in stop_activity() argument
272 dum->address = 0; in stop_activity()
277 list_for_each_entry(ep, &dum->gadget.ep_list, ep.ep_list) in stop_activity()
278 nuke(dum, ep); in stop_activity()
293 struct dummy *dum = dum_hcd->dum; in set_link_state_by_speed() local
298 } else if (!dum->pullup || dum->udc_suspended) { in set_link_state_by_speed()
324 } else if (!dum->pullup || dum->udc_suspended) { in set_link_state_by_speed()
354 struct dummy *dum = dum_hcd->dum; in set_link_state() local
357 if (dum->pullup) in set_link_state()
359 dum->gadget.speed != USB_SPEED_SUPER) || in set_link_state()
361 dum->gadget.speed == USB_SPEED_SUPER)) in set_link_state()
379 if (dum->driver && (disconnect || reset)) { in set_link_state()
380 stop_activity(dum); in set_link_state()
381 spin_unlock(&dum->lock); in set_link_state()
383 usb_gadget_udc_reset(&dum->gadget, dum->driver); in set_link_state()
385 dum->driver->disconnect(&dum->gadget); in set_link_state()
386 spin_lock(&dum->lock); in set_link_state()
389 if (dum_hcd->old_active && dum->driver->suspend) { in set_link_state()
390 spin_unlock(&dum->lock); in set_link_state()
391 dum->driver->suspend(&dum->gadget); in set_link_state()
392 spin_lock(&dum->lock); in set_link_state()
393 } else if (!dum_hcd->old_active && dum->driver->resume) { in set_link_state()
394 spin_unlock(&dum->lock); in set_link_state()
395 dum->driver->resume(&dum->gadget); in set_link_state()
396 spin_lock(&dum->lock); in set_link_state()
413 #define is_enabled(dum) \ argument
414 (dum->port_status & USB_PORT_STAT_ENABLE)
419 struct dummy *dum; in dummy_enable() local
429 dum = ep_to_dummy(ep); in dummy_enable()
430 if (!dum->driver) in dummy_enable()
433 dum_hcd = gadget_to_dummy_hcd(&dum->gadget); in dummy_enable()
459 switch (dum->gadget.speed) { in dummy_enable()
481 switch (dum->gadget.speed) { in dummy_enable()
502 switch (dum->gadget.speed) { in dummy_enable()
524 dev_err(udc_dev(dum), "Can't enable stream support on " in dummy_enable()
532 dev_dbg(udc_dev(dum), "enabled %s (ep%d%s-%s) maxpacket %d stream %s\n", in dummy_enable()
565 struct dummy *dum; in dummy_disable() local
571 dum = ep_to_dummy(ep); in dummy_disable()
573 spin_lock_irqsave(&dum->lock, flags); in dummy_disable()
576 nuke(dum, ep); in dummy_disable()
577 spin_unlock_irqrestore(&dum->lock, flags); in dummy_disable()
579 dev_dbg(udc_dev(dum), "disabled %s\n", _ep->name); in dummy_disable()
623 struct dummy *dum; in dummy_queue() local
635 dum = ep_to_dummy(ep); in dummy_queue()
636 dum_hcd = gadget_to_dummy_hcd(&dum->gadget); in dummy_queue()
637 if (!dum->driver || !is_enabled(dum_hcd)) in dummy_queue()
641 dev_dbg(udc_dev(dum), "ep %p queue req %p to %s, len %d buf %p\n", in dummy_queue()
646 spin_lock_irqsave(&dum->lock, flags); in dummy_queue()
650 list_empty(&dum->fifo_req.queue) && in dummy_queue()
653 req = &dum->fifo_req; in dummy_queue()
655 req->req.buf = dum->fifo_buf; in dummy_queue()
656 memcpy(dum->fifo_buf, _req->buf, _req->length); in dummy_queue()
657 req->req.context = dum; in dummy_queue()
661 spin_unlock(&dum->lock); in dummy_queue()
665 spin_lock(&dum->lock); in dummy_queue()
668 spin_unlock_irqrestore(&dum->lock, flags); in dummy_queue()
679 struct dummy *dum; in dummy_dequeue() local
687 dum = ep_to_dummy(ep); in dummy_dequeue()
689 if (!dum->driver) in dummy_dequeue()
693 spin_lock(&dum->lock); in dummy_dequeue()
702 spin_unlock(&dum->lock); in dummy_dequeue()
705 dev_dbg(udc_dev(dum), in dummy_dequeue()
718 struct dummy *dum; in dummy_set_halt_and_wedge() local
723 dum = ep_to_dummy(ep); in dummy_set_halt_and_wedge()
724 if (!dum->driver) in dummy_set_halt_and_wedge()
783 if (!(dum_hcd->dum->devstatus & ((1 << USB_DEVICE_B_HNP_ENABLE) in dummy_wakeup()
803 struct dummy *dum; in dummy_set_selfpowered() local
806 dum = gadget_to_dummy_hcd(_gadget)->dum; in dummy_set_selfpowered()
808 dum->devstatus |= (1 << USB_DEVICE_SELF_POWERED); in dummy_set_selfpowered()
810 dum->devstatus &= ~(1 << USB_DEVICE_SELF_POWERED); in dummy_set_selfpowered()
814 static void dummy_udc_update_ep0(struct dummy *dum) in dummy_udc_update_ep0() argument
816 if (dum->gadget.speed == USB_SPEED_SUPER) in dummy_udc_update_ep0()
817 dum->ep[0].ep.maxpacket = 9; in dummy_udc_update_ep0()
819 dum->ep[0].ep.maxpacket = 64; in dummy_udc_update_ep0()
825 struct dummy *dum; in dummy_pullup() local
828 dum = gadget_dev_to_dummy(&_gadget->dev); in dummy_pullup()
830 if (value && dum->driver) { in dummy_pullup()
832 dum->gadget.speed = dum->driver->max_speed; in dummy_pullup()
834 dum->gadget.speed = min_t(u8, USB_SPEED_HIGH, in dummy_pullup()
835 dum->driver->max_speed); in dummy_pullup()
837 dum->gadget.speed = USB_SPEED_FULL; in dummy_pullup()
838 dummy_udc_update_ep0(dum); in dummy_pullup()
840 if (dum->gadget.speed < dum->driver->max_speed) in dummy_pullup()
841 dev_dbg(udc_dev(dum), "This device can perform faster" in dummy_pullup()
843 usb_speed_string(dum->driver->max_speed)); in dummy_pullup()
847 spin_lock_irqsave(&dum->lock, flags); in dummy_pullup()
848 dum->pullup = (value != 0); in dummy_pullup()
850 spin_unlock_irqrestore(&dum->lock, flags); in dummy_pullup()
875 struct dummy *dum = gadget_dev_to_dummy(dev); in function_show() local
877 if (!dum->driver || !dum->driver->function) in function_show()
879 return scnprintf(buf, PAGE_SIZE, "%s\n", dum->driver->function); in function_show()
903 struct dummy *dum = dum_hcd->dum; in dummy_udc_start() local
913 dum->devstatus = 0; in dummy_udc_start()
914 dum->driver = driver; in dummy_udc_start()
922 struct dummy *dum = dum_hcd->dum; in dummy_udc_stop() local
924 dum->driver = NULL; in dummy_udc_stop()
933 static void init_dummy_udc_hw(struct dummy *dum) in init_dummy_udc_hw() argument
937 INIT_LIST_HEAD(&dum->gadget.ep_list); in init_dummy_udc_hw()
939 struct dummy_ep *ep = &dum->ep[i]; in init_dummy_udc_hw()
945 list_add_tail(&ep->ep.ep_list, &dum->gadget.ep_list); in init_dummy_udc_hw()
951 ep->gadget = &dum->gadget; in init_dummy_udc_hw()
956 dum->gadget.ep0 = &dum->ep[0].ep; in init_dummy_udc_hw()
957 list_del_init(&dum->ep[0].ep.ep_list); in init_dummy_udc_hw()
958 INIT_LIST_HEAD(&dum->fifo_req.queue); in init_dummy_udc_hw()
961 dum->gadget.is_otg = 1; in init_dummy_udc_hw()
967 struct dummy *dum; in dummy_udc_probe() local
970 dum = *((void **)dev_get_platdata(&pdev->dev)); in dummy_udc_probe()
971 dum->gadget.name = gadget_name; in dummy_udc_probe()
972 dum->gadget.ops = &dummy_ops; in dummy_udc_probe()
973 dum->gadget.max_speed = USB_SPEED_SUPER; in dummy_udc_probe()
975 dum->gadget.dev.parent = &pdev->dev; in dummy_udc_probe()
976 init_dummy_udc_hw(dum); in dummy_udc_probe()
978 rc = usb_add_gadget_udc(&pdev->dev, &dum->gadget); in dummy_udc_probe()
982 rc = device_create_file(&dum->gadget.dev, &dev_attr_function); in dummy_udc_probe()
985 platform_set_drvdata(pdev, dum); in dummy_udc_probe()
989 usb_del_gadget_udc(&dum->gadget); in dummy_udc_probe()
996 struct dummy *dum = platform_get_drvdata(pdev); in dummy_udc_remove() local
998 device_remove_file(&dum->gadget.dev, &dev_attr_function); in dummy_udc_remove()
999 usb_del_gadget_udc(&dum->gadget); in dummy_udc_remove()
1003 static void dummy_udc_pm(struct dummy *dum, struct dummy_hcd *dum_hcd, in dummy_udc_pm() argument
1006 spin_lock_irq(&dum->lock); in dummy_udc_pm()
1007 dum->udc_suspended = suspend; in dummy_udc_pm()
1009 spin_unlock_irq(&dum->lock); in dummy_udc_pm()
1014 struct dummy *dum = platform_get_drvdata(pdev); in dummy_udc_suspend() local
1015 struct dummy_hcd *dum_hcd = gadget_to_dummy_hcd(&dum->gadget); in dummy_udc_suspend()
1018 dummy_udc_pm(dum, dum_hcd, 1); in dummy_udc_suspend()
1025 struct dummy *dum = platform_get_drvdata(pdev); in dummy_udc_resume() local
1026 struct dummy_hcd *dum_hcd = gadget_to_dummy_hcd(&dum->gadget); in dummy_udc_resume()
1029 dummy_udc_pm(dum, dum_hcd, 0); in dummy_udc_resume()
1160 spin_lock_irqsave(&dum_hcd->dum->lock, flags); in dummy_urb_enqueue()
1190 spin_unlock_irqrestore(&dum_hcd->dum->lock, flags); in dummy_urb_enqueue()
1203 spin_lock_irqsave(&dum_hcd->dum->lock, flags); in dummy_urb_dequeue()
1210 spin_unlock_irqrestore(&dum_hcd->dum->lock, flags); in dummy_urb_dequeue()
1284 struct dummy *dum = dum_hcd->dum; in transfer() local
1382 spin_unlock(&dum->lock); in transfer()
1384 spin_lock(&dum->lock); in transfer()
1401 static int periodic_bytes(struct dummy *dum, struct dummy_ep *ep) in periodic_bytes() argument
1405 if (dum->gadget.speed == USB_SPEED_HIGH) { in periodic_bytes()
1414 if (dum->gadget.speed == USB_SPEED_SUPER) { in periodic_bytes()
1437 static struct dummy_ep *find_endpoint(struct dummy *dum, u8 address) in find_endpoint() argument
1441 if (!is_active((dum->gadget.speed == USB_SPEED_SUPER ? in find_endpoint()
1442 dum->ss_hcd : dum->hs_hcd))) in find_endpoint()
1445 return &dum->ep[0]; in find_endpoint()
1447 struct dummy_ep *ep = &dum->ep[i]; in find_endpoint()
1484 struct dummy *dum = dum_hcd->dum; in handle_control_request() local
1495 dum->address = w_value; in handle_control_request()
1497 dev_dbg(udc_dev(dum), "set_address = %d\n", in handle_control_request()
1508 dum->gadget.b_hnp_enable = 1; in handle_control_request()
1511 dum->gadget.a_hnp_support = 1; in handle_control_request()
1514 dum->gadget.a_alt_hnp_support = 1; in handle_control_request()
1541 dum->devstatus |= (1 << w_value); in handle_control_request()
1546 ep2 = find_endpoint(dum, w_index); in handle_control_request()
1589 dum->devstatus &= ~(1 << w_value); in handle_control_request()
1594 ep2 = find_endpoint(dum, w_index); in handle_control_request()
1618 ep2 = find_endpoint(dum, w_index); in handle_control_request()
1626 buf[0] = (u8)dum->devstatus; in handle_control_request()
1648 struct dummy *dum = dum_hcd->dum; in dummy_timer() local
1655 switch (dum->gadget.speed) { in dummy_timer()
1677 spin_lock_irqsave(&dum->lock, flags); in dummy_timer()
1682 spin_unlock_irqrestore(&dum->lock, flags); in dummy_timer()
1689 dum->ep[i].already_seen = 0; in dummy_timer()
1719 ep = find_endpoint(dum, address); in dummy_timer()
1732 if (ep == &dum->ep[0] && urb->error_count) { in dummy_timer()
1746 if (ep == &dum->ep[0] && ep->setup_stage) { in dummy_timer()
1755 dev_dbg(udc_dev(dum), "stale req = %p\n", in dummy_timer()
1758 spin_unlock(&dum->lock); in dummy_timer()
1760 spin_lock(&dum->lock); in dummy_timer()
1780 spin_unlock(&dum->lock); in dummy_timer()
1781 value = dum->driver->setup(&dum->gadget, in dummy_timer()
1783 spin_lock(&dum->lock); in dummy_timer()
1795 dev_dbg(udc_dev(dum), in dummy_timer()
1814 limit = max(limit, periodic_bytes(dum, ep)); in dummy_timer()
1822 limit = max(limit, periodic_bytes(dum, ep)); in dummy_timer()
1843 spin_unlock(&dum->lock); in dummy_timer()
1845 spin_lock(&dum->lock); in dummy_timer()
1858 spin_unlock_irqrestore(&dum->lock, flags); in dummy_timer()
1878 spin_lock_irqsave(&dum_hcd->dum->lock, flags); in dummy_hub_status()
1897 spin_unlock_irqrestore(&dum_hcd->dum->lock, flags); in dummy_hub_status()
1966 spin_lock_irqsave(&dum_hcd->dum->lock, flags); in dummy_hub_control()
2047 if (dum_hcd->dum->pullup) { in dummy_hub_control()
2051 switch (dum_hcd->dum->gadget.speed) { in dummy_hub_control()
2057 dum_hcd->dum->gadget.ep0-> in dummy_hub_control()
2063 dum_hcd->dum->gadget.speed = in dummy_hub_control()
2117 & dum_hcd->dum->devstatus) != 0) in dummy_hub_control()
2154 dum_hcd->dum->devstatus &= in dummy_hub_control()
2203 spin_unlock_irqrestore(&dum_hcd->dum->lock, flags); in dummy_hub_control()
2216 spin_lock_irq(&dum_hcd->dum->lock); in dummy_bus_suspend()
2220 spin_unlock_irq(&dum_hcd->dum->lock); in dummy_bus_suspend()
2231 spin_lock_irq(&dum_hcd->dum->lock); in dummy_bus_resume()
2241 spin_unlock_irq(&dum_hcd->dum->lock); in dummy_bus_resume()
2300 spin_lock_irqsave(&dum_hcd->dum->lock, flags); in urbs_show()
2308 spin_unlock_irqrestore(&dum_hcd->dum->lock, flags); in urbs_show()
2346 spin_lock_init(&dum_hcd->dum->lock); in dummy_start()
2368 struct dummy *dum; in dummy_stop() local
2370 dum = hcd_to_dummy_hcd(hcd)->dum; in dummy_stop()
2384 struct dummy *dum; in dummy_setup() local
2386 dum = *((void **)dev_get_platdata(hcd->self.controller)); in dummy_setup()
2389 dum->hs_hcd = hcd_to_dummy_hcd(hcd); in dummy_setup()
2390 dum->hs_hcd->dum = dum; in dummy_setup()
2399 dum->ss_hcd = hcd_to_dummy_hcd(hcd); in dummy_setup()
2400 dum->ss_hcd->dum = dum; in dummy_setup()
2422 spin_lock_irqsave(&dum_hcd->dum->lock, flags); in dummy_alloc_streams()
2450 spin_unlock_irqrestore(&dum_hcd->dum->lock, flags); in dummy_alloc_streams()
2465 spin_lock_irqsave(&dum_hcd->dum->lock, flags); in dummy_free_streams()
2482 spin_unlock_irqrestore(&dum_hcd->dum->lock, flags); in dummy_free_streams()
2513 struct dummy *dum; in dummy_hcd_probe() local
2519 dum = *((void **)dev_get_platdata(&pdev->dev)); in dummy_hcd_probe()
2552 dum->hs_hcd = dum->ss_hcd = NULL; in dummy_hcd_probe()
2558 struct dummy *dum; in dummy_hcd_remove() local
2560 dum = hcd_to_dummy_hcd(platform_get_drvdata(pdev))->dum; in dummy_hcd_remove()
2562 if (dum->ss_hcd) { in dummy_hcd_remove()
2563 usb_remove_hcd(dummy_hcd_to_hcd(dum->ss_hcd)); in dummy_hcd_remove()
2564 usb_put_hcd(dummy_hcd_to_hcd(dum->ss_hcd)); in dummy_hcd_remove()
2567 usb_remove_hcd(dummy_hcd_to_hcd(dum->hs_hcd)); in dummy_hcd_remove()
2568 usb_put_hcd(dummy_hcd_to_hcd(dum->hs_hcd)); in dummy_hcd_remove()
2570 dum->hs_hcd = NULL; in dummy_hcd_remove()
2571 dum->ss_hcd = NULL; in dummy_hcd_remove()
2625 struct dummy *dum[MAX_NUM_UDC]; in init() local
2658 dum[i] = kzalloc(sizeof(struct dummy), GFP_KERNEL); in init()
2659 if (!dum[i]) { in init()
2663 retval = platform_device_add_data(the_hcd_pdev[i], &dum[i], in init()
2667 retval = platform_device_add_data(the_udc_pdev[i], &dum[i], in init()
2690 if (!dum[i]->hs_hcd || in init()
2691 (!dum[i]->ss_hcd && mod_data.is_super_speed)) { in init()
2735 kfree(dum[i]); in init()
2750 struct dummy *dum; in cleanup() local
2752 dum = *((void **)dev_get_platdata(&the_udc_pdev[i]->dev)); in cleanup()
2756 kfree(dum); in cleanup()