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


Ignore:
Timestamp:
2011-10-30T19:50:54Z (14 years ago)
Author:
Maurizio Lombardi <m.lombardi85@…>
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.
Message:

Merge mainline changes

File:
1 edited

Legend:

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

    r4c3ad56 r20a3465  
    6565        return EOK;
    6666}
     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 */
     73static 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 */
     97static 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}
    67135
    68136/** USB MID driver ops. */
    69 static usb_driver_ops_t mid_driver_ops = {
     137static const usb_driver_ops_t mid_driver_ops = {
    70138        .device_add = usbmid_device_add,
     139        .device_rem = usbmid_device_remove,
     140        .device_gone = usbmid_device_gone,
    71141};
    72142
    73143/** USB MID driver. */
    74 static usb_driver_t mid_driver = {
     144static const usb_driver_t mid_driver = {
    75145        .name = NAME,
    76146        .ops = &mid_driver_ops,
Note: See TracChangeset for help on using the changeset viewer.