radio-mr800: preserve radio state during suspend/resume
Subsystems (2)
PATCH 12/14 radio-mr800: preserve radio state during suspend/resume
From 8c441616f67011244cb15bc1a3dda6fd8706ecd2 Mon Sep 17 00:00:00 2001
From: David Ellingsworth <[email protected]>
Date: Sat, 12 Sep 2009 16:04:44 -0400
Subject: [PATCH 08/14] mr800: fix potential use after free
Signed-off-by David Ellingsworth <[email protected]>
---drivers/media/radio/radio-mr800.c | 1 -
1 files changed, 0 insertions(+), 1 deletions(-)
drivers/media/radio/radio-mr800.c +0 -1
@@ -274,7 +274,6 @@ static void usb_amradio_disconnect(struct usb_interface *intf)usb_set_intfdata (intf,NULL );video_unregister_device (&radio->videodev); -v4l2_device_disconnect (&radio->v4l2_dev);
}
/* vidioc_querycap - query device capabilities */
Signature · 1 line
1.6.3.3
Quoted 1 line
From
c8c27c663db7294c660a3bac659742c915ce91a9Mon Sep 17 00:00:00 2001
From: David Ellingsworth <[email protected]>
Date: Sat, 12 Sep 2009 22:01:49 -0400
Subject: [PATCH 12/14] mr800: preserve radio state during suspend/resume
Signed-off-by David Ellingsworth <[email protected]>
--- drivers/media/radio/radio-mr800.c | 33 ++++++++++++++++++++++++++++----- 1 files changed, 28 insertions(+), 5 deletions(-)
drivers/media/radio/radio-mr800.c +28 -5
@@ -573,9 +573,12 @@ static int usb_amradio_suspend(struct usb_interface *intf, pm_message_t message)mutex_lock (&radio->lock); - retval =amradio_set_mute (radio,AMRADIO_STOP ); -if (retval <0 ) -dev_warn (&intf->dev,"amradio_stop failed\n" ); +if (!radio->muted && radio->initialized) { + retval =amradio_set_mute (radio,AMRADIO_STOP ); +if (retval <0 ) +dev_warn (&intf->dev,"amradio_stop failed\n" ); + radio->muted =0 ; + }dev_info (&intf->dev,"going into suspend..\n" );
@@ -591,10 +594,30 @@ static int usb_amradio_resume(struct usb_interface *intf)mutex_lock (&radio->lock); - retval =amradio_set_mute (radio,AMRADIO_START ); +if (unlikely (!radio->initialized)) + goto unlock; + +if (radio->stereo) + retval =amradio_set_stereo (radio,WANT_STEREO ); +else + retval =amradio_set_stereo (radio,WANT_MONO ); +if (retval <0 ) -dev_warn (&intf->dev,"amradio_start failed\n" ); +amradio_dev_warn (&radio->videodev.dev,"set stereo failed\n" ); + retval =amradio_setfreq (radio, radio->curfreq); +if (retval <0 ) +amradio_dev_warn (&radio->videodev.dev, +"set frequency failed\n" ); + +if (!radio->muted) { + retval =amradio_set_mute (radio,AMRADIO_START ); +if (retval <0 ) +dev_warn (&radio->videodev.dev, +"amradio_start failed\n" ); + } + +unlock:dev_info (&intf->dev,"coming out of suspend..\n" );mutex_unlock (&radio->lock);
Signature · 1 line
1.6.3.3