[alsa-devel] [PATCH] ALSA: hda - Add multifunction jack support for ALC255

Takashi Iwai tiwai at suse.de
Thu Nov 7 14:22:07 CET 2013


At Thu,  7 Nov 2013 14:08:41 +0100,
David Henningsson wrote:
> 
> From: Kailang Yang <kailang at realtek.com>
> 
> The new codec ALC255 needs its own set of verbs to enable
> multifunction jacks.
> 
> (Context and whitespace adjustments by David Henningsson)
> 
> BugLink: https://bugs.launchpad.net/bugs/1248949
> Tested-by: Doro Wu <doro.wu at canonical.com>
> Signed-off-by: David Henningsson <david.henningsson at canonical.com>
> ---
>  sound/pci/hda/patch_realtek.c |   91 +++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 91 insertions(+)
> 
> diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
> index daf7205..ceadd65 100644
> --- a/sound/pci/hda/patch_realtek.c
> +++ b/sound/pci/hda/patch_realtek.c
> @@ -588,6 +588,18 @@ static int alc_read_coef_idx(struct hda_codec *codec,
>  	return val;
>  }
>  
> +static int alc_read_coefex_idx(struct hda_codec *codec,
> +					hda_nid_t nid,
> +					unsigned int coef_idx)
> +{
> +	unsigned int val;
> +	snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_COEF_INDEX,
> +			    coef_idx);
> +	val = snd_hda_codec_read(codec, nid, 0,
> +				 AC_VERB_GET_PROC_COEF, 0);
> +	return val;
> +}

Rewrite alc_read_coef_idx() using this new function, too, e.g.

#define alc_write_coef_idx(codec, idx, val) \
	alc_read_coefex_idx(codec, 0x20, idx, val)

>  static void alc_write_coef_idx(struct hda_codec *codec, unsigned int coef_idx,
>  							unsigned int coef_val)
>  {
> @@ -597,6 +609,15 @@ static void alc_write_coef_idx(struct hda_codec *codec, unsigned int coef_idx,
>  			    coef_val);
>  }
>  
> +static void alc_write_coefex_idx(struct hda_codec *codec, hda_nid_t nid,
> +				 unsigned int coef_idx, unsigned int coef_val)
> +{
> +	snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_COEF_INDEX,
> +			    coef_idx);
> +	snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_PROC_COEF,
> +			    coef_val);
> +}

Ditto.

> +
>  /* a special bypass for COEF 0; read the cached value at the second time */
>  static unsigned int alc_get_coef0(struct hda_codec *codec)
>  {
> @@ -3109,6 +3130,14 @@ static void alc_headset_mode_unplugged(struct hda_codec *codec)
>  	int val;
>  
>  	switch (codec->vendor_id) {
> +	case 0x10ec0255:
> +		alc_write_coef_idx(codec, 0x1b, 0x0c0b);
> +		alc_write_coef_idx(codec, 0x45, 0xd089);
> +		val = alc_read_coefex_idx(codec, 0x57, 0x05);
> +		alc_write_coefex_idx(codec, 0x57, 0x05, val & ~(1<<14));
> +		alc_write_coef_idx(codec, 0x06, 0x6104);
> +		alc_write_coefex_idx(codec, 0x57, 0x03, 0x8aa6);

Try to comment what these actually do.  Not necessarily too detailed,
but we need to have some ideas.

I regret to have merged the former Realtek headset patches that have
lots of such verbs without certain comments.


thanks,

Takashi


More information about the Alsa-devel mailing list