aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/core/devio.c
diff options
context:
space:
mode:
authorAlan Stern <stern@rowland.harvard.edu>2006-08-30 15:47:18 -0400
committerGreg Kroah-Hartman <gregkh@suse.de>2006-09-27 14:58:57 -0400
commit01d883d44a1ca8dc77486635d428cba63e7fdadf (patch)
tree447a4293b2ec4dfa1b3d03a46a3a33498809f0e8 /drivers/usb/core/devio.c
parent645daaab0b6adc35c1838df2a82f9d729fdb1767 (diff)
usbcore: non-hub-specific uses of autosuspend
This patch (as741) makes the non-hub parts of usbcore actually use the autosuspend facilities added by an earlier patch. Devices opened through usbfs are autoresumed and then autosuspended upon close. Likewise for usb-skeleton. Devices are autoresumed for usb_set_configuration. Signed-off-by: Alan Stern <stern@rowland.harvard.edu> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/usb/core/devio.c')
-rw-r--r--drivers/usb/core/devio.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/drivers/usb/core/devio.c b/drivers/usb/core/devio.c
index 43c08724a2d8..fd345ad810f8 100644
--- a/drivers/usb/core/devio.c
+++ b/drivers/usb/core/devio.c
@@ -558,10 +558,12 @@ static int usbdev_open(struct inode *inode, struct file *file)
558 dev = usbdev_lookup_minor(iminor(inode)); 558 dev = usbdev_lookup_minor(iminor(inode));
559 if (!dev) 559 if (!dev)
560 dev = inode->i_private; 560 dev = inode->i_private;
561 if (!dev) { 561 if (!dev)
562 kfree(ps);
563 goto out; 562 goto out;
564 } 563 ret = usb_autoresume_device(dev, 1);
564 if (ret)
565 goto out;
566
565 usb_get_dev(dev); 567 usb_get_dev(dev);
566 ret = 0; 568 ret = 0;
567 ps->dev = dev; 569 ps->dev = dev;
@@ -581,6 +583,8 @@ static int usbdev_open(struct inode *inode, struct file *file)
581 list_add_tail(&ps->list, &dev->filelist); 583 list_add_tail(&ps->list, &dev->filelist);
582 file->private_data = ps; 584 file->private_data = ps;
583 out: 585 out:
586 if (ret)
587 kfree(ps);
584 mutex_unlock(&usbfs_mutex); 588 mutex_unlock(&usbfs_mutex);
585 return ret; 589 return ret;
586} 590}
@@ -604,6 +608,7 @@ static int usbdev_release(struct inode *inode, struct file *file)
604 releaseintf(ps, ifnum); 608 releaseintf(ps, ifnum);
605 } 609 }
606 destroy_all_async(ps); 610 destroy_all_async(ps);
611 usb_autosuspend_device(dev, 1);
607 usb_unlock_device(dev); 612 usb_unlock_device(dev);
608 usb_put_dev(dev); 613 usb_put_dev(dev);
609 kfree(ps); 614 kfree(ps);