Commit 272a4870 authored by Takashi Iwai's avatar Takashi Iwai

Merge branch 'fix/misc' into topic/misc

parents 5495ffbd c37279b9
...@@ -68,6 +68,7 @@ MODULE_PARM_DESC(enable, "Enable FM801 soundcard."); ...@@ -68,6 +68,7 @@ MODULE_PARM_DESC(enable, "Enable FM801 soundcard.");
module_param_array(tea575x_tuner, int, NULL, 0444); 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)."); 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_ONLY (1<<4)
#define TUNER_TYPE_MASK (~TUNER_ONLY & 0xFFFF) #define TUNER_TYPE_MASK (~TUNER_ONLY & 0xFFFF)
...@@ -1150,7 +1151,8 @@ static int snd_fm801_free(struct fm801 *chip) ...@@ -1150,7 +1151,8 @@ static int snd_fm801_free(struct fm801 *chip)
__end_hw: __end_hw:
#ifdef CONFIG_SND_FM801_TEA575X_BOOL #ifdef CONFIG_SND_FM801_TEA575X_BOOL
snd_tea575x_exit(&chip->tea); if (!(chip->tea575x_tuner & TUNER_DISABLED))
snd_tea575x_exit(&chip->tea);
#endif #endif
if (chip->irq >= 0) if (chip->irq >= 0)
free_irq(chip->irq, chip); free_irq(chip->irq, chip);
...@@ -1236,7 +1238,6 @@ static int __devinit snd_fm801_create(struct snd_card *card, ...@@ -1236,7 +1238,6 @@ static int __devinit snd_fm801_create(struct snd_card *card,
(tea575x_tuner & TUNER_TYPE_MASK) < 4) { (tea575x_tuner & TUNER_TYPE_MASK) < 4) {
if (snd_tea575x_init(&chip->tea)) { if (snd_tea575x_init(&chip->tea)) {
snd_printk(KERN_ERR "TEA575x radio not found\n"); snd_printk(KERN_ERR "TEA575x radio not found\n");
snd_fm801_free(chip);
return -ENODEV; return -ENODEV;
} }
} else if ((tea575x_tuner & TUNER_TYPE_MASK) == 0) { } else if ((tea575x_tuner & TUNER_TYPE_MASK) == 0) {
...@@ -1251,11 +1252,15 @@ static int __devinit snd_fm801_create(struct snd_card *card, ...@@ -1251,11 +1252,15 @@ static int __devinit snd_fm801_create(struct snd_card *card,
} }
if (tea575x_tuner == 4) { if (tea575x_tuner == 4) {
snd_printk(KERN_ERR "TEA575x radio not found\n"); snd_printk(KERN_ERR "TEA575x radio not found\n");
snd_fm801_free(chip); chip->tea575x_tuner = TUNER_DISABLED;
return -ENODEV;
} }
} }
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 #endif
*rchip = chip; *rchip = chip;
......
...@@ -168,7 +168,7 @@ struct alc_spec { ...@@ -168,7 +168,7 @@ struct alc_spec {
unsigned int auto_mic_valid_imux:1; /* valid imux for auto-mic */ unsigned int auto_mic_valid_imux:1; /* valid imux for auto-mic */
unsigned int automute:1; /* HP automute enabled */ unsigned int automute:1; /* HP automute enabled */
unsigned int detect_line:1; /* Line-out detection enabled */ unsigned int detect_line:1; /* Line-out detection enabled */
unsigned int automute_lines:1; /* automute line-out as well */ unsigned int automute_lines:1; /* automute line-out as well; NOP when automute_hp_lo isn't set */
unsigned int automute_hp_lo:1; /* both HP and LO available */ unsigned int automute_hp_lo:1; /* both HP and LO available */
/* other flags */ /* other flags */
...@@ -551,7 +551,7 @@ static void update_speakers(struct hda_codec *codec) ...@@ -551,7 +551,7 @@ static void update_speakers(struct hda_codec *codec)
if (spec->autocfg.line_out_pins[0] == spec->autocfg.hp_pins[0] || if (spec->autocfg.line_out_pins[0] == spec->autocfg.hp_pins[0] ||
spec->autocfg.line_out_pins[0] == spec->autocfg.speaker_pins[0]) spec->autocfg.line_out_pins[0] == spec->autocfg.speaker_pins[0])
return; return;
if (!spec->automute_lines || !spec->automute) if (!spec->automute || (spec->automute_hp_lo && !spec->automute_lines))
on = 0; on = 0;
else else
on = spec->jack_present; on = spec->jack_present;
...@@ -803,7 +803,7 @@ static int alc_automute_mode_get(struct snd_kcontrol *kcontrol, ...@@ -803,7 +803,7 @@ static int alc_automute_mode_get(struct snd_kcontrol *kcontrol,
unsigned int val; unsigned int val;
if (!spec->automute) if (!spec->automute)
val = 0; val = 0;
else if (!spec->automute_lines) else if (!spec->automute_hp_lo || !spec->automute_lines)
val = 1; val = 1;
else else
val = 2; val = 2;
...@@ -824,7 +824,8 @@ static int alc_automute_mode_put(struct snd_kcontrol *kcontrol, ...@@ -824,7 +824,8 @@ static int alc_automute_mode_put(struct snd_kcontrol *kcontrol,
spec->automute = 0; spec->automute = 0;
break; break;
case 1: case 1:
if (spec->automute && !spec->automute_lines) if (spec->automute &&
(!spec->automute_hp_lo || !spec->automute_lines))
return 0; return 0;
spec->automute = 1; spec->automute = 1;
spec->automute_lines = 0; spec->automute_lines = 0;
......
...@@ -6573,6 +6573,7 @@ static const struct hda_codec_preset snd_hda_preset_sigmatel[] = { ...@@ -6573,6 +6573,7 @@ static const struct hda_codec_preset snd_hda_preset_sigmatel[] = {
{ .id = 0x111d76cc, .name = "92HD89F3", .patch = patch_stac92hd73xx }, { .id = 0x111d76cc, .name = "92HD89F3", .patch = patch_stac92hd73xx },
{ .id = 0x111d76cd, .name = "92HD89F2", .patch = patch_stac92hd73xx }, { .id = 0x111d76cd, .name = "92HD89F2", .patch = patch_stac92hd73xx },
{ .id = 0x111d76ce, .name = "92HD89F1", .patch = patch_stac92hd73xx }, { .id = 0x111d76ce, .name = "92HD89F1", .patch = patch_stac92hd73xx },
{ .id = 0x111d76df, .name = "92HD93BXX", .patch = patch_stac92hd83xxx},
{ .id = 0x111d76e0, .name = "92HD91BXX", .patch = patch_stac92hd83xxx}, { .id = 0x111d76e0, .name = "92HD91BXX", .patch = patch_stac92hd83xxx},
{ .id = 0x111d76e3, .name = "92HD98BXX", .patch = patch_stac92hd83xxx}, { .id = 0x111d76e3, .name = "92HD98BXX", .patch = patch_stac92hd83xxx},
{ .id = 0x111d76e5, .name = "92HD99BXX", .patch = patch_stac92hd83xxx}, { .id = 0x111d76e5, .name = "92HD99BXX", .patch = patch_stac92hd83xxx},
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment