fm801: Gracefully handle failure of tuner auto-detect
PATCH 2/2 fm801: Gracefully handle failure of tuner auto-detect
Commit 9676001559fce06e37c7dc230ab275f605556176
("ALSA: fm801: add error handling if auto-detect fails") seems to break systems that were previously working without a tuner.
As a bonus, this should fix init and cleanup for the case where the tuner is explicitly disabled.
Reported-and-tested-by Hor Jiun Shyong <[email protected]>
References: http://bugs.debian.org/641946
Signed-off-by Ben Hutchings <[email protected]>
Cc [email protected] [v3.0+]
--- sound/pci/fm801.c | 13 ++++++++++--- 1 files changed, 10 insertions(+), 3 deletions(-)
sound/pci/fm801.c +10 -3
@@ -68,6 +68,7 @@ MODULE_PARM_DESC(enable, "Enable FM801 soundcard.");module_param_array (tea575x_tuner, int,NULL ,0444 );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_DISABLED (1<<3)#define TUNER_ONLY (1<<4)#define TUNER_TYPE_MASK (~TUNER_ONLY & 0xFFFF)
@@ -1150,7 +1151,8 @@ static int snd_fm801_free(struct fm801 *chip) __end_hw:#ifdef CONFIG_SND_FM801_TEA575X_BOOL -snd_tea575x_exit (&chip->tea); +if (!(chip->tea575x_tuner &TUNER_DISABLED )) +snd_tea575x_exit (&chip->tea);#endif if (chip->irq >=0 )free_irq (chip->irq, chip);
@@ -1250,10 +1252,15 @@ static int __devinit snd_fm801_create(struct snd_card *card, }if (tea575x_tuner ==4 ) {snd_printk (KERN_ERR "TEA575x radio not found\n" ); -return -ENODEV ; + chip->tea575x_tuner =TUNER_DISABLED ; } } -strlcpy (chip->tea.card, snd_fm801_tea575x_gpios[(tea575x_tuner &TUNER_TYPE_MASK ) -1 ].name,sizeof (chip->tea.card)); +if (!(chip->tea575x_tuner &TUNER_DISABLED )) { +strlcpy (chip->tea.card, + snd_fm801_tea575x_gpios[(tea575x_tuner & +TUNER_TYPE_MASK ) -1 ].name, +sizeof (chip->tea.card)); + }#endif *rchip = chip;
Signature · 1 line
1.7.5.4