int usb_reset_root_port(struct usb_device *udev) { struct udevice *bus = udev->controller_dev; struct dm_usb_ops *ops = usb_get_ops(bus); if (!ops->reset_root_port) return -ENOSYS; return ops->reset_root_port(bus, udev); }
void *poll_int_queue(struct usb_device *udev, struct int_queue *queue) { struct udevice *bus = udev->controller_dev; struct dm_usb_ops *ops = usb_get_ops(bus); if (!ops->poll_int_queue) return NULL; return ops->poll_int_queue(bus, udev, queue); }
int destroy_int_queue(struct usb_device *udev, struct int_queue *queue) { struct udevice *bus = udev->controller_dev; struct dm_usb_ops *ops = usb_get_ops(bus); if (!ops->destroy_int_queue) return -ENOSYS; return ops->destroy_int_queue(bus, udev, queue); }
int submit_bulk_msg(struct usb_device *udev, unsigned long pipe, void *buffer, int length) { struct udevice *bus = udev->controller_dev; struct dm_usb_ops *ops = usb_get_ops(bus); if (!ops->bulk) return -ENOSYS; return ops->bulk(bus, udev, pipe, buffer, length); }
int submit_int_msg(struct usb_device *udev, unsigned long pipe, void *buffer, int length, int interval) { struct udevice *bus = udev->controller_dev; struct dm_usb_ops *ops = usb_get_ops(bus); if (!ops->interrupt) return -ENOSYS; return ops->interrupt(bus, udev, pipe, buffer, length, interval); }
int usb_alloc_device(struct usb_device *udev) { struct udevice *bus = udev->controller_dev; struct dm_usb_ops *ops = usb_get_ops(bus); /* This is only requird by some controllers - current XHCI */ if (!ops->alloc_device) return 0; return ops->alloc_device(bus, udev); }
int submit_control_msg(struct usb_device *udev, unsigned long pipe, void *buffer, int length, struct devrequest *setup) { struct udevice *bus = udev->controller_dev; struct dm_usb_ops *ops = usb_get_ops(bus); if (!ops->control) return -ENOSYS; return ops->control(bus, udev, pipe, buffer, length, setup); }
struct int_queue *create_int_queue(struct usb_device *udev, unsigned long pipe, int queuesize, int elementsize, void *buffer, int interval) { struct udevice *bus = udev->controller_dev; struct dm_usb_ops *ops = usb_get_ops(bus); if (!ops->create_int_queue) return NULL; return ops->create_int_queue(bus, udev, pipe, queuesize, elementsize, buffer, interval); }
int submit_control_msg(struct usb_device *udev, unsigned long pipe, void *buffer, int length, struct devrequest *setup) { struct udevice *bus = udev->controller_dev; struct dm_usb_ops *ops = usb_get_ops(bus); struct usb_uclass_priv *uc_priv = bus->uclass->priv; int err; if (!ops->control) return -ENOSYS; err = ops->control(bus, udev, pipe, buffer, length, setup); if (setup->request == USB_REQ_SET_FEATURE && setup->requesttype == USB_RT_PORT && setup->value == cpu_to_le16(USB_PORT_FEAT_RESET) && err == -ENXIO) { /* Device handed over to companion after port reset */ uc_priv->companion_device_count++; } return err; }