dsbr100: add suspend and resume
PATCH 2/2 dsbr100: add suspend and resume
This patch adds support for suspend and resume methods in driver. Without this kradio and gnomeradio crashes during resume. Also .supports_autosuspend in usb_driver struct set equal to 0 to avoid suspending of module if usb_autosuspend enabled.
Signed-off-by Alexey Klimov <[email protected]>
---
linux/drivers/media/radio/dsbr100.c +43 -4
@@ -152,6 +152,9 @@static void usb_dsbr100_disconnect (struct usb_interface *intf);static int usb_dsbr100_open (struct inode *inode,struct file *file);static int usb_dsbr100_close (struct inode *inode,struct file *file); +static int usb_dsbr100_suspend (struct usb_interface *intf, +pm_message_t message); +static int usb_dsbr100_resume (struct usb_interface *intf);static int radio_nr =-1 ;module_param (radio_nr, int,0 );
@@ -178,10 +181,16 @@/* USB subsystem interface */ static struct usb_driver usb_dsbr100_driver = { - .name ="dsbr100" , - .probe = usb_dsbr100_probe, - .disconnect = usb_dsbr100_disconnect, - .id_table = usb_dsbr100_device_table, + .name ="dsbr100" , + .probe = usb_dsbr100_probe, + .disconnect = usb_dsbr100_disconnect, + .id_table = usb_dsbr100_device_table, + .suspend = usb_dsbr100_suspend, + .resume = usb_dsbr100_resume, +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 23) + .reset_resume = usb_dsbr100_resume, +#endif + .supports_autosuspend =0 , };/* Low-level device interface begins here */
@@ -469,6 +478,36 @@return 0 ; } +/* Suspend device - stop device. */ +static int usb_dsbr100_suspend (struct usb_interface *intf,pm_message_t message) +{ +struct dsbr100_device *radio =usb_get_intfdata (intf); +int retval; + + retval =dsbr100_stop (radio); +if (retval ==-1 ) +dev_warn (&intf->dev,"dsbr100_stop failed\n" ); + +dev_info (&intf->dev,"going into suspend..\n" ); + +return 0 ; +} + +/* Resume device - start device. */ +static int usb_dsbr100_resume (struct usb_interface *intf) +{ +struct dsbr100_device *radio =usb_get_intfdata (intf); +int retval; + + retval =dsbr100_start (radio); +if (retval ==-1 ) +dev_warn (&intf->dev,"dsbr100_start failed\n" ); + +dev_info (&intf->dev,"coming out of suspend..\n" ); + +return 0 ; +} +/* File system interface */ static const struct file_operations usb_dsbr100_fops = { .owner =THIS_MODULE ,
Signature · 6 lines
Best regards, Klimov Alexey -- video4linux-list mailing list Unsubscribe mailto:[email protected]?subject=unsubscribe https://www.redhat.com/mailman/listinfo/video4linux-list