V4L/DVB (9740): sms1xxx: add USB suspend and hibernation support
This patch provides USB suspend and hibernation support for Siano's SMS chipset based USB device Signed-off-by: Uri Shkolnik <uris@siano-ms.com> Signed-off-by: Michael Krufky <mkrufky@linuxtv.org> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This commit is contained in:
committed by
Mauro Carvalho Chehab
parent
7b29e10d60
commit
2f56c34b2b
@@ -432,11 +432,56 @@ static void smsusb_disconnect(struct usb_interface *intf)
|
|||||||
smsusb_term_device(intf);
|
smsusb_term_device(intf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int smsusb_suspend(struct usb_interface *intf, pm_message_t msg)
|
||||||
|
{
|
||||||
|
struct smsusb_device_t *dev =
|
||||||
|
(struct smsusb_device_t *)usb_get_intfdata(intf);
|
||||||
|
printk(KERN_INFO "%s Entering status %d.\n", __func__, msg.event);
|
||||||
|
smsusb_stop_streaming(dev);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int smsusb_resume(struct usb_interface *intf)
|
||||||
|
{
|
||||||
|
int rc, i;
|
||||||
|
struct smsusb_device_t *dev =
|
||||||
|
(struct smsusb_device_t *)usb_get_intfdata(intf);
|
||||||
|
struct usb_device *udev = interface_to_usbdev(intf);
|
||||||
|
|
||||||
|
printk(KERN_INFO "%s Entering.\n", __func__);
|
||||||
|
usb_clear_halt(udev, usb_rcvbulkpipe(udev, 0x81));
|
||||||
|
usb_clear_halt(udev, usb_rcvbulkpipe(udev, 0x02));
|
||||||
|
|
||||||
|
for (i = 0; i < intf->cur_altsetting->desc.bNumEndpoints; i++)
|
||||||
|
printk(KERN_INFO "endpoint %d %02x %02x %d\n", i,
|
||||||
|
intf->cur_altsetting->endpoint[i].desc.bEndpointAddress,
|
||||||
|
intf->cur_altsetting->endpoint[i].desc.bmAttributes,
|
||||||
|
intf->cur_altsetting->endpoint[i].desc.wMaxPacketSize);
|
||||||
|
|
||||||
|
if (intf->num_altsetting > 0) {
|
||||||
|
rc = usb_set_interface(udev,
|
||||||
|
intf->cur_altsetting->desc.
|
||||||
|
bInterfaceNumber, 0);
|
||||||
|
if (rc < 0) {
|
||||||
|
printk(KERN_INFO
|
||||||
|
"%s usb_set_interface failed, rc %d\n",
|
||||||
|
__func__, rc);
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
smsusb_start_streaming(dev);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static struct usb_driver smsusb_driver = {
|
static struct usb_driver smsusb_driver = {
|
||||||
.name = "sms1xxx",
|
.name = "sms1xxx",
|
||||||
.probe = smsusb_probe,
|
.probe = smsusb_probe,
|
||||||
.disconnect = smsusb_disconnect,
|
.disconnect = smsusb_disconnect,
|
||||||
.id_table = smsusb_id_table,
|
.id_table = smsusb_id_table,
|
||||||
|
|
||||||
|
.suspend = smsusb_suspend,
|
||||||
|
.resume = smsusb_resume,
|
||||||
};
|
};
|
||||||
|
|
||||||
int smsusb_register(void)
|
int smsusb_register(void)
|
||||||
|
Reference in New Issue
Block a user