All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] Kconfig for radio cards to allow VIDEO_V4L1_COMPAT
@ 2006-06-25 17:40 Jon Smirl
  2006-06-25 18:21 ` Sam Ravnborg
  2006-06-26 13:06 ` Mauro Carvalho Chehab
  0 siblings, 2 replies; 12+ messages in thread
From: Jon Smirl @ 2006-06-25 17:40 UTC (permalink / raw)
  To: lkml

In Kconfig all of the radio cards depend on VIDEO_V4L1. But V4L1 has
been deprecated and replaced with V4L2. V4L2 offers a V4L1
compatibility layer. Should the Kconfig for these devices be changed
to depend on (VIDEO_V4L1. || VIDEO_V4L1_COMPAT)? I'm not the
maintainer for this but they seem to build ok.

Signed-off-by: Jon Smirl <jonsmirl@gmail.com>

-- 
Jon Smirl
jonsmirl@gmail.com



diff --git a/drivers/media/radio/Kconfig b/drivers/media/radio/Kconfig
index 3fff757..efa27f3 100644
--- a/drivers/media/radio/Kconfig
+++ b/drivers/media/radio/Kconfig
@@ -7,7 +7,7 @@ menu "Radio Adapters"

  config RADIO_CADET
  	tristate "ADS Cadet AM/FM Tuner"
-	depends on ISA && VIDEO_V4L1
+	depends on ISA && (VIDEO_V4L1 || VIDEO_V4L1_COMPAT)
 	---help---
 	  Choose Y here if you have one of these AM/FM radio cards, and then
 	  fill in the port address below.
@@ -25,7 +25,7 @@ config RADIO_CADET

  config RADIO_RTRACK
  	tristate "AIMSlab RadioTrack (aka RadioReveal) support"
-	depends on ISA && VIDEO_V4L1
+	depends on ISA && (VIDEO_V4L1 || VIDEO_V4L1_COMPAT)
 	---help---
 	  Choose Y here if you have one of these FM radio cards, and then fill
 	  in the port address below.
@@ -59,7 +59,7 @@ config RADIO_RTRACK_PORT

  config RADIO_RTRACK2
  	tristate "AIMSlab RadioTrack II support"
-	depends on ISA && VIDEO_V4L1
+	depends on ISA && (VIDEO_V4L1 || VIDEO_V4L1_COMPAT)
 	---help---
 	  Choose Y here if you have this FM radio card, and then fill in the
 	  port address below.
@@ -82,7 +82,7 @@ config RADIO_RTRACK2_PORT

  config RADIO_AZTECH
  	tristate "Aztech/Packard Bell Radio"
-	depends on ISA && VIDEO_V4L1
+	depends on ISA && (VIDEO_V4L1 || VIDEO_V4L1_COMPAT)
 	---help---
 	  Choose Y here if you have one of these FM radio cards, and then fill
 	  in the port address below.
@@ -106,7 +106,7 @@ config RADIO_AZTECH_PORT

  config RADIO_GEMTEK
  	tristate "GemTek Radio Card support"
-	depends on ISA && VIDEO_V4L1
+	depends on ISA && (VIDEO_V4L1 || VIDEO_V4L1_COMPAT)
 	---help---
 	  Choose Y here if you have this FM radio card, and then fill in the
 	  port address below.
@@ -131,7 +131,7 @@ config RADIO_GEMTEK_PORT

  config RADIO_GEMTEK_PCI
  	tristate "GemTek PCI Radio Card support"
-	depends on VIDEO_V4L1 && PCI
+	depends on (VIDEO_V4L1 || VIDEO_V4L1_COMPAT) && PCI
 	---help---
  	  Choose Y here if you have this PCI FM radio card.

@@ -145,7 +145,7 @@ config RADIO_GEMTEK_PCI

  config RADIO_MAXIRADIO
  	tristate "Guillemot MAXI Radio FM 2000 radio"
-	depends on VIDEO_V4L1 && PCI
+	depends on (VIDEO_V4L1 || VIDEO_V4L1_COMPAT) && PCI
 	---help---
 	  Choose Y here if you have this radio card.  This card may also be
  	  found as Gemtek PCI FM.
@@ -160,7 +160,7 @@ config RADIO_MAXIRADIO

  config RADIO_MAESTRO
  	tristate "Maestro on board radio"
-	depends on VIDEO_V4L1
+	depends on (VIDEO_V4L1 || VIDEO_V4L1_COMPAT)
 	---help---
 	  Say Y here to directly support the on-board radio tuner on the
 	  Maestro 2 or 2E sound card.
@@ -175,7 +175,7 @@ config RADIO_MAESTRO

  config RADIO_MIROPCM20
  	tristate "miroSOUND PCM20 radio"
-	depends on ISA && VIDEO_V4L1 && SOUND_ACI_MIXER
+	depends on ISA && (VIDEO_V4L1 || VIDEO_V4L1_COMPAT) && SOUND_ACI_MIXER
 	---help---
 	  Choose Y here if you have this FM radio card. You also need to say Y
  	  to "ACI mixer (miroSOUND PCM1-pro/PCM12/PCM20 radio)" (in "Sound")
@@ -208,7 +208,7 @@ config RADIO_MIROPCM20_RDS

  config RADIO_SF16FMI
  	tristate "SF16FMI Radio"
-	depends on ISA && VIDEO_V4L1
+	depends on ISA && (VIDEO_V4L1 || VIDEO_V4L1_COMPAT)
 	---help---
 	  Choose Y here if you have one of these FM radio cards.  If you
  	  compile the driver into the kernel and your card is not PnP one, you
@@ -225,7 +225,7 @@ config RADIO_SF16FMI

  config RADIO_SF16FMR2
  	tristate "SF16FMR2 Radio"
-	depends on ISA && VIDEO_V4L1
+	depends on ISA && (VIDEO_V4L1 || VIDEO_V4L1_COMPAT)
 	---help---
 	  Choose Y here if you have one of these FM radio cards.

@@ -239,7 +239,7 @@ config RADIO_SF16FMR2

  config RADIO_TERRATEC
  	tristate "TerraTec ActiveRadio ISA Standalone"
-	depends on ISA && VIDEO_V4L1
+	depends on ISA && (VIDEO_V4L1 || VIDEO_V4L1_COMPAT)
 	---help---
 	  Choose Y here if you have this FM radio card, and then fill in the
  	  port address below. (TODO)
@@ -268,7 +268,7 @@ config RADIO_TERRATEC_PORT

  config RADIO_TRUST
  	tristate "Trust FM radio card"
-	depends on ISA && VIDEO_V4L1
+	depends on ISA && (VIDEO_V4L1 || VIDEO_V4L1_COMPAT)
 	help
 	  This is a driver for the Trust FM radio cards. Say Y if you have
 	  such a card and want to use it under Linux.
@@ -286,7 +286,7 @@ config RADIO_TRUST_PORT

  config RADIO_TYPHOON
  	tristate "Typhoon Radio (a.k.a. EcoRadio)"
-	depends on ISA && VIDEO_V4L1
+	depends on ISA && (VIDEO_V4L1 || VIDEO_V4L1_COMPAT)
 	---help---
 	  Choose Y here if you have one of these FM radio cards, and then fill
 	  in the port address and the frequency used for muting below.
@@ -330,7 +330,7 @@ config RADIO_TYPHOON_MUTEFREQ

  config RADIO_ZOLTRIX
  	tristate "Zoltrix Radio"
-	depends on ISA && VIDEO_V4L1
+	depends on ISA && (VIDEO_V4L1 || VIDEO_V4L1_COMPAT)
 	---help---
 	  Choose Y here if you have one of these FM radio cards, and then fill
 	  in the port address below.

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

* Re: [PATCH] Kconfig for radio cards to allow VIDEO_V4L1_COMPAT
  2006-06-25 17:40 [PATCH] Kconfig for radio cards to allow VIDEO_V4L1_COMPAT Jon Smirl
