public inbox for linux-media@vger.kernel.org
 help / color / mirror / Atom feed
* [RFC/RFT 08/10] radio-mr800: turn radio on during first open and off during last close
@ 2009-09-12 14:50 David Ellingsworth
  2009-09-12 19:53 ` David Ellingsworth
  0 siblings, 1 reply; 2+ messages in thread
From: David Ellingsworth @ 2009-09-12 14:50 UTC (permalink / raw)
  To: linux-media, klimov.linux

[-- Attachment #1: Type: text/plain, Size: 2535 bytes --]

 From 46c7d395e4ed2df431b21b6c07fb02a075a15e43 Mon Sep 17 00:00:00 2001
From: David Ellingsworth <david@identd.dyndns.org>
Date: Sat, 12 Sep 2009 01:57:36 -0400
Subject: [PATCH 08/10] mr800: turn radio on during first open and off 
during last close

Signed-off-by: David Ellingsworth <david@identd.dyndns.org>
---
 drivers/media/radio/radio-mr800.c |   31 +++++++++++++++++--------------
 1 files changed, 17 insertions(+), 14 deletions(-)

diff --git a/drivers/media/radio/radio-mr800.c 
b/drivers/media/radio/radio-mr800.c
index 9fd2342..11db6ea 100644
--- a/drivers/media/radio/radio-mr800.c
+++ b/drivers/media/radio/radio-mr800.c
@@ -493,15 +493,14 @@ static int usb_amradio_open(struct file *file)
     }
 
     file->private_data = radio;
-    radio->users = 1;
-    radio->muted = 1;
 
-    retval = amradio_set_mute(radio, AMRADIO_START);
-    if (retval < 0) {
-        amradio_dev_warn(&radio->videodev.dev,
-            "radio did not start up properly\n");
-        radio->users = 0;
-        goto unlock;
+    if (radio->users == 0) {
+        retval = amradio_set_mute(radio, AMRADIO_START);
+        if (retval < 0) {
+            amradio_dev_warn(&radio->videodev.dev,
+                "radio did not start up properly\n");
+            goto unlock;
+        }
     }
 
     retval = amradio_set_stereo(radio, WANT_STEREO);
@@ -514,6 +513,8 @@ static int usb_amradio_open(struct file *file)
         amradio_dev_warn(&radio->videodev.dev,
             "set frequency failed\n");
 
+    radio->users++;
+
 unlock:
     mutex_unlock(&radio->lock);
     return retval;
@@ -526,18 +527,19 @@ static int usb_amradio_close(struct file *file)
     int retval = 0;
 
     mutex_lock(&radio->lock);
+    radio->users--;
 
     if (!radio->usbdev) {
         retval = -EIO;
         goto unlock;
     }
 
-    radio->users = 0;
-
-    retval = amradio_set_mute(radio, AMRADIO_STOP);
-    if (retval < 0)
-        amradio_dev_warn(&radio->videodev.dev,
-            "amradio_stop failed\n");
+    if (radio->users == 0 && !radio->muted) {
+        retval = amradio_set_mute(radio, AMRADIO_STOP);
+        if (retval < 0)
+            amradio_dev_warn(&radio->videodev.dev,
+                "amradio_stop failed\n");
+    }
 
 unlock:
     mutex_unlock(&radio->lock);
@@ -674,6 +676,7 @@ static int usb_amradio_probe(struct usb_interface *intf,
     radio->usbdev = interface_to_usbdev(intf);
     radio->curfreq = 95.16 * FREQ_MUL;
     radio->stereo = -1;
+    radio->muted = 1;
 
     mutex_init(&radio->lock);
 
-- 
1.6.3.3


[-- Attachment #2: 0008-mr800-turn-radio-on-during-first-open-and-off-during.patch --]
[-- Type: text/x-diff, Size: 2299 bytes --]

>From 46c7d395e4ed2df431b21b6c07fb02a075a15e43 Mon Sep 17 00:00:00 2001
From: David Ellingsworth <david@identd.dyndns.org>
Date: Sat, 12 Sep 2009 01:57:36 -0400
Subject: [PATCH 08/10] mr800: turn radio on during first open and off during last close

Signed-off-by: David Ellingsworth <david@identd.dyndns.org>
---
 drivers/media/radio/radio-mr800.c |   31 +++++++++++++++++--------------
 1 files changed, 17 insertions(+), 14 deletions(-)

diff --git a/drivers/media/radio/radio-mr800.c b/drivers/media/radio/radio-mr800.c
index 9fd2342..11db6ea 100644
--- a/drivers/media/radio/radio-mr800.c
+++ b/drivers/media/radio/radio-mr800.c
@@ -493,15 +493,14 @@ static int usb_amradio_open(struct file *file)
 	}
 
 	file->private_data = radio;
-	radio->users = 1;
-	radio->muted = 1;
 
-	retval = amradio_set_mute(radio, AMRADIO_START);
-	if (retval < 0) {
-		amradio_dev_warn(&radio->videodev.dev,
-			"radio did not start up properly\n");
-		radio->users = 0;
-		goto unlock;
+	if (radio->users == 0) {
+		retval = amradio_set_mute(radio, AMRADIO_START);
+		if (retval < 0) {
+			amradio_dev_warn(&radio->videodev.dev,
+				"radio did not start up properly\n");
+			goto unlock;
+		}
 	}
 
 	retval = amradio_set_stereo(radio, WANT_STEREO);
@@ -514,6 +513,8 @@ static int usb_amradio_open(struct file *file)
 		amradio_dev_warn(&radio->videodev.dev,
 			"set frequency failed\n");
 
+	radio->users++;
+
 unlock:
 	mutex_unlock(&radio->lock);
 	return retval;
@@ -526,18 +527,19 @@ static int usb_amradio_close(struct file *file)
 	int retval = 0;
 
 	mutex_lock(&radio->lock);
+	radio->users--;
 
 	if (!radio->usbdev) {
 		retval = -EIO;
 		goto unlock;
 	}
 
-	radio->users = 0;
-
-	retval = amradio_set_mute(radio, AMRADIO_STOP);
-	if (retval < 0)
-		amradio_dev_warn(&radio->videodev.dev,
-			"amradio_stop failed\n");
+	if (radio->users == 0 && !radio->muted) {
+		retval = amradio_set_mute(radio, AMRADIO_STOP);
+		if (retval < 0)
+			amradio_dev_warn(&radio->videodev.dev,
+				"amradio_stop failed\n");
+	}
 
 unlock:
 	mutex_unlock(&radio->lock);
@@ -674,6 +676,7 @@ static int usb_amradio_probe(struct usb_interface *intf,
 	radio->usbdev = interface_to_usbdev(intf);
 	radio->curfreq = 95.16 * FREQ_MUL;
 	radio->stereo = -1;
+	radio->muted = 1;
 
 	mutex_init(&radio->lock);
 
-- 
1.6.3.3


^ permalink raw reply related	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2009-09-12 19:53 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-09-12 14:50 [RFC/RFT 08/10] radio-mr800: turn radio on during first open and off during last close David Ellingsworth
2009-09-12 19:53 ` David Ellingsworth

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox