ChangeSet 1.1094.6.9, 2003/03/14 10:53:01-08:00, msdemlei@cl.uni-heidelberg.de

[PATCH] USB: Patch for DSBR-100 driver

I since you are  listed as the maintainer of the USB subsystem and
I can't really see who else applies, I'm sending you a patch to my
driver for the DSBR-100 USB radio.  This is mainly code cosmetics
(fixed ugly missing spaces after commas I inherited from the
aztech driver, some constants moved to preprocessor symbols), but
there's one technical change: I used to stop the radio when my
file descriptor was closed.  Petr Slansky <slansky@usa.net>
pointed out that the other radio drivers don't do that, so
now I just let the radio run.


 drivers/usb/media/dsbr100.c |   75 ++++++++++++++++++++++++--------------------
 1 files changed, 41 insertions(+), 34 deletions(-)


diff -Nru a/drivers/usb/media/dsbr100.c b/drivers/usb/media/dsbr100.c
--- a/drivers/usb/media/dsbr100.c	Mon Mar 17 11:46:35 2003
+++ b/drivers/usb/media/dsbr100.c	Mon Mar 17 11:46:35 2003
@@ -33,6 +33,12 @@
 
  History:
 
+ Version 0.30:
+ 	Markus: Updates for 2.5.x kernel and more ISO compiant source
+
+ Version 0.25:
+        PSL and Markus: Cleanup, radio now doesn't stop on device close
+
  Version 0.24:
  	Markus: Hope I got these silly VIDEO_TUNER_LOW issues finally
 	right.  Some minor cleanup, improved standalone compilation
@@ -69,15 +75,22 @@
 /*
  * Version Information
  */
-#define DRIVER_VERSION "v0.24"
+#define DRIVER_VERSION "v0.25"
 #define DRIVER_AUTHOR "Markus Demleitner <msdemlei@tucana.harvard.edu>"
-#define DRIVER_DESC "D-Link DSB-R100 USB radio driver"
+#define DRIVER_DESC "D-Link DSB-R100 USB FM radio driver"
 
 #define DSB100_VENDOR 0x04b4
 #define DSB100_PRODUCT 0x1002
 
 #define TB_LEN 16
 
+/* Frequency limits in MHz -- these are European values.  For Japanese
+devices, that would be 76 and 91.  */
+#define FREQ_MIN  87.5
+#define FREQ_MAX 108.0
+#define FREQ_MUL 16000
+
+
 static int usb_dsbr100_probe(struct usb_interface *intf,
 			     const struct usb_device_id *id);
 static void usb_dsbr100_disconnect(struct usb_interface *intf);
@@ -108,7 +121,7 @@
 static struct video_device usb_dsbr100_radio=
 {
 	.owner =	THIS_MODULE,
-	.name =		"D-Link DSB R-100 USB radio",
+	.name =		"D-Link DSB-R 100",
 	.type =		VID_TYPE_TUNER,
 	.hardware =	VID_HARDWARE_AZTECH,
 	.fops =         &usb_dsbr100_fops,
@@ -189,7 +202,7 @@
 		return -ENOMEM;
 	usb_dsbr100_radio.priv = radio;
 	radio->dev = interface_to_usbdev (intf);
-	radio->curfreq = 1454000;
+	radio->curfreq = FREQ_MIN*FREQ_MUL;
 	usb_set_intfdata (intf, radio);
 	return 0;
 }