@ 2006-06-25 18:21 ` Sam Ravnborg
  2006-06-25 19:48   ` Jon Smirl
  2006-06-26 13:06 ` Mauro Carvalho Chehab
  1 sibling, 1 reply; 12+ messages in thread
From: Sam Ravnborg @ 2006-06-25 18:21 UTC (permalink / raw)
  To: Jon Smirl; +Cc: lkml

On Sun, Jun 25, 2006 at 01:40:49PM -0400, Jon Smirl wrote:
> In Kconfig all of the radio cards depend on VIDEO_V4L1. But V4L1 has
> been deprecated and replaced with V4L2. V4L2 offers a V4L1
> compatibility layer. Should the Kconfig for these devices be changed
> to depend on (VIDEO_V4L1. || VIDEO_V4L1_COMPAT)? I'm not the
> maintainer for this but they seem to build ok.

A cleaner approach would be to define a local symbol that spelled out
the dependencies. Something like

# Used because ....
config RADIO
	depends on ISA && (VIDEO_V4L1 || VIDEO_V4L1_COMPAT)

config RADIO_CADET
	tristate "ADS Cadet AM/FM Tuner"
	depends on RADIO

The variable name RADIO is awfully bad but you get the idea..

	Sam

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

* Re: [PATCH] Kconfig for radio cards to allow VIDEO_V4L1_COMPAT
  2006-06-25 18:21 ` Sam Ravnborg
@ 2006-06-25 19:48   ` Jon Smirl
  0 siblings, 0 replies; 12+ messages in thread
From: Jon Smirl @ 2006-06-25 19:48 UTC (permalink / raw)
  To: Sam Ravnborg; +Cc: lkml

n Kconfig all of the radio cards depend on VIDEO_V4L1. But V4L1 has
been deprecated and replaced with V4L2. V4L2 offers a V4L1
compatibility layer. Should the Kconfig for these devices be changed
to depend on (VIDEO_V4L1. || VIDEO_V4L1_COMPAT)? I'm not the
maintainer for this but they seem to build ok. New version that
combines the test for VIDEO_V4L1 || VIDEO_V4L1_COMPAT.

Signed-off-by: Jon Smirl <jonsmirl@gmail.com

-- 
Jon Smirl
jonsmirl@gmail.com


diff --git a/drivers/media/radio/Kconfig b/drivers/media/radio/Kconfig
index de3128a..26044a5 100644
--- a/drivers/media/radio/Kconfig
+++ b/drivers/media/radio/Kconfig
@@ -4,10 +4,15 @@ #

 menu "Radio Adapters"
 	depends on VIDEO_DEV!=n
-
+	
+# Use either the V4L1 layer or the V4L1 compatibility layer from V4L2
+config RADIO_V4L1
+	def_bool y
+	depends on VIDEO_V4L1 || VIDEO_V4L1_COMPAT
+	
 config RADIO_CADET
 	tristate "ADS Cadet AM/FM Tuner"
-	depends on ISA && VIDEO_V4L1
+	depends on ISA && RADIO_V4L1
 	---help---
 	  Choose Y here if you have one of these AM/FM radio cards, and then
 	  fill in the port address below.
@@ -25,7 +30,7 @@ config RADIO_CADET

 config RADIO_RTRACK
 	tristate "AIMSlab RadioTrack (aka RadioReveal) support"
-	depends on ISA && VIDEO_V4L1
+	depends on ISA && RADIO_V4L1
 	---help---
 	  Choose Y here if you have one of these FM radio cards, and then fill
 	  in the port address below.
@@ -59,7 +64,7 @@ config RADIO_RTRACK_PORT

 config RADIO_RTRACK2
 	tristate "AIMSlab RadioTrack II support"
-	depends on ISA && VIDEO_V4L1
+	depends on ISA && RADIO_V4L1
 	---help---
 	  Choose Y here if you have this FM radio card, and then fill in the
 	  port address below.
@@ -82,7 +87,7 @@ config RADIO_RTRACK2_PORT

 config RADIO_AZTECH
 	tristate "Aztech/Packard Bell Radio"
-	depends on ISA && VIDEO_V4L1
+	depends on ISA && RADIO_V4L1
 	---help---
 	  Choose Y here if you have one of these FM radio cards, and then fill
 	  in the port address below.
@@ -106,7 +111,7 @@ config RADIO_AZTECH_PORT

 config RADIO_GEMTEK
 	tristate "GemTek Radio Card support"
-	depends on ISA && VIDEO_V4L1
+	depends on ISA && RADIO_V4L1
 	---help---
 	  Choose Y here if you have this FM radio card, and then fill in the
 	  port address below.
@@ -131,7 +136,7 @@ config RADIO_GEMTEK_PORT

 config RADIO_GEMTEK_PCI
 	tristate "GemTek PCI Radio Card support"
-	depends on VIDEO_V4L1 && PCI
+	depends on RADIO_V4L1 && PCI
 	---help---
 	  Choose Y here if you have this PCI FM radio card.

@@ -145,7 +150,7 @@ config RADIO_GEMTEK_PCI

 config RADIO_MAXIRADIO
 	tristate "Guillemot MAXI Radio FM 2000 radio"
-	depends on VIDEO_V4L1 && PCI
+	depends on RADIO_V4L1 && PCI
 	---help---
 	  Choose Y here if you have this radio card.  This card may also be
 	  found as Gemtek PCI FM.
@@ -160,7 +165,7 @@ config RADIO_MAXIRADIO

 config RADIO_MAESTRO
 	tristate "Maestro on board radio"
-	depends on VIDEO_V4L1
+	depends on RADIO_V4L1
 	---help---
 	  Say Y here to directly support the on-board radio tuner on the
 	  Maestro 2 or 2E sound card.
@@ -175,7 +180,7 @@ config RADIO_MAESTRO

 config RADIO_MIROPCM20
 	tristate "miroSOUND PCM20 radio"
-	depends on ISA && VIDEO_V4L1 && SOUND_ACI_MIXER
+	depends on ISA && RADIO_V4L1 && SOUND_ACI_MIXER
 	---help---
 	  Choose Y here if you have this FM radio card. You also need to say Y
 	  to "ACI mixer (miroSOUND PCM1-pro/PCM12/PCM20 radio)" (in "Sound")
@@ -208,7 +213,7 @@ config RADIO_MIROPCM20_RDS

 config RADIO_SF16FMI
 	tristate "SF16FMI Radio"
-	depends on ISA && VIDEO_V4L1
+	depends on ISA && RADIO_V4L1
 	---help---
 	  Choose Y here if you have one of these FM radio cards.  If you
 	  compile the driver into the kernel and your card is not PnP one, you
@@ -225,7 +230,7 @@ config RADIO_SF16FMI

 config RADIO_SF16FMR2
 	tristate "SF16FMR2 Radio"
-	depends on ISA && VIDEO_V4L1
+	depends on ISA && RADIO_V4L1
 	---help---
 	  Choose Y here if you have one of these FM radio cards.

@@ -239,7 +244,7 @@ config RADIO_SF16FMR2

 config RADIO_TERRATEC
 	tristate "TerraTec ActiveRadio ISA Standalone"
-	depends on ISA && VIDEO_V4L1
+	depends on ISA && RADIO_V4L1
 	---help---
 	  Choose Y here if you have this FM radio card, and then fill in the
 	  port address below. (TODO)
@@ -268,7 +273,7 @@ config RADIO_TERRATEC_PORT

 config RADIO_TRUST
 	tristate "Trust FM radio card"
-	depends on ISA && VIDEO_V4L1
+	depends on ISA && RADIO_V4L1
 	help
 	  This is a driver for the Trust FM radio cards. Say Y if you have
 	  such a card and want to use it under Linux.
@@ -286,7 +291,7 @@ config RADIO_TRUST_PORT

 config RADIO_TYPHOON
 	tristate "Typhoon Radio (a.k.a. EcoRadio)"
-	depends on ISA && VIDEO_V4L1
+	depends on ISA && RADIO_V4L1
 	---help---
 	  Choose Y here if you have one of these FM radio cards, and then fill
 	  in the port address and the frequency used for muting below.
@@ -330,7 +335,7 @@ config RADIO_TYPHOON_MUTEFREQ

 config RADIO_ZOLTRIX
 	tristate "Zoltrix Radio"
-	depends on ISA && VIDEO_V4L1
+	depends on ISA && RADIO_V4L1
 	---help---
 	  Choose Y here if you have one of these FM radio cards, and then fill
 	  in the port address below.

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

* Re: [PATCH] Kconfig for radio cards to allow VIDEO_V4L1_COMPAT
  2006-06-25 17:40 [PATCH] Kconfig for radio cards to allow VIDEO_V4L1_COMPAT Jon Smirl
  2006-06-25 18:21 ` Sam Ravnborg
