diff options
| -rw-r--r-- | drivers/hid/usbhid/hid-core.c | 101 | 
1 files changed, 51 insertions, 50 deletions
diff --git a/drivers/hid/usbhid/hid-core.c b/drivers/hid/usbhid/hid-core.c index d79100a01b05..054f0c521e6f 100644 --- a/drivers/hid/usbhid/hid-core.c +++ b/drivers/hid/usbhid/hid-core.c @@ -1210,6 +1210,56 @@ static void hid_cease_io(struct usbhid_device *usbhid)  	flush_scheduled_work();  } +/* Treat USB reset pretty much the same as suspend/resume */ +static int hid_pre_reset(struct usb_interface *intf) +{ +	struct hid_device *hid = usb_get_intfdata(intf); +	struct usbhid_device *usbhid = hid->driver_data; + +	spin_lock_irq(&usbhid->lock); +	set_bit(HID_RESET_PENDING, &usbhid->iofl); +	spin_unlock_irq(&usbhid->lock); +	hid_cease_io(usbhid); + +	return 0; +} + +/* Same routine used for post_reset and reset_resume */ +static int hid_post_reset(struct usb_interface *intf) +{ +	struct usb_device *dev = interface_to_usbdev (intf); +	struct hid_device *hid = usb_get_intfdata(intf); +	struct usbhid_device *usbhid = hid->driver_data; +	int status; +  +	spin_lock_irq(&usbhid->lock); +	clear_bit(HID_RESET_PENDING, &usbhid->iofl); +	spin_unlock_irq(&usbhid->lock); +	hid_set_idle(dev, intf->cur_altsetting->desc.bInterfaceNumber, 0, 0); +	/* FIXME: Any more reinitialization needed? */ +	status = hid_start_in(hid); +	if (status < 0) +		hid_io_error(hid); +	usbhid_restart_queues(usbhid); + +	return 0; +} + +int usbhid_get_power(struct hid_device *hid) +{ +	struct usbhid_device *usbhid = hid->driver_data; +  +	return usb_autopm_get_interface(usbhid->intf); +} + +void usbhid_put_power(struct hid_device *hid) +{ +	struct usbhid_device *usbhid = hid->driver_data; +  +	usb_autopm_put_interface(usbhid->intf); +} + +  #ifdef CONFIG_PM  static int hid_suspend(struct usb_interface *intf, pm_message_t message)  { @@ -1293,43 +1343,6 @@ static int hid_resume(struct usb_interface *intf)  	return 0;  } -#endif /* CONFIG_PM */ - -/* Treat USB reset pretty much the same as suspend/resume */ -static int hid_pre_reset(struct usb_interface *intf) -{ -	struct hid_device *hid = usb_get_intfdata(intf); -	struct usbhid_device *usbhid = hid->driver_data; - -	spin_lock_irq(&usbhid->lock); -	set_bit(HID_RESET_PENDING, &usbhid->iofl); -	spin_unlock_irq(&usbhid->lock); -	hid_cease_io(usbhid); - -	return 0; -} - -/* Same routine used for post_reset and reset_resume */ -static int hid_post_reset(struct usb_interface *intf) -{ -	struct usb_device *dev = interface_to_usbdev (intf); -	struct hid_device *hid = usb_get_intfdata(intf); -	struct usbhid_device *usbhid = hid->driver_data; -	int status; -  -	spin_lock_irq(&usbhid->lock); -	clear_bit(HID_RESET_PENDING, &usbhid->iofl); -	spin_unlock_irq(&usbhid->lock); -	hid_set_idle(dev, intf->cur_altsetting->desc.bInterfaceNumber, 0, 0); -	/* FIXME: Any more reinitialization needed? */ -	status = hid_start_in(hid); -	if (status < 0) -		hid_io_error(hid); -	usbhid_restart_queues(usbhid); - -	return 0; -} -  static int hid_reset_resume(struct usb_interface *intf)  {  	struct hid_device *hid = usb_get_intfdata(intf); @@ -1339,19 +1352,7 @@ static int hid_reset_resume(struct usb_interface *intf)  	return hid_post_reset(intf);  } -int usbhid_get_power(struct hid_device *hid) -{ -	struct usbhid_device *usbhid = hid->driver_data; -  -	return usb_autopm_get_interface(usbhid->intf); -} - -void usbhid_put_power(struct hid_device *hid) -{ -	struct usbhid_device *usbhid = hid->driver_data; -  -	usb_autopm_put_interface(usbhid->intf); -} +#endif /* CONFIG_PM */  static struct usb_device_id hid_usb_ids [] = {  	{ .match_flags = USB_DEVICE_ID_MATCH_INT_CLASS,  | 
