int usbnet_stop (struct net_device *net)
 {
        struct usbnet           *dev = netdev_priv(net);
+       struct driver_info      *info = dev->driver_info;
        int                     temp;
+       int                     retval;
        DECLARE_WAIT_QUEUE_HEAD_ONSTACK (unlink_wakeup);
        DECLARE_WAITQUEUE (wait, current);
 
                        net->stats.rx_errors, net->stats.tx_errors
                        );
 
+       /* allow minidriver to stop correctly (wireless devices to turn off
+        * radio etc) */
+       if (info->stop) {
+               retval = info->stop(dev);
+               if (retval < 0 && netif_msg_ifdown(dev))
+                       devinfo(dev,
+                               "stop fail (%d) usbnet usb-%s-%s, %s",
+                               retval,
+                               dev->udev->bus->bus_name, dev->udev->devpath,
+                               info->description);
+       }
+
        // ensure there are no more active urbs
        add_wait_queue (&unlink_wakeup, &wait);
        dev->wait = &unlink_wakeup;
 
        /* reset device ... can sleep */
        int     (*reset)(struct usbnet *);
 
+       /* stop device ... can sleep */
+       int     (*stop)(struct usbnet *);
+
        /* see if peer is connected ... can sleep */
        int     (*check_connect)(struct usbnet *);