On Fri, Jun 27, 2008 at 10:50:00AM +0200, Oliver Neukum wrote: > @@ -820,20 +824,34 @@ exit: > static int usbtouch_open(struct input_dev *input) > { > struct usbtouch_usb *usbtouch = input_get_drvdata(input); > + int rv; > > + rv = usb_autopm_get_interface(usbtouch->intf); > + if (rv < 0) > + goto bail; > + mutex_lock(&usbtouch->lock); > usbtouch->irq->dev = usbtouch->udev; > > - if (usb_submit_urb(usbtouch->irq, GFP_KERNEL)) > - return -EIO; > - > - return 0; > + if (usb_submit_urb(usbtouch->irq, GFP_KERNEL)) { > + rv = -EIO; > + usb_autopm_put_interface(usbtouch->intf); > + } else { > + usbtouch->open = 1; > + } > + mutex_unlock(&usbtouch->lock); > +bail: > + return rv; > } What if the device is already suspended when open() is called? -- Ville Syrjälä syrjala@xxxxxx http://www.sci.fi/~syrjala/ -- To unsubscribe from this list: send the line "unsubscribe linux-input" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html