Changeset 20a3465 in mainline for uspace/drv/bus/usb/usbmid/main.c
- Timestamp:
- 2011-10-30T19:50:54Z (14 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 3ce78580, 48902fa
- Parents:
- 4c3ad56 (diff), 45bf63c (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/bus/usb/usbmid/main.c
r4c3ad56 r20a3465 65 65 return EOK; 66 66 } 67 /*----------------------------------------------------------------------------*/ 68 /** Callback when a MID device is about to be removed from the host. 69 * 70 * @param gen_dev Generic DDF 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 int ret = ENOTSUP; 77 usb_mid_t *usb_mid = dev->driver_data; 78 assert(usb_mid); 79 80 /* Signal all interface functions */ 81 list_foreach(usb_mid->interface_list, item) { 82 usbmid_interface_t *iface = usbmid_interface_from_link(item); 83 84 usb_log_info("Signaling remove to child for interface " 85 "%d (%s).\n", iface->interface_no, 86 usb_str_class(iface->interface->interface_class)); 87 // TODO cascade the call. 88 } 89 return ret; 90 } 91 /*----------------------------------------------------------------------------*/ 92 /** Callback when a MID device was removed from the host. 93 * 94 * @param gen_dev Generic DDF device representing the removed device. 95 * @return Error code. 96 */ 97 static int usbmid_device_gone(usb_device_t *dev) 98 { 99 assert(dev); 100 usb_log_info("USB MID gone: `%s'.\n", dev->ddf_dev->name); 101 102 /* Remove ctl function */ 103 usb_mid_t *usb_mid = dev->driver_data; 104 int ret = ddf_fun_unbind(usb_mid->ctl_fun); 105 if (ret != EOK) { 106 usb_log_error("Failed to unbind USB MID ctl function: %s.\n", 107 str_error(ret)); 108 return ret; 109 } 110 ddf_fun_destroy(usb_mid->ctl_fun); 111 112 /* Now remove all other functions */ 113 while (!list_empty(&usb_mid->interface_list)) { 114 link_t *item = list_first(&usb_mid->interface_list); 115 list_remove(item); 116 117 usbmid_interface_t *iface = usbmid_interface_from_link(item); 118 119 usb_log_info("Removing child for interface %d (%s).\n", 120 iface->interface_no, 121 usb_str_class(iface->interface->interface_class)); 122 123 const int pret = usbmid_interface_destroy(iface); 124 if (pret != EOK) { 125 usb_log_error("Failed to remove child for interface " 126 "%d (%s): %s\n", 127 iface->interface_no, 128 usb_str_class(iface->interface->interface_class), 129 str_error(pret)); 130 ret = pret; 131 } 132 } 133 return ret; 134 } 67 135 68 136 /** USB MID driver ops. */ 69 static usb_driver_ops_t mid_driver_ops = {137 static const usb_driver_ops_t mid_driver_ops = { 70 138 .device_add = usbmid_device_add, 139 .device_rem = usbmid_device_remove, 140 .device_gone = usbmid_device_gone, 71 141 }; 72 142 73 143 /** USB MID driver. */ 74 static usb_driver_t mid_driver = {144 static const usb_driver_t mid_driver = { 75 145 .name = NAME, 76 146 .ops = &mid_driver_ops,
Note:
See TracChangeset
for help on using the changeset viewer.