Loading sound/hda/codecs/sigmatel.c +203 −195 Original line number Diff line number Diff line Loading @@ -2,7 +2,7 @@ /* * Universal Interface for Intel High Definition Audio Codec * * HD audio interface patch for SigmaTel STAC92xx * HD audio codec driver for SigmaTel STAC92xx * * Copyright (c) 2005 Embedded Alley Solutions, Inc. * Matt Porter <mporter@embeddedalley.com> Loading Loading @@ -4391,8 +4391,6 @@ static int stac_init(struct hda_codec *codec) return 0; } #define stac_free snd_hda_gen_free #ifdef CONFIG_SND_PROC_FS static void stac92hd_proc_hook(struct snd_info_buffer *buffer, struct hda_codec *codec, hda_nid_t nid) Loading Loading @@ -4454,15 +4452,6 @@ static int stac_suspend(struct hda_codec *codec) return 0; } static const struct hda_codec_ops stac_patch_ops = { .build_controls = snd_hda_gen_build_controls, .build_pcms = snd_hda_gen_build_pcms, .init = stac_init, .free = stac_free, .unsol_event = snd_hda_jack_unsol_event, .suspend = stac_suspend, }; static int alloc_stac_spec(struct hda_codec *codec) { struct sigmatel_spec *spec; Loading @@ -4474,19 +4463,14 @@ static int alloc_stac_spec(struct hda_codec *codec) codec->spec = spec; codec->no_trigger_sense = 1; /* seems common with STAC/IDT codecs */ spec->gen.dac_min_mute = true; codec->patch_ops = stac_patch_ops; return 0; } static int patch_stac9200(struct hda_codec *codec) static int probe_stac9200(struct hda_codec *codec) { struct sigmatel_spec *spec; int err; err = alloc_stac_spec(codec); if (err < 0) return err; spec = codec->spec; spec->linear_tone_beep = 1; spec->gen.own_eapd_ctl = 1; Loading @@ -4500,25 +4484,19 @@ static int patch_stac9200(struct hda_codec *codec) snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_PRE_PROBE); err = stac_parse_auto_config(codec); if (err < 0) { stac_free(codec); if (err < 0) return err; } snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_PROBE); return 0; } static int patch_stac925x(struct hda_codec *codec) static int probe_stac925x(struct hda_codec *codec) { struct sigmatel_spec *spec; int err; err = alloc_stac_spec(codec); if (err < 0) return err; spec = codec->spec; spec->linear_tone_beep = 1; spec->gen.own_eapd_ctl = 1; Loading @@ -4530,26 +4508,20 @@ static int patch_stac925x(struct hda_codec *codec) snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_PRE_PROBE); err = stac_parse_auto_config(codec); if (err < 0) { stac_free(codec); if (err < 0) return err; } snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_PROBE); return 0; } static int patch_stac92hd73xx(struct hda_codec *codec) static int probe_stac92hd73xx(struct hda_codec *codec) { struct sigmatel_spec *spec; int err; int num_dacs; err = alloc_stac_spec(codec); if (err < 0) return err; spec = codec->spec; /* enable power_save_node only for new 92HD89xx chips, as it causes * click noises on old 92HD73xx chips. Loading Loading @@ -4604,10 +4576,8 @@ static int patch_stac92hd73xx(struct hda_codec *codec) snd_hda_add_verbs(codec, stac92hd73xx_core_init); err = stac_parse_auto_config(codec); if (err < 0) { stac_free(codec); if (err < 0) return err; } /* Don't GPIO-mute speakers if there are no internal speakers, because * the GPIO might be necessary for Headphone Loading Loading @@ -4646,15 +4616,11 @@ static void stac_setup_gpio(struct hda_codec *codec) } } static int patch_stac92hd83xxx(struct hda_codec *codec) static int probe_stac92hd83xxx(struct hda_codec *codec) { struct sigmatel_spec *spec; int err; err = alloc_stac_spec(codec); if (err < 0) return err; /* longer delay needed for D3 */ codec->core.power_caps &= ~AC_PWRST_EPSS; Loading @@ -4679,10 +4645,8 @@ static int patch_stac92hd83xxx(struct hda_codec *codec) stac_setup_gpio(codec); err = stac_parse_auto_config(codec); if (err < 0) { stac_free(codec); if (err < 0) return err; } codec->proc_widget_hook = stac92hd_proc_hook; Loading @@ -4695,15 +4659,11 @@ static const hda_nid_t stac92hd95_pwr_nids[] = { 0x0a, 0x0b, 0x0c, 0x0d }; static int patch_stac92hd95(struct hda_codec *codec) static int probe_stac92hd95(struct hda_codec *codec) { struct sigmatel_spec *spec; int err; err = alloc_stac_spec(codec); if (err < 0) return err; /* longer delay needed for D3 */ codec->core.power_caps &= ~AC_PWRST_EPSS; Loading @@ -4725,10 +4685,8 @@ static int patch_stac92hd95(struct hda_codec *codec) stac_setup_gpio(codec); err = stac_parse_auto_config(codec); if (err < 0) { stac_free(codec); if (err < 0) return err; } codec->proc_widget_hook = stac92hd_proc_hook; Loading @@ -4737,16 +4695,12 @@ static int patch_stac92hd95(struct hda_codec *codec) return 0; } static int patch_stac92hd71bxx(struct hda_codec *codec) static int probe_stac92hd71bxx(struct hda_codec *codec) { struct sigmatel_spec *spec; const hda_nid_t *unmute_nids = stac92hd71bxx_unmute_nids; int err; err = alloc_stac_spec(codec); if (err < 0) return err; spec = codec->spec; /* disabled power_save_node since it causes noises on a Dell machine */ /* codec->power_save_node = 1; */ Loading Loading @@ -4809,10 +4763,8 @@ static int patch_stac92hd71bxx(struct hda_codec *codec) stac_setup_gpio(codec); err = stac_parse_auto_config(codec); if (err < 0) { stac_free(codec); if (err < 0) return err; } codec->proc_widget_hook = stac92hd7x_proc_hook; Loading @@ -4821,15 +4773,11 @@ static int patch_stac92hd71bxx(struct hda_codec *codec) return 0; } static int patch_stac922x(struct hda_codec *codec) static int probe_stac922x(struct hda_codec *codec) { struct sigmatel_spec *spec; int err; err = alloc_stac_spec(codec); if (err < 0) return err; spec = codec->spec; spec->linear_tone_beep = 1; spec->gen.own_eapd_ctl = 1; Loading @@ -4848,10 +4796,8 @@ static int patch_stac922x(struct hda_codec *codec) snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_PRE_PROBE); err = stac_parse_auto_config(codec); if (err < 0) { stac_free(codec); if (err < 0) return err; } snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_PROBE); Loading @@ -4863,15 +4809,11 @@ static const char * const stac927x_spdif_labels[] = { "Analog Mux 2", "Analog Mux 3", NULL }; static int patch_stac927x(struct hda_codec *codec) static int probe_stac927x(struct hda_codec *codec) { struct sigmatel_spec *spec; int err; err = alloc_stac_spec(codec); if (err < 0) return err; spec = codec->spec; spec->linear_tone_beep = 1; spec->gen.own_eapd_ctl = 1; Loading @@ -4897,10 +4839,8 @@ static int patch_stac927x(struct hda_codec *codec) snd_hda_add_verbs(codec, stac927x_core_init); err = stac_parse_auto_config(codec); if (err < 0) { stac_free(codec); if (err < 0) return err; } codec->proc_widget_hook = stac927x_proc_hook; Loading @@ -4921,15 +4861,11 @@ static int patch_stac927x(struct hda_codec *codec) return 0; } static int patch_stac9205(struct hda_codec *codec) static int probe_stac9205(struct hda_codec *codec) { struct sigmatel_spec *spec; int err; err = alloc_stac_spec(codec); if (err < 0) return err; spec = codec->spec; spec->linear_tone_beep = 1; spec->gen.own_eapd_ctl = 1; Loading @@ -4955,10 +4891,8 @@ static int patch_stac9205(struct hda_codec *codec) snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_PRE_PROBE); err = stac_parse_auto_config(codec); if (err < 0) { stac_free(codec); if (err < 0) return err; } codec->proc_widget_hook = stac9205_proc_hook; Loading Loading @@ -5008,15 +4942,11 @@ static const struct hda_quirk stac9872_fixup_tbl[] = { {} /* terminator */ }; static int patch_stac9872(struct hda_codec *codec) static int probe_stac9872(struct hda_codec *codec) { struct sigmatel_spec *spec; int err; err = alloc_stac_spec(codec); if (err < 0) return err; spec = codec->spec; spec->linear_tone_beep = 1; spec->gen.own_eapd_ctl = 1; Loading @@ -5028,125 +4958,202 @@ static int patch_stac9872(struct hda_codec *codec) snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_PRE_PROBE); err = stac_parse_auto_config(codec); if (err < 0) { stac_free(codec); return -EINVAL; } if (err < 0) return err; snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_PROBE); return 0; } /* * common driver probe */ enum { MODEL_STAC9200, MODEL_STAC9205, MODEL_STAC922X, MODEL_STAC925X, MODEL_STAC927X, MODEL_STAC9872, MODEL_STAC92HD71BXX, MODEL_STAC92HD73XX, MODEL_STAC92HD83XXX, MODEL_STAC92HD95, }; static int stac_probe(struct hda_codec *codec, const struct hda_device_id *id) { int err; err = alloc_stac_spec(codec); if (err < 0) return err; switch (id->driver_data) { case MODEL_STAC9200: err = probe_stac9200(codec); break; case MODEL_STAC9205: err = probe_stac9205(codec); break; case MODEL_STAC922X: err = probe_stac922x(codec); break; case MODEL_STAC925X: err = probe_stac925x(codec); break; case MODEL_STAC927X: err = probe_stac927x(codec); break; case MODEL_STAC9872: err = probe_stac9872(codec); break; case MODEL_STAC92HD71BXX: err = probe_stac92hd71bxx(codec); break; case MODEL_STAC92HD73XX: err = probe_stac92hd73xx(codec); break; case MODEL_STAC92HD83XXX: err = probe_stac92hd83xxx(codec); break; case MODEL_STAC92HD95: err = probe_stac92hd95(codec); break; default: err = -EINVAL; break; } if (err < 0) { snd_hda_gen_remove(codec); return err; } return 0; } static const struct hda_codec_ops stac_codec_ops = { .probe = stac_probe, .remove = snd_hda_gen_remove, .build_controls = snd_hda_gen_build_controls, .build_pcms = snd_hda_gen_build_pcms, .init = stac_init, .unsol_event = snd_hda_jack_unsol_event, .suspend = stac_suspend, .stream_pm = snd_hda_gen_stream_pm, }; /* * patch entries * driver entries */ static const struct hda_device_id snd_hda_id_sigmatel[] = { HDA_CODEC_ENTRY(0x83847690, "STAC9200", patch_stac9200), HDA_CODEC_ENTRY(0x83847882, "STAC9220 A1", patch_stac922x), HDA_CODEC_ENTRY(0x83847680, "STAC9221 A1", patch_stac922x), HDA_CODEC_ENTRY(0x83847880, "STAC9220 A2", patch_stac922x), HDA_CODEC_ENTRY(0x83847681, "STAC9220D/9223D A2", patch_stac922x), HDA_CODEC_ENTRY(0x83847682, "STAC9221 A2", patch_stac922x), HDA_CODEC_ENTRY(0x83847683, "STAC9221D A2", patch_stac922x), HDA_CODEC_ENTRY(0x83847618, "STAC9227", patch_stac927x), HDA_CODEC_ENTRY(0x83847619, "STAC9227", patch_stac927x), HDA_CODEC_ENTRY(0x83847638, "STAC92HD700", patch_stac927x), HDA_CODEC_ENTRY(0x83847616, "STAC9228", patch_stac927x), HDA_CODEC_ENTRY(0x83847617, "STAC9228", patch_stac927x), HDA_CODEC_ENTRY(0x83847614, "STAC9229", patch_stac927x), HDA_CODEC_ENTRY(0x83847615, "STAC9229", patch_stac927x), HDA_CODEC_ENTRY(0x83847620, "STAC9274", patch_stac927x), HDA_CODEC_ENTRY(0x83847621, "STAC9274D", patch_stac927x), HDA_CODEC_ENTRY(0x83847622, "STAC9273X", patch_stac927x), HDA_CODEC_ENTRY(0x83847623, "STAC9273D", patch_stac927x), HDA_CODEC_ENTRY(0x83847624, "STAC9272X", patch_stac927x), HDA_CODEC_ENTRY(0x83847625, "STAC9272D", patch_stac927x), HDA_CODEC_ENTRY(0x83847626, "STAC9271X", patch_stac927x), HDA_CODEC_ENTRY(0x83847627, "STAC9271D", patch_stac927x), HDA_CODEC_ENTRY(0x83847628, "STAC9274X5NH", patch_stac927x), HDA_CODEC_ENTRY(0x83847629, "STAC9274D5NH", patch_stac927x), HDA_CODEC_ENTRY(0x83847632, "STAC9202", patch_stac925x), HDA_CODEC_ENTRY(0x83847633, "STAC9202D", patch_stac925x), HDA_CODEC_ENTRY(0x83847634, "STAC9250", patch_stac925x), HDA_CODEC_ENTRY(0x83847635, "STAC9250D", patch_stac925x), HDA_CODEC_ENTRY(0x83847636, "STAC9251", patch_stac925x), HDA_CODEC_ENTRY(0x83847637, "STAC9250D", patch_stac925x), HDA_CODEC_ENTRY(0x83847645, "92HD206X", patch_stac927x), HDA_CODEC_ENTRY(0x83847646, "92HD206D", patch_stac927x), HDA_CODEC_ID_MODEL(0x83847690, "STAC9200", MODEL_STAC9200), HDA_CODEC_ID_MODEL(0x83847882, "STAC9220 A1", MODEL_STAC922X), HDA_CODEC_ID_MODEL(0x83847680, "STAC9221 A1", MODEL_STAC922X), HDA_CODEC_ID_MODEL(0x83847880, "STAC9220 A2", MODEL_STAC922X), HDA_CODEC_ID_MODEL(0x83847681, "STAC9220D/9223D A2", MODEL_STAC922X), HDA_CODEC_ID_MODEL(0x83847682, "STAC9221 A2", MODEL_STAC922X), HDA_CODEC_ID_MODEL(0x83847683, "STAC9221D A2", MODEL_STAC922X), HDA_CODEC_ID_MODEL(0x83847618, "STAC9227", MODEL_STAC927X), HDA_CODEC_ID_MODEL(0x83847619, "STAC9227", MODEL_STAC927X), HDA_CODEC_ID_MODEL(0x83847638, "STAC92HD700", MODEL_STAC927X), HDA_CODEC_ID_MODEL(0x83847616, "STAC9228", MODEL_STAC927X), HDA_CODEC_ID_MODEL(0x83847617, "STAC9228", MODEL_STAC927X), HDA_CODEC_ID_MODEL(0x83847614, "STAC9229", MODEL_STAC927X), HDA_CODEC_ID_MODEL(0x83847615, "STAC9229", MODEL_STAC927X), HDA_CODEC_ID_MODEL(0x83847620, "STAC9274", MODEL_STAC927X), HDA_CODEC_ID_MODEL(0x83847621, "STAC9274D", MODEL_STAC927X), HDA_CODEC_ID_MODEL(0x83847622, "STAC9273X", MODEL_STAC927X), HDA_CODEC_ID_MODEL(0x83847623, "STAC9273D", MODEL_STAC927X), HDA_CODEC_ID_MODEL(0x83847624, "STAC9272X", MODEL_STAC927X), HDA_CODEC_ID_MODEL(0x83847625, "STAC9272D", MODEL_STAC927X), HDA_CODEC_ID_MODEL(0x83847626, "STAC9271X", MODEL_STAC927X), HDA_CODEC_ID_MODEL(0x83847627, "STAC9271D", MODEL_STAC927X), HDA_CODEC_ID_MODEL(0x83847628, "STAC9274X5NH", MODEL_STAC927X), HDA_CODEC_ID_MODEL(0x83847629, "STAC9274D5NH", MODEL_STAC927X), HDA_CODEC_ID_MODEL(0x83847632, "STAC9202", MODEL_STAC925X), HDA_CODEC_ID_MODEL(0x83847633, "STAC9202D", MODEL_STAC925X), HDA_CODEC_ID_MODEL(0x83847634, "STAC9250", MODEL_STAC925X), HDA_CODEC_ID_MODEL(0x83847635, "STAC9250D", MODEL_STAC925X), HDA_CODEC_ID_MODEL(0x83847636, "STAC9251", MODEL_STAC925X), HDA_CODEC_ID_MODEL(0x83847637, "STAC9250D", MODEL_STAC925X), HDA_CODEC_ID_MODEL(0x83847645, "92HD206X", MODEL_STAC927X), HDA_CODEC_ID_MODEL(0x83847646, "92HD206D", MODEL_STAC927X), /* The following does not take into account .id=0x83847661 when subsys = * 104D0C00 which is STAC9225s. Because of this, some SZ Notebooks are * currently not fully supported. */ HDA_CODEC_ENTRY(0x83847661, "CXD9872RD/K", patch_stac9872), HDA_CODEC_ENTRY(0x83847662, "STAC9872AK", patch_stac9872), HDA_CODEC_ENTRY(0x83847664, "CXD9872AKD", patch_stac9872), HDA_CODEC_ENTRY(0x83847698, "STAC9205", patch_stac9205), HDA_CODEC_ENTRY(0x838476a0, "STAC9205", patch_stac9205), HDA_CODEC_ENTRY(0x838476a1, "STAC9205D", patch_stac9205), HDA_CODEC_ENTRY(0x838476a2, "STAC9204", patch_stac9205), HDA_CODEC_ENTRY(0x838476a3, "STAC9204D", patch_stac9205), HDA_CODEC_ENTRY(0x838476a4, "STAC9255", patch_stac9205), HDA_CODEC_ENTRY(0x838476a5, "STAC9255D", patch_stac9205), HDA_CODEC_ENTRY(0x838476a6, "STAC9254", patch_stac9205), HDA_CODEC_ENTRY(0x838476a7, "STAC9254D", patch_stac9205), HDA_CODEC_ENTRY(0x111d7603, "92HD75B3X5", patch_stac92hd71bxx), HDA_CODEC_ENTRY(0x111d7604, "92HD83C1X5", patch_stac92hd83xxx), HDA_CODEC_ENTRY(0x111d76d4, "92HD83C1C5", patch_stac92hd83xxx), HDA_CODEC_ENTRY(0x111d7605, "92HD81B1X5", patch_stac92hd83xxx), HDA_CODEC_ENTRY(0x111d76d5, "92HD81B1C5", patch_stac92hd83xxx), HDA_CODEC_ENTRY(0x111d76d1, "92HD87B1/3", patch_stac92hd83xxx), HDA_CODEC_ENTRY(0x111d76d9, "92HD87B2/4", patch_stac92hd83xxx), HDA_CODEC_ENTRY(0x111d7666, "92HD88B3", patch_stac92hd83xxx), HDA_CODEC_ENTRY(0x111d7667, "92HD88B1", patch_stac92hd83xxx), HDA_CODEC_ENTRY(0x111d7668, "92HD88B2", patch_stac92hd83xxx), HDA_CODEC_ENTRY(0x111d7669, "92HD88B4", patch_stac92hd83xxx), HDA_CODEC_ENTRY(0x111d7608, "92HD75B2X5", patch_stac92hd71bxx), HDA_CODEC_ENTRY(0x111d7674, "92HD73D1X5", patch_stac92hd73xx), HDA_CODEC_ENTRY(0x111d7675, "92HD73C1X5", patch_stac92hd73xx), HDA_CODEC_ENTRY(0x111d7676, "92HD73E1X5", patch_stac92hd73xx), HDA_CODEC_ENTRY(0x111d7695, "92HD95", patch_stac92hd95), HDA_CODEC_ENTRY(0x111d76b0, "92HD71B8X", patch_stac92hd71bxx), HDA_CODEC_ENTRY(0x111d76b1, "92HD71B8X", patch_stac92hd71bxx), HDA_CODEC_ENTRY(0x111d76b2, "92HD71B7X", patch_stac92hd71bxx), HDA_CODEC_ENTRY(0x111d76b3, "92HD71B7X", patch_stac92hd71bxx), HDA_CODEC_ENTRY(0x111d76b4, "92HD71B6X", patch_stac92hd71bxx), HDA_CODEC_ENTRY(0x111d76b5, "92HD71B6X", patch_stac92hd71bxx), HDA_CODEC_ENTRY(0x111d76b6, "92HD71B5X", patch_stac92hd71bxx), HDA_CODEC_ENTRY(0x111d76b7, "92HD71B5X", patch_stac92hd71bxx), HDA_CODEC_ENTRY(0x111d76c0, "92HD89C3", patch_stac92hd73xx), HDA_CODEC_ENTRY(0x111d76c1, "92HD89C2", patch_stac92hd73xx), HDA_CODEC_ENTRY(0x111d76c2, "92HD89C1", patch_stac92hd73xx), HDA_CODEC_ENTRY(0x111d76c3, "92HD89B3", patch_stac92hd73xx), HDA_CODEC_ENTRY(0x111d76c4, "92HD89B2", patch_stac92hd73xx), HDA_CODEC_ENTRY(0x111d76c5, "92HD89B1", patch_stac92hd73xx), HDA_CODEC_ENTRY(0x111d76c6, "92HD89E3", patch_stac92hd73xx), HDA_CODEC_ENTRY(0x111d76c7, "92HD89E2", patch_stac92hd73xx), HDA_CODEC_ENTRY(0x111d76c8, "92HD89E1", patch_stac92hd73xx), HDA_CODEC_ENTRY(0x111d76c9, "92HD89D3", patch_stac92hd73xx), HDA_CODEC_ENTRY(0x111d76ca, "92HD89D2", patch_stac92hd73xx), HDA_CODEC_ENTRY(0x111d76cb, "92HD89D1", patch_stac92hd73xx), HDA_CODEC_ENTRY(0x111d76cc, "92HD89F3", patch_stac92hd73xx), HDA_CODEC_ENTRY(0x111d76cd, "92HD89F2", patch_stac92hd73xx), HDA_CODEC_ENTRY(0x111d76ce, "92HD89F1", patch_stac92hd73xx), HDA_CODEC_ENTRY(0x111d76df, "92HD93BXX", patch_stac92hd83xxx), HDA_CODEC_ENTRY(0x111d76e0, "92HD91BXX", patch_stac92hd83xxx), HDA_CODEC_ENTRY(0x111d76e3, "92HD98BXX", patch_stac92hd83xxx), HDA_CODEC_ENTRY(0x111d76e5, "92HD99BXX", patch_stac92hd83xxx), HDA_CODEC_ENTRY(0x111d76e7, "92HD90BXX", patch_stac92hd83xxx), HDA_CODEC_ENTRY(0x111d76e8, "92HD66B1X5", patch_stac92hd83xxx), HDA_CODEC_ENTRY(0x111d76e9, "92HD66B2X5", patch_stac92hd83xxx), HDA_CODEC_ENTRY(0x111d76ea, "92HD66B3X5", patch_stac92hd83xxx), HDA_CODEC_ENTRY(0x111d76eb, "92HD66C1X5", patch_stac92hd83xxx), HDA_CODEC_ENTRY(0x111d76ec, "92HD66C2X5", patch_stac92hd83xxx), HDA_CODEC_ENTRY(0x111d76ed, "92HD66C3X5", patch_stac92hd83xxx), HDA_CODEC_ENTRY(0x111d76ee, "92HD66B1X3", patch_stac92hd83xxx), HDA_CODEC_ENTRY(0x111d76ef, "92HD66B2X3", patch_stac92hd83xxx), HDA_CODEC_ENTRY(0x111d76f0, "92HD66B3X3", patch_stac92hd83xxx), HDA_CODEC_ENTRY(0x111d76f1, "92HD66C1X3", patch_stac92hd83xxx), HDA_CODEC_ENTRY(0x111d76f2, "92HD66C2X3", patch_stac92hd83xxx), HDA_CODEC_ENTRY(0x111d76f3, "92HD66C3/65", patch_stac92hd83xxx), HDA_CODEC_ID_MODEL(0x83847661, "CXD9872RD/K", MODEL_STAC9872), HDA_CODEC_ID_MODEL(0x83847662, "STAC9872AK", MODEL_STAC9872), HDA_CODEC_ID_MODEL(0x83847664, "CXD9872AKD", MODEL_STAC9872), HDA_CODEC_ID_MODEL(0x83847698, "STAC9205", MODEL_STAC9205), HDA_CODEC_ID_MODEL(0x838476a0, "STAC9205", MODEL_STAC9205), HDA_CODEC_ID_MODEL(0x838476a1, "STAC9205D", MODEL_STAC9205), HDA_CODEC_ID_MODEL(0x838476a2, "STAC9204", MODEL_STAC9205), HDA_CODEC_ID_MODEL(0x838476a3, "STAC9204D", MODEL_STAC9205), HDA_CODEC_ID_MODEL(0x838476a4, "STAC9255", MODEL_STAC9205), HDA_CODEC_ID_MODEL(0x838476a5, "STAC9255D", MODEL_STAC9205), HDA_CODEC_ID_MODEL(0x838476a6, "STAC9254", MODEL_STAC9205), HDA_CODEC_ID_MODEL(0x838476a7, "STAC9254D", MODEL_STAC9205), HDA_CODEC_ID_MODEL(0x111d7603, "92HD75B3X5", MODEL_STAC92HD71BXX), HDA_CODEC_ID_MODEL(0x111d7604, "92HD83C1X5", MODEL_STAC92HD83XXX), HDA_CODEC_ID_MODEL(0x111d76d4, "92HD83C1C5", MODEL_STAC92HD83XXX), HDA_CODEC_ID_MODEL(0x111d7605, "92HD81B1X5", MODEL_STAC92HD83XXX), HDA_CODEC_ID_MODEL(0x111d76d5, "92HD81B1C5", MODEL_STAC92HD83XXX), HDA_CODEC_ID_MODEL(0x111d76d1, "92HD87B1/3", MODEL_STAC92HD83XXX), HDA_CODEC_ID_MODEL(0x111d76d9, "92HD87B2/4", MODEL_STAC92HD83XXX), HDA_CODEC_ID_MODEL(0x111d7666, "92HD88B3", MODEL_STAC92HD83XXX), HDA_CODEC_ID_MODEL(0x111d7667, "92HD88B1", MODEL_STAC92HD83XXX), HDA_CODEC_ID_MODEL(0x111d7668, "92HD88B2", MODEL_STAC92HD83XXX), HDA_CODEC_ID_MODEL(0x111d7669, "92HD88B4", MODEL_STAC92HD83XXX), HDA_CODEC_ID_MODEL(0x111d7608, "92HD75B2X5", MODEL_STAC92HD71BXX), HDA_CODEC_ID_MODEL(0x111d7674, "92HD73D1X5", MODEL_STAC92HD73XX), HDA_CODEC_ID_MODEL(0x111d7675, "92HD73C1X5", MODEL_STAC92HD73XX), HDA_CODEC_ID_MODEL(0x111d7676, "92HD73E1X5", MODEL_STAC92HD73XX), HDA_CODEC_ID_MODEL(0x111d7695, "92HD95", MODEL_STAC92HD95), HDA_CODEC_ID_MODEL(0x111d76b0, "92HD71B8X", MODEL_STAC92HD71BXX), HDA_CODEC_ID_MODEL(0x111d76b1, "92HD71B8X", MODEL_STAC92HD71BXX), HDA_CODEC_ID_MODEL(0x111d76b2, "92HD71B7X", MODEL_STAC92HD71BXX), HDA_CODEC_ID_MODEL(0x111d76b3, "92HD71B7X", MODEL_STAC92HD71BXX), HDA_CODEC_ID_MODEL(0x111d76b4, "92HD71B6X", MODEL_STAC92HD71BXX), HDA_CODEC_ID_MODEL(0x111d76b5, "92HD71B6X", MODEL_STAC92HD71BXX), HDA_CODEC_ID_MODEL(0x111d76b6, "92HD71B5X", MODEL_STAC92HD71BXX), HDA_CODEC_ID_MODEL(0x111d76b7, "92HD71B5X", MODEL_STAC92HD71BXX), HDA_CODEC_ID_MODEL(0x111d76c0, "92HD89C3", MODEL_STAC92HD73XX), HDA_CODEC_ID_MODEL(0x111d76c1, "92HD89C2", MODEL_STAC92HD73XX), HDA_CODEC_ID_MODEL(0x111d76c2, "92HD89C1", MODEL_STAC92HD73XX), HDA_CODEC_ID_MODEL(0x111d76c3, "92HD89B3", MODEL_STAC92HD73XX), HDA_CODEC_ID_MODEL(0x111d76c4, "92HD89B2", MODEL_STAC92HD73XX), HDA_CODEC_ID_MODEL(0x111d76c5, "92HD89B1", MODEL_STAC92HD73XX), HDA_CODEC_ID_MODEL(0x111d76c6, "92HD89E3", MODEL_STAC92HD73XX), HDA_CODEC_ID_MODEL(0x111d76c7, "92HD89E2", MODEL_STAC92HD73XX), HDA_CODEC_ID_MODEL(0x111d76c8, "92HD89E1", MODEL_STAC92HD73XX), HDA_CODEC_ID_MODEL(0x111d76c9, "92HD89D3", MODEL_STAC92HD73XX), HDA_CODEC_ID_MODEL(0x111d76ca, "92HD89D2", MODEL_STAC92HD73XX), HDA_CODEC_ID_MODEL(0x111d76cb, "92HD89D1", MODEL_STAC92HD73XX), HDA_CODEC_ID_MODEL(0x111d76cc, "92HD89F3", MODEL_STAC92HD73XX), HDA_CODEC_ID_MODEL(0x111d76cd, "92HD89F2", MODEL_STAC92HD73XX), HDA_CODEC_ID_MODEL(0x111d76ce, "92HD89F1", MODEL_STAC92HD73XX), HDA_CODEC_ID_MODEL(0x111d76df, "92HD93BXX", MODEL_STAC92HD83XXX), HDA_CODEC_ID_MODEL(0x111d76e0, "92HD91BXX", MODEL_STAC92HD83XXX), HDA_CODEC_ID_MODEL(0x111d76e3, "92HD98BXX", MODEL_STAC92HD83XXX), HDA_CODEC_ID_MODEL(0x111d76e5, "92HD99BXX", MODEL_STAC92HD83XXX), HDA_CODEC_ID_MODEL(0x111d76e7, "92HD90BXX", MODEL_STAC92HD83XXX), HDA_CODEC_ID_MODEL(0x111d76e8, "92HD66B1X5", MODEL_STAC92HD83XXX), HDA_CODEC_ID_MODEL(0x111d76e9, "92HD66B2X5", MODEL_STAC92HD83XXX), HDA_CODEC_ID_MODEL(0x111d76ea, "92HD66B3X5", MODEL_STAC92HD83XXX), HDA_CODEC_ID_MODEL(0x111d76eb, "92HD66C1X5", MODEL_STAC92HD83XXX), HDA_CODEC_ID_MODEL(0x111d76ec, "92HD66C2X5", MODEL_STAC92HD83XXX), HDA_CODEC_ID_MODEL(0x111d76ed, "92HD66C3X5", MODEL_STAC92HD83XXX), HDA_CODEC_ID_MODEL(0x111d76ee, "92HD66B1X3", MODEL_STAC92HD83XXX), HDA_CODEC_ID_MODEL(0x111d76ef, "92HD66B2X3", MODEL_STAC92HD83XXX), HDA_CODEC_ID_MODEL(0x111d76f0, "92HD66B3X3", MODEL_STAC92HD83XXX), HDA_CODEC_ID_MODEL(0x111d76f1, "92HD66C1X3", MODEL_STAC92HD83XXX), HDA_CODEC_ID_MODEL(0x111d76f2, "92HD66C2X3", MODEL_STAC92HD83XXX), HDA_CODEC_ID_MODEL(0x111d76f3, "92HD66C3/65", MODEL_STAC92HD83XXX), {} /* terminator */ }; MODULE_DEVICE_TABLE(hdaudio, snd_hda_id_sigmatel); Loading @@ -5156,6 +5163,7 @@ MODULE_DESCRIPTION("IDT/Sigmatel HD-audio codec"); static struct hda_codec_driver sigmatel_driver = { .id = snd_hda_id_sigmatel, .ops = &stac_codec_ops, }; module_hda_codec_driver(sigmatel_driver); Loading
sound/hda/codecs/sigmatel.c +203 −195 Original line number Diff line number Diff line Loading @@ -2,7 +2,7 @@ /* * Universal Interface for Intel High Definition Audio Codec * * HD audio interface patch for SigmaTel STAC92xx * HD audio codec driver for SigmaTel STAC92xx * * Copyright (c) 2005 Embedded Alley Solutions, Inc. * Matt Porter <mporter@embeddedalley.com> Loading Loading @@ -4391,8 +4391,6 @@ static int stac_init(struct hda_codec *codec) return 0; } #define stac_free snd_hda_gen_free #ifdef CONFIG_SND_PROC_FS static void stac92hd_proc_hook(struct snd_info_buffer *buffer, struct hda_codec *codec, hda_nid_t nid) Loading Loading @@ -4454,15 +4452,6 @@ static int stac_suspend(struct hda_codec *codec) return 0; } static const struct hda_codec_ops stac_patch_ops = { .build_controls = snd_hda_gen_build_controls, .build_pcms = snd_hda_gen_build_pcms, .init = stac_init, .free = stac_free, .unsol_event = snd_hda_jack_unsol_event, .suspend = stac_suspend, }; static int alloc_stac_spec(struct hda_codec *codec) { struct sigmatel_spec *spec; Loading @@ -4474,19 +4463,14 @@ static int alloc_stac_spec(struct hda_codec *codec) codec->spec = spec; codec->no_trigger_sense = 1; /* seems common with STAC/IDT codecs */ spec->gen.dac_min_mute = true; codec->patch_ops = stac_patch_ops; return 0; } static int patch_stac9200(struct hda_codec *codec) static int probe_stac9200(struct hda_codec *codec) { struct sigmatel_spec *spec; int err; err = alloc_stac_spec(codec); if (err < 0) return err; spec = codec->spec; spec->linear_tone_beep = 1; spec->gen.own_eapd_ctl = 1; Loading @@ -4500,25 +4484,19 @@ static int patch_stac9200(struct hda_codec *codec) snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_PRE_PROBE); err = stac_parse_auto_config(codec); if (err < 0) { stac_free(codec); if (err < 0) return err; } snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_PROBE); return 0; } static int patch_stac925x(struct hda_codec *codec) static int probe_stac925x(struct hda_codec *codec) { struct sigmatel_spec *spec; int err; err = alloc_stac_spec(codec); if (err < 0) return err; spec = codec->spec; spec->linear_tone_beep = 1; spec->gen.own_eapd_ctl = 1; Loading @@ -4530,26 +4508,20 @@ static int patch_stac925x(struct hda_codec *codec) snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_PRE_PROBE); err = stac_parse_auto_config(codec); if (err < 0) { stac_free(codec); if (err < 0) return err; } snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_PROBE); return 0; } static int patch_stac92hd73xx(struct hda_codec *codec) static int probe_stac92hd73xx(struct hda_codec *codec) { struct sigmatel_spec *spec; int err; int num_dacs; err = alloc_stac_spec(codec); if (err < 0) return err; spec = codec->spec; /* enable power_save_node only for new 92HD89xx chips, as it causes * click noises on old 92HD73xx chips. Loading Loading @@ -4604,10 +4576,8 @@ static int patch_stac92hd73xx(struct hda_codec *codec) snd_hda_add_verbs(codec, stac92hd73xx_core_init); err = stac_parse_auto_config(codec); if (err < 0) { stac_free(codec); if (err < 0) return err; } /* Don't GPIO-mute speakers if there are no internal speakers, because * the GPIO might be necessary for Headphone Loading Loading @@ -4646,15 +4616,11 @@ static void stac_setup_gpio(struct hda_codec *codec) } } static int patch_stac92hd83xxx(struct hda_codec *codec) static int probe_stac92hd83xxx(struct hda_codec *codec) { struct sigmatel_spec *spec; int err; err = alloc_stac_spec(codec); if (err < 0) return err; /* longer delay needed for D3 */ codec->core.power_caps &= ~AC_PWRST_EPSS; Loading @@ -4679,10 +4645,8 @@ static int patch_stac92hd83xxx(struct hda_codec *codec) stac_setup_gpio(codec); err = stac_parse_auto_config(codec); if (err < 0) { stac_free(codec); if (err < 0) return err; } codec->proc_widget_hook = stac92hd_proc_hook; Loading @@ -4695,15 +4659,11 @@ static const hda_nid_t stac92hd95_pwr_nids[] = { 0x0a, 0x0b, 0x0c, 0x0d }; static int patch_stac92hd95(struct hda_codec *codec) static int probe_stac92hd95(struct hda_codec *codec) { struct sigmatel_spec *spec; int err; err = alloc_stac_spec(codec); if (err < 0) return err; /* longer delay needed for D3 */ codec->core.power_caps &= ~AC_PWRST_EPSS; Loading @@ -4725,10 +4685,8 @@ static int patch_stac92hd95(struct hda_codec *codec) stac_setup_gpio(codec); err = stac_parse_auto_config(codec); if (err < 0) { stac_free(codec); if (err < 0) return err; } codec->proc_widget_hook = stac92hd_proc_hook; Loading @@ -4737,16 +4695,12 @@ static int patch_stac92hd95(struct hda_codec *codec) return 0; } static int patch_stac92hd71bxx(struct hda_codec *codec) static int probe_stac92hd71bxx(struct hda_codec *codec) { struct sigmatel_spec *spec; const hda_nid_t *unmute_nids = stac92hd71bxx_unmute_nids; int err; err = alloc_stac_spec(codec); if (err < 0) return err; spec = codec->spec; /* disabled power_save_node since it causes noises on a Dell machine */ /* codec->power_save_node = 1; */ Loading Loading @@ -4809,10 +4763,8 @@ static int patch_stac92hd71bxx(struct hda_codec *codec) stac_setup_gpio(codec); err = stac_parse_auto_config(codec); if (err < 0) { stac_free(codec); if (err < 0) return err; } codec->proc_widget_hook = stac92hd7x_proc_hook; Loading @@ -4821,15 +4773,11 @@ static int patch_stac92hd71bxx(struct hda_codec *codec) return 0; } static int patch_stac922x(struct hda_codec *codec) static int probe_stac922x(struct hda_codec *codec) { struct sigmatel_spec *spec; int err; err = alloc_stac_spec(codec); if (err < 0) return err; spec = codec->spec; spec->linear_tone_beep = 1; spec->gen.own_eapd_ctl = 1; Loading @@ -4848,10 +4796,8 @@ static int patch_stac922x(struct hda_codec *codec) snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_PRE_PROBE); err = stac_parse_auto_config(codec); if (err < 0) { stac_free(codec); if (err < 0) return err; } snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_PROBE); Loading @@ -4863,15 +4809,11 @@ static const char * const stac927x_spdif_labels[] = { "Analog Mux 2", "Analog Mux 3", NULL }; static int patch_stac927x(struct hda_codec *codec) static int probe_stac927x(struct hda_codec *codec) { struct sigmatel_spec *spec; int err; err = alloc_stac_spec(codec); if (err < 0) return err; spec = codec->spec; spec->linear_tone_beep = 1; spec->gen.own_eapd_ctl = 1; Loading @@ -4897,10 +4839,8 @@ static int patch_stac927x(struct hda_codec *codec) snd_hda_add_verbs(codec, stac927x_core_init); err = stac_parse_auto_config(codec); if (err < 0) { stac_free(codec); if (err < 0) return err; } codec->proc_widget_hook = stac927x_proc_hook; Loading @@ -4921,15 +4861,11 @@ static int patch_stac927x(struct hda_codec *codec) return 0; } static int patch_stac9205(struct hda_codec *codec) static int probe_stac9205(struct hda_codec *codec) { struct sigmatel_spec *spec; int err; err = alloc_stac_spec(codec); if (err < 0) return err; spec = codec->spec; spec->linear_tone_beep = 1; spec->gen.own_eapd_ctl = 1; Loading @@ -4955,10 +4891,8 @@ static int patch_stac9205(struct hda_codec *codec) snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_PRE_PROBE); err = stac_parse_auto_config(codec); if (err < 0) { stac_free(codec); if (err < 0) return err; } codec->proc_widget_hook = stac9205_proc_hook; Loading Loading @@ -5008,15 +4942,11 @@ static const struct hda_quirk stac9872_fixup_tbl[] = { {} /* terminator */ }; static int patch_stac9872(struct hda_codec *codec) static int probe_stac9872(struct hda_codec *codec) { struct sigmatel_spec *spec; int err; err = alloc_stac_spec(codec); if (err < 0) return err; spec = codec->spec; spec->linear_tone_beep = 1; spec->gen.own_eapd_ctl = 1; Loading @@ -5028,125 +4958,202 @@ static int patch_stac9872(struct hda_codec *codec) snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_PRE_PROBE); err = stac_parse_auto_config(codec); if (err < 0) { stac_free(codec); return -EINVAL; } if (err < 0) return err; snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_PROBE); return 0; } /* * common driver probe */ enum { MODEL_STAC9200, MODEL_STAC9205, MODEL_STAC922X, MODEL_STAC925X, MODEL_STAC927X, MODEL_STAC9872, MODEL_STAC92HD71BXX, MODEL_STAC92HD73XX, MODEL_STAC92HD83XXX, MODEL_STAC92HD95, }; static int stac_probe(struct hda_codec *codec, const struct hda_device_id *id) { int err; err = alloc_stac_spec(codec); if (err < 0) return err; switch (id->driver_data) { case MODEL_STAC9200: err = probe_stac9200(codec); break; case MODEL_STAC9205: err = probe_stac9205(codec); break; case MODEL_STAC922X: err = probe_stac922x(codec); break; case MODEL_STAC925X: err = probe_stac925x(codec); break; case MODEL_STAC927X: err = probe_stac927x(codec); break; case MODEL_STAC9872: err = probe_stac9872(codec); break; case MODEL_STAC92HD71BXX: err = probe_stac92hd71bxx(codec); break; case MODEL_STAC92HD73XX: err = probe_stac92hd73xx(codec); break; case MODEL_STAC92HD83XXX: err = probe_stac92hd83xxx(codec); break; case MODEL_STAC92HD95: err = probe_stac92hd95(codec); break; default: err = -EINVAL; break; } if (err < 0) { snd_hda_gen_remove(codec); return err; } return 0; } static const struct hda_codec_ops stac_codec_ops = { .probe = stac_probe, .remove = snd_hda_gen_remove, .build_controls = snd_hda_gen_build_controls, .build_pcms = snd_hda_gen_build_pcms, .init = stac_init, .unsol_event = snd_hda_jack_unsol_event, .suspend = stac_suspend, .stream_pm = snd_hda_gen_stream_pm, }; /* * patch entries * driver entries */ static const struct hda_device_id snd_hda_id_sigmatel[] = { HDA_CODEC_ENTRY(0x83847690, "STAC9200", patch_stac9200), HDA_CODEC_ENTRY(0x83847882, "STAC9220 A1", patch_stac922x), HDA_CODEC_ENTRY(0x83847680, "STAC9221 A1", patch_stac922x), HDA_CODEC_ENTRY(0x83847880, "STAC9220 A2", patch_stac922x), HDA_CODEC_ENTRY(0x83847681, "STAC9220D/9223D A2", patch_stac922x), HDA_CODEC_ENTRY(0x83847682, "STAC9221 A2", patch_stac922x), HDA_CODEC_ENTRY(0x83847683, "STAC9221D A2", patch_stac922x), HDA_CODEC_ENTRY(0x83847618, "STAC9227", patch_stac927x), HDA_CODEC_ENTRY(0x83847619, "STAC9227", patch_stac927x), HDA_CODEC_ENTRY(0x83847638, "STAC92HD700", patch_stac927x), HDA_CODEC_ENTRY(0x83847616, "STAC9228", patch_stac927x), HDA_CODEC_ENTRY(0x83847617, "STAC9228", patch_stac927x), HDA_CODEC_ENTRY(0x83847614, "STAC9229", patch_stac927x), HDA_CODEC_ENTRY(0x83847615, "STAC9229", patch_stac927x), HDA_CODEC_ENTRY(0x83847620, "STAC9274", patch_stac927x), HDA_CODEC_ENTRY(0x83847621, "STAC9274D", patch_stac927x), HDA_CODEC_ENTRY(0x83847622, "STAC9273X", patch_stac927x), HDA_CODEC_ENTRY(0x83847623, "STAC9273D", patch_stac927x), HDA_CODEC_ENTRY(0x83847624, "STAC9272X", patch_stac927x), HDA_CODEC_ENTRY(0x83847625, "STAC9272D", patch_stac927x), HDA_CODEC_ENTRY(0x83847626, "STAC9271X", patch_stac927x), HDA_CODEC_ENTRY(0x83847627, "STAC9271D", patch_stac927x), HDA_CODEC_ENTRY(0x83847628, "STAC9274X5NH", patch_stac927x), HDA_CODEC_ENTRY(0x83847629, "STAC9274D5NH", patch_stac927x), HDA_CODEC_ENTRY(0x83847632, "STAC9202", patch_stac925x), HDA_CODEC_ENTRY(0x83847633, "STAC9202D", patch_stac925x), HDA_CODEC_ENTRY(0x83847634, "STAC9250", patch_stac925x), HDA_CODEC_ENTRY(0x83847635, "STAC9250D", patch_stac925x), HDA_CODEC_ENTRY(0x83847636, "STAC9251", patch_stac925x), HDA_CODEC_ENTRY(0x83847637, "STAC9250D", patch_stac925x), HDA_CODEC_ENTRY(0x83847645, "92HD206X", patch_stac927x), HDA_CODEC_ENTRY(0x83847646, "92HD206D", patch_stac927x), HDA_CODEC_ID_MODEL(0x83847690, "STAC9200", MODEL_STAC9200), HDA_CODEC_ID_MODEL(0x83847882, "STAC9220 A1", MODEL_STAC922X), HDA_CODEC_ID_MODEL(0x83847680, "STAC9221 A1", MODEL_STAC922X), HDA_CODEC_ID_MODEL(0x83847880, "STAC9220 A2", MODEL_STAC922X), HDA_CODEC_ID_MODEL(0x83847681, "STAC9220D/9223D A2", MODEL_STAC922X), HDA_CODEC_ID_MODEL(0x83847682, "STAC9221 A2", MODEL_STAC922X), HDA_CODEC_ID_MODEL(0x83847683, "STAC9221D A2", MODEL_STAC922X), HDA_CODEC_ID_MODEL(0x83847618, "STAC9227", MODEL_STAC927X), HDA_CODEC_ID_MODEL(0x83847619, "STAC9227", MODEL_STAC927X), HDA_CODEC_ID_MODEL(0x83847638, "STAC92HD700", MODEL_STAC927X), HDA_CODEC_ID_MODEL(0x83847616, "STAC9228", MODEL_STAC927X), HDA_CODEC_ID_MODEL(0x83847617, "STAC9228", MODEL_STAC927X), HDA_CODEC_ID_MODEL(0x83847614, "STAC9229", MODEL_STAC927X), HDA_CODEC_ID_MODEL(0x83847615, "STAC9229", MODEL_STAC927X), HDA_CODEC_ID_MODEL(0x83847620, "STAC9274", MODEL_STAC927X), HDA_CODEC_ID_MODEL(0x83847621, "STAC9274D", MODEL_STAC927X), HDA_CODEC_ID_MODEL(0x83847622, "STAC9273X", MODEL_STAC927X), HDA_CODEC_ID_MODEL(0x83847623, "STAC9273D", MODEL_STAC927X), HDA_CODEC_ID_MODEL(0x83847624, "STAC9272X", MODEL_STAC927X), HDA_CODEC_ID_MODEL(0x83847625, "STAC9272D", MODEL_STAC927X), HDA_CODEC_ID_MODEL(0x83847626, "STAC9271X", MODEL_STAC927X), HDA_CODEC_ID_MODEL(0x83847627, "STAC9271D", MODEL_STAC927X), HDA_CODEC_ID_MODEL(0x83847628, "STAC9274X5NH", MODEL_STAC927X), HDA_CODEC_ID_MODEL(0x83847629, "STAC9274D5NH", MODEL_STAC927X), HDA_CODEC_ID_MODEL(0x83847632, "STAC9202", MODEL_STAC925X), HDA_CODEC_ID_MODEL(0x83847633, "STAC9202D", MODEL_STAC925X), HDA_CODEC_ID_MODEL(0x83847634, "STAC9250", MODEL_STAC925X), HDA_CODEC_ID_MODEL(0x83847635, "STAC9250D", MODEL_STAC925X), HDA_CODEC_ID_MODEL(0x83847636, "STAC9251", MODEL_STAC925X), HDA_CODEC_ID_MODEL(0x83847637, "STAC9250D", MODEL_STAC925X), HDA_CODEC_ID_MODEL(0x83847645, "92HD206X", MODEL_STAC927X), HDA_CODEC_ID_MODEL(0x83847646, "92HD206D", MODEL_STAC927X), /* The following does not take into account .id=0x83847661 when subsys = * 104D0C00 which is STAC9225s. Because of this, some SZ Notebooks are * currently not fully supported. */ HDA_CODEC_ENTRY(0x83847661, "CXD9872RD/K", patch_stac9872), HDA_CODEC_ENTRY(0x83847662, "STAC9872AK", patch_stac9872), HDA_CODEC_ENTRY(0x83847664, "CXD9872AKD", patch_stac9872), HDA_CODEC_ENTRY(0x83847698, "STAC9205", patch_stac9205), HDA_CODEC_ENTRY(0x838476a0, "STAC9205", patch_stac9205), HDA_CODEC_ENTRY(0x838476a1, "STAC9205D", patch_stac9205), HDA_CODEC_ENTRY(0x838476a2, "STAC9204", patch_stac9205), HDA_CODEC_ENTRY(0x838476a3, "STAC9204D", patch_stac9205), HDA_CODEC_ENTRY(0x838476a4, "STAC9255", patch_stac9205), HDA_CODEC_ENTRY(0x838476a5, "STAC9255D", patch_stac9205), HDA_CODEC_ENTRY(0x838476a6, "STAC9254", patch_stac9205), HDA_CODEC_ENTRY(0x838476a7, "STAC9254D", patch_stac9205), HDA_CODEC_ENTRY(0x111d7603, "92HD75B3X5", patch_stac92hd71bxx), HDA_CODEC_ENTRY(0x111d7604, "92HD83C1X5", patch_stac92hd83xxx), HDA_CODEC_ENTRY(0x111d76d4, "92HD83C1C5", patch_stac92hd83xxx), HDA_CODEC_ENTRY(0x111d7605, "92HD81B1X5", patch_stac92hd83xxx), HDA_CODEC_ENTRY(0x111d76d5, "92HD81B1C5", patch_stac92hd83xxx), HDA_CODEC_ENTRY(0x111d76d1, "92HD87B1/3", patch_stac92hd83xxx), HDA_CODEC_ENTRY(0x111d76d9, "92HD87B2/4", patch_stac92hd83xxx), HDA_CODEC_ENTRY(0x111d7666, "92HD88B3", patch_stac92hd83xxx), HDA_CODEC_ENTRY(0x111d7667, "92HD88B1", patch_stac92hd83xxx), HDA_CODEC_ENTRY(0x111d7668, "92HD88B2", patch_stac92hd83xxx), HDA_CODEC_ENTRY(0x111d7669, "92HD88B4", patch_stac92hd83xxx), HDA_CODEC_ENTRY(0x111d7608, "92HD75B2X5", patch_stac92hd71bxx), HDA_CODEC_ENTRY(0x111d7674, "92HD73D1X5", patch_stac92hd73xx), HDA_CODEC_ENTRY(0x111d7675, "92HD73C1X5", patch_stac92hd73xx), HDA_CODEC_ENTRY(0x111d7676, "92HD73E1X5", patch_stac92hd73xx), HDA_CODEC_ENTRY(0x111d7695, "92HD95", patch_stac92hd95), HDA_CODEC_ENTRY(0x111d76b0, "92HD71B8X", patch_stac92hd71bxx), HDA_CODEC_ENTRY(0x111d76b1, "92HD71B8X", patch_stac92hd71bxx), HDA_CODEC_ENTRY(0x111d76b2, "92HD71B7X", patch_stac92hd71bxx), HDA_CODEC_ENTRY(0x111d76b3, "92HD71B7X", patch_stac92hd71bxx), HDA_CODEC_ENTRY(0x111d76b4, "92HD71B6X", patch_stac92hd71bxx), HDA_CODEC_ENTRY(0x111d76b5, "92HD71B6X", patch_stac92hd71bxx), HDA_CODEC_ENTRY(0x111d76b6, "92HD71B5X", patch_stac92hd71bxx), HDA_CODEC_ENTRY(0x111d76b7, "92HD71B5X", patch_stac92hd71bxx), HDA_CODEC_ENTRY(0x111d76c0, "92HD89C3", patch_stac92hd73xx), HDA_CODEC_ENTRY(0x111d76c1, "92HD89C2", patch_stac92hd73xx), HDA_CODEC_ENTRY(0x111d76c2, "92HD89C1", patch_stac92hd73xx), HDA_CODEC_ENTRY(0x111d76c3, "92HD89B3", patch_stac92hd73xx), HDA_CODEC_ENTRY(0x111d76c4, "92HD89B2", patch_stac92hd73xx), HDA_CODEC_ENTRY(0x111d76c5, "92HD89B1", patch_stac92hd73xx), HDA_CODEC_ENTRY(0x111d76c6, "92HD89E3", patch_stac92hd73xx), HDA_CODEC_ENTRY(0x111d76c7, "92HD89E2", patch_stac92hd73xx), HDA_CODEC_ENTRY(0x111d76c8, "92HD89E1", patch_stac92hd73xx), HDA_CODEC_ENTRY(0x111d76c9, "92HD89D3", patch_stac92hd73xx), HDA_CODEC_ENTRY(0x111d76ca, "92HD89D2", patch_stac92hd73xx), HDA_CODEC_ENTRY(0x111d76cb, "92HD89D1", patch_stac92hd73xx), HDA_CODEC_ENTRY(0x111d76cc, "92HD89F3", patch_stac92hd73xx), HDA_CODEC_ENTRY(0x111d76cd, "92HD89F2", patch_stac92hd73xx), HDA_CODEC_ENTRY(0x111d76ce, "92HD89F1", patch_stac92hd73xx), HDA_CODEC_ENTRY(0x111d76df, "92HD93BXX", patch_stac92hd83xxx), HDA_CODEC_ENTRY(0x111d76e0, "92HD91BXX", patch_stac92hd83xxx), HDA_CODEC_ENTRY(0x111d76e3, "92HD98BXX", patch_stac92hd83xxx), HDA_CODEC_ENTRY(0x111d76e5, "92HD99BXX", patch_stac92hd83xxx), HDA_CODEC_ENTRY(0x111d76e7, "92HD90BXX", patch_stac92hd83xxx), HDA_CODEC_ENTRY(0x111d76e8, "92HD66B1X5", patch_stac92hd83xxx), HDA_CODEC_ENTRY(0x111d76e9, "92HD66B2X5", patch_stac92hd83xxx), HDA_CODEC_ENTRY(0x111d76ea, "92HD66B3X5", patch_stac92hd83xxx), HDA_CODEC_ENTRY(0x111d76eb, "92HD66C1X5", patch_stac92hd83xxx), HDA_CODEC_ENTRY(0x111d76ec, "92HD66C2X5", patch_stac92hd83xxx), HDA_CODEC_ENTRY(0x111d76ed, "92HD66C3X5", patch_stac92hd83xxx), HDA_CODEC_ENTRY(0x111d76ee, "92HD66B1X3", patch_stac92hd83xxx), HDA_CODEC_ENTRY(0x111d76ef, "92HD66B2X3", patch_stac92hd83xxx), HDA_CODEC_ENTRY(0x111d76f0, "92HD66B3X3", patch_stac92hd83xxx), HDA_CODEC_ENTRY(0x111d76f1, "92HD66C1X3", patch_stac92hd83xxx), HDA_CODEC_ENTRY(0x111d76f2, "92HD66C2X3", patch_stac92hd83xxx), HDA_CODEC_ENTRY(0x111d76f3, "92HD66C3/65", patch_stac92hd83xxx), HDA_CODEC_ID_MODEL(0x83847661, "CXD9872RD/K", MODEL_STAC9872), HDA_CODEC_ID_MODEL(0x83847662, "STAC9872AK", MODEL_STAC9872), HDA_CODEC_ID_MODEL(0x83847664, "CXD9872AKD", MODEL_STAC9872), HDA_CODEC_ID_MODEL(0x83847698, "STAC9205", MODEL_STAC9205), HDA_CODEC_ID_MODEL(0x838476a0, "STAC9205", MODEL_STAC9205), HDA_CODEC_ID_MODEL(0x838476a1, "STAC9205D", MODEL_STAC9205), HDA_CODEC_ID_MODEL(0x838476a2, "STAC9204", MODEL_STAC9205), HDA_CODEC_ID_MODEL(0x838476a3, "STAC9204D", MODEL_STAC9205), HDA_CODEC_ID_MODEL(0x838476a4, "STAC9255", MODEL_STAC9205), HDA_CODEC_ID_MODEL(0x838476a5, "STAC9255D", MODEL_STAC9205), HDA_CODEC_ID_MODEL(0x838476a6, "STAC9254", MODEL_STAC9205), HDA_CODEC_ID_MODEL(0x838476a7, "STAC9254D", MODEL_STAC9205), HDA_CODEC_ID_MODEL(0x111d7603, "92HD75B3X5", MODEL_STAC92HD71BXX), HDA_CODEC_ID_MODEL(0x111d7604, "92HD83C1X5", MODEL_STAC92HD83XXX), HDA_CODEC_ID_MODEL(0x111d76d4, "92HD83C1C5", MODEL_STAC92HD83XXX), HDA_CODEC_ID_MODEL(0x111d7605, "92HD81B1X5", MODEL_STAC92HD83XXX), HDA_CODEC_ID_MODEL(0x111d76d5, "92HD81B1C5", MODEL_STAC92HD83XXX), HDA_CODEC_ID_MODEL(0x111d76d1, "92HD87B1/3", MODEL_STAC92HD83XXX), HDA_CODEC_ID_MODEL(0x111d76d9, "92HD87B2/4", MODEL_STAC92HD83XXX), HDA_CODEC_ID_MODEL(0x111d7666, "92HD88B3", MODEL_STAC92HD83XXX), HDA_CODEC_ID_MODEL(0x111d7667, "92HD88B1", MODEL_STAC92HD83XXX), HDA_CODEC_ID_MODEL(0x111d7668, "92HD88B2", MODEL_STAC92HD83XXX), HDA_CODEC_ID_MODEL(0x111d7669, "92HD88B4", MODEL_STAC92HD83XXX), HDA_CODEC_ID_MODEL(0x111d7608, "92HD75B2X5", MODEL_STAC92HD71BXX), HDA_CODEC_ID_MODEL(0x111d7674, "92HD73D1X5", MODEL_STAC92HD73XX), HDA_CODEC_ID_MODEL(0x111d7675, "92HD73C1X5", MODEL_STAC92HD73XX), HDA_CODEC_ID_MODEL(0x111d7676, "92HD73E1X5", MODEL_STAC92HD73XX), HDA_CODEC_ID_MODEL(0x111d7695, "92HD95", MODEL_STAC92HD95), HDA_CODEC_ID_MODEL(0x111d76b0, "92HD71B8X", MODEL_STAC92HD71BXX), HDA_CODEC_ID_MODEL(0x111d76b1, "92HD71B8X", MODEL_STAC92HD71BXX), HDA_CODEC_ID_MODEL(0x111d76b2, "92HD71B7X", MODEL_STAC92HD71BXX), HDA_CODEC_ID_MODEL(0x111d76b3, "92HD71B7X", MODEL_STAC92HD71BXX), HDA_CODEC_ID_MODEL(0x111d76b4, "92HD71B6X", MODEL_STAC92HD71BXX), HDA_CODEC_ID_MODEL(0x111d76b5, "92HD71B6X", MODEL_STAC92HD71BXX), HDA_CODEC_ID_MODEL(0x111d76b6, "92HD71B5X", MODEL_STAC92HD71BXX), HDA_CODEC_ID_MODEL(0x111d76b7, "92HD71B5X", MODEL_STAC92HD71BXX), HDA_CODEC_ID_MODEL(0x111d76c0, "92HD89C3", MODEL_STAC92HD73XX), HDA_CODEC_ID_MODEL(0x111d76c1, "92HD89C2", MODEL_STAC92HD73XX), HDA_CODEC_ID_MODEL(0x111d76c2, "92HD89C1", MODEL_STAC92HD73XX), HDA_CODEC_ID_MODEL(0x111d76c3, "92HD89B3", MODEL_STAC92HD73XX), HDA_CODEC_ID_MODEL(0x111d76c4, "92HD89B2", MODEL_STAC92HD73XX), HDA_CODEC_ID_MODEL(0x111d76c5, "92HD89B1", MODEL_STAC92HD73XX), HDA_CODEC_ID_MODEL(0x111d76c6, "92HD89E3", MODEL_STAC92HD73XX), HDA_CODEC_ID_MODEL(0x111d76c7, "92HD89E2", MODEL_STAC92HD73XX), HDA_CODEC_ID_MODEL(0x111d76c8, "92HD89E1", MODEL_STAC92HD73XX), HDA_CODEC_ID_MODEL(0x111d76c9, "92HD89D3", MODEL_STAC92HD73XX), HDA_CODEC_ID_MODEL(0x111d76ca, "92HD89D2", MODEL_STAC92HD73XX), HDA_CODEC_ID_MODEL(0x111d76cb, "92HD89D1", MODEL_STAC92HD73XX), HDA_CODEC_ID_MODEL(0x111d76cc, "92HD89F3", MODEL_STAC92HD73XX), HDA_CODEC_ID_MODEL(0x111d76cd, "92HD89F2", MODEL_STAC92HD73XX), HDA_CODEC_ID_MODEL(0x111d76ce, "92HD89F1", MODEL_STAC92HD73XX), HDA_CODEC_ID_MODEL(0x111d76df, "92HD93BXX", MODEL_STAC92HD83XXX), HDA_CODEC_ID_MODEL(0x111d76e0, "92HD91BXX", MODEL_STAC92HD83XXX), HDA_CODEC_ID_MODEL(0x111d76e3, "92HD98BXX", MODEL_STAC92HD83XXX), HDA_CODEC_ID_MODEL(0x111d76e5, "92HD99BXX", MODEL_STAC92HD83XXX), HDA_CODEC_ID_MODEL(0x111d76e7, "92HD90BXX", MODEL_STAC92HD83XXX), HDA_CODEC_ID_MODEL(0x111d76e8, "92HD66B1X5", MODEL_STAC92HD83XXX), HDA_CODEC_ID_MODEL(0x111d76e9, "92HD66B2X5", MODEL_STAC92HD83XXX), HDA_CODEC_ID_MODEL(0x111d76ea, "92HD66B3X5", MODEL_STAC92HD83XXX), HDA_CODEC_ID_MODEL(0x111d76eb, "92HD66C1X5", MODEL_STAC92HD83XXX), HDA_CODEC_ID_MODEL(0x111d76ec, "92HD66C2X5", MODEL_STAC92HD83XXX), HDA_CODEC_ID_MODEL(0x111d76ed, "92HD66C3X5", MODEL_STAC92HD83XXX), HDA_CODEC_ID_MODEL(0x111d76ee, "92HD66B1X3", MODEL_STAC92HD83XXX), HDA_CODEC_ID_MODEL(0x111d76ef, "92HD66B2X3", MODEL_STAC92HD83XXX), HDA_CODEC_ID_MODEL(0x111d76f0, "92HD66B3X3", MODEL_STAC92HD83XXX), HDA_CODEC_ID_MODEL(0x111d76f1, "92HD66C1X3", MODEL_STAC92HD83XXX), HDA_CODEC_ID_MODEL(0x111d76f2, "92HD66C2X3", MODEL_STAC92HD83XXX), HDA_CODEC_ID_MODEL(0x111d76f3, "92HD66C3/65", MODEL_STAC92HD83XXX), {} /* terminator */ }; MODULE_DEVICE_TABLE(hdaudio, snd_hda_id_sigmatel); Loading @@ -5156,6 +5163,7 @@ MODULE_DESCRIPTION("IDT/Sigmatel HD-audio codec"); static struct hda_codec_driver sigmatel_driver = { .id = snd_hda_id_sigmatel, .ops = &stac_codec_ops, }; module_hda_codec_driver(sigmatel_driver);