diff options
author | David Ellingsworth <david@identd.dyndns.org> | 2009-09-23 17:24:47 -0400 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2009-12-05 15:40:11 -0500 |
commit | d8970e5fd9eace437bc2f1aaff1c2a05fb3448ea (patch) | |
tree | f581fe2b1025cc1e51a2db8f2788edd4c3a6c29d /drivers/media/radio | |
parent | 30dd4508b97155a3f826f877d5750d8888bc3183 (diff) |
V4L/DVB (13071): radio-mr800: preserve radio state during suspend/resume
Preserve radio state during suspend/resume.
Signed-off-by: David Ellingsworth <david@identd.dyndns.org>
Acked-by: Alexey Klimov <klimov.linux@gmail.com>
Signed-off-by: Douglas Schilling Landgraf <dougsland@redhat.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers/media/radio')
-rw-r--r-- | drivers/media/radio/radio-mr800.c | 33 |
1 files changed, 28 insertions, 5 deletions
diff --git a/drivers/media/radio/radio-mr800.c b/drivers/media/radio/radio-mr800.c index 9764eca2c498..ac2107378942 100644 --- a/drivers/media/radio/radio-mr800.c +++ b/drivers/media/radio/radio-mr800.c | |||
@@ -574,9 +574,12 @@ static int usb_amradio_suspend(struct usb_interface *intf, pm_message_t message) | |||
574 | 574 | ||
575 | mutex_lock(&radio->lock); | 575 | mutex_lock(&radio->lock); |
576 | 576 | ||
577 | retval = amradio_set_mute(radio, AMRADIO_STOP); | 577 | if (!radio->muted && radio->initialized) { |
578 | if (retval < 0) | 578 | retval = amradio_set_mute(radio, AMRADIO_STOP); |
579 | dev_warn(&intf->dev, "amradio_stop failed\n"); | 579 | if (retval < 0) |
580 | dev_warn(&intf->dev, "amradio_stop failed\n"); | ||
581 | radio->muted = 0; | ||
582 | } | ||
580 | 583 | ||
581 | dev_info(&intf->dev, "going into suspend..\n"); | 584 | dev_info(&intf->dev, "going into suspend..\n"); |
582 | 585 | ||
@@ -592,10 +595,30 @@ static int usb_amradio_resume(struct usb_interface *intf) | |||
592 | 595 | ||
593 | mutex_lock(&radio->lock); | 596 | mutex_lock(&radio->lock); |
594 | 597 | ||
595 | retval = amradio_set_mute(radio, AMRADIO_START); | 598 | if (unlikely(!radio->initialized)) |
599 | goto unlock; | ||
600 | |||
601 | if (radio->stereo) | ||
602 | retval = amradio_set_stereo(radio, WANT_STEREO); | ||
603 | else | ||
604 | retval = amradio_set_stereo(radio, WANT_MONO); | ||
605 | |||
596 | if (retval < 0) | 606 | if (retval < 0) |
597 | dev_warn(&intf->dev, "amradio_start failed\n"); | 607 | amradio_dev_warn(&radio->videodev.dev, "set stereo failed\n"); |
598 | 608 | ||
609 | retval = amradio_setfreq(radio, radio->curfreq); | ||
610 | if (retval < 0) | ||
611 | amradio_dev_warn(&radio->videodev.dev, | ||
612 | "set frequency failed\n"); | ||
613 | |||
614 | if (!radio->muted) { | ||
615 | retval = amradio_set_mute(radio, AMRADIO_START); | ||
616 | if (retval < 0) | ||
617 | dev_warn(&radio->videodev.dev, | ||
618 | "amradio_start failed\n"); | ||
619 | } | ||
620 | |||
621 | unlock: | ||
599 | dev_info(&intf->dev, "coming out of suspend..\n"); | 622 | dev_info(&intf->dev, "coming out of suspend..\n"); |
600 | 623 | ||
601 | mutex_unlock(&radio->lock); | 624 | mutex_unlock(&radio->lock); |