@ 2006-06-26 13:06 ` Mauro Carvalho Chehab
  2006-06-26 15:55   ` Jon Smirl
  1 sibling, 1 reply; 12+ messages in thread
From: Mauro Carvalho Chehab @ 2006-06-26 13:06 UTC (permalink / raw)
  To: Jon Smirl; +Cc: lkml

Jon,

Em Dom, 2006-06-25 às 13:40 -0400, Jon Smirl escreveu:
> In Kconfig all of the radio cards depend on VIDEO_V4L1. But V4L1 has
> been deprecated and replaced with V4L2. V4L2 offers a V4L1
> compatibility layer. Should the Kconfig for these devices be changed
> to depend on (VIDEO_V4L1. || VIDEO_V4L1_COMPAT)? I'm not the
> maintainer for this but they seem to build ok.
No, it isn't. V4L1_COMPAT gets a userspace request, using the obsoleted
V4L1 API and converts into a V4L2 call to be handled by a V4L2 driver. 

All radio stuff at kernel are still using the old obsoleted V4L1 API,
and requires some changes to be V4L2 compliant. The correct fix is to
replace the old calls to V4L2 calls, and include videodev2.h header
instead of videodev.h.

After those changes, we should move the dependencies to be VIDEO_V4L2,
instead of VIDEO_V4L1.

Cheers, 
Mauro.


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

* Re: [PATCH] Kconfig for radio cards to allow VIDEO_V4L1_COMPAT
  2006-06-26 13:06 ` Mauro Carvalho Chehab
@ 2006-06-26 15:55   ` Jon Smirl
  2006-06-26 16:58     ` Mauro Carvalho Chehab
  0 siblings, 1 reply; 12+ messages in thread
From: Jon Smirl @ 2006-06-26 15:55 UTC (permalink / raw)
  To: Mauro Carvalho Chehab; +Cc: lkml

On 6/26/06, Mauro Carvalho Chehab <mchehab@infradead.org> wrote:
> Jon,
>
> Em Dom, 2006-06-25 às 13:40 -0400, Jon Smirl escreveu:
> > In Kconfig all of the radio cards depend on VIDEO_V4L1. But V4L1 has
> > been deprecated and replaced with V4L2. V4L2 offers a V4L1
> > compatibility layer. Should the Kconfig for these devices be changed
> > to depend on (VIDEO_V4L1. || VIDEO_V4L1_COMPAT)? I'm not the
> > maintainer for this but they seem to build ok.
> No, it isn't. V4L1_COMPAT gets a userspace request, using the obsoleted
> V4L1 API and converts into a V4L2 call to be handled by a V4L2 driver.
>
> All radio stuff at kernel are still using the old obsoleted V4L1 API,
> and requires some changes to be V4L2 compliant. The correct fix is to
> replace the old calls to V4L2 calls, and include videodev2.h header
> instead of videodev.h.

Is anyone who knows how V4L2 works going to port those drivers? I
would hate to see 20 device drivers lost because they weren't ported
and V4L1 gets removed.

> After those changes, we should move the dependencies to be VIDEO_V4L2,
> instead of VIDEO_V4L1.
>
> Cheers,
> Mauro.
>
>


-- 
Jon Smirl
jonsmirl@gmail.com

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

* Re: [PATCH] Kconfig for radio cards to allow VIDEO_V4L1_COMPAT
  2006-06-26 15:55   ` Jon Smirl
@ 2006-06-26 16:58     ` Mauro Carvalho Chehab
  2006-06-26 17:15       ` Jon Smirl
  2006-07-30 23:40       ` Alan Cox
  0 siblings, 2 replies; 12+ messages in thread
From: Mauro Carvalho Chehab @ 2006-06-26 16:58 UTC (permalink / raw)
  To: Jon Smirl; +Cc: lkml

Jon,

Em Seg, 2006-06-26 às 11:55 -0400, Jon Smirl escreveu:
> On 6/26/06, Mauro Carvalho Chehab <mchehab@infradead.org> wrote:

> > All radio stuff at kernel are still using the old obsoleted V4L1 API,
> > and requires some changes to be V4L2 compliant. The correct fix is to
> > replace the old calls to V4L2 calls, and include videodev2.h header
> > instead of videodev.h.
> 
> Is anyone who knows how V4L2 works going to port those drivers?
Nobody started working on it yet.

> I would hate to see 20 device drivers lost because they weren't ported
> and V4L1 gets removed.
The driver conversion shouldn't be that hard. The main problem is that
those devices are really obsolete hardware and none of the current V4L
developers have those boards for testing. Do you have any of those
devices? Can you help porting it to V4L2?

Cheers, 
Mauro.


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

* Re: [PATCH] Kconfig for radio cards to allow VIDEO_V4L1_COMPAT
  2006-06-26 16:58     ` Mauro Carvalho Chehab
@ 2006-06-26 17:15       ` Jon Smirl
  2006-06-26 19:00         ` Mauro Carvalho Chehab
  2006-07-30 23:40       ` Alan Cox
  1 sibling, 1 reply; 12+ messages in thread
From: Jon Smirl @ 2006-06-26 17:15 UTC (permalink / raw)
  To: Mauro Carvalho Chehab; +Cc: lkml

On 6/26/06, Mauro Carvalho Chehab <mchehab@infradead.org> wrote:
> Jon,
>
> Em Seg, 2006-06-26 às 11:55 -0400, Jon Smirl escreveu:
> > On 6/26/06, Mauro Carvalho Chehab <mchehab@infradead.org> wrote:
>
> > > All radio stuff at kernel are still using the old obsoleted V4L1 API,
> > > and requires some changes to be V4L2 compliant. The correct fix is to
> > > replace the old calls to V4L2 calls, and include videodev2.h header
> > > instead of videodev.h.
> >
> > Is anyone who knows how V4L2 works going to port those drivers?
> Nobody started working on it yet.
>
> > I would hate to see 20 device drivers lost because they weren't ported
> > and V4L1 gets removed.
> The driver conversion shouldn't be that hard. The main problem is that
> those devices are really obsolete hardware and none of the current V4L
> developers have those boards for testing. Do you have any of those
> devices? Can you help porting it to V4L2?

I don't have any of the hardware. I was just doing some work on
Kconfig and noticed that a bunch of drivers had gone missing. I see
now that a lot of the drivers in media/video have the same problem. I
guess V4L1 is going to be with us for a while longer since all of
these drivers need to get ported.

-- 
Jon Smirl
jonsmirl@gmail.com

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

* Re: [PATCH] Kconfig for radio cards to allow VIDEO_V4L1_COMPAT
  2006-06-26 17:15       ` Jon Smirl
