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 */
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);
mutex_unlock(&dev->pm_mutex);
+ if (error)
+ usb_autopm_put_interface(dev->intf);
+
return error;
}
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)
}
dev->udev = udev;
+ dev->intf = iface;
dev->input = input_dev;
dev->cfg = *cfg;
mutex_init(&dev->pm_mutex);
.resume = bcm5974_resume,
.reset_resume = bcm5974_resume,
.id_table = bcm5974_table,
+ .supports_autosuspend = 1,
};
static int __init bcm5974_init(void)