* fm801: implement TEA575x tuner autodetection
@ 2011-05-10 21:24 Ondrej Zary
2011-05-11 8:54 ` [alsa-devel] " Takashi Iwai
0 siblings, 1 reply; 2+ messages in thread
From: Ondrej Zary @ 2011-05-10 21:24 UTC (permalink / raw)
To: alsa-devel; +Cc: linux-media, Kernel development list
Autodetect TEA575x tuner connection type during init. This allows tuner to
work out-of-the box.
tea575x_tuner module parameter remains functional to force tuner type.
Tested with SF256-PCP and SF64-PCR.
Signed-off-by: Ondrej Zary <linux@rainbow-software.org>
--- linux-2.6.39-rc2-/sound/pci/fm801.c 2011-05-10 22:31:45.000000000 +0200
+++ linux-2.6.39-rc2/sound/pci/fm801.c 2011-05-10 23:21:42.000000000 +0200
@@ -53,7 +53,7 @@ static int enable[SNDRV_CARDS] = SNDRV_D
/*
* Enable TEA575x tuner
* 1 = MediaForte 256-PCS
- * 2 = MediaForte 256-PCPR
+ * 2 = MediaForte 256-PCP
* 3 = MediaForte 64-PCR
* 16 = setup tuner only (this is additional bit), i.e. SF64-PCR FM card
* High 16-bits are video (radio) device number + 1
@@ -67,7 +67,7 @@ MODULE_PARM_DESC(id, "ID string for the
module_param_array(enable, bool, NULL, 0444);
MODULE_PARM_DESC(enable, "Enable FM801 soundcard.");
module_param_array(tea575x_tuner, int, NULL, 0444);
-MODULE_PARM_DESC(tea575x_tuner, "TEA575x tuner access method (1 = SF256-PCS, 2=SF256-PCPR, 3=SF64-PCR, +16=tuner-only).");
+MODULE_PARM_DESC(tea575x_tuner, "TEA575x tuner access method (0 = auto, 1 = SF256-PCS, 2=SF256-PCP, 3=SF64-PCR, 8=disable, +16=tuner-only).");
#define TUNER_ONLY (1<<4)
#define TUNER_TYPE_MASK (~TUNER_ONLY & 0xFFFF)
@@ -720,12 +720,13 @@ static int __devinit snd_fm801_pcm(struc
/* GPIO to TEA575x maps */
struct snd_fm801_tea575x_gpio {
u8 data, clk, wren, most;
+ char *name;
};
static struct snd_fm801_tea575x_gpio snd_fm801_tea575x_gpios[] = {
- { .data = 1, .clk = 3, .wren = 2, .most = 0 }, /* SF256-PCS */
- { .data = 1, .clk = 0, .wren = 2, .most = 3 }, /* SF256-PCP */
- { .data = 2, .clk = 0, .wren = 1, .most = 3 }, /* SF64-PCR */
+ { .data = 1, .clk = 3, .wren = 2, .most = 0, .name = "SF256-PCS" },
+ { .data = 1, .clk = 0, .wren = 2, .most = 3, .name = "SF256-PCP" },
+ { .data = 2, .clk = 0, .wren = 1, .most = 3, .name = "SF64-PCR" },
};
static void snd_fm801_tea575x_set_pins(struct snd_tea575x *tea, u8 pins)
@@ -1229,14 +1230,24 @@ static int __devinit snd_fm801_create(st
snd_card_set_dev(card, &pci->dev);
#ifdef TEA575X_RADIO
+ chip->tea.card = card;
+ chip->tea.freq_fixup = 10700;
+ chip->tea.private_data = chip;
+ chip->tea.ops = &snd_fm801_tea_ops;
if ((tea575x_tuner & TUNER_TYPE_MASK) > 0 &&
(tea575x_tuner & TUNER_TYPE_MASK) < 4) {
- chip->tea.card = card;
- chip->tea.freq_fixup = 10700;
- chip->tea.private_data = chip;
- chip->tea.ops = &snd_fm801_tea_ops;
- snd_tea575x_init(&chip->tea);
- }
+ if (snd_tea575x_init(&chip->tea))
+ snd_printk(KERN_ERR "TEA575x radio not found\n");
+ } else if ((tea575x_tuner & TUNER_TYPE_MASK) == 0)
+ /* autodetect tuner connection */
+ for (tea575x_tuner = 1; tea575x_tuner <= 3; tea575x_tuner++) {
+ chip->tea575x_tuner = tea575x_tuner;
+ if (!snd_tea575x_init(&chip->tea)) {
+ snd_printk(KERN_INFO "detected TEA575x radio type %s\n",
+ snd_fm801_tea575x_gpios[tea575x_tuner - 1].name);
+ break;
+ }
+ }
#endif
*rchip = chip;
--
Ondrej Zary
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [alsa-devel] fm801: implement TEA575x tuner autodetection
2011-05-10 21:24 fm801: implement TEA575x tuner autodetection Ondrej Zary
@ 2011-05-11 8:54 ` Takashi Iwai
0 siblings, 0 replies; 2+ messages in thread
From: Takashi Iwai @ 2011-05-11 8:54 UTC (permalink / raw)
To: Ondrej Zary; +Cc: alsa-devel, Kernel development list, linux-media
At Tue, 10 May 2011 23:24:15 +0200,
Ondrej Zary wrote:
>
> Autodetect TEA575x tuner connection type during init. This allows tuner to
> work out-of-the box.
>
> tea575x_tuner module parameter remains functional to force tuner type.
>
> Tested with SF256-PCP and SF64-PCR.
>
> Signed-off-by: Ondrej Zary <linux@rainbow-software.org>
Applied now. Thanks.
Takashi
>
> --- linux-2.6.39-rc2-/sound/pci/fm801.c 2011-05-10 22:31:45.000000000 +0200
> +++ linux-2.6.39-rc2/sound/pci/fm801.c 2011-05-10 23:21:42.000000000 +0200
> @@ -53,7 +53,7 @@ static int enable[SNDRV_CARDS] = SNDRV_D
> /*
> * Enable TEA575x tuner
> * 1 = MediaForte 256-PCS
> - * 2 = MediaForte 256-PCPR
> + * 2 = MediaForte 256-PCP
> * 3 = MediaForte 64-PCR
> * 16 = setup tuner only (this is additional bit), i.e. SF64-PCR FM card
> * High 16-bits are video (radio) device number + 1
> @@ -67,7 +67,7 @@ MODULE_PARM_DESC(id, "ID string for the
> module_param_array(enable, bool, NULL, 0444);
> MODULE_PARM_DESC(enable, "Enable FM801 soundcard.");
> module_param_array(tea575x_tuner, int, NULL, 0444);
> -MODULE_PARM_DESC(tea575x_tuner, "TEA575x tuner access method (1 = SF256-PCS, 2=SF256-PCPR, 3=SF64-PCR, +16=tuner-only).");
> +MODULE_PARM_DESC(tea575x_tuner, "TEA575x tuner access method (0 = auto, 1 = SF256-PCS, 2=SF256-PCP, 3=SF64-PCR, 8=disable, +16=tuner-only).");
>
> #define TUNER_ONLY (1<<4)
> #define TUNER_TYPE_MASK (~TUNER_ONLY & 0xFFFF)
> @@ -720,12 +720,13 @@ static int __devinit snd_fm801_pcm(struc
> /* GPIO to TEA575x maps */
> struct snd_fm801_tea575x_gpio {
> u8 data, clk, wren, most;
> + char *name;
> };
>
> static struct snd_fm801_tea575x_gpio snd_fm801_tea575x_gpios[] = {
> - { .data = 1, .clk = 3, .wren = 2, .most = 0 }, /* SF256-PCS */
> - { .data = 1, .clk = 0, .wren = 2, .most = 3 }, /* SF256-PCP */
> - { .data = 2, .clk = 0, .wren = 1, .most = 3 }, /* SF64-PCR */
> + { .data = 1, .clk = 3, .wren = 2, .most = 0, .name = "SF256-PCS" },
> + { .data = 1, .clk = 0, .wren = 2, .most = 3, .name = "SF256-PCP" },
> + { .data = 2, .clk = 0, .wren = 1, .most = 3, .name = "SF64-PCR" },
> };
>
> static void snd_fm801_tea575x_set_pins(struct snd_tea575x *tea, u8 pins)
> @@ -1229,14 +1230,24 @@ static int __devinit snd_fm801_create(st
> snd_card_set_dev(card, &pci->dev);
>
> #ifdef TEA575X_RADIO
> + chip->tea.card = card;
> + chip->tea.freq_fixup = 10700;
> + chip->tea.private_data = chip;
> + chip->tea.ops = &snd_fm801_tea_ops;
> if ((tea575x_tuner & TUNER_TYPE_MASK) > 0 &&
> (tea575x_tuner & TUNER_TYPE_MASK) < 4) {
> - chip->tea.card = card;
> - chip->tea.freq_fixup = 10700;
> - chip->tea.private_data = chip;
> - chip->tea.ops = &snd_fm801_tea_ops;
> - snd_tea575x_init(&chip->tea);
> - }
> + if (snd_tea575x_init(&chip->tea))
> + snd_printk(KERN_ERR "TEA575x radio not found\n");
> + } else if ((tea575x_tuner & TUNER_TYPE_MASK) == 0)
> + /* autodetect tuner connection */
> + for (tea575x_tuner = 1; tea575x_tuner <= 3; tea575x_tuner++) {
> + chip->tea575x_tuner = tea575x_tuner;
> + if (!snd_tea575x_init(&chip->tea)) {
> + snd_printk(KERN_INFO "detected TEA575x radio type %s\n",
> + snd_fm801_tea575x_gpios[tea575x_tuner - 1].name);
> + break;
> + }
> + }
> #endif
>
> *rchip = chip;
>
>
> --
> Ondrej Zary
> _______________________________________________
> Alsa-devel mailing list
> Alsa-devel@alsa-project.org
> http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
>
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2011-05-11 16:37 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-05-10 21:24 fm801: implement TEA575x tuner autodetection Ondrej Zary
2011-05-11 8:54 ` [alsa-devel] " Takashi Iwai
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox