All pastes #1472677 Raw Edit

Unbenannt

public diff v1 · immutable
#1472677 ·published 2009-06-24 15:13 UTC
rendered paste body
*************** struct ad198x_spec {*** 72,77 ****         hda_nid_t private_dac_nids[AUTO_CFG_MAX_OUTS];           unsigned int jack_present :1;    #ifdef CONFIG_SND_HDA_POWER_SAVE         struct hda_loopback_check loopback;--- 72,78 ----         hda_nid_t private_dac_nids[AUTO_CFG_MAX_OUTS];           unsigned int jack_present :1;+        unsigned int inv_jack_detect:1;    #ifdef CONFIG_SND_HDA_POWER_SAVE         struct hda_loopback_check loopback;*************** static struct hda_input_mux ad1986a_automic_capture_source = {*** 669,707 ****         },  };  - static struct snd_kcontrol_new ad1986a_laptop_eapd_mixers[] = {         HDA_BIND_VOL("Master Playback Volume", &ad1986a_laptop_master_vol),         HDA_BIND_SW("Master Playback Switch", &ad1986a_laptop_master_sw),-        HDA_CODEC_VOLUME("PCM Playback Volume", 0x03, 0x0, HDA_OUTPUT),-        HDA_CODEC_MUTE("PCM Playback Switch", 0x03, 0x0, HDA_OUTPUT),-        HDA_CODEC_VOLUME("Internal Mic Playback Volume", 0x17, 0, HDA_OUTPUT),-        HDA_CODEC_MUTE("Internal Mic Playback Switch", 0x17, 0, HDA_OUTPUT),-        HDA_CODEC_VOLUME("Mic Playback Volume", 0x13, 0x0, HDA_OUTPUT),-        HDA_CODEC_MUTE("Mic Playback Switch", 0x13, 0x0, HDA_OUTPUT),-        HDA_CODEC_VOLUME("Mic Boost", 0x0f, 0x0, HDA_OUTPUT),-        HDA_CODEC_VOLUME("Capture Volume", 0x12, 0x0, HDA_OUTPUT),-        HDA_CODEC_MUTE("Capture Switch", 0x12, 0x0, HDA_OUTPUT),-        {-                .iface = SNDRV_CTL_ELEM_IFACE_MIXER,-                .name = "Capture Source",-                .info = ad198x_mux_enum_info,-                .get = ad198x_mux_enum_get,-                .put = ad198x_mux_enum_put,-        },-        {-                .iface = SNDRV_CTL_ELEM_IFACE_MIXER,-                .name = "External Amplifier",-                .info = ad198x_eapd_info,-                .get = ad198x_eapd_get,-                .put = ad198x_eapd_put,-                .private_value = 0x1b | (1 << 8), /* port-D, inversed */-        },         { } /* end */  };  - static struct snd_kcontrol_new ad1986a_samsung_mixers[] = {-        HDA_BIND_VOL("Master Playback Volume", &ad1986a_laptop_master_vol),-        HDA_BIND_SW("Master Playback Switch", &ad1986a_laptop_master_sw),         HDA_CODEC_VOLUME("PCM Playback Volume", 0x03, 0x0, HDA_OUTPUT),         HDA_CODEC_MUTE("PCM Playback Switch", 0x03, 0x0, HDA_OUTPUT),         HDA_CODEC_VOLUME("Mic Playback Volume", 0x13, 0x0, HDA_OUTPUT),--- 670,682 ----         },  };  + static struct snd_kcontrol_new ad1986a_laptop_master_mixers[] = {         HDA_BIND_VOL("Master Playback Volume", &ad1986a_laptop_master_vol),         HDA_BIND_SW("Master Playback Switch", &ad1986a_laptop_master_sw),         { } /* end */  };  + static struct snd_kcontrol_new ad1986a_laptop_eapd_mixers[] = {         HDA_CODEC_VOLUME("PCM Playback Volume", 0x03, 0x0, HDA_OUTPUT),         HDA_CODEC_MUTE("PCM Playback Switch", 0x03, 0x0, HDA_OUTPUT),         HDA_CODEC_VOLUME("Mic Playback Volume", 0x13, 0x0, HDA_OUTPUT),*************** static void ad1986a_hp_automute(struct hda_codec *codec)*** 776,783 ****         unsigned int present;           present = snd_hda_codec_read(codec, 0x1a, 0, AC_VERB_GET_PIN_SENSE, 0);-        /* Lenovo N100 seems to report the reversed bit for HP jack-sensing */-        spec->jack_present = !(present & 0x80000000);         ad1986a_update_hp(codec);  }  --- 757,765 ----         unsigned int present;           present = snd_hda_codec_read(codec, 0x1a, 0, AC_VERB_GET_PIN_SENSE, 0);+        spec->jack_present = !!(present & 0x80000000);+        if (spec->inv_jack_detect)+                spec->jack_present = !spec->jack_present;         ad1986a_update_hp(codec);  }  *************** static int ad1986a_hp_master_sw_put(struct snd_kcontrol *kcontrol,*** 816,822 ****         return change;  }  - static struct snd_kcontrol_new ad1986a_laptop_automute_mixers[] = {         HDA_BIND_VOL("Master Playback Volume", &ad1986a_laptop_master_vol),         {                 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,--- 798,804 ----         return change;  }  + static struct snd_kcontrol_new ad1986a_automute_master_mixers[] = {         HDA_BIND_VOL("Master Playback Volume", &ad1986a_laptop_master_vol),         {                 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,*************** static struct snd_kcontrol_new ad1986a_laptop_automute_mixers[] = {*** 826,858 ****                 .put = ad1986a_hp_master_sw_put,                 .private_value = HDA_COMPOSE_AMP_VAL(0x1a, 3, 0, HDA_OUTPUT),         },-        HDA_CODEC_VOLUME("PCM Playback Volume", 0x03, 0x0, HDA_OUTPUT),-        HDA_CODEC_MUTE("PCM Playback Switch", 0x03, 0x0, HDA_OUTPUT),-        HDA_CODEC_VOLUME("Internal Mic Playback Volume", 0x17, 0x0, HDA_OUTPUT),-        HDA_CODEC_MUTE("Internal Mic Playback Switch", 0x17, 0x0, HDA_OUTPUT),-        HDA_CODEC_VOLUME("Mic Playback Volume", 0x13, 0x0, HDA_OUTPUT),-        HDA_CODEC_MUTE("Mic Playback Switch", 0x13, 0x0, HDA_OUTPUT),-        HDA_CODEC_VOLUME("Mic Boost", 0x0f, 0x0, HDA_OUTPUT),-        HDA_CODEC_VOLUME("Capture Volume", 0x12, 0x0, HDA_OUTPUT),-        HDA_CODEC_MUTE("Capture Switch", 0x12, 0x0, HDA_OUTPUT),-        {-                .iface = SNDRV_CTL_ELEM_IFACE_MIXER,-                .name = "Capture Source",-                .info = ad198x_mux_enum_info,-                .get = ad198x_mux_enum_get,-                .put = ad198x_mux_enum_put,-        },-        {-                .iface = SNDRV_CTL_ELEM_IFACE_MIXER,-                .name = "External Amplifier",-                .info = ad198x_eapd_info,-                .get = ad198x_eapd_get,-                .put = ad198x_eapd_put,-                .private_value = 0x1b | (1 << 8), /* port-D, inversed */-        },         { } /* end */  };    /*   * initialization verbs   */--- 808,817 ----                 .put = ad1986a_hp_master_sw_put,                 .private_value = HDA_COMPOSE_AMP_VAL(0x1a, 3, 0, HDA_OUTPUT),         },         { } /* end */  };  +   /*   * initialization verbs   */*************** enum {*** 991,996 ****         AD1986A_LAPTOP_AUTOMUTE,         AD1986A_ULTRA,         AD1986A_SAMSUNG,         AD1986A_MODELS  };  --- 971,977 ----         AD1986A_LAPTOP_AUTOMUTE,         AD1986A_ULTRA,         AD1986A_SAMSUNG,+        AD1986A_SAMSUNG_P50,         AD1986A_MODELS  };  *************** static const char *ad1986a_models[AD1986A_MODELS] = {*** 1002,1007 ****         [AD1986A_LAPTOP_AUTOMUTE] = "laptop-automute",         [AD1986A_ULTRA]         = "ultra",         [AD1986A_SAMSUNG]       = "samsung",  };    static struct snd_pci_quirk ad1986a_cfg_tbl[] = {--- 983,989 ----         [AD1986A_LAPTOP_AUTOMUTE] = "laptop-automute",         [AD1986A_ULTRA]         = "ultra",         [AD1986A_SAMSUNG]       = "samsung",+        [AD1986A_SAMSUNG_P50]   = "samsung-p50",  };    static struct snd_pci_quirk ad1986a_cfg_tbl[] = {*************** static struct snd_pci_quirk ad1986a_cfg_tbl[] = {*** 1024,1029 ****         SND_PCI_QUIRK(0x1179, 0xff40, "Toshiba", AD1986A_LAPTOP_EAPD),         SND_PCI_QUIRK(0x144d, 0xb03c, "Samsung R55", AD1986A_3STACK),         SND_PCI_QUIRK(0x144d, 0xc01e, "FSC V2060", AD1986A_LAPTOP),         SND_PCI_QUIRK(0x144d, 0xc027, "Samsung Q1", AD1986A_ULTRA),         SND_PCI_QUIRK_MASK(0x144d, 0xff00, 0xc000, "Samsung", AD1986A_SAMSUNG),         SND_PCI_QUIRK(0x144d, 0xc504, "Samsung Q35", AD1986A_3STACK),--- 1006,1012 ----         SND_PCI_QUIRK(0x1179, 0xff40, "Toshiba", AD1986A_LAPTOP_EAPD),         SND_PCI_QUIRK(0x144d, 0xb03c, "Samsung R55", AD1986A_3STACK),         SND_PCI_QUIRK(0x144d, 0xc01e, "FSC V2060", AD1986A_LAPTOP),+        SND_PCI_QUIRK(0x144d, 0xc024, "Samsung P50", AD1986A_SAMSUNG_P50),         SND_PCI_QUIRK(0x144d, 0xc027, "Samsung Q1", AD1986A_ULTRA),         SND_PCI_QUIRK_MASK(0x144d, 0xff00, 0xc000, "Samsung", AD1986A_SAMSUNG),         SND_PCI_QUIRK(0x144d, 0xc504, "Samsung Q35", AD1986A_3STACK),*************** static int patch_ad1986a(struct hda_codec *codec)*** 1111,1117 ****                 spec->multiout.dac_nids = ad1986a_laptop_dac_nids;                 break;         case AD1986A_LAPTOP_EAPD:-                spec->mixers[0] = ad1986a_laptop_eapd_mixers;                 spec->num_init_verbs = 2;                 spec->init_verbs[1] = ad1986a_eapd_init_verbs;                 spec->multiout.max_channels = 2;--- 1094,1103 ----                 spec->multiout.dac_nids = ad1986a_laptop_dac_nids;                 break;         case AD1986A_LAPTOP_EAPD:+                spec->num_mixers = 3;+                spec->mixers[0] = ad1986a_laptop_master_mixers;+                spec->mixers[1] = ad1986a_laptop_eapd_mixers;+                spec->mixers[2] = ad1986a_laptop_intmic_mixers;                 spec->num_init_verbs = 2;                 spec->init_verbs[1] = ad1986a_eapd_init_verbs;                 spec->multiout.max_channels = 2;*************** static int patch_ad1986a(struct hda_codec *codec)*** 1122,1128 ****                 spec->input_mux = &ad1986a_laptop_eapd_capture_source;                 break;         case AD1986A_SAMSUNG:-                spec->mixers[0] = ad1986a_samsung_mixers;                 spec->num_init_verbs = 3;                 spec->init_verbs[1] = ad1986a_eapd_init_verbs;                 spec->init_verbs[2] = ad1986a_automic_verbs;--- 1108,1116 ----                 spec->input_mux = &ad1986a_laptop_eapd_capture_source;                 break;         case AD1986A_SAMSUNG:+                spec->num_mixers = 2;+                spec->mixers[0] = ad1986a_laptop_master_mixers;+                spec->mixers[1] = ad1986a_laptop_eapd_mixers;                 spec->num_init_verbs = 3;                 spec->init_verbs[1] = ad1986a_eapd_init_verbs;                 spec->init_verbs[2] = ad1986a_automic_verbs;*************** static int patch_ad1986a(struct hda_codec *codec)*** 1135,1142 ****                 codec->patch_ops.unsol_event = ad1986a_automic_unsol_event;                 codec->patch_ops.init = ad1986a_automic_init;                 break;         case AD1986A_LAPTOP_AUTOMUTE:-                spec->mixers[0] = ad1986a_laptop_automute_mixers;                 spec->num_init_verbs = 3;                 spec->init_verbs[1] = ad1986a_eapd_init_verbs;                 spec->init_verbs[2] = ad1986a_hp_init_verbs;--- 1123,1150 ----                 codec->patch_ops.unsol_event = ad1986a_automic_unsol_event;                 codec->patch_ops.init = ad1986a_automic_init;                 break;+        case AD1986A_SAMSUNG_P50:+                spec->num_mixers = 2;+                spec->mixers[0] = ad1986a_automute_master_mixers;+                spec->mixers[1] = ad1986a_laptop_eapd_mixers;+                spec->num_init_verbs = 4;+                spec->init_verbs[1] = ad1986a_eapd_init_verbs;+                spec->init_verbs[2] = ad1986a_automic_verbs;+                spec->init_verbs[3] = ad1986a_hp_init_verbs;+                spec->multiout.max_channels = 2;+                spec->multiout.num_dacs = 1;+                spec->multiout.dac_nids = ad1986a_laptop_dac_nids;+                if (!is_jack_available(codec, 0x25))+                        spec->multiout.dig_out_nid = 0;+                spec->input_mux = &ad1986a_automic_capture_source;+                codec->patch_ops.unsol_event = ad1986a_samsung_p50_unsol_event;+                codec->patch_ops.init = ad1986a_samsung_p50_init;+                break;         case AD1986A_LAPTOP_AUTOMUTE:+                spec->num_mixers = 3;+                spec->mixers[0] = ad1986a_automute_master_mixers;+                spec->mixers[1] = ad1986a_laptop_eapd_mixers;+                spec->mixers[2] = ad1986a_laptop_intmic_mixers;                 spec->num_init_verbs = 3;                 spec->init_verbs[1] = ad1986a_eapd_init_verbs;                 spec->init_verbs[2] = ad1986a_hp_init_verbs;*************** static int patch_ad1986a(struct hda_codec *codec)*** 1148,1153 ****                 spec->input_mux = &ad1986a_laptop_eapd_capture_source;                 codec->patch_ops.unsol_event = ad1986a_hp_unsol_event;                 codec->patch_ops.init = ad1986a_hp_init;                 break;         case AD1986A_ULTRA:                 spec->mixers[0] = ad1986a_laptop_eapd_mixers;--- 1156,1165 ----                 spec->input_mux = &ad1986a_laptop_eapd_capture_source;                 codec->patch_ops.unsol_event = ad1986a_hp_unsol_event;                 codec->patch_ops.init = ad1986a_hp_init;+                /* Lenovo N100 seems to report the reversed bit+                 * for HP jack-sensing+                 */+                spec->inv_jack_detect = 1;                 break;         case AD1986A_ULTRA:                 spec->mixers[0] = ad1986a_laptop_eapd_mixers;