diff --git a/packages/linux/patches/linux-3.2.9-061_appletv_audio_quirks.patch b/packages/linux/patches/linux-3.2.9-061_appletv_audio_quirks.patch new file mode 100644 index 0000000000..65b2fe957b --- /dev/null +++ b/packages/linux/patches/linux-3.2.9-061_appletv_audio_quirks.patch @@ -0,0 +1,116 @@ +--- linux-3.2-rc7/sound/pci/hda/alc882_quirks.c 2011-12-24 09:51:06.000000000 +0400 ++++ linux-3.2-rc7.patch/sound/pci/hda/alc882_quirks.c 2012-01-03 00:29:21.874208274 +0400 +@@ -14,6 +14,7 @@ + ALC882_ASUS_A7J, + ALC882_ASUS_A7M, + ALC885_MACPRO, ++ ALC885_APPLETV, + ALC885_MBA21, + ALC885_MBP3, + ALC885_MB5, +@@ -1366,6 +1367,22 @@ + + #define alc883_init_verbs alc882_base_init_verbs + ++/* AppleTV Mixer */ ++static struct snd_kcontrol_new alc885_appletv_mixer[] = { ++ HDA_CODEC_VOLUME("Master Playback Volume", 0x0c, 0x0 , HDA_OUTPUT), ++ HDA_BIND_MUTE("Master Playback Switch", 0x0c, 2 , HDA_INPUT), ++ HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 7, HDA_INPUT), ++ HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 7, HDA_INPUT), ++ { } ++}; ++ ++static struct hda_verb alc885_appletv_init_verbs[] = { ++ {0x14, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT}, ++ {0x14, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE}, ++ {0x14, AC_VERB_SET_CONNECT_SEL, 0x00}, ++ { } ++}; ++ + /* Mac Pro test */ + static const struct snd_kcontrol_new alc882_macpro_mixer[] = { + HDA_CODEC_VOLUME("Front Playback Volume", 0x0c, 0x0, HDA_OUTPUT), +@@ -2793,6 +2810,7 @@ + [ALC882_ASUS_A7J] = "asus-a7j", + [ALC882_ASUS_A7M] = "asus-a7m", + [ALC885_MACPRO] = "macpro", ++ [ALC885_APPLETV] = "appletv", + [ALC885_MB5] = "mb5", + [ALC885_MACMINI3] = "macmini3", + [ALC885_MBA21] = "mba21", +@@ -2969,7 +2987,7 @@ + SND_PCI_QUIRK(0x106b, 0x00a4, "MacbookPro 4,1", ALC885_MBP3), + SND_PCI_QUIRK(0x106b, 0x0c00, "Mac Pro", ALC885_MACPRO), + SND_PCI_QUIRK(0x106b, 0x1000, "iMac 24", ALC885_IMAC24), +- SND_PCI_QUIRK(0x106b, 0x2800, "AppleTV", ALC885_IMAC24), ++ SND_PCI_QUIRK(0x108c, 0x0885, "AppleTV", ALC885_APPLETV), + SND_PCI_QUIRK(0x106b, 0x2c00, "MacbookPro rev3", ALC885_MBP3), + SND_PCI_QUIRK(0x106b, 0x3000, "iMac", ALC889A_MB31), + SND_PCI_QUIRK(0x106b, 0x3200, "iMac 7,1 Aluminum", ALC882_ASUS_A7M), +@@ -3004,6 +3022,17 @@ + .need_dac_fix = 1, + .input_mux = &alc882_capture_source, + }, ++ [ALC885_APPLETV] = { ++ .mixers = { alc885_appletv_mixer }, ++ .init_verbs = { alc885_appletv_init_verbs }, ++ .num_dacs = ARRAY_SIZE(alc882_dac_nids), ++ .dac_nids = alc882_dac_nids, ++ .dig_out_nid = ALC882_DIGOUT_NID, ++ .dig_in_nid = ALC882_DIGIN_NID, ++ .num_channel_mode = ARRAY_SIZE(alc882_ch_modes), ++ .channel_mode = alc882_ch_modes, ++ .input_mux = &alc882_capture_source, ++ }, + [ALC882_6ST_DIG] = { + .mixers = { alc882_base_mixer, alc882_chmode_mixer }, + .init_verbs = { alc882_base_init_verbs, +@@ -3108,6 +3137,17 @@ + .input_mux = &alc882_capture_source, + .init_hook = alc885_macpro_init_hook, + }, ++ [ALC885_APPLETV] = { ++ .mixers = { alc885_appletv_mixer }, ++ .init_verbs = { alc885_appletv_init_verbs }, ++ .num_dacs = ARRAY_SIZE(alc882_dac_nids), ++ .dac_nids = alc882_dac_nids, ++ .dig_out_nid = ALC882_DIGOUT_NID, ++ .dig_in_nid = ALC882_DIGIN_NID, ++ .num_channel_mode = ARRAY_SIZE(alc882_ch_modes), ++ .channel_mode = alc882_ch_modes, ++ .input_mux = &alc882_capture_source, ++ }, + [ALC885_IMAC24] = { + .mixers = { alc885_imac24_mixer }, + .init_verbs = { alc885_imac24_init_verbs }, +--- linux-3.2-rc7/sound/pci/hda/patch_realtek_mod.c 2012-01-02 23:52:10.315296644 +0400 ++++ linux-3.2-rc7.patch/sound/pci/hda/patch_realtek.c 2012-01-03 07:55:59.807583416 +0400 +@@ -4281,8 +4281,13 @@ + spec->mixer_nid = 0x0b; + + switch (codec->vendor_id) { +- case 0x10ec0882: +- case 0x10ec0885: ++ ++ case 0x10ec0885: /* AppleTV */ ++ printk(KERN_INFO "hda_codec: Detected AppleTV RealTek Subsystem ID\n"); ++ board_config = ALC885_APPLETV; ++ break; ++ case 0x10ec0882: ++ /* case 0x10ec0885: */ + break; + default: + /* ALC883 and variants */ +@@ -4307,6 +4312,11 @@ + board_config = ALC_MODEL_AUTO; + } + ++ if (board_config == ALC885_APPLETV) { ++ alc882_gpio_mute(codec, 0, 0); ++ alc882_gpio_mute(codec, 1, 0); ++ } ++ + if (board_config == ALC_MODEL_AUTO) { + alc_pick_fixup(codec, NULL, alc882_fixup_tbl, alc882_fixups); + alc_apply_fixup(codec, ALC_FIXUP_ACT_PRE_PROBE); diff --git a/projects/ATV/filesystem/etc/modprobe.d/alsa-base.conf b/projects/ATV/filesystem/etc/modprobe.d/alsa-base.conf new file mode 100644 index 0000000000..e8df8514b1 --- /dev/null +++ b/projects/ATV/filesystem/etc/modprobe.d/alsa-base.conf @@ -0,0 +1,19 @@ +############################# +# ALSA drivers load options # +############################# + +# Prevent abnormal drivers from grabbing index 0 +options snd-bt87x index=-2 +options cx88-alsa index=-2 +options saa7134-alsa index=-2 +options snd-atiixp-modem index=-2 +options snd-intel8x0m index=-2 +options snd-via82xx-modem index=-2 +options snd-usb-audio index=-2 +options snd-usb-usx2y index=-2 +options snd-usb-caiaq index=-2 +options snd-cmipci mpu_port=0x330 fm_port=0x388 + +# Some Toshiba laptops might require this +# options snd-hda-intel model=toshiba +options snd-hda-intel model=appletv