[ALSA] hda-codec - Add model for ASUS W3j laptop
[deliverable/linux.git] / sound / pci / hda / patch_analog.c
index e547442e6fed6de3f56585ff85c26ffb3286166a..9ce4c9f869b2623c49fee66c5690bd92b1cde80c 100644 (file)
@@ -452,19 +452,6 @@ static int ad1986a_pcm_amp_vol_put(struct snd_kcontrol *kcontrol, struct snd_ctl
        return change;
 }
 
-static int ad1986a_pcm_amp_tlv(struct snd_kcontrol *kcontrol, int op_flag,
-                              unsigned int size, unsigned int __user *_tlv)
-{
-       struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
-       struct ad198x_spec *ad = codec->spec;
-
-       mutex_lock(&ad->amp_mutex);
-       snd_hda_mixer_amp_tlv(kcontrol, op_flag, size, _tlv);
-       mutex_unlock(&ad->amp_mutex);
-       return 0;
-}
-
-
 #define ad1986a_pcm_amp_sw_info                snd_hda_mixer_amp_switch_info
 
 static int ad1986a_pcm_amp_sw_get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
@@ -507,7 +494,7 @@ static struct snd_kcontrol_new ad1986a_mixers[] = {
                .info = ad1986a_pcm_amp_vol_info,
                .get = ad1986a_pcm_amp_vol_get,
                .put = ad1986a_pcm_amp_vol_put,
-               .tlv.c = ad1986a_pcm_amp_tlv,
+               .tlv = { .c = snd_hda_mixer_amp_tlv },
                .private_value = HDA_COMPOSE_AMP_VAL(AD1986A_FRONT_DAC, 3, 0, HDA_OUTPUT)
        },
        {
@@ -654,6 +641,7 @@ static struct snd_kcontrol_new ad1986a_laptop_eapd_mixers[] = {
                .info = snd_hda_mixer_amp_volume_info,
                .get = snd_hda_mixer_amp_volume_get,
                .put = ad1986a_laptop_master_vol_put,
+               .tlv = { .c = snd_hda_mixer_amp_tlv },
                .private_value = HDA_COMPOSE_AMP_VAL(0x1a, 3, 0, HDA_OUTPUT),
        },
        {
@@ -806,8 +794,16 @@ static struct hda_board_config ad1986a_cfg_tbl[] = {
        { .modelname = "3stack",        .config = AD1986A_3STACK },
        { .pci_subvendor = 0x10de, .pci_subdevice = 0xcb84,
          .config = AD1986A_3STACK }, /* ASUS A8N-VM CSM */
+       { .pci_subvendor = 0x1043, .pci_subdevice = 0x817f,
+         .config = AD1986A_3STACK }, /* ASUS P5P-L2 */
        { .pci_subvendor = 0x1043, .pci_subdevice = 0x81b3,
          .config = AD1986A_3STACK }, /* ASUS P5RD2-VM / P5GPL-X SE */
+       { .pci_subvendor = 0x1043, .pci_subdevice = 0x81cb,
+         .config = AD1986A_3STACK }, /* ASUS M2NPV-VM */
+       { .pci_subvendor = 0x1043, .pci_subdevice = 0x8234,
+         .config = AD1986A_3STACK }, /* ASUS M2N-MX */
+       { .pci_subvendor = 0x17aa, .pci_subdevice = 0x1017,
+         .config = AD1986A_3STACK }, /* Lenovo A60 desktop */
        { .modelname = "laptop",        .config = AD1986A_LAPTOP },
        { .pci_subvendor = 0x144d, .pci_subdevice = 0xc01e,
          .config = AD1986A_LAPTOP }, /* FSC V2060 */
@@ -821,15 +817,21 @@ static struct hda_board_config ad1986a_cfg_tbl[] = {
        { .pci_subvendor = 0x144d, .pci_subdevice = 0xc024,
          .config = AD1986A_LAPTOP_EAPD }, /* Samsung R65-T2300 Charis */
        { .pci_subvendor = 0x144d, .pci_subdevice = 0xc026,
-         .config = AD1986A_LAPTOP_EAPD }, /* Samsung X10-T2300 Culesa */
+         .config = AD1986A_LAPTOP_EAPD }, /* Samsung X11-T2300 Culesa */
        { .pci_subvendor = 0x1043, .pci_subdevice = 0x1153,
          .config = AD1986A_LAPTOP_EAPD }, /* ASUS M9 */
        { .pci_subvendor = 0x1043, .pci_subdevice = 0x1213,
          .config = AD1986A_LAPTOP_EAPD }, /* ASUS A6J */
        { .pci_subvendor = 0x1043, .pci_subdevice = 0x11f7,
          .config = AD1986A_LAPTOP_EAPD }, /* ASUS U5A */
+       { .pci_subvendor = 0x1043, .pci_subdevice = 0x1263,
+         .config = AD1986A_LAPTOP_EAPD }, /* ASUS U5F */
        { .pci_subvendor = 0x1043, .pci_subdevice = 0x1297,
          .config = AD1986A_LAPTOP_EAPD }, /* ASUS Z62F */
+       { .pci_subvendor = 0x1043, .pci_subdevice = 0x12b3,
+         .config = AD1986A_LAPTOP_EAPD }, /* ASUS V1j */
+       { .pci_subvendor = 0x1043, .pci_subdevice = 0x1302,
+         .config = AD1986A_LAPTOP_EAPD }, /* ASUS W3j */
        { .pci_subvendor = 0x103c, .pci_subdevice = 0x30af,
          .config = AD1986A_LAPTOP_EAPD }, /* HP Compaq Presario B2800 */
        { .pci_subvendor = 0x17aa, .pci_subdevice = 0x2066,
@@ -1645,10 +1647,12 @@ static int ad198x_ch_mode_put(struct snd_kcontrol *kcontrol,
 {
        struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
        struct ad198x_spec *spec = codec->spec;
-       if (spec->need_dac_fix)
+       int err = snd_hda_ch_mode_put(codec, ucontrol, spec->channel_mode,
+                                     spec->num_channel_mode,
+                                     &spec->multiout.max_channels);
+       if (err >= 0 && spec->need_dac_fix)
                spec->multiout.num_dacs = spec->multiout.max_channels / 2;
-       return snd_hda_ch_mode_put(codec, ucontrol, spec->channel_mode,
-                                  spec->num_channel_mode, &spec->multiout.max_channels);
+       return err;
 }
 
 /* 6-stack mode */
@@ -2479,7 +2483,7 @@ static void ad1988_auto_init_extra_out(struct hda_codec *codec)
        pin = spec->autocfg.speaker_pins[0];
        if (pin) /* connect to front */
                ad1988_auto_set_output_and_unmute(codec, pin, PIN_OUT, 0);
-       pin = spec->autocfg.hp_pin;
+       pin = spec->autocfg.hp_pins[0];
        if (pin) /* connect to front */
                ad1988_auto_set_output_and_unmute(codec, pin, PIN_HP, 0);
 }
@@ -2531,7 +2535,7 @@ static int ad1988_parse_auto_config(struct hda_codec *codec)
            (err = ad1988_auto_create_extra_out(codec,
                                                spec->autocfg.speaker_pins[0],
                                                "Speaker")) < 0 ||
-           (err = ad1988_auto_create_extra_out(codec, spec->autocfg.hp_pin,
+           (err = ad1988_auto_create_extra_out(codec, spec->autocfg.hp_pins[0],
                                                "Headphone")) < 0 ||
            (err = ad1988_auto_create_analog_input_ctls(spec, &spec->autocfg)) < 0)
                return err;
This page took 0.031572 seconds and 5 git commands to generate.