Re: [alsa-devel] [PATCH V4 12/16] ALSA: HDA: Make hda sound card usable for Loongson.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



At Fri, 3 Aug 2012 18:36:40 +0800,
Huacai Chen wrote:
> 
> We write these quirks on 2.6.36 some time ago, and then we port them
> to 3.x (3.2, 3.3, 3.4 and 3.5). As you say, PMON (BIOS for Loongson)
> doesn't set the pins correctly. Anyway, I'll try your suggestions.

Thanks.  I guess it should work by just adding a new entry for your
device in cxt_fixups[] containing the right default pin-configuration
table, then point it in cxt5066_fixups[] with the corresponding PCI
(or codec) SSID.


Takashi

> On Fri, Aug 3, 2012 at 5:24 PM, Takashi Iwai <tiwai@xxxxxxx> wrote:
> > At Fri,  3 Aug 2012 15:06:07 +0800,
> > Huacai Chen wrote:
> >>
> >> Lemote A1004(Laptop) and A1205(All-In-One) use Conexant's hda codec,
> >> this patch modify patch_conexant.c to add Lemote specific code.
> >>
> >> Signed-off-by: Huacai Chen <chenhc@xxxxxxxxxx>
> >> Signed-off-by: Hongliang Tao <taohl@xxxxxxxxxx>
> >> Signed-off-by: Hua Yan <yanh@xxxxxxxxxx>
> >> Cc: alsa-devel@xxxxxxxxxxxxxxxx
> >
> > Doesn't the recent kernel work as is?  Which kernel have you tested?
> > If it doesn't work with the recent kernel, it's likely just because
> > the pins aren't set properly by BIOS or whatever.
> >
> > In general, we avoid to add this kind of quirks any longer.
> > If the problem is only about the pin configuration, you can add the
> > pin table in the driver.
> >
> >
> > thanks,
> >
> > Takashi
> >
> >> ---
> >>  include/linux/pci_ids.h        |    2 +
> >>  sound/pci/hda/patch_conexant.c |   52 ++++++++++++++++++++++++++++++++++++++-
> >>  2 files changed, 52 insertions(+), 2 deletions(-)
> >>
> >> diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h
> >> index fc35260..b28270e 100644
> >> --- a/include/linux/pci_ids.h
> >> +++ b/include/linux/pci_ids.h
> >> @@ -2918,3 +2918,5 @@
> >>  #define PCI_DEVICE_ID_XEN_PLATFORM   0x0001
> >>
> >>  #define PCI_VENDOR_ID_OCZ            0x1b85
> >> +
> >> +#define PCI_VENDOR_ID_LEMOTE         0x1c06
> >> diff --git a/sound/pci/hda/patch_conexant.c b/sound/pci/hda/patch_conexant.c
> >> index 1436118..6bbac39 100644
> >> --- a/sound/pci/hda/patch_conexant.c
> >> +++ b/sound/pci/hda/patch_conexant.c
> >> @@ -142,6 +142,7 @@ struct conexant_spec {
> >>       unsigned int thinkpad:1;
> >>       unsigned int hp_laptop:1;
> >>       unsigned int asus:1;
> >> +     unsigned int lemote:1;
> >>       unsigned int pin_eapd_ctrls:1;
> >>       unsigned int fixup_stereo_dmic:1;
> >>
> >> @@ -2280,7 +2281,7 @@ static void cxt5066_automic(struct hda_codec *codec)
> >>               cxt5066_thinkpad_automic(codec);
> >>       else if (spec->hp_laptop)
> >>               cxt5066_hp_laptop_automic(codec);
> >> -     else if (spec->asus)
> >> +     else if (spec->asus || spec->lemote)
> >>               cxt5066_asus_automic(codec);
> >>  }
> >>
> >> @@ -2913,6 +2914,32 @@ static const struct hda_verb cxt5066_init_verbs_hp_laptop[] = {
> >>       { } /* end */
> >>  };
> >>
> >> +static struct hda_verb cxt5066_init_verbs_lemote[] = {
> >> +     {0x14, AC_VERB_SET_CONNECT_SEL, 0x0}, /* ADC1: Connection index: 0 */
> >> +     {0x19, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN | CONEXANT_HP_EVENT},
> >> +     {0x1b, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN | CONEXANT_MIC_EVENT},
> >> +
> >> +     /* DAC2: unused */
> >> +     {0x11, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE},
> >> +
> >> +     /* ADC2, ADC3: unused */
> >> +     {0x15, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)},
> >> +     {0x15, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(1)},
> >> +     {0x15, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(2)},
> >> +     {0x15, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(3)},
> >> +     {0x16, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)},
> >> +     {0x16, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(1)},
> >> +     {0x16, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(2)},
> >> +     {0x16, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(3)},
> >> +
> >> +     /* Disable digital microphone port */
> >> +     {0x23, AC_VERB_SET_PIN_WIDGET_CONTROL, 0},
> >> +
> >> +     /* Disable SPDIF */
> >> +     {0x20, AC_VERB_SET_PIN_WIDGET_CONTROL, 0},
> >> +     { } /* end */
> >> +};
> >> +
> >>  /* initialize jack-sensing, too */
> >>  static int cxt5066_init(struct hda_codec *codec)
> >>  {
> >> @@ -2950,6 +2977,8 @@ enum {
> >>       CXT5066_THINKPAD,       /* Lenovo ThinkPad T410s, others? */
> >>       CXT5066_ASUS,           /* Asus K52JU, Lenovo G560 - Int mic at 0x1a and Ext mic at 0x1b */
> >>       CXT5066_HP_LAPTOP,      /* HP Laptop */
> >> +     CXT5066_LEMOTE_A1004,   /* Lemote Laptop A1004 */
> >> +     CXT5066_LEMOTE_A1205,   /* Lemote All-In-One A1205 */
> >>       CXT5066_AUTO,           /* BIOS auto-parser */
> >>       CXT5066_MODELS
> >>  };
> >> @@ -2963,6 +2992,8 @@ static const char * const cxt5066_models[CXT5066_MODELS] = {
> >>       [CXT5066_THINKPAD]      = "thinkpad",
> >>       [CXT5066_ASUS]          = "asus",
> >>       [CXT5066_HP_LAPTOP]     = "hp-laptop",
> >> +     [CXT5066_LEMOTE_A1004]  = "lemote-laptop-a1004",
> >> +     [CXT5066_LEMOTE_A1205]  = "lemote-aio-a1205",
> >>       [CXT5066_AUTO]          = "auto",
> >>  };
> >>
> >> @@ -2995,6 +3026,8 @@ static const struct snd_pci_quirk cxt5066_cfg_tbl[] = {
> >>       SND_PCI_QUIRK(0x17aa, 0x3a0d, "Lenovo U350", CXT5066_ASUS),
> >>       SND_PCI_QUIRK(0x17aa, 0x38af, "Lenovo G560", CXT5066_ASUS),
> >>       SND_PCI_QUIRK(0x17aa, 0x3938, "Lenovo G565", CXT5066_AUTO),
> >> +     SND_PCI_QUIRK(PCI_VENDOR_ID_LEMOTE, 0x2011, "Lemote A1004", CXT5066_LEMOTE_A1004),
> >> +     SND_PCI_QUIRK(PCI_VENDOR_ID_LEMOTE, 0x2012, "Lemote A1205", CXT5066_LEMOTE_A1205),
> >>       SND_PCI_QUIRK(0x1b0a, 0x2092, "CyberpowerPC Gamer Xplorer N57001", CXT5066_AUTO),
> >>       {}
> >>  };
> >> @@ -3075,7 +3108,22 @@ static int patch_cxt5066(struct hda_codec *codec)
> >>               spec->port_d_mode = 0;
> >>               spec->mic_boost = 3; /* default 30dB gain */
> >>               break;
> >> -
> >> +     case CXT5066_LEMOTE_A1004:
> >> +     case CXT5066_LEMOTE_A1205:
> >> +             codec->patch_ops.init = cxt5066_init;
> >> +             codec->patch_ops.unsol_event = cxt5066_unsol_event;
> >> +             spec->init_verbs[spec->num_init_verbs] =
> >> +                     cxt5066_init_verbs_lemote;
> >> +             spec->num_init_verbs++;
> >> +             spec->lemote = 1;
> >> +             spec->mixers[spec->num_mixers++] = cxt5066_mixer_master;
> >> +             spec->mixers[spec->num_mixers++] = cxt5066_mixers;
> >> +             /* no S/PDIF out */
> >> +             /* input source automatically selected */
> >> +             spec->input_mux = NULL;
> >> +             spec->port_d_mode = 0;
> >> +             spec->mic_boost = 3; /* default 30dB gain */
> >> +             break;
> >>       case CXT5066_OLPC_XO_1_5:
> >>               codec->patch_ops.init = cxt5066_olpc_init;
> >>               codec->patch_ops.unsol_event = cxt5066_olpc_unsol_event;
> >> --
> >> 1.7.7.3
> >>
> >> _______________________________________________
> >> Alsa-devel mailing list
> >> Alsa-devel@xxxxxxxxxxxxxxxx
> >> http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
> >>
> _______________________________________________
> Alsa-devel mailing list
> Alsa-devel@xxxxxxxxxxxxxxxx
> http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
> 



[Index of Archives]     [Linux MIPS Home]     [LKML Archive]     [Linux ARM Kernel]     [Linux ARM]     [Linux]     [Git]     [Yosemite News]     [Linux SCSI]     [Linux Hams]

  Powered by Linux