Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/drv/bus/usb/usbmid/main.c

    r9d58539 r065064e6  
    5353        usb_log_info("Taking care of new MID `%s'.\n", dev->ddf_dev->name);
    5454
    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);
    5660
    5761        if (!accept) {
     
    6165        return EOK;
    6266}
    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);
    7467
    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  */
    12368static int usbmid_device_gone(usb_device_t *dev)
    12469{
    12570        assert(dev);
    126         usb_mid_t *usb_mid = dev->driver_data;
    127         assert(usb_mid);
    128 
    12971        usb_log_info("USB MID gone: `%s'.\n", dev->ddf_dev->name);
    13072
    13173        /* Remove ctl function */
     74        usb_mid_t *usb_mid = dev->driver_data;
    13275        int ret = ddf_fun_unbind(usb_mid->ctl_fun);
    13376        if (ret != EOK) {
     
    14386                list_remove(item);
    14487
    145                 usbmid_interface_t *iface = usbmid_interface_from_link(item);
     88                usbmid_interface_t *iface = list_get_instance(item,
     89                    usbmid_interface_t, link);
    14690
    147                 usb_log_info("Child for interface %d (%s) gone.\n",
     91                usb_log_info("Removing child for interface %d (%s).\n",
    14892                    iface->interface_no,
    14993                    usb_str_class(iface->interface->interface_class));
     
    163107
    164108/** USB MID driver ops. */
    165 static const usb_driver_ops_t mid_driver_ops = {
     109static usb_driver_ops_t mid_driver_ops = {
    166110        .device_add = usbmid_device_add,
    167         .device_rem = usbmid_device_remove,
    168111        .device_gone = usbmid_device_gone,
    169112};
    170113
    171114/** USB MID driver. */
    172 static const usb_driver_t mid_driver = {
     115static usb_driver_t mid_driver = {
    173116        .name = NAME,
    174117        .ops = &mid_driver_ops,
Note: See TracChangeset for help on using the changeset viewer.