Thread (6 messages) 6 messages, 2 authors, 2007-09-27

Re: [linux-usb-devel] Fwd: autosuspend for appletouch driver

From: Alan Stern <stern@rowland.harvard.edu>
Date: 2007-09-27 15:59:47

On Thu, 27 Sep 2007, Oliver Neukum wrote:
quoted hunk ↗ jump to hunk
@@ -528,12 +537,20 @@ exit:
 static int atp_open(struct input_dev *input)
 {
 	struct atp *dev = input_get_drvdata(input);
+	int rv = 0;
 
-	if (usb_submit_urb(dev->urb, GFP_ATOMIC))
+	if (usb_autopm_get_interface(dev->intf) < 0)
 		return -EIO;
+	dev->intf->needs_remote_wakeup = 1;
+	if (usb_submit_urb(dev->urb, GFP_KERNEL)) {
+		rv = -EIO;
+		dev->intf->needs_remote_wakeup = 0;
+		goto err;
 
 	dev->open = 1;
-	return 0;
+err:
+	usb_autopm_put_interface(dev->intf);
+	return rv;
 }
 
 static void atp_close(struct input_dev *input)
@@ -543,6 +560,7 @@ static void atp_close(struct input_dev *
 	usb_kill_urb(dev->urb);
 	cancel_work_sync(&dev->work);
 	dev->open = 0;
+	dev->intf->needs_remote_wakeup = 0;
 }
Doesn't atp_close() need to call usb_autopm_put_interface(), to balance 
the usb_autopm_get_interface() call in atp_open()?

Alan Stern
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help