Lines Matching refs:hcd

425 rh_string(int id, struct usb_hcd const *hcd, u8 *data, unsigned len)  in rh_string()  argument
442 s = hcd->self.bus_name; in rh_string()
446 s = hcd->product_desc; in rh_string()
451 init_utsname()->release, hcd->driver->description); in rh_string()
464 static int rh_call_control (struct usb_hcd *hcd, struct urb *urb) in rh_call_control() argument
480 status = usb_hcd_link_urb_to_ep(hcd, urb); in rh_call_control()
484 urb->hcpriv = hcd; /* Indicate it's queued */ in rh_call_control()
529 tbuf[0] = (device_may_wakeup(&hcd->self.root_hub->dev) in rh_call_control()
537 device_set_wakeup_enable(&hcd->self.root_hub->dev, 0); in rh_call_control()
542 if (device_can_wakeup(&hcd->self.root_hub->dev) in rh_call_control()
544 device_set_wakeup_enable(&hcd->self.root_hub->dev, 1); in rh_call_control()
557 switch (hcd->speed) { in rh_call_control()
574 if (hcd->has_tt) in rh_call_control()
578 switch (hcd->speed) { in rh_call_control()
595 if (device_can_wakeup(&hcd->self.root_hub->dev)) in rh_call_control()
601 hcd, ubuf, wLength); in rh_call_control()
619 dev_dbg (hcd->self.controller, "root hub device address %d\n", in rh_call_control()
635 dev_dbg (hcd->self.controller, "no endpoint features yet\n"); in rh_call_control()
655 status = hcd->driver->hub_control (hcd, in rh_call_control()
660 usb_hub_adjust_deviceremovable(hcd->self.root_hub, in rh_call_control()
671 dev_dbg (hcd->self.controller, in rh_call_control()
708 usb_hcd_unlink_urb_from_ep(hcd, urb); in rh_call_control()
709 usb_hcd_giveback_urb(hcd, urb, status); in rh_call_control()
724 void usb_hcd_poll_rh_status(struct usb_hcd *hcd) in usb_hcd_poll_rh_status() argument
731 if (unlikely(!hcd->rh_pollable)) in usb_hcd_poll_rh_status()
733 if (!hcd->uses_new_polling && !hcd->status_urb) in usb_hcd_poll_rh_status()
736 length = hcd->driver->hub_status_data(hcd, buffer); in usb_hcd_poll_rh_status()
741 urb = hcd->status_urb; in usb_hcd_poll_rh_status()
743 clear_bit(HCD_FLAG_POLL_PENDING, &hcd->flags); in usb_hcd_poll_rh_status()
744 hcd->status_urb = NULL; in usb_hcd_poll_rh_status()
748 usb_hcd_unlink_urb_from_ep(hcd, urb); in usb_hcd_poll_rh_status()
749 usb_hcd_giveback_urb(hcd, urb, 0); in usb_hcd_poll_rh_status()
752 set_bit(HCD_FLAG_POLL_PENDING, &hcd->flags); in usb_hcd_poll_rh_status()
761 if (hcd->uses_new_polling ? HCD_POLL_RH(hcd) : in usb_hcd_poll_rh_status()
762 (length == 0 && hcd->status_urb != NULL)) in usb_hcd_poll_rh_status()
763 mod_timer (&hcd->rh_timer, (jiffies/(HZ/4) + 1) * (HZ/4)); in usb_hcd_poll_rh_status()
775 static int rh_queue_status (struct usb_hcd *hcd, struct urb *urb) in rh_queue_status() argument
782 if (hcd->status_urb || urb->transfer_buffer_length < len) { in rh_queue_status()
783 dev_dbg (hcd->self.controller, "not queuing rh status urb\n"); in rh_queue_status()
788 retval = usb_hcd_link_urb_to_ep(hcd, urb); in rh_queue_status()
792 hcd->status_urb = urb; in rh_queue_status()
793 urb->hcpriv = hcd; /* indicate it's queued */ in rh_queue_status()
794 if (!hcd->uses_new_polling) in rh_queue_status()
795 mod_timer(&hcd->rh_timer, (jiffies/(HZ/4) + 1) * (HZ/4)); in rh_queue_status()
798 else if (HCD_POLL_PENDING(hcd)) in rh_queue_status()
799 mod_timer(&hcd->rh_timer, jiffies); in rh_queue_status()
806 static int rh_urb_enqueue (struct usb_hcd *hcd, struct urb *urb) in rh_urb_enqueue() argument
809 return rh_queue_status (hcd, urb); in rh_urb_enqueue()
811 return rh_call_control (hcd, urb); in rh_urb_enqueue()
820 static int usb_rh_urb_dequeue(struct usb_hcd *hcd, struct urb *urb, int status) in usb_rh_urb_dequeue() argument
826 rc = usb_hcd_check_unlink_urb(hcd, urb, status); in usb_rh_urb_dequeue()
834 if (!hcd->uses_new_polling) in usb_rh_urb_dequeue()
835 del_timer (&hcd->rh_timer); in usb_rh_urb_dequeue()
836 if (urb == hcd->status_urb) { in usb_rh_urb_dequeue()
837 hcd->status_urb = NULL; in usb_rh_urb_dequeue()
838 usb_hcd_unlink_urb_from_ep(hcd, urb); in usb_rh_urb_dequeue()
839 usb_hcd_giveback_urb(hcd, urb, status); in usb_rh_urb_dequeue()
1001 static int register_root_hub(struct usb_hcd *hcd) in register_root_hub() argument
1003 struct device *parent_dev = hcd->self.controller; in register_root_hub()
1004 struct usb_device *usb_dev = hcd->self.root_hub; in register_root_hub()
1044 hcd->rh_registered = 1; in register_root_hub()
1048 if (HCD_DEAD(hcd)) in register_root_hub()
1049 usb_hc_died (hcd); /* This time clean up */ in register_root_hub()
1174 int usb_hcd_link_urb_to_ep(struct usb_hcd *hcd, struct urb *urb) in usb_hcd_link_urb_to_ep() argument
1200 if (HCD_RH_RUNNING(hcd)) { in usb_hcd_link_urb_to_ep()
1232 int usb_hcd_check_unlink_urb(struct usb_hcd *hcd, struct urb *urb, in usb_hcd_check_unlink_urb() argument
1265 void usb_hcd_unlink_urb_from_ep(struct usb_hcd *hcd, struct urb *urb) in usb_hcd_unlink_urb_from_ep() argument
1358 void usb_hcd_unmap_urb_setup_for_dma(struct usb_hcd *hcd, struct urb *urb) in usb_hcd_unmap_urb_setup_for_dma() argument
1361 dma_unmap_single(hcd->self.controller, in usb_hcd_unmap_urb_setup_for_dma()
1377 static void unmap_urb_for_dma(struct usb_hcd *hcd, struct urb *urb) in unmap_urb_for_dma() argument
1379 if (hcd->driver->unmap_urb_for_dma) in unmap_urb_for_dma()
1380 hcd->driver->unmap_urb_for_dma(hcd, urb); in unmap_urb_for_dma()
1382 usb_hcd_unmap_urb_for_dma(hcd, urb); in unmap_urb_for_dma()
1385 void usb_hcd_unmap_urb_for_dma(struct usb_hcd *hcd, struct urb *urb) in usb_hcd_unmap_urb_for_dma() argument
1389 usb_hcd_unmap_urb_setup_for_dma(hcd, urb); in usb_hcd_unmap_urb_for_dma()
1393 dma_unmap_sg(hcd->self.controller, in usb_hcd_unmap_urb_for_dma()
1398 dma_unmap_page(hcd->self.controller, in usb_hcd_unmap_urb_for_dma()
1403 dma_unmap_single(hcd->self.controller, in usb_hcd_unmap_urb_for_dma()
1420 static int map_urb_for_dma(struct usb_hcd *hcd, struct urb *urb, in map_urb_for_dma() argument
1423 if (hcd->driver->map_urb_for_dma) in map_urb_for_dma()
1424 return hcd->driver->map_urb_for_dma(hcd, urb, mem_flags); in map_urb_for_dma()
1426 return usb_hcd_map_urb_for_dma(hcd, urb, mem_flags); in map_urb_for_dma()
1429 int usb_hcd_map_urb_for_dma(struct usb_hcd *hcd, struct urb *urb, in usb_hcd_map_urb_for_dma() argument
1442 if (hcd->self.uses_pio_for_control) in usb_hcd_map_urb_for_dma()
1444 if (hcd->self.uses_dma) { in usb_hcd_map_urb_for_dma()
1446 hcd->self.controller, in usb_hcd_map_urb_for_dma()
1450 if (dma_mapping_error(hcd->self.controller, in usb_hcd_map_urb_for_dma()
1454 } else if (hcd->driver->flags & HCD_LOCAL_MEM) { in usb_hcd_map_urb_for_dma()
1470 if (hcd->self.uses_dma) { in usb_hcd_map_urb_for_dma()
1481 hcd->self.controller, in usb_hcd_map_urb_for_dma()
1496 hcd->self.controller, in usb_hcd_map_urb_for_dma()
1501 if (dma_mapping_error(hcd->self.controller, in usb_hcd_map_urb_for_dma()
1511 hcd->self.controller, in usb_hcd_map_urb_for_dma()
1515 if (dma_mapping_error(hcd->self.controller, in usb_hcd_map_urb_for_dma()
1521 } else if (hcd->driver->flags & HCD_LOCAL_MEM) { in usb_hcd_map_urb_for_dma()
1533 usb_hcd_unmap_urb_for_dma(hcd, urb); in usb_hcd_map_urb_for_dma()
1549 struct usb_hcd *hcd = bus_to_hcd(urb->dev->bus); in usb_hcd_submit_urb() local
1558 usbmon_urb_submit(&hcd->self, urb); in usb_hcd_submit_urb()
1569 status = rh_urb_enqueue(hcd, urb); in usb_hcd_submit_urb()
1571 status = map_urb_for_dma(hcd, urb, mem_flags); in usb_hcd_submit_urb()
1573 status = hcd->driver->urb_enqueue(hcd, urb, mem_flags); in usb_hcd_submit_urb()
1575 unmap_urb_for_dma(hcd, urb); in usb_hcd_submit_urb()
1580 usbmon_urb_submit_error(&hcd->self, urb, status); in usb_hcd_submit_urb()
1599 static int unlink1(struct usb_hcd *hcd, struct urb *urb, int status) in unlink1() argument
1604 value = usb_rh_urb_dequeue(hcd, urb, status); in unlink1()
1610 value = hcd->driver->urb_dequeue(hcd, urb, status); in unlink1()
1623 struct usb_hcd *hcd; in usb_hcd_unlink_urb() local
1640 hcd = bus_to_hcd(urb->dev->bus); in usb_hcd_unlink_urb()
1641 retval = unlink1(hcd, urb, status); in usb_hcd_unlink_urb()
1656 struct usb_hcd *hcd = bus_to_hcd(urb->dev->bus); in __usb_hcd_giveback_urb() local
1667 unmap_urb_for_dma(hcd, urb); in __usb_hcd_giveback_urb()
1668 usbmon_urb_complete(&hcd->self, urb, status); in __usb_hcd_giveback_urb()
1744 void usb_hcd_giveback_urb(struct usb_hcd *hcd, struct urb *urb, int status) in usb_hcd_giveback_urb() argument
1753 if (!hcd_giveback_urb_in_bh(hcd) && !is_root_hub(urb->dev)) { in usb_hcd_giveback_urb()
1759 bh = &hcd->high_prio_bh; in usb_hcd_giveback_urb()
1762 bh = &hcd->low_prio_bh; in usb_hcd_giveback_urb()
1789 struct usb_hcd *hcd; in usb_hcd_flush_endpoint() local
1795 hcd = bus_to_hcd(udev->bus); in usb_hcd_flush_endpoint()
1810 unlink1(hcd, urb, -ESHUTDOWN); in usb_hcd_flush_endpoint()
1811 dev_dbg (hcd->self.controller, in usb_hcd_flush_endpoint()
1886 struct usb_hcd *hcd; in usb_hcd_alloc_bandwidth() local
1889 hcd = bus_to_hcd(udev->bus); in usb_hcd_alloc_bandwidth()
1890 if (!hcd->driver->check_bandwidth) in usb_hcd_alloc_bandwidth()
1898 hcd->driver->drop_endpoint(hcd, udev, ep); in usb_hcd_alloc_bandwidth()
1901 hcd->driver->drop_endpoint(hcd, udev, ep); in usb_hcd_alloc_bandwidth()
1903 hcd->driver->check_bandwidth(hcd, udev); in usb_hcd_alloc_bandwidth()
1919 ret = hcd->driver->drop_endpoint(hcd, udev, ep); in usb_hcd_alloc_bandwidth()
1925 ret = hcd->driver->drop_endpoint(hcd, udev, ep); in usb_hcd_alloc_bandwidth()
1943 ret = hcd->driver->add_endpoint(hcd, udev, &alt->endpoint[j]); in usb_hcd_alloc_bandwidth()
1972 ret = hcd->driver->drop_endpoint(hcd, udev, in usb_hcd_alloc_bandwidth()
1979 ret = hcd->driver->add_endpoint(hcd, udev, in usb_hcd_alloc_bandwidth()
1985 ret = hcd->driver->check_bandwidth(hcd, udev); in usb_hcd_alloc_bandwidth()
1988 hcd->driver->reset_bandwidth(hcd, udev); in usb_hcd_alloc_bandwidth()
2003 struct usb_hcd *hcd; in usb_hcd_disable_endpoint() local
2006 hcd = bus_to_hcd(udev->bus); in usb_hcd_disable_endpoint()
2007 if (hcd->driver->endpoint_disable) in usb_hcd_disable_endpoint()
2008 hcd->driver->endpoint_disable(hcd, ep); in usb_hcd_disable_endpoint()
2022 struct usb_hcd *hcd = bus_to_hcd(udev->bus); in usb_hcd_reset_endpoint() local
2024 if (hcd->driver->endpoint_reset) in usb_hcd_reset_endpoint()
2025 hcd->driver->endpoint_reset(hcd, ep); in usb_hcd_reset_endpoint()
2056 struct usb_hcd *hcd; in usb_alloc_streams() local
2061 hcd = bus_to_hcd(dev->bus); in usb_alloc_streams()
2062 if (!hcd->driver->alloc_streams || !hcd->driver->free_streams) in usb_alloc_streams()
2078 ret = hcd->driver->alloc_streams(hcd, dev, eps, num_eps, in usb_alloc_streams()
2106 struct usb_hcd *hcd; in usb_free_streams() local
2111 hcd = bus_to_hcd(dev->bus); in usb_free_streams()
2120 ret = hcd->driver->free_streams(hcd, dev, eps, num_eps, mem_flags); in usb_free_streams()
2147 struct usb_hcd *hcd = bus_to_hcd(udev->bus); in usb_hcd_get_frame_number() local
2149 if (!HCD_RH_RUNNING(hcd)) in usb_hcd_get_frame_number()
2151 return hcd->driver->get_frame_number (hcd); in usb_hcd_get_frame_number()
2160 struct usb_hcd *hcd = container_of(rhdev->bus, struct usb_hcd, self); in hcd_bus_suspend() local
2162 int old_state = hcd->state; in hcd_bus_suspend()
2167 if (HCD_DEAD(hcd)) { in hcd_bus_suspend()
2172 if (!hcd->driver->bus_suspend) { in hcd_bus_suspend()
2175 clear_bit(HCD_FLAG_RH_RUNNING, &hcd->flags); in hcd_bus_suspend()
2176 hcd->state = HC_STATE_QUIESCING; in hcd_bus_suspend()
2177 status = hcd->driver->bus_suspend(hcd); in hcd_bus_suspend()
2181 hcd->state = HC_STATE_SUSPENDED; in hcd_bus_suspend()
2187 status = hcd->driver->hub_status_data(hcd, buffer); in hcd_bus_suspend()
2196 if (!HCD_DEAD(hcd)) { in hcd_bus_suspend()
2197 set_bit(HCD_FLAG_RH_RUNNING, &hcd->flags); in hcd_bus_suspend()
2198 hcd->state = old_state; in hcd_bus_suspend()
2209 struct usb_hcd *hcd = container_of(rhdev->bus, struct usb_hcd, self); in hcd_bus_resume() local
2211 int old_state = hcd->state; in hcd_bus_resume()
2215 if (HCD_DEAD(hcd)) { in hcd_bus_resume()
2219 if (!hcd->driver->bus_resume) in hcd_bus_resume()
2221 if (HCD_RH_RUNNING(hcd)) in hcd_bus_resume()
2224 hcd->state = HC_STATE_RESUMING; in hcd_bus_resume()
2225 status = hcd->driver->bus_resume(hcd); in hcd_bus_resume()
2226 clear_bit(HCD_FLAG_WAKEUP_PENDING, &hcd->flags); in hcd_bus_resume()
2232 if (!HCD_DEAD(hcd)) { in hcd_bus_resume()
2236 set_bit(HCD_FLAG_RH_RUNNING, &hcd->flags); in hcd_bus_resume()
2237 hcd->state = HC_STATE_RUNNING; in hcd_bus_resume()
2255 hcd->state = old_state; in hcd_bus_resume()
2259 usb_hc_died(hcd); in hcd_bus_resume()
2267 struct usb_hcd *hcd = container_of(work, struct usb_hcd, wakeup_work); in hcd_resume_work() local
2268 struct usb_device *udev = hcd->self.root_hub; in hcd_resume_work()
2282 void usb_hcd_resume_root_hub (struct usb_hcd *hcd) in usb_hcd_resume_root_hub() argument
2287 if (hcd->rh_registered) { in usb_hcd_resume_root_hub()
2288 set_bit(HCD_FLAG_WAKEUP_PENDING, &hcd->flags); in usb_hcd_resume_root_hub()
2289 queue_work(pm_wq, &hcd->wakeup_work); in usb_hcd_resume_root_hub()
2316 struct usb_hcd *hcd; in usb_bus_start_enum() local
2323 hcd = container_of (bus, struct usb_hcd, self); in usb_bus_start_enum()
2324 if (port_num && hcd->driver->start_port_reset) in usb_bus_start_enum()
2325 status = hcd->driver->start_port_reset(hcd, port_num); in usb_bus_start_enum()
2331 mod_timer(&hcd->rh_timer, jiffies + msecs_to_jiffies(10)); in usb_bus_start_enum()
2352 struct usb_hcd *hcd = __hcd; in usb_hcd_irq() local
2355 if (unlikely(HCD_DEAD(hcd) || !HCD_HW_ACCESSIBLE(hcd))) in usb_hcd_irq()
2357 else if (hcd->driver->irq(hcd) == IRQ_NONE) in usb_hcd_irq()
2378 void usb_hc_died (struct usb_hcd *hcd) in usb_hc_died() argument
2382 dev_err (hcd->self.controller, "HC died; cleaning up\n"); in usb_hc_died()
2385 clear_bit(HCD_FLAG_RH_RUNNING, &hcd->flags); in usb_hc_died()
2386 set_bit(HCD_FLAG_DEAD, &hcd->flags); in usb_hc_died()
2387 if (hcd->rh_registered) { in usb_hc_died()
2388 clear_bit(HCD_FLAG_POLL_RH, &hcd->flags); in usb_hc_died()
2391 usb_set_device_state (hcd->self.root_hub, in usb_hc_died()
2393 usb_kick_hub_wq(hcd->self.root_hub); in usb_hc_died()
2395 if (usb_hcd_is_primary_hcd(hcd) && hcd->shared_hcd) { in usb_hc_died()
2396 hcd = hcd->shared_hcd; in usb_hc_died()
2397 if (hcd->rh_registered) { in usb_hc_died()
2398 clear_bit(HCD_FLAG_POLL_RH, &hcd->flags); in usb_hc_died()
2401 usb_set_device_state(hcd->self.root_hub, in usb_hc_died()
2403 usb_kick_hub_wq(hcd->self.root_hub); in usb_hc_died()
2441 struct usb_hcd *hcd; in usb_create_shared_hcd() local
2443 hcd = kzalloc(sizeof(*hcd) + driver->hcd_priv_size, GFP_KERNEL); in usb_create_shared_hcd()
2444 if (!hcd) { in usb_create_shared_hcd()
2449 hcd->address0_mutex = kmalloc(sizeof(*hcd->address0_mutex), in usb_create_shared_hcd()
2451 if (!hcd->address0_mutex) { in usb_create_shared_hcd()
2452 kfree(hcd); in usb_create_shared_hcd()
2456 mutex_init(hcd->address0_mutex); in usb_create_shared_hcd()
2457 hcd->bandwidth_mutex = kmalloc(sizeof(*hcd->bandwidth_mutex), in usb_create_shared_hcd()
2459 if (!hcd->bandwidth_mutex) { in usb_create_shared_hcd()
2460 kfree(hcd); in usb_create_shared_hcd()
2464 mutex_init(hcd->bandwidth_mutex); in usb_create_shared_hcd()
2465 dev_set_drvdata(dev, hcd); in usb_create_shared_hcd()
2468 hcd->address0_mutex = primary_hcd->address0_mutex; in usb_create_shared_hcd()
2469 hcd->bandwidth_mutex = primary_hcd->bandwidth_mutex; in usb_create_shared_hcd()
2470 hcd->primary_hcd = primary_hcd; in usb_create_shared_hcd()
2472 hcd->shared_hcd = primary_hcd; in usb_create_shared_hcd()
2473 primary_hcd->shared_hcd = hcd; in usb_create_shared_hcd()
2477 kref_init(&hcd->kref); in usb_create_shared_hcd()
2479 usb_bus_init(&hcd->self); in usb_create_shared_hcd()
2480 hcd->self.controller = dev; in usb_create_shared_hcd()
2481 hcd->self.bus_name = bus_name; in usb_create_shared_hcd()
2482 hcd->self.uses_dma = (dev->dma_mask != NULL); in usb_create_shared_hcd()
2484 init_timer(&hcd->rh_timer); in usb_create_shared_hcd()
2485 hcd->rh_timer.function = rh_timer_func; in usb_create_shared_hcd()
2486 hcd->rh_timer.data = (unsigned long) hcd; in usb_create_shared_hcd()
2488 INIT_WORK(&hcd->wakeup_work, hcd_resume_work); in usb_create_shared_hcd()
2491 hcd->driver = driver; in usb_create_shared_hcd()
2492 hcd->speed = driver->flags & HCD_MASK; in usb_create_shared_hcd()
2493 hcd->product_desc = (driver->product_desc) ? driver->product_desc : in usb_create_shared_hcd()
2495 return hcd; in usb_create_shared_hcd()
2532 struct usb_hcd *hcd = container_of (kref, struct usb_hcd, kref); in hcd_release() local
2535 if (usb_hcd_is_primary_hcd(hcd)) { in hcd_release()
2536 kfree(hcd->address0_mutex); in hcd_release()
2537 kfree(hcd->bandwidth_mutex); in hcd_release()
2539 if (hcd->shared_hcd) { in hcd_release()
2540 struct usb_hcd *peer = hcd->shared_hcd; in hcd_release()
2543 if (peer->primary_hcd == hcd) in hcd_release()
2547 kfree(hcd); in hcd_release()
2550 struct usb_hcd *usb_get_hcd (struct usb_hcd *hcd) in usb_get_hcd() argument
2552 if (hcd) in usb_get_hcd()
2553 kref_get (&hcd->kref); in usb_get_hcd()
2554 return hcd; in usb_get_hcd()
2558 void usb_put_hcd (struct usb_hcd *hcd) in usb_put_hcd() argument
2560 if (hcd) in usb_put_hcd()
2561 kref_put (&hcd->kref, hcd_release); in usb_put_hcd()
2565 int usb_hcd_is_primary_hcd(struct usb_hcd *hcd) in usb_hcd_is_primary_hcd() argument
2567 if (!hcd->primary_hcd) in usb_hcd_is_primary_hcd()
2569 return hcd == hcd->primary_hcd; in usb_hcd_is_primary_hcd()
2573 int usb_hcd_find_raw_port_number(struct usb_hcd *hcd, int port1) in usb_hcd_find_raw_port_number() argument
2575 if (!hcd->driver->find_raw_port_number) in usb_hcd_find_raw_port_number()
2578 return hcd->driver->find_raw_port_number(hcd, port1); in usb_hcd_find_raw_port_number()
2581 static int usb_hcd_request_irqs(struct usb_hcd *hcd, in usb_hcd_request_irqs() argument
2586 if (hcd->driver->irq) { in usb_hcd_request_irqs()
2588 snprintf(hcd->irq_descr, sizeof(hcd->irq_descr), "%s:usb%d", in usb_hcd_request_irqs()
2589 hcd->driver->description, hcd->self.busnum); in usb_hcd_request_irqs()
2591 hcd->irq_descr, hcd); in usb_hcd_request_irqs()
2593 dev_err(hcd->self.controller, in usb_hcd_request_irqs()
2598 hcd->irq = irqnum; in usb_hcd_request_irqs()
2599 dev_info(hcd->self.controller, "irq %d, %s 0x%08llx\n", irqnum, in usb_hcd_request_irqs()
2600 (hcd->driver->flags & HCD_MEMORY) ? in usb_hcd_request_irqs()
2602 (unsigned long long)hcd->rsrc_start); in usb_hcd_request_irqs()
2604 hcd->irq = 0; in usb_hcd_request_irqs()
2605 if (hcd->rsrc_start) in usb_hcd_request_irqs()
2606 dev_info(hcd->self.controller, "%s 0x%08llx\n", in usb_hcd_request_irqs()
2607 (hcd->driver->flags & HCD_MEMORY) ? in usb_hcd_request_irqs()
2609 (unsigned long long)hcd->rsrc_start); in usb_hcd_request_irqs()
2618 static void usb_put_invalidate_rhdev(struct usb_hcd *hcd) in usb_put_invalidate_rhdev() argument
2623 rhdev = hcd->self.root_hub; in usb_put_invalidate_rhdev()
2624 hcd->self.root_hub = NULL; in usb_put_invalidate_rhdev()
2639 int usb_add_hcd(struct usb_hcd *hcd, in usb_add_hcd() argument
2645 if (IS_ENABLED(CONFIG_USB_PHY) && !hcd->usb_phy) { in usb_add_hcd()
2646 struct usb_phy *phy = usb_get_phy_dev(hcd->self.controller, 0); in usb_add_hcd()
2658 hcd->usb_phy = phy; in usb_add_hcd()
2659 hcd->remove_phy = 1; in usb_add_hcd()
2663 if (IS_ENABLED(CONFIG_GENERIC_PHY) && !hcd->phy) { in usb_add_hcd()
2664 struct phy *phy = phy_get(hcd->self.controller, "usb"); in usb_add_hcd()
2682 hcd->phy = phy; in usb_add_hcd()
2683 hcd->remove_phy = 1; in usb_add_hcd()
2687 dev_info(hcd->self.controller, "%s\n", hcd->product_desc); in usb_add_hcd()
2691 hcd->authorized_default = hcd->wireless ? 0 : 1; in usb_add_hcd()
2693 hcd->authorized_default = authorized_default; in usb_add_hcd()
2694 set_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags); in usb_add_hcd()
2700 if ((retval = hcd_buffer_create(hcd)) != 0) { in usb_add_hcd()
2701 dev_dbg(hcd->self.controller, "pool alloc failed\n"); in usb_add_hcd()
2705 if ((retval = usb_register_bus(&hcd->self)) < 0) in usb_add_hcd()
2708 if ((rhdev = usb_alloc_dev(NULL, &hcd->self, 0)) == NULL) { in usb_add_hcd()
2709 dev_err(hcd->self.controller, "unable to allocate root hub\n"); in usb_add_hcd()
2714 hcd->self.root_hub = rhdev; in usb_add_hcd()
2717 switch (hcd->speed) { in usb_add_hcd()
2745 set_bit(HCD_FLAG_RH_RUNNING, &hcd->flags); in usb_add_hcd()
2750 if (hcd->driver->reset && (retval = hcd->driver->reset(hcd)) < 0) { in usb_add_hcd()
2751 dev_err(hcd->self.controller, "can't setup: %d\n", retval); in usb_add_hcd()
2754 hcd->rh_pollable = 1; in usb_add_hcd()
2757 if (device_can_wakeup(hcd->self.controller) in usb_add_hcd()
2758 && device_can_wakeup(&hcd->self.root_hub->dev)) in usb_add_hcd()
2759 dev_dbg(hcd->self.controller, "supports USB remote wakeup\n"); in usb_add_hcd()
2762 init_giveback_urb_bh(&hcd->high_prio_bh); in usb_add_hcd()
2763 init_giveback_urb_bh(&hcd->low_prio_bh); in usb_add_hcd()
2768 if (usb_hcd_is_primary_hcd(hcd) && irqnum) { in usb_add_hcd()
2769 retval = usb_hcd_request_irqs(hcd, irqnum, irqflags); in usb_add_hcd()
2774 hcd->state = HC_STATE_RUNNING; in usb_add_hcd()
2775 retval = hcd->driver->start(hcd); in usb_add_hcd()
2777 dev_err(hcd->self.controller, "startup error %d\n", retval); in usb_add_hcd()
2782 if ((retval = register_root_hub(hcd)) != 0) in usb_add_hcd()
2791 if (hcd->uses_new_polling && HCD_POLL_RH(hcd)) in usb_add_hcd()
2792 usb_hcd_poll_rh_status(hcd); in usb_add_hcd()
2797 clear_bit(HCD_FLAG_RH_RUNNING, &hcd->flags); in usb_add_hcd()
2798 if (HC_IS_RUNNING(hcd->state)) in usb_add_hcd()
2799 hcd->state = HC_STATE_QUIESCING; in usb_add_hcd()
2801 hcd->rh_registered = 0; in usb_add_hcd()
2805 cancel_work_sync(&hcd->wakeup_work); in usb_add_hcd()
2811 hcd->rh_pollable = 0; in usb_add_hcd()
2812 clear_bit(HCD_FLAG_POLL_RH, &hcd->flags); in usb_add_hcd()
2813 del_timer_sync(&hcd->rh_timer); in usb_add_hcd()
2814 hcd->driver->stop(hcd); in usb_add_hcd()
2815 hcd->state = HC_STATE_HALT; in usb_add_hcd()
2816 clear_bit(HCD_FLAG_POLL_RH, &hcd->flags); in usb_add_hcd()
2817 del_timer_sync(&hcd->rh_timer); in usb_add_hcd()
2819 if (usb_hcd_is_primary_hcd(hcd) && hcd->irq > 0) in usb_add_hcd()
2820 free_irq(irqnum, hcd); in usb_add_hcd()
2824 usb_put_invalidate_rhdev(hcd); in usb_add_hcd()
2826 usb_deregister_bus(&hcd->self); in usb_add_hcd()
2828 hcd_buffer_destroy(hcd); in usb_add_hcd()
2830 if (IS_ENABLED(CONFIG_GENERIC_PHY) && hcd->remove_phy && hcd->phy) { in usb_add_hcd()
2831 phy_power_off(hcd->phy); in usb_add_hcd()
2832 phy_exit(hcd->phy); in usb_add_hcd()
2833 phy_put(hcd->phy); in usb_add_hcd()
2834 hcd->phy = NULL; in usb_add_hcd()
2837 if (hcd->remove_phy && hcd->usb_phy) { in usb_add_hcd()
2838 usb_phy_shutdown(hcd->usb_phy); in usb_add_hcd()
2839 usb_put_phy(hcd->usb_phy); in usb_add_hcd()
2840 hcd->usb_phy = NULL; in usb_add_hcd()
2854 void usb_remove_hcd(struct usb_hcd *hcd) in usb_remove_hcd() argument
2856 struct usb_device *rhdev = hcd->self.root_hub; in usb_remove_hcd()
2858 dev_info(hcd->self.controller, "remove, state %x\n", hcd->state); in usb_remove_hcd()
2863 clear_bit(HCD_FLAG_RH_RUNNING, &hcd->flags); in usb_remove_hcd()
2864 if (HC_IS_RUNNING (hcd->state)) in usb_remove_hcd()
2865 hcd->state = HC_STATE_QUIESCING; in usb_remove_hcd()
2867 dev_dbg(hcd->self.controller, "roothub graceful disconnect\n"); in usb_remove_hcd()
2869 hcd->rh_registered = 0; in usb_remove_hcd()
2873 cancel_work_sync(&hcd->wakeup_work); in usb_remove_hcd()
2895 hcd->rh_pollable = 0; in usb_remove_hcd()
2896 clear_bit(HCD_FLAG_POLL_RH, &hcd->flags); in usb_remove_hcd()
2897 del_timer_sync(&hcd->rh_timer); in usb_remove_hcd()
2899 hcd->driver->stop(hcd); in usb_remove_hcd()
2900 hcd->state = HC_STATE_HALT; in usb_remove_hcd()
2903 clear_bit(HCD_FLAG_POLL_RH, &hcd->flags); in usb_remove_hcd()
2904 del_timer_sync(&hcd->rh_timer); in usb_remove_hcd()
2906 if (usb_hcd_is_primary_hcd(hcd)) { in usb_remove_hcd()
2907 if (hcd->irq > 0) in usb_remove_hcd()
2908 free_irq(hcd->irq, hcd); in usb_remove_hcd()
2911 usb_deregister_bus(&hcd->self); in usb_remove_hcd()
2912 hcd_buffer_destroy(hcd); in usb_remove_hcd()
2914 if (IS_ENABLED(CONFIG_GENERIC_PHY) && hcd->remove_phy && hcd->phy) { in usb_remove_hcd()
2915 phy_power_off(hcd->phy); in usb_remove_hcd()
2916 phy_exit(hcd->phy); in usb_remove_hcd()
2917 phy_put(hcd->phy); in usb_remove_hcd()
2918 hcd->phy = NULL; in usb_remove_hcd()
2920 if (hcd->remove_phy && hcd->usb_phy) { in usb_remove_hcd()
2921 usb_phy_shutdown(hcd->usb_phy); in usb_remove_hcd()
2922 usb_put_phy(hcd->usb_phy); in usb_remove_hcd()
2923 hcd->usb_phy = NULL; in usb_remove_hcd()
2926 usb_put_invalidate_rhdev(hcd); in usb_remove_hcd()
2933 struct usb_hcd *hcd = platform_get_drvdata(dev); in usb_hcd_platform_shutdown() local
2935 if (hcd->driver->shutdown) in usb_hcd_platform_shutdown()
2936 hcd->driver->shutdown(hcd); in usb_hcd_platform_shutdown()