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 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 " -#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. -*/