At Sat, 15 Aug 2009 20:53:38 +0400, Alexey Dobriyan wrote:
On Sat, Aug 15, 2009 at 05:41:04PM +0200, Takashi Iwai wrote:
At Sat, 15 Aug 2009 16:38:46 +0400, Alexey Dobriyan wrote:
Fix alsamixer inability to start:
ALSA lib simple_none.c:1491:(simple_add1) helem (MIXER,'Master Playback Switch',0,3,0) appears twice or more
ALC268 codec shipped with Toshiba Satellite X200 has ids 1179:ff00 and began to match quirk table.
If it doesn't match and auto-probe from BIOS is used, alsamixer works:
hda_codec: Unknown model for ALC268, trying auto-probe from BIOS...
8871e5b91518a47284b6bc2603b44dbc79c85446 is first bad commit commit 8871e5b91518a47284b6bc2603b44dbc79c85446 Author: Takashi Iwai tiwai@suse.de Date: Tue Jun 2 01:02:50 2009 +0200
ALSA: hda - Reorder and clean-up ALC268 quirk table Rearrange alc268_cfg_tbl[] in the order of vendor id, and group some entries using SND_PCI_QUIRK_MASK(). Signed-off-by: Takashi Iwai <tiwai@suse.de>
:040000 040000 2497bb6fc5305acf3191b8e9b82956ec0ea1aee9 6f1d9ff9fed20550a1b2b398c7d2d5fec705fcd9 M sound
Signed-off-by: Alexey Dobriyan adobriyan@gmail.com
Well, it's no right fix. The symptom implies that something wrong with the current model=toshiba, so fixing the quirk is the way to go at this moment.
Could you give alsa-info.sh output (run with --no-upload option) as vanilla kernel? Run with both model=auto and without model option and attach both results to compare. The former means actually the condition as your patch does.
Here is diff for quick look:
Thanks. The problem is that this laptop has two ALC268 codecs, and these conflict.
Could you try the patch below?
thanks,
Takashi
--- diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c index fea9767..6f683e4 100644 --- a/sound/pci/hda/patch_realtek.c +++ b/sound/pci/hda/patch_realtek.c @@ -12521,8 +12521,6 @@ static struct snd_pci_quirk alc268_cfg_tbl[] = { ALC268_TOSHIBA), SND_PCI_QUIRK(0x1043, 0x1205, "ASUS W7J", ALC268_3ST), SND_PCI_QUIRK(0x1170, 0x0040, "ZEPTO", ALC268_ZEPTO), - SND_PCI_QUIRK_MASK(0x1179, 0xff00, 0xff00, "TOSHIBA A/Lx05", - ALC268_TOSHIBA), SND_PCI_QUIRK(0x14c0, 0x0025, "COMPAL IFL90/JFL-92", ALC268_TOSHIBA), SND_PCI_QUIRK(0x152d, 0x0763, "Diverse (CPR2000)", ALC268_ACER), SND_PCI_QUIRK(0x152d, 0x0771, "Quanta IL1", ALC267_QUANTA_IL1), @@ -12530,6 +12528,15 @@ static struct snd_pci_quirk alc268_cfg_tbl[] = { {} };
+/* Toshiba laptops have no unique PCI SSID but only codec SSID */ +static struct snd_pci_quirk alc268_ssid_cfg_tbl[] = { + SND_PCI_QUIRK(0x1179, 0xff0a, "TOSHIBA X-200", ALC268_AUTO), + SND_PCI_QUIRK(0x1179, 0xff0e, "TOSHIBA X-200 HDMI", ALC268_AUTO), + SND_PCI_QUIRK_MASK(0x1179, 0xff00, 0xff00, "TOSHIBA A/Lx05", + ALC268_TOSHIBA), + {} +}; + static struct alc_config_preset alc268_presets[] = { [ALC267_QUANTA_IL1] = { .mixers = { alc267_quanta_il1_mixer, alc268_beep_mixer }, @@ -12696,6 +12703,10 @@ static int patch_alc268(struct hda_codec *codec) alc268_models, alc268_cfg_tbl);
+ if (board_config < 0 || board_config >= ALC268_MODEL_LAST) + board_config = snd_hda_check_board_codec_sid_config(codec, + ALC882_MODEL_LAST, alc268_models, alc268_ssid_cfg_tbl); + if (board_config < 0 || board_config >= ALC268_MODEL_LAST) { printk(KERN_INFO "hda_codec: Unknown model for %s, " "trying auto-probe from BIOS...\n", codec->chip_name);