@ 2006-06-26 19:00         ` Mauro Carvalho Chehab
  0 siblings, 0 replies; 12+ messages in thread
From: Mauro Carvalho Chehab @ 2006-06-26 19:00 UTC (permalink / raw)
  To: Jon Smirl; +Cc: lkml

Em Seg, 2006-06-26 às 13:15 -0400, Jon Smirl escreveu:
> On 6/26/06, Mauro Carvalho Chehab <mchehab@infradead.org> wrote:

> I don't have any of the hardware. I was just doing some work on
> Kconfig and noticed that a bunch of drivers had gone missing. I see
> now that a lot of the drivers in media/video have the same problem.
Yes, mostly webcam stuff, where there are active developers. Hopefully
those stuff will be fixed in time to 2.6.19.
> I guess V4L1 is going to be with us for a while longer since all of
> these drivers need to get ported.
Radio devices will be more complicated to test. Those devices emerged a
long time ago, and it seems that nobody is using they, at least with 2.6
series. I'm not sure if it would be valuable to port all those stuff.
Some devices even don't have pnp support (you need to specify IO ports
and IRQ lines).
> 
Cheers, 
Mauro.


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

* Re: [PATCH] Kconfig for radio cards to allow VIDEO_V4L1_COMPAT
  2006-06-26 16:58     ` Mauro Carvalho Chehab
  2006-06-26 17:15       ` Jon Smirl
@ 2006-07-30 23:40       ` Alan Cox
  2006-07-31 21:28         ` Mauro Carvalho Chehab
  1 sibling, 1 reply; 12+ messages in thread
From: Alan Cox @ 2006-07-30 23:40 UTC (permalink / raw)
  To: Mauro Carvalho Chehab; +Cc: Jon Smirl, lkml

Ar Llu, 2006-06-26 am 13:58 -0300, ysgrifennodd Mauro Carvalho Chehab:
> those devices are really obsolete hardware and none of the current V4L
> developers have those boards for testing. Do you have any of those
> devices? Can you help porting it to V4L2?

The USB radio is probably the only one that matters, and I do have one
of those.



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

* Re: [PATCH] Kconfig for radio cards to allow VIDEO_V4L1_COMPAT
  2006-07-30 23:40       ` Alan Cox
@ 2006-07-31 21:28         ` Mauro Carvalho Chehab
  2006-07-31 23:36           ` Alan Cox
  2006-08-01 15:46           ` PATCH: Convert usb fm radio to V4L2 and move to the right directory Alan Cox
  0 siblings, 2 replies; 12+ messages in thread
From: Mauro Carvalho Chehab @ 2006-07-31 21:28 UTC (permalink / raw)
  To: Alan Cox; +Cc: Jon Smirl, lkml

Em Seg, 2006-07-31 às 00:40 +0100, Alan Cox escreveu:
> Ar Llu, 2006-06-26 am 13:58 -0300, ysgrifennodd Mauro Carvalho Chehab:
> > those devices are really obsolete hardware and none of the current V4L
> > developers have those boards for testing. Do you have any of those
> > devices? Can you help porting it to V4L2?
> 
> The USB radio is probably the only one that matters, and I do have one
> of those.
Are you referring to "D-Link USB FM radio support"? I'll seek some time
to convert it and ask you to test it. Shouldn't be hard.
> 
> 
Cheers, 
Mauro.


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

* Re: [PATCH] Kconfig for radio cards to allow VIDEO_V4L1_COMPAT
  2006-07-31 21:28         ` Mauro Carvalho Chehab
@ 2006-07-31 23:36           ` Alan Cox
  2006-08-01 15:46           ` PATCH: Convert usb fm radio to V4L2 and move to the right directory Alan Cox
  1 sibling, 0 replies; 12+ messages in thread
From: Alan Cox @ 2006-07-31 23:36 UTC (permalink / raw)
  To: Mauro Carvalho Chehab; +Cc: Jon Smirl, lkml

Ar Llu, 2006-07-31 am 18:28 -0300, ysgrifennodd Mauro Carvalho Chehab:
> > The USB radio is probably the only one that matters, and I do have one
> > of those.
> Are you referring to "D-Link USB FM radio support"? I'll seek some time
> to convert it and ask you to test it. Shouldn't be hard.

Did it today - patches will follow


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

* PATCH: Convert usb fm radio to V4L2 and move to the right directory.
  2006-07-31 21:28         ` Mauro Carvalho Chehab
  2006-07-31 23:36           ` Alan Cox
