[alsa-devel] Asus N751JK - push/merge patches on mailinglist

Arthur Borsboom arthurborsboom at gmail.com
Thu Sep 17 11:29:04 CEST 2015


I do have the hardware including the headset (combo jack), headphones
(single jack), microphone (single jack).
Can you specify accurately what and how I need to test?

On 17 September 2015 at 11:24, Raymond Yau <superquad.vortex2 at gmail.com>
wrote:

>
>
> 2015-09-13 16:13 GMT+08:00 Takashi Iwai <tiwai at suse.de>:
>
>> On Sat, 12 Sep 2015 23:09:43 +0200,
>> Arthur Borsboom wrote:
>> >
>> > Hi Takashi,
>> >
>> > Previous month Raymond Yau has done great work to get the audio working
>> for
>> > the Asus N751JK laptop.
>> > He developed 7 patches, which I have tested and confirmed working on
>> this
>> > laptop.
>> >
>> > Raymond is not responding for about two weeks (maybe on holiday?).
>> > Would you mind to post these patches on the mailinglist (the correct
>> way)
>> > and/or merge them in a way the get into the mainline kernel a.s.a.p?
>>
>> Sorry, it can't be done like that.  The patches aren't yet in
>> acceptable forms, and it needs more changes to be merged to mainline.
>> It must be done by someone who did it originally or who has the
>> hardware and test.
>>
>
> I don't have the hardware, the alternate approach is to create headset
> jack (SND_JACK_HEADSET) and skip the creation of headset mic phanton jack
> instead of headphone jack and headset mic jack since implement sense_nid
> and slave_nid is not easy to debug
>
> What you need is adding "Jack Headset" to pulseaudio
> analog-input-headset-mic.conf since "Headset Jack" kctl already in
> analog-out-headphones.conf
>
>  static int get_input_jack_type(struct hda_codec *codec, hda_nid_t nid)
>  {
> +    struct hda_gen_spec *spec = codec->spec;
> +    struct auto_pin_cfg *cfg = &spec->autocfg;
>      unsigned int def_conf = snd_hda_codec_get_pincfg(codec, nid);
>      switch (get_defcfg_device(def_conf)) {
>      case AC_JACK_LINE_OUT:
>      case AC_JACK_SPEAKER:
>          return SND_JACK_LINEOUT;
>      case AC_JACK_HP_OUT:
> +        if (spec->hs_mic_use_hp_sense &&
> +            (nid == auto_cfg_hp_pins(cfg)[0]))
> +            return SND_JACK_HEADSET;
>          return SND_JACK_HEADPHONE;
>      case AC_JACK_SPDIF_OUT:
>      case AC_JACK_DIG_OTHER_OUT:
>
>
>
>                const struct auto_pin_cfg *cfg)
>  {
>      const hda_nid_t *p;
> +    struct hda_gen_spec *spec = codec->spec;
>      int i, err;
>
>      for (i = 0; i < cfg->num_inputs; i++) {
> @@ -482,6 +499,12 @@ int snd_hda_jack_add_kctls(struct hda_codec *codec,
>                  err = add_jack_kctl(codec, cfg->inputs[i].pin,
>                              cfg, "Headphone Mic");
>          } else
> +        if (cfg->inputs[i].is_headset_mic &&
> +            spec->hs_mic_use_hp_sense &&
> +            !is_jack_detectable(codec, cfg->inputs[i].pin)) {
> +            err = 0;
> +
> +        } else
>              err = add_jack_kctl(codec, cfg->inputs[i].pin, cfg,
>                          NULL);
>          if (err < 0)
> @@ -489,14 +512,21 @@ int snd_hda_jack_add_kctls(struct hda_codec *codec,
>      }
>
>      for (i = 0, p = cfg->line_out_pins; i < cfg->line_outs; i++, p++) {
> -        err = add_jack_kctl(codec, *p, cfg, NULL);
> +        if (is_subwoofer(codec, *p, i, cfg->line_outs) &&
> +            is_external_pin(codec, *p))
> +            err = add_jack_kctl(codec, *p, cfg, "Ext Subwoofer");
> +        else
> +            err = add_jack_kctl(codec, *p, cfg, NULL);
>          if (err < 0)
>              return err;
>      }
>      for (i = 0, p = cfg->hp_pins; i < cfg->hp_outs; i++, p++) {
>          if (*p == *cfg->line_out_pins) /* might be duplicated */
>              break;
> -        err = add_jack_kctl(codec, *p, cfg, NULL);
> +        if (i == 0 && spec->hs_mic_use_hp_sense)
> +            err = add_jack_kctl(codec, *p, cfg, "Headset");
> +        else
> +            err = add_jack_kctl(codec, *p, cfg, NULL);
>          if (err < 0)
>              return err;
>      }
>
>
> change the pin to hp pin when mic pin is headset mic
>
> +bool is_headset_mic(struct hda_codec *codec, hda_nid_t nid)
> +{
> +    struct hda_gen_spec *spec = codec->spec;
> +    struct auto_pin_cfg *cfg = &spec->autocfg;
> +    int i;
> +
> +    for (i = 0; i < cfg->num_inputs; i++)
> +        if (nid == cfg->inputs[i].pin)
> +            return cfg->inputs[i].is_headset_mic;
> +    return false;
> +}
> +
>
>
> @@ -4384,6 +4399,8 @@ void snd_hda_gen_mic_autoswitch(struct hda_codec
> *codec,
>          /* don't detect pins retasked as outputs */
>          if (snd_hda_codec_get_pin_target(codec, pin) & AC_PINCTL_OUT_EN)
>              continue;
> +        if (is_headset_mic(codec, pin) && spec->hs_mic_use_hp_sense)
> +            pin = auto_cfg_hp_pins(cfg)[0];
>          if (snd_hda_jack_detect_state(codec, pin) == HDA_JACK_PRESENT) {
>              mux_select(codec, 0, spec->am_entry[i].idx);
>              return;
>
>
>


-- 
Arthur Borsboom
Lieven de Keystraat 77
3067 KG, Rotterdam
The Netherlands
Mob: +31629089953
Email: arthurborsboom at gmail.com
Skype: Arthur Borsboom, The Hague, The Netherlands

[image: View Arthur's LinkedIn profile]
<http://uk.linkedin.com/in/arthurborsboom>


More information about the Alsa-devel mailing list