X-Git-Url: http://pilppa.org/gitweb/gitweb.cgi?a=blobdiff_plain;f=drivers%2Fusb%2Fusb-skeleton.c;h=c815a40e167f33f7427f0c908514e0e93b685b7d;hb=d1417862d7355f0b395d83f2884afd614b086695;hp=59973aecd96828269bf7b72d6e6575726a111ee0;hpb=758f7e161b1da3039368bf7180b9d9f4c33453da;p=linux-2.6-omap-h63xx.git diff --git a/drivers/usb/usb-skeleton.c b/drivers/usb/usb-skeleton.c index 59973aecd96..c815a40e167 100644 --- a/drivers/usb/usb-skeleton.c +++ b/drivers/usb/usb-skeleton.c @@ -125,6 +125,7 @@ static int skel_open(struct inode *inode, struct file *file) /* save our object in the file's private structure */ file->private_data = dev; + mutex_unlock(&dev->io_mutex); exit: return retval; @@ -467,12 +468,35 @@ static int skel_resume (struct usb_interface *intf) return 0; } +static int skel_pre_reset(struct usb_interface *intf) +{ + struct usb_skel *dev = usb_get_intfdata(intf); + + mutex_lock(&dev->io_mutex); + skel_draw_down(dev); + + return 0; +} + +static int skel_post_reset(struct usb_interface *intf) +{ + struct usb_skel *dev = usb_get_intfdata(intf); + + /* we are sure no URBs are active - no locking needed */ + dev->errors = -EPIPE; + mutex_unlock(&dev->io_mutex); + + return 0; +} + static struct usb_driver skel_driver = { .name = "skeleton", .probe = skel_probe, .disconnect = skel_disconnect, .suspend = skel_suspend, .resume = skel_resume, + .pre_reset = skel_pre_reset, + .post_reset = skel_post_reset, .id_table = skel_table, .supports_autosuspend = 1, };