@ 2006-08-01 15:46           ` Alan Cox
  1 sibling, 0 replies; 12+ messages in thread
From: Alan Cox @ 2006-08-01 15:46 UTC (permalink / raw)
  To: Mauro Carvalho Chehab; +Cc: Jon Smirl, lkml

As promised. Could do with the stereo detect wiring in somewhere but I'm
not sure where it goes with V4L2.

Signed-off-by: Alan Cox <alan@redhat.com>

diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.18-rc2-mm1/drivers/media/radio/dsbr100.c linux-2.6.18-rc2-mm1/drivers/media/radio/dsbr100.c
--- linux.vanilla-2.6.18-rc2-mm1/drivers/media/radio/dsbr100.c	1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.18-rc2-mm1/drivers/media/radio/dsbr100.c	2006-07-31 15:43:51.000000000 +0100
@@ -0,0 +1,484 @@
+/* A driver for the D-Link DSB-R100 USB radio.  The R100 plugs
+ into both the USB and an analog audio input, so this thing
+ only deals with initialisation and frequency setting, the
+ audio data has to be handled by a sound driver.
+
+ Major issue: I can't find out where the device reports the signal
+ strength, and indeed the windows software appearantly just looks
+ at the stereo indicator as well.  So, scanning will only find
+ stereo stations.  Sad, but I can't help it.
+
+ Also, the windows program sends oodles of messages over to the
+ device, and I couldn't figure out their meaning.  My suspicion
+ is that they don't have any:-)
+
+ You might find some interesting stuff about this module at
+ http://unimut.fsk.uni-heidelberg.de/unimut/demi/dsbr
+
+ Copyright (c) 2000 Markus Demleitner <msdemlei@cl.uni-heidelberg.de>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+ History:
+
+ Version 0.40-ac1:
+  Alan Cox: Updated to V4L2 interface
+
+ Version 0.40:
+  Markus: Updates for 2.6.x kernels, code layout changes, name sanitizing
+
+ Version 0.30:
+	Markus: Updates for 2.5.x kernel and more ISO compliant 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
+
+ Version 0.23:
+	Markus: Sign extension bug fixed by declaring transfer_buffer unsigned
+
+ Version 0.22:
+	Markus: Some (brown bag) cleanup in what VIDIOCSTUNER returns,
+	thanks to Mike Cox for pointing the problem out.
+
+ Version 0.21:
+	Markus: Minor cleanup, warnings if something goes wrong, lame attempt
+	to adhere to Documentation/CodingStyle
+
+ Version 0.2:
+	Brad Hards <bradh@dynamite.com.au>: Fixes to make it work as non-module
+	Markus: Copyright clarification
+
+ Version 0.01: Markus: initial release
+
+*/
+
+#include <linux/version.h>
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/init.h>
+#include <linux/slab.h>
+#include <linux/input.h>
+#include <linux/videodev.h>
+#include <media/v4l2-common.h>
+#include <linux/usb.h>
+#include <linux/smp_lock.h>
+
+/*
+ * Version Information
+ */
+#define DRIVER_VERSION "v0.40"
+#define RADIO_VERSION KERNEL_VERSION(0,40,0)
+#define DRIVER_AUTHOR "Markus Demleitner <msdemlei@tucana.harvard.edu>"
+#define DRIVER_DESC "D-Link DSB-R100 USB FM radio driver"
+
+#define DSB100_VENDOR 0x04b4
+#define DSB100_PRODUCT 0x1002
+
+/* Commands the device appears to understand */
+#define DSB100_TUNE 1
+#define DSB100_ONOFF 2
+
+#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 struct v4l2_queryctrl radio_qctrl[] = {
+	{
+		.id            = V4L2_CID_AUDIO_MUTE,
+		.name          = "Mute",
+		.minimum       = 0,
+		.maximum       = 1,
+		.default_value = 1,
+		.type          = V4L2_CTRL_TYPE_BOOLEAN,
+	}
+};
+
+static int usb_dsbr100_probe(struct usb_interface *intf,
+			     const struct usb_device_id *id);
+static void usb_dsbr100_disconnect(struct usb_interface *intf);
+static int usb_dsbr100_ioctl(struct inode *inode, struct file *file,
+			     unsigned int cmd, unsigned long arg);
+static int usb_dsbr100_open(struct inode *inode, struct file *file);
+static int usb_dsbr100_close(struct inode *inode, struct file *file);
+
+static int radio_nr = -1;
+module_param(radio_nr, int, 0);
+
+/* Data for one (physical) device */
+struct dsbr100_device {
+	struct usb_device *usbdev;
+	struct video_device *videodev;
+	unsigned char transfer_buffer[TB_LEN];
+	int curfreq;
+	int stereo;
+	int users;
+	int muted;
+	int removed;
+};
+
+/* File system interface */
+static struct file_operations usb_dsbr100_fops = {
+	.owner =	THIS_MODULE,
+	.open =		usb_dsbr100_open,
+	.release =     	usb_dsbr100_close,
+	.ioctl =        usb_dsbr100_ioctl,
+	.compat_ioctl = v4l_compat_ioctl32,
+	.llseek =       no_llseek,
+};
+
+/* V4L interface */
+static struct video_device dsbr100_videodev_template=
+{
+	.owner =	THIS_MODULE,
+	.name =		"D-Link DSB-R 100",
+	.type =		VID_TYPE_TUNER,
+	.hardware =	VID_HARDWARE_AZTECH,
+	.fops =         &usb_dsbr100_fops,
+	.release = video_device_release,
+};
+
+static struct usb_device_id usb_dsbr100_device_table [] = {
+	{ USB_DEVICE(DSB100_VENDOR, DSB100_PRODUCT) },
+	{ }						/* Terminating entry */
+};
+
+MODULE_DEVICE_TABLE (usb, usb_dsbr100_device_table);
+
+/* USB subsystem interface */
+static struct usb_driver usb_dsbr100_driver = {
+	.name =		"dsbr100",
+	.probe =	usb_dsbr100_probe,
+	.disconnect =	usb_dsbr100_disconnect,
+	.id_table =	usb_dsbr100_device_table,
+};
+
+/* Low-level device interface begins here */
+
+/* switch on radio */
+static int dsbr100_start(struct dsbr100_device *radio)
+{
+	if (usb_control_msg(radio->usbdev, usb_rcvctrlpipe(radio->usbdev, 0),
+			USB_REQ_GET_STATUS,
+			USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_IN,
+			0x00, 0xC7, radio->transfer_buffer, 8, 300)<0 ||
+	usb_control_msg(radio->usbdev, usb_rcvctrlpipe(radio->usbdev, 0),
+			DSB100_ONOFF,
+			USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_IN,
+			0x01, 0x00, radio->transfer_buffer, 8, 300)<0)
+		return -1;
+	return (radio->transfer_buffer)[0];
+}
+
+
+/* switch off radio */
+static int dsbr100_stop(struct dsbr100_device *radio)
+{
+	if (usb_control_msg(radio->usbdev, usb_rcvctrlpipe(radio->usbdev, 0),
+			USB_REQ_GET_STATUS,
+			USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_IN,
+			0x16, 0x1C, radio->transfer_buffer, 8, 300)<0 ||
+	usb_control_msg(radio->usbdev, usb_rcvctrlpipe(radio->usbdev, 0),
+			DSB100_ONOFF,
+			USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_IN,
+			0x00, 0x00, radio->transfer_buffer, 8, 300)<0)
+		return -1;
+	return (radio->transfer_buffer)[0];
+}
+
+/* set a frequency, freq is defined by v4l's TUNER_LOW, i.e. 1/16th kHz */
+static int dsbr100_setfreq(struct dsbr100_device *radio, int freq)
+{
+	freq = (freq/16*80)/1000+856;
+	if (usb_control_msg(radio->usbdev, usb_rcvctrlpipe(radio->usbdev, 0),
+			DSB100_TUNE,
+			USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_IN,
+			(freq>>8)&0x00ff, freq&0xff,
+			radio->transfer_buffer, 8, 300)<0 ||
+	   usb_control_msg(radio->usbdev, usb_rcvctrlpipe(radio->usbdev, 0),
+			USB_REQ_GET_STATUS,
+			USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_IN,
+			0x96, 0xB7, radio->transfer_buffer, 8, 300)<0 ||
+	usb_control_msg(radio->usbdev, usb_rcvctrlpipe(radio->usbdev, 0),
+			USB_REQ_GET_STATUS,
+			USB_TYPE_VENDOR | USB_RECIP_DEVICE |  USB_DIR_IN,
+			0x00, 0x24, radio->transfer_buffer, 8, 300)<0) {
+		radio->stereo = -1;
+		return -1;
+	}
+	radio->stereo = ! ((radio->transfer_buffer)[0]&0x01);
+	return (radio->transfer_buffer)[0];
+}
+
+/* return the device status.  This is, in effect, just whether it
+sees a stereo signal or not.  Pity. */
+static void dsbr100_getstat(struct dsbr100_device *radio)
+{
+	if (usb_control_msg(radio->usbdev, usb_rcvctrlpipe(radio->usbdev, 0),
+		USB_REQ_GET_STATUS,
+		USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_IN,
+		0x00 , 0x24, radio->transfer_buffer, 8, 300)<0)
+		radio->stereo = -1;
+	else
+		radio->stereo = ! (radio->transfer_buffer[0]&0x01);
+}
+
+
+/* USB subsystem interface begins here */
+
+/* check if the device is present and register with v4l and
+usb if it is */
+static int usb_dsbr100_probe(struct usb_interface *intf,
+			 const struct usb_device_id *id)
+{
+	struct dsbr100_device *radio;
+
+	if (!(radio = kmalloc(sizeof(struct dsbr100_device), GFP_KERNEL)))
+		return -ENOMEM;
+	if (!(radio->videodev = video_device_alloc())) {
+		kfree(radio);
+		return -ENOMEM;
+	}
+	memcpy(radio->videodev, &dsbr100_videodev_template,
+		sizeof(dsbr100_videodev_template));
+	radio->removed = 0;
+	radio->users = 0;
+	radio->usbdev = interface_to_usbdev(intf);
+	radio->curfreq = FREQ_MIN*FREQ_MUL;
+	video_set_drvdata(radio->videodev, radio);
+	if (video_register_device(radio->videodev, VFL_TYPE_RADIO,
+		radio_nr)) {
+		warn("Could not register video device");
+		video_device_release(radio->videodev);
+		kfree(radio);
+		return -EIO;
+	}
+	usb_set_intfdata(intf, radio);
+	return 0;
+}
+
+/* handle unplugging of the device, release data structures
+if nothing keeps us from doing it.  If something is still
+keeping us busy, the release callback of v4l will take care
+of releasing it.  stv680.c does not relase its private
+data, so I don't do this here either.  Checking out the
+code I'd expect I better did that, but if there's a memory
+leak here it's tiny (~50 bytes per disconnect) */
+static void usb_dsbr100_disconnect(struct usb_interface *intf)
+{
+	struct dsbr100_device *radio = usb_get_intfdata(intf);
+
+	usb_set_intfdata (intf, NULL);
+	if (radio) {
+		video_unregister_device(radio->videodev);
+		radio->videodev = NULL;
+		if (radio->users) {
+			kfree(radio);
+		} else {
+			radio->removed = 1;
+		}
+	}
+}
+
+
+/* Video for Linux interface */
+
+static int usb_dsbr100_do_ioctl(struct inode *inode, struct file *file,
+				unsigned int cmd, void *arg)
+{
+	struct dsbr100_device *radio=video_get_drvdata(video_devdata(file));
+
+	if (!radio)
+		return -EIO;
+
+	switch(cmd) {
+		case VIDIOC_QUERYCAP:
+		{
+			struct v4l2_capability *v = arg;
+			memset(v,0,sizeof(*v));
+			strlcpy(v->driver, "dsbr100", sizeof (v->driver));
+			strlcpy(v->card, "D-Link R-100 USB FM Radio", sizeof (v->card));
+			sprintf(v->bus_info,"ISA");
+			v->version = RADIO_VERSION;
+			v->capabilities = V4L2_CAP_TUNER;
+
+			return 0;
+		}
+		case VIDIOC_G_TUNER:
+		{
+			struct v4l2_tuner *v = arg;
+
+			if (v->index > 0)
+				return -EINVAL;
+
+			memset(v,0,sizeof(*v));
+			strcpy(v->name, "FM");
+			v->type = V4L2_TUNER_RADIO;
+
+			v->rangelow = FREQ_MIN*FREQ_MUL;
+			v->rangehigh = FREQ_MAX*FREQ_MUL;
+			v->rxsubchans =V4L2_TUNER_SUB_MONO;
+			v->capability=V4L2_TUNER_CAP_LOW;
+			v->audmode = V4L2_TUNER_MODE_MONO;
+			v->signal = 0xFFFF;	/* We can't get the signal strength */
+			return 0;
+		}
+		case VIDIOC_S_TUNER:
+		{
+			struct v4l2_tuner *v = arg;
+
+			if (v->index > 0)
+				return -EINVAL;
+
+			return 0;
+		}
+		case VIDIOC_G_FREQUENCY:
+		{
+			struct v4l2_frequency *f = arg;
+
+			f->type = V4L2_TUNER_RADIO;
+			f->frequency = radio->curfreq;
+
+			return 0;
+		}
+		case VIDIOC_S_FREQUENCY:
+		{
+			struct v4l2_frequency *f = arg;
+			radio->curfreq = f->frequency;
+			if (dsbr100_setfreq(radio, radio->curfreq)==-1)
+				warn("Set frequency failed");
+			return 0;
+		}
+		case VIDIOC_QUERYCTRL:
+		{
+			struct v4l2_queryctrl *qc = arg;
+			int i;
+
+			for (i = 0; i < ARRAY_SIZE(radio_qctrl); i++) {
+				if (qc->id && qc->id == radio_qctrl[i].id) {
+					memcpy(qc, &(radio_qctrl[i]),
+								sizeof(*qc));
+					return 0;
+				}
+			}
+			return -EINVAL;
+		}
+		case VIDIOC_G_CTRL:
+		{
+			struct v4l2_control *ctrl= arg;
+
+			switch (ctrl->id) {
+				case V4L2_CID_AUDIO_MUTE:
+					ctrl->value=radio->muted;
+					return 0;
+			}
+			return -EINVAL;
+		}
+		case VIDIOC_S_CTRL:
+		{
+			struct v4l2_control *ctrl= arg;
+
+			switch (ctrl->id) {
+				case V4L2_CID_AUDIO_MUTE:
+					if (ctrl->value) {
+						if (dsbr100_stop(radio)==-1)
+							warn("Radio did not respond properly");
+					} else {
+						if (dsbr100_start(radio)==-1)
+							warn("Radio did not respond properly");
+					}
+					return 0;
+			}
+			return -EINVAL;
+		}
+
+		default:
+			return v4l_compat_translate_ioctl(inode,file,cmd,arg,
+							  usb_dsbr100_do_ioctl);
+		case VIDIOCSAUDIO: {
+			struct video_audio *v = arg;
+
+			if (v->audio)
+				return -EINVAL;
+			if (v->flags&VIDEO_AUDIO_MUTE) {
+				if (dsbr100_stop(radio)==-1)
+					warn("Radio did not respond properly");
+			}
+			else
+				if (dsbr100_start(radio)==-1)
+					warn("Radio did not respond properly");
+			return 0;
+		}
+	}
+}
+
+static int usb_dsbr100_ioctl(struct inode *inode, struct file *file,
+			     unsigned int cmd, unsigned long arg)
+{
+	return video_usercopy(inode, file, cmd, arg, usb_dsbr100_do_ioctl);
+}
+
+static int usb_dsbr100_open(struct inode *inode, struct file *file)
+{
+	struct dsbr100_device *radio=video_get_drvdata(video_devdata(file));
+
+	radio->users = 1;
+	if (dsbr100_start(radio)<0) {
+		warn("Radio did not start up properly");
+		radio->users = 0;
+		return -EIO;
+	}
+	dsbr100_setfreq(radio, radio->curfreq);
+	return 0;
+}
+
+static int usb_dsbr100_close(struct inode *inode, struct file *file)
+{
+	struct dsbr100_device *radio=video_get_drvdata(video_devdata(file));
+
+	if (!radio)
+		return -ENODEV;
+	radio->users = 0;
+	if (radio->removed) {
+		kfree(radio);
+	}
+	return 0;
+}
+
+static int __init dsbr100_init(void)
+{
+	int retval = usb_register(&usb_dsbr100_driver);
+	info(DRIVER_VERSION ":" DRIVER_DESC);
+	return retval;
+}
+
+static void __exit dsbr100_exit(void)
+{
+	usb_deregister(&usb_dsbr100_driver);
+}
+
+module_init (dsbr100_init);
+module_exit (dsbr100_exit);
+
+MODULE_AUTHOR( DRIVER_AUTHOR );
+MODULE_DESCRIPTION( DRIVER_DESC );
+MODULE_LICENSE("GPL");
diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.18-rc2-mm1/drivers/media/radio/Kconfig linux-2.6.18-rc2-mm1/drivers/media/radio/Kconfig
--- linux.vanilla-2.6.18-rc2-mm1/drivers/media/radio/Kconfig	2006-07-27 16:19:51.000000000 +0100
+++ linux-2.6.18-rc2-mm1/drivers/media/radio/Kconfig	2006-07-31 15:27:52.000000000 +0100
@@ -350,5 +350,17 @@
 	help
 	  Enter the I/O port of your Zoltrix radio card.
 
+config USB_DSBR
+	tristate "D-Link USB FM radio support (EXPERIMENTAL)"
+	depends on USB && VIDEO_V4L1 && EXPERIMENTAL
+	---help---
+	  Say Y here if you want to connect this type of radio to your
+	  computer's USB port. Note that the audio is not digital, and
+	  you must connect the line out connector to a sound card or a
+	  set of speakers.
+
+	  To compile this driver as a module, choose M here: the
+	  module will be called dsbr100.
+
 endmenu
 
diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.18-rc2-mm1/drivers/media/radio/Makefile linux-2.6.18-rc2-mm1/drivers/media/radio/Makefile
--- linux.vanilla-2.6.18-rc2-mm1/drivers/media/radio/Makefile	2006-07-27 16:19:02.000000000 +0100
+++ linux-2.6.18-rc2-mm1/drivers/media/radio/Makefile	2006-07-31 15:27:36.000000000 +0100
@@ -20,5 +20,6 @@
 obj-$(CONFIG_RADIO_GEMTEK_PCI) += radio-gemtek-pci.o
 obj-$(CONFIG_RADIO_TRUST) += radio-trust.o
 obj-$(CONFIG_RADIO_MAESTRO) += radio-maestro.o
+obj-$(CONFIG_USB_DSBR) += dsbr100.o
 
 EXTRA_CFLAGS += -Isound
diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.18-rc2-mm1/drivers/media/video/dsbr100.c linux-2.6.18-rc2-mm1/drivers/media/video/dsbr100.c
--- linux.vanilla-2.6.18-rc2-mm1/drivers/media/video/dsbr100.c	2006-07-27 16:19:02.000000000 +0100
+++ linux-2.6.18-rc2-mm1/drivers/media/video/dsbr100.c	1970-01-01 01:00:00.000000000 +0100
@@ -1,430 +0,0 @@
-/* A driver for the D-Link DSB-R100 USB radio.  The R100 plugs
- into both the USB and an analog audio input, so this thing
- only deals with initialisation and frequency setting, the
- audio data has to be handled by a sound driver.
-
- Major issue: I can't find out where the device reports the signal
- strength, and indeed the windows software appearantly just looks
- at the stereo indicator as well.  So, scanning will only find
- stereo stations.  Sad, but I can't help it.
-
- Also, the windows program sends oodles of messages over to the
- device, and I couldn't figure out their meaning.  My suspicion
- is that they don't have any:-)
-
- You might find some interesting stuff about this module at
- http://unimut.fsk.uni-heidelberg.de/unimut/demi/dsbr
-
- Copyright (c) 2000 Markus Demleitner <msdemlei@cl.uni-heidelberg.de>
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
- History:
-
- Version 0.40:
-  Markus: Updates for 2.6.x kernels, code layout changes, name sanitizing
-
- Version 0.30:
-	Markus: Updates for 2.5.x kernel and more ISO compliant 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
-
- Version 0.23:
-	Markus: Sign extension bug fixed by declaring transfer_buffer unsigned
-
- Version 0.22:
-	Markus: Some (brown bag) cleanup in what VIDIOCSTUNER returns,
-	thanks to Mike Cox for pointing the problem out.
-
- Version 0.21:
-	Markus: Minor cleanup, warnings if something goes wrong, lame attempt
-	to adhere to Documentation/CodingStyle
-
- Version 0.2:
-	Brad Hards <bradh@dynamite.com.au>: Fixes to make it work as non-module
-	Markus: Copyright clarification
-
- Version 0.01: Markus: initial release
-
-*/
-
-
-#include <linux/kernel.h>
-#include <linux/module.h>
-#include <linux/init.h>
-#include <linux/slab.h>
-#include <linux/input.h>
-#include <linux/videodev.h>
-#include <media/v4l2-common.h>
-#include <linux/usb.h>
-#include <linux/smp_lock.h>
-
-/*
- * Version Information
- */
-#define DRIVER_VERSION "v0.40"
-#define DRIVER_AUTHOR "Markus Demleitner <msdemlei@tucana.harvard.edu>"
-#define DRIVER_DESC "D-Link DSB-R100 USB FM radio driver"
-
-#define DSB100_VENDOR 0x04b4
-#define DSB100_PRODUCT 0x1002
-
-/* Commands the device appears to understand */
-#define DSB100_TUNE 1
-#define DSB100_ONOFF 2
-
-#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);
-static int usb_dsbr100_ioctl(struct inode *inode, struct file *file,
-			     unsigned int cmd, unsigned long arg);
-static int usb_dsbr100_open(struct inode *inode, struct file *file);
-static int usb_dsbr100_close(struct inode *inode, struct file *file);
-
-static int radio_nr = -1;
-module_param(radio_nr, int, 0);
-
-/* Data for one (physical) device */
-typedef struct {
-	struct usb_device *usbdev;
-	struct video_device *videodev;
-	unsigned char transfer_buffer[TB_LEN];
-	int curfreq;
-	int stereo;
-	int users;
-	int removed;
-} dsbr100_device;
-
-
-/* File system interface */
-static struct file_operations usb_dsbr100_fops = {
-	.owner =	THIS_MODULE,
-	.open =		usb_dsbr100_open,
-	.release =     	usb_dsbr100_close,
-	.ioctl =        usb_dsbr100_ioctl,
-	.compat_ioctl = v4l_compat_ioctl32,
-	.llseek =       no_llseek,
-};
-
-/* V4L interface */
-static struct video_device dsbr100_videodev_template=
-{
-	.owner =	THIS_MODULE,
-	.name =		"D-Link DSB-R 100",
-	.type =		VID_TYPE_TUNER,
-	.hardware =	VID_HARDWARE_AZTECH,
-	.fops =         &usb_dsbr100_fops,
-	.release = video_device_release,
-};
-
-static struct usb_device_id usb_dsbr100_device_table [] = {
-	{ USB_DEVICE(DSB100_VENDOR, DSB100_PRODUCT) },
-	{ }						/* Terminating entry */
-};
-
-MODULE_DEVICE_TABLE (usb, usb_dsbr100_device_table);
-
-/* USB subsystem interface */
-static struct usb_driver usb_dsbr100_driver = {
-	.name =		"dsbr100",
-	.probe =	usb_dsbr100_probe,
-	.disconnect =	usb_dsbr100_disconnect,
-	.id_table =	usb_dsbr100_device_table,
-};
-
-/* Low-level device interface begins here */
-
-/* switch on radio */
-static int dsbr100_start(dsbr100_device *radio)
-{
-	if (usb_control_msg(radio->usbdev, usb_rcvctrlpipe(radio->usbdev, 0),
-			USB_REQ_GET_STATUS,
-			USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_IN,
-			0x00, 0xC7, radio->transfer_buffer, 8, 300)<0 ||
-	usb_control_msg(radio->usbdev, usb_rcvctrlpipe(radio->usbdev, 0),
-			DSB100_ONOFF,
-			USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_IN,
-			0x01, 0x00, radio->transfer_buffer, 8, 300)<0)
-		return -1;
-	return (radio->transfer_buffer)[0];
-}
-
-
-/* switch off radio */
-static int dsbr100_stop(dsbr100_device *radio)
-{
-	if (usb_control_msg(radio->usbdev, usb_rcvctrlpipe(radio->usbdev, 0),
-			USB_REQ_GET_STATUS,
-			USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_IN,
-			0x16, 0x1C, radio->transfer_buffer, 8, 300)<0 ||
-	usb_control_msg(radio->usbdev, usb_rcvctrlpipe(radio->usbdev, 0),
-			DSB100_ONOFF,
-			USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_IN,
-			0x00, 0x00, radio->transfer_buffer, 8, 300)<0)
-		return -1;
-	return (radio->transfer_buffer)[0];
-}
-
-/* set a frequency, freq is defined by v4l's TUNER_LOW, i.e. 1/16th kHz */
-static int dsbr100_setfreq(dsbr100_device *radio, int freq)
-{
-	freq = (freq/16*80)/1000+856;
-	if (usb_control_msg(radio->usbdev, usb_rcvctrlpipe(radio->usbdev, 0),
-			DSB100_TUNE,
-			USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_IN,
-			(freq>>8)&0x00ff, freq&0xff,
-			radio->transfer_buffer, 8, 300)<0 ||
-	   usb_control_msg(radio->usbdev, usb_rcvctrlpipe(radio->usbdev, 0),
-			USB_REQ_GET_STATUS,
-			USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_IN,
-			0x96, 0xB7, radio->transfer_buffer, 8, 300)<0 ||
-	usb_control_msg(radio->usbdev, usb_rcvctrlpipe(radio->usbdev, 0),
-			USB_REQ_GET_STATUS,
-			USB_TYPE_VENDOR | USB_RECIP_DEVICE |  USB_DIR_IN,
-			0x00, 0x24, radio->transfer_buffer, 8, 300)<0) {
-		radio->stereo = -1;
-		return -1;
-	}
-	radio->stereo = ! ((radio->transfer_buffer)[0]&0x01);
-	return (radio->transfer_buffer)[0];
-}
-
-/* return the device status.  This is, in effect, just whether it
-sees a stereo signal or not.  Pity. */
-static void dsbr100_getstat(dsbr100_device *radio)
-{
-	if (usb_control_msg(radio->usbdev, usb_rcvctrlpipe(radio->usbdev, 0),
-		USB_REQ_GET_STATUS,
-		USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_IN,
-		0x00 , 0x24, radio->transfer_buffer, 8, 300)<0)
-		radio->stereo = -1;
-	else
-		radio->stereo = ! (radio->transfer_buffer[0]&0x01);
-}
-
-
-/* USB subsystem interface begins here */
-
-/* check if the device is present and register with v4l and
-usb if it is */
-static int usb_dsbr100_probe(struct usb_interface *intf,
-			 const struct usb_device_id *id)
-{
-	dsbr100_device *radio;
-
-	if (!(radio = kmalloc(sizeof(dsbr100_device), GFP_KERNEL)))
-		return -ENOMEM;
-	if (!(radio->videodev = video_device_alloc())) {
-		kfree(radio);
-		return -ENOMEM;
-	}
-	memcpy(radio->videodev, &dsbr100_videodev_template,
-		sizeof(dsbr100_videodev_template));
-	radio->removed = 0;
-	radio->users = 0;
-	radio->usbdev = interface_to_usbdev(intf);
-	radio->curfreq = FREQ_MIN*FREQ_MUL;
-	video_set_drvdata(radio->videodev, radio);
-	if (video_register_device(radio->videodev, VFL_TYPE_RADIO,
-		radio_nr)) {
-		warn("Could not register video device");
-		video_device_release(radio->videodev);
-		kfree(radio);
-		return -EIO;
-	}
-	usb_set_intfdata(intf, radio);
-	return 0;
-}
-
-/* handle unplugging of the device, release data structures
-if nothing keeps us from doing it.  If something is still
-keeping us busy, the release callback of v4l will take care
-of releasing it.  stv680.c does not relase its private
-data, so I don't do this here either.  Checking out the
-code I'd expect I better did that, but if there's a memory
-leak here it's tiny (~50 bytes per disconnect) */
-static void usb_dsbr100_disconnect(struct usb_interface *intf)
-{
-	dsbr100_device *radio = usb_get_intfdata(intf);
-
-	usb_set_intfdata (intf, NULL);
-	if (radio) {
-		video_unregister_device(radio->videodev);
-		radio->videodev = NULL;
-		if (radio->users) {
-			kfree(radio);
-		} else {
-			radio->removed = 1;
-		}
-	}
-}
-
-
-/* Video for Linux interface */
-
-static int usb_dsbr100_do_ioctl(struct inode *inode, struct file *file,
-				unsigned int cmd, void *arg)
-{
-	dsbr100_device *radio=video_get_drvdata(video_devdata(file));
-
-	if (!radio)
-		return -EIO;
-
-	switch(cmd) {
-		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 FM Radio");
-			return 0;
-		}
-		case VIDIOCGTUNER: {
-			struct video_tuner *v = arg;
-
-			dsbr100_getstat(radio);
-			if(v->tuner)	/* Only 1 tuner */
-				return -EINVAL;
-			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;
-				/* Don't know how to get signal strength */
-			v->flags |= VIDEO_TUNER_STEREO_ON*radio->stereo;
-			strcpy(v->name, "DSB R-100");
-			return 0;
-		}
-		case VIDIOCSTUNER: {
-			struct video_tuner *v = arg;
-
-			if(v->tuner!=0)
-				return -EINVAL;
-			/* Only 1 tuner so no setting needed ! */
-			return 0;
-		}
-		case VIDIOCGFREQ: {
-			int *freq = arg;
-
-			if (radio->curfreq==-1)
-				return -EINVAL;
-			*freq = radio->curfreq;
-			return 0;
-		}
-		case VIDIOCSFREQ: {
-			int *freq = arg;
-
-			radio->curfreq = *freq;
-			if (dsbr100_setfreq(radio, radio->curfreq)==-1)
-				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;
-			strcpy(v->name, "Radio");
-			return 0;
-		}
-		case VIDIOCSAUDIO: {
-			struct video_audio *v = arg;
-
-			if (v->audio)
-				return -EINVAL;
-			if (v->flags&VIDEO_AUDIO_MUTE) {
-				if (dsbr100_stop(radio)==-1)
-					warn("Radio did not respond properly");
-			}
-			else
-				if (dsbr100_start(radio)==-1)
-					warn("Radio did not respond properly");
-			return 0;
-		}
-		default:
-			return -ENOIOCTLCMD;
-	}
-}
-
-static int usb_dsbr100_ioctl(struct inode *inode, struct file *file,
-			     unsigned int cmd, unsigned long arg)
-{
-	return video_usercopy(inode, file, cmd, arg, usb_dsbr100_do_ioctl);
-}
-
-static int usb_dsbr100_open(struct inode *inode, struct file *file)
-{
-	dsbr100_device *radio=video_get_drvdata(video_devdata(file));
-
-	radio->users = 1;
-	if (dsbr100_start(radio)<0) {
-		warn("Radio did not start up properly");
-		radio->users = 0;
-		return -EIO;
-	}
-	dsbr100_setfreq(radio, radio->curfreq);
-	return 0;
-}
-
-static int usb_dsbr100_close(struct inode *inode, struct file *file)
-{
-	dsbr100_device *radio=video_get_drvdata(video_devdata(file));
-
-	if (!radio)
-		return -ENODEV;
-	radio->users = 0;
-	if (radio->removed) {
-		kfree(radio);
-	}
-	return 0;
-}
-
-static int __init dsbr100_init(void)
-{
-	int retval = usb_register(&usb_dsbr100_driver);
-	info(DRIVER_VERSION ":" DRIVER_DESC);
-	return retval;
-}
-
-static void __exit dsbr100_exit(void)
-{
-	usb_deregister(&usb_dsbr100_driver);
-}
-
-module_init (dsbr100_init);
-module_exit (dsbr100_exit);
-
-MODULE_AUTHOR( DRIVER_AUTHOR );
-MODULE_DESCRIPTION( DRIVER_DESC );
-MODULE_LICENSE("GPL");
diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.18-rc2-mm1/drivers/media/video/Kconfig linux-2.6.18-rc2-mm1/drivers/media/video/Kconfig
--- linux.vanilla-2.6.18-rc2-mm1/drivers/media/video/Kconfig	2006-07-27 16:19:51.000000000 +0100
+++ linux-2.6.18-rc2-mm1/drivers/media/video/Kconfig	2006-07-31 15:27:21.000000000 +0100
@@ -449,18 +449,6 @@
 
 source "drivers/media/video/em28xx/Kconfig"
 
-config USB_DSBR
-	tristate "D-Link USB FM radio support (EXPERIMENTAL)"
-	depends on USB && VIDEO_V4L1 && EXPERIMENTAL
-	---help---
-	  Say Y here if you want to connect this type of radio to your
-	  computer's USB port. Note that the audio is not digital, and
-	  you must connect the line out connector to a sound card or a
-	  set of speakers.
-
-	  To compile this driver as a module, choose M here: the
-	  module will be called dsbr100.
-
 source "drivers/media/video/usbvideo/Kconfig"
 
 source "drivers/media/video/et61x251/Kconfig"
diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.18-rc2-mm1/drivers/media/video/Makefile linux-2.6.18-rc2-mm1/drivers/media/video/Makefile
--- linux.vanilla-2.6.18-rc2-mm1/drivers/media/video/Makefile	2006-07-27 16:19:02.000000000 +0100
+++ linux-2.6.18-rc2-mm1/drivers/media/video/Makefile	2006-07-31 15:27:08.000000000 +0100
@@ -77,7 +77,6 @@
 obj-$(CONFIG_VIDEO_CX2341X) += cx2341x.o
 
 obj-$(CONFIG_USB_DABUSB)        += dabusb.o
-obj-$(CONFIG_USB_DSBR)          += dsbr100.o
 obj-$(CONFIG_USB_OV511)         += ov511.o
 obj-$(CONFIG_USB_SE401)         += se401.o
 obj-$(CONFIG_USB_STV680)        += stv680.o



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

end of thread, other threads:[~2006-08-01 15:27 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-06-25 17:40 [PATCH] Kconfig for radio cards to allow VIDEO_V4L1_COMPAT Jon Smirl
2006-06-25 18:21 ` Sam Ravnborg
2006-06-25 19:48   ` Jon Smirl
2006-06-26 13:06 ` Mauro Carvalho Chehab
2006-06-26 15:55   ` Jon Smirl
2006-06-26 16:58     ` Mauro Carvalho Chehab
2006-06-26 17:15       ` Jon Smirl
2006-06-26 19:00         ` Mauro Carvalho Chehab
2006-07-30 23:40       ` Alan Cox
2006-07-31 21:28         ` Mauro Carvalho Chehab
2006-07-31 23:36           ` Alan Cox
2006-08-01 15:46           ` PATCH: Convert usb fm radio to V4L2 and move to the right directory Alan Cox

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.