summaryrefslogtreecommitdiffstats
path: root/drivers/input
diff options
context:
space:
mode:
authorDmitry Torokhov <dmitry.torokhov@gmail.com>2008-08-08 14:59:32 -0400
committerDmitry Torokhov <dmitry.torokhov@gmail.com>2008-08-08 16:24:21 -0400
commit88da765f4d5f59f67a7a51c8f5d608a836b32133 (patch)
tree1ea53d543531bef2d8b94957df19de8897b85221 /drivers/input
parentf89bd95c5c946776f116ffeb997653d4193d6a35 (diff)
downloadlinux-88da765f4d5f59f67a7a51c8f5d608a836b32133.tar.gz
linux-88da765f4d5f59f67a7a51c8f5d608a836b32133.tar.bz2
linux-88da765f4d5f59f67a7a51c8f5d608a836b32133.zip
Input: bcm5974 - implement autosuspend support
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
Diffstat (limited to 'drivers/input')
-rw-r--r--drivers/input/mouse/bcm5974.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/drivers/input/mouse/bcm5974.c b/drivers/input/mouse/bcm5974.c
index 6f852786c528..2ec921bf3c60 100644
--- a/drivers/input/mouse/bcm5974.c
+++ b/drivers/input/mouse/bcm5974.c
@@ -150,6 +150,7 @@ struct bcm5974_config {
struct bcm5974 {
char phys[64];
struct usb_device *udev; /* usb device */
+ struct usb_interface *intf; /* our interface */
struct input_dev *input; /* input dev */
struct bcm5974_config cfg; /* device configuration */
struct mutex pm_mutex; /* serialize access to open/suspend */
@@ -478,6 +479,10 @@ static int bcm5974_open(struct input_dev *input)
struct bcm5974 *dev = input_get_drvdata(input);
int error;
+ error = usb_autopm_get_interface(dev->intf);
+ if (error)
+ return error;
+
mutex_lock(&dev->pm_mutex);
error = bcm5974_start_traffic(dev);
@@ -486,6 +491,9 @@ static int bcm5974_open(struct input_dev *input)
mutex_unlock(&dev->pm_mutex);
+ if (error)
+ usb_autopm_put_interface(dev->intf);
+
return error;
}
@@ -499,6 +507,8 @@ static void bcm5974_close(struct input_dev *input)
dev->opened = 0;
mutex_unlock(&dev->pm_mutex);
+
+ usb_autopm_put_interface(dev->intf);
}
static int bcm5974_suspend(struct usb_interface *iface, pm_message_t message)
@@ -551,6 +561,7 @@ static int bcm5974_probe(struct usb_interface *iface,
}
dev->udev = udev;
+ dev->intf = iface;
dev->input = input_dev;
dev->cfg = *cfg;
mutex_init(&dev->pm_mutex);
@@ -652,6 +663,7 @@ static struct usb_driver bcm5974_driver = {
.resume = bcm5974_resume,
.reset_resume = bcm5974_resume,
.id_table = bcm5974_table,
+ .supports_autosuspend = 1,
};
static int __init bcm5974_init(void)