@@ -225,11 +238,11 @@
 	{
 		case VIDIOCGCAP: {
 			struct video_capability *v = arg;
-			memset(v,0,sizeof(*v));
-			v->type=VID_TYPE_TUNER;
-			v->channels=1;
-			v->audios=1;
-			strcpy(v->name, "D-Link R-100 USB Radio");
+			memset(v, 0, sizeof(*v));
+			v->type = VID_TYPE_TUNER;
+			v->channels = 1;
+			v->audios = 1;
+			strcpy(v->name, "D-Link R-100 USB FM Radio");
 			return 0;
 		}
 		case VIDIOCGTUNER: {
@@ -237,8 +250,8 @@
 			dsbr100_getstat(radio);
 			if(v->tuner)	/* Only 1 tuner */ 
 				return -EINVAL;
-			v->rangelow = 87*16000;
-			v->rangehigh = 108*16000;
+			v->rangelow = FREQ_MIN*FREQ_MUL;
+			v->rangehigh = FREQ_MAX*FREQ_MUL;
 			v->flags = VIDEO_TUNER_LOW;
 			v->mode = VIDEO_MODE_AUTO;
 			v->signal = radio->stereo*0x7000;
@@ -268,31 +281,31 @@
 
 			radio->curfreq = *freq;
 			if (dsbr100_setfreq(radio, radio->curfreq)==-1)
-				warn("set frequency failed");
+				warn("Set frequency failed");
 			return 0;
 		}
 		case VIDIOCGAUDIO: {
 			struct video_audio *v = arg;
-			memset(v,0, sizeof(*v));
-			v->flags|=VIDEO_AUDIO_MUTABLE;
-			v->mode=VIDEO_SOUND_STEREO;
-			v->volume=1;
-			v->step=1;
+			memset(v, 0, sizeof(*v));
+			v->flags |= VIDEO_AUDIO_MUTABLE;
+			v->mode = VIDEO_SOUND_STEREO;
+			v->volume = 1;
+			v->step = 1;
 			strcpy(v->name, "Radio");
 			return 0;			
 		}
 		case VIDIOCSAUDIO: {
 			struct video_audio *v = arg;
-			if(v->audio) 
+			if (v->audio) 
 				return -EINVAL;
 
-			if(v->flags&VIDEO_AUDIO_MUTE) {
+			if (v->flags&VIDEO_AUDIO_MUTE) {
 				if (dsbr100_stop(radio)==-1)
-					warn("radio did not respond properly");
+					warn("Radio did not respond properly");
 			}
 			else
 				if (dsbr100_start(radio)==-1)
-					warn("radio did not respond properly");
+					warn("Radio did not respond properly");
 			return 0;
 		}
 		default:
@@ -312,18 +325,18 @@
 	usb_dsbr100 *radio=dev->priv;
 
 	if (! radio) {
-		warn("radio not initialised");
+		warn("Radio not initialised");
 		return -EAGAIN;
 	}
 	if(users)
 	{
-		warn("radio in use");
+		warn("Radio in use");
 		return -EBUSY;
 	}
 	users++;
 	if (dsbr100_start(radio)<0)
-		warn("radio did not start up properly");
-	dsbr100_setfreq(radio,radio->curfreq);
+		warn("Radio did not start up properly");
+	dsbr100_setfreq(radio, radio->curfreq);
 	return 0;
 }
 
@@ -335,7 +348,6 @@
 	if (!radio)
 		return -ENODEV;
 	users--;
-	dsbr100_stop(radio);
 	return 0;
 }
 
@@ -343,8 +355,9 @@
 {
 	usb_dsbr100_radio.priv = NULL;
 	usb_register(&usb_dsbr100_driver);
-	if (video_register_device(&usb_dsbr100_radio,VFL_TYPE_RADIO,radio_nr)==-1) {	
-		warn("couldn't register video device");
+	if (video_register_device(&usb_dsbr100_radio, VFL_TYPE_RADIO,
+		radio_nr)==-1) {	
+		warn("Couldn't register video device");
 		return -EINVAL;
 	}
 	info(DRIVER_VERSION ":" DRIVER_DESC);
@@ -367,9 +380,3 @@
 MODULE_AUTHOR( DRIVER_AUTHOR );
 MODULE_DESCRIPTION( DRIVER_DESC );
 MODULE_LICENSE("GPL");
-
-/*
-vi: ts=8
-Sigh.  Of course, I am one of the ts=2 heretics, but Linus' wish is
-my command.
-*/
