Changes in uspace/drv/bus/usb/usbmid/main.c [5203e256:5153b58] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/bus/usb/usbmid/main.c
r5203e256 r5153b58 49 49 * @return Error code. 50 50 */ 51 static int usbmid_ add_device(usb_device_t *dev)51 static int usbmid_device_add(usb_device_t *dev) 52 52 { 53 53 usb_log_info("Taking care of new MID `%s'.\n", dev->ddf_dev->name); … … 65 65 return EOK; 66 66 } 67 /*----------------------------------------------------------------------------*/ 68 /** Callback when a MID device is about to be removed from the host. 69 * 70 * @param dev USB device representing the removed device. 71 * @return Error code. 72 */ 73 static int usbmid_device_remove(usb_device_t *dev) 74 { 75 assert(dev); 76 usb_mid_t *usb_mid = dev->driver_data; 77 assert(usb_mid); 78 79 /* Remove ctl function */ 80 int ret = ddf_fun_unbind(usb_mid->ctl_fun); 81 if (ret != EOK) { 82 usb_log_error("Failed to unbind USB MID ctl function: %s.\n", 83 str_error(ret)); 84 return ret; 85 } 86 ddf_fun_destroy(usb_mid->ctl_fun); 87 88 /* Remove all children */ 89 while (!list_empty(&usb_mid->interface_list)) { 90 link_t *item = list_first(&usb_mid->interface_list); 91 list_remove(item); 92 93 usbmid_interface_t *iface = usbmid_interface_from_link(item); 94 95 usb_log_info("Removing child for interface %d (%s).\n", 96 iface->interface_no, 97 usb_str_class(iface->interface->interface_class)); 98 99 /* Tell the child to go off-line. */ 100 int pret = ddf_fun_offline(iface->fun); 101 if (pret != EOK) { 102 usb_log_warning("Failed to turn off child for interface" 103 " %d (%s): %s\n", iface->interface_no, 104 usb_str_class(iface->interface->interface_class), 105 str_error(pret)); 106 ret = pret; 107 } 108 109 /* Now remove the child. */ 110 pret = usbmid_interface_destroy(iface); 111 if (pret != EOK) { 112 usb_log_error("Failed to destroy child for interface " 113 "%d (%s): %s\n", iface->interface_no, 114 usb_str_class(iface->interface->interface_class), 115 str_error(pret)); 116 ret = pret; 117 } 118 } 119 return ret; 120 } 121 /*----------------------------------------------------------------------------*/ 122 /** Callback when a MID device was removed from the host. 123 * 124 * @param dev USB device representing the removed device. 125 * @return Error code. 126 */ 127 static int usbmid_device_gone(usb_device_t *dev) 128 { 129 assert(dev); 130 usb_mid_t *usb_mid = dev->driver_data; 131 assert(usb_mid); 132 133 usb_log_info("USB MID gone: `%s'.\n", dev->ddf_dev->name); 134 135 /* Remove ctl function */ 136 int ret = ddf_fun_unbind(usb_mid->ctl_fun); 137 if (ret != EOK) { 138 usb_log_error("Failed to unbind USB MID ctl function: %s.\n", 139 str_error(ret)); 140 return ret; 141 } 142 ddf_fun_destroy(usb_mid->ctl_fun); 143 144 /* Now remove all other functions */ 145 while (!list_empty(&usb_mid->interface_list)) { 146 link_t *item = list_first(&usb_mid->interface_list); 147 list_remove(item); 148 149 usbmid_interface_t *iface = usbmid_interface_from_link(item); 150 151 usb_log_info("Child for interface %d (%s) gone.\n", 152 iface->interface_no, 153 usb_str_class(iface->interface->interface_class)); 154 155 const int pret = usbmid_interface_destroy(iface); 156 if (pret != EOK) { 157 usb_log_error("Failed to remove child for interface " 158 "%d (%s): %s\n", 159 iface->interface_no, 160 usb_str_class(iface->interface->interface_class), 161 str_error(pret)); 162 ret = pret; 163 } 164 } 165 return ret; 166 } 67 167 68 168 /** USB MID driver ops. */ 69 static usb_driver_ops_t mid_driver_ops = { 70 .add_device = usbmid_add_device, 169 static const usb_driver_ops_t mid_driver_ops = { 170 .device_add = usbmid_device_add, 171 .device_rem = usbmid_device_remove, 172 .device_gone = usbmid_device_gone, 71 173 }; 72 174 73 175 /** USB MID driver. */ 74 static usb_driver_t mid_driver = {176 static const usb_driver_t mid_driver = { 75 177 .name = NAME, 76 178 .ops = &mid_driver_ops,
Note:
See TracChangeset
for help on using the changeset viewer.