Changeset 91173333 in mainline for uspace/drv/bus/usb/usbmid/main.c


Ignore:
Timestamp:
2018-01-13T21:36:13Z (6 years ago)
Author:
Petr Manek <petr.manek@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
edc51615
Parents:
8a0c52a
Message:

usbdev: use centralized joining mechanism, move away from device_removed() callback

File:
1 edited

Legend:

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

    r8a0c52a r91173333  
    5656}
    5757
     58static int destroy_interfaces(usb_mid_t *usb_mid)
     59{
     60        int ret = EOK;
     61
     62        while (!list_empty(&usb_mid->interface_list)) {
     63                link_t *item = list_first(&usb_mid->interface_list);
     64                list_remove(item);
     65
     66                usbmid_interface_t *iface = usbmid_interface_from_link(item);
     67
     68                const int pret = usbmid_interface_destroy(iface);
     69                if (pret != EOK) {
     70                        usb_log_error("Failed to remove child `%s': %s\n",
     71                            ddf_fun_get_name(iface->fun), str_error(pret));
     72                        ret = pret;
     73                }
     74        }
     75
     76        return ret;
     77}
     78
    5879/** Callback when a MID device is about to be removed from the host.
    5980 *
     
    90111        }
    91112
    92         return ret;
    93 }
    94 
    95 static int destroy_interfaces(usb_mid_t *usb_mid)
    96 {
    97         int ret = EOK;
    98 
    99         while (!list_empty(&usb_mid->interface_list)) {
    100                 link_t *item = list_first(&usb_mid->interface_list);
    101                 list_remove(item);
    102 
    103                 usbmid_interface_t *iface = usbmid_interface_from_link(item);
    104 
    105                 const int pret = usbmid_interface_destroy(iface);
    106                 if (pret != EOK) {
    107                         usb_log_error("Failed to remove child `%s': %s\n",
    108                             ddf_fun_get_name(iface->fun), str_error(pret));
    109                         ret = pret;
    110                 }
    111         }
    112 
    113         return ret;
    114 }
    115 
    116 static int usbmid_device_removed(usb_device_t *dev)
    117 {
    118         assert(dev);
    119         usb_mid_t *usb_mid = usb_device_data_get(dev);
    120         assert(usb_mid);
    121 
    122         /* Children are offline. Destroy them now. */
    123113        return destroy_interfaces(usb_mid);
    124114}
     
    166156        .device_add = usbmid_device_add,
    167157        .device_remove = usbmid_device_remove,
    168         .device_removed = usbmid_device_removed,
    169158        .device_gone = usbmid_device_gone,
    170159        .function_online = usbmid_function_online,
Note: See TracChangeset for help on using the changeset viewer.