Changes in uspace/drv/bus/usb/usbmid/main.c [9d58539:065064e6] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/bus/usb/usbmid/main.c
r9d58539 r065064e6 53 53 usb_log_info("Taking care of new MID `%s'.\n", dev->ddf_dev->name); 54 54 55 const bool accept = usbmid_explore_device(dev); 55 usb_pipe_start_long_transfer(&dev->ctrl_pipe); 56 57 bool accept = usbmid_explore_device(dev); 58 59 usb_pipe_end_long_transfer(&dev->ctrl_pipe); 56 60 57 61 if (!accept) { … … 61 65 return EOK; 62 66 } 63 /*----------------------------------------------------------------------------*/64 /** Callback when a MID device is about to be removed from the host.65 *66 * @param dev USB device representing the removed device.67 * @return Error code.68 */69 static int usbmid_device_remove(usb_device_t *dev)70 {71 assert(dev);72 usb_mid_t *usb_mid = dev->driver_data;73 assert(usb_mid);74 67 75 /* Remove ctl function */76 int ret = ddf_fun_unbind(usb_mid->ctl_fun);77 if (ret != EOK) {78 usb_log_error("Failed to unbind USB MID ctl function: %s.\n",79 str_error(ret));80 return ret;81 }82 ddf_fun_destroy(usb_mid->ctl_fun);83 84 /* Remove all children */85 while (!list_empty(&usb_mid->interface_list)) {86 link_t *item = list_first(&usb_mid->interface_list);87 list_remove(item);88 89 usbmid_interface_t *iface = usbmid_interface_from_link(item);90 91 usb_log_info("Removing child for interface %d (%s).\n",92 iface->interface_no,93 usb_str_class(iface->interface->interface_class));94 95 /* Tell the child to go off-line. */96 int pret = ddf_fun_offline(iface->fun);97 if (pret != EOK) {98 usb_log_warning("Failed to turn off child for interface"99 " %d (%s): %s\n", iface->interface_no,100 usb_str_class(iface->interface->interface_class),101 str_error(pret));102 ret = pret;103 }104 105 /* Now remove the child. */106 pret = usbmid_interface_destroy(iface);107 if (pret != EOK) {108 usb_log_error("Failed to destroy child for interface "109 "%d (%s): %s\n", iface->interface_no,110 usb_str_class(iface->interface->interface_class),111 str_error(pret));112 ret = pret;113 }114 }115 return ret;116 }117 /*----------------------------------------------------------------------------*/118 /** Callback when a MID device was removed from the host.119 *120 * @param dev USB device representing the removed device.121 * @return Error code.122 */123 68 static int usbmid_device_gone(usb_device_t *dev) 124 69 { 125 70 assert(dev); 126 usb_mid_t *usb_mid = dev->driver_data;127 assert(usb_mid);128 129 71 usb_log_info("USB MID gone: `%s'.\n", dev->ddf_dev->name); 130 72 131 73 /* Remove ctl function */ 74 usb_mid_t *usb_mid = dev->driver_data; 132 75 int ret = ddf_fun_unbind(usb_mid->ctl_fun); 133 76 if (ret != EOK) { … … 143 86 list_remove(item); 144 87 145 usbmid_interface_t *iface = usbmid_interface_from_link(item); 88 usbmid_interface_t *iface = list_get_instance(item, 89 usbmid_interface_t, link); 146 90 147 usb_log_info(" Child for interface %d (%s) gone.\n",91 usb_log_info("Removing child for interface %d (%s).\n", 148 92 iface->interface_no, 149 93 usb_str_class(iface->interface->interface_class)); … … 163 107 164 108 /** USB MID driver ops. */ 165 static constusb_driver_ops_t mid_driver_ops = {109 static usb_driver_ops_t mid_driver_ops = { 166 110 .device_add = usbmid_device_add, 167 .device_rem = usbmid_device_remove,168 111 .device_gone = usbmid_device_gone, 169 112 }; 170 113 171 114 /** USB MID driver. */ 172 static constusb_driver_t mid_driver = {115 static usb_driver_t mid_driver = { 173 116 .name = NAME, 174 117 .ops = &mid_driver_ops,
Note:
See TracChangeset
for help on using the changeset viewer.