[alsa-devel] [ALC262 patch_realtek.c] Fujitsu Lifebook port replicator/dock headphone jack sense

Takashi Iwai tiwai at suse.de
Fri Mar 14 14:43:36 CET 2008


At Fri, 14 Mar 2008 13:32:48 +0000,
Tony Vroon wrote:
> 
> diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
> index 33282f9..bbb8b2c 100644
> --- a/sound/pci/hda/patch_realtek.c
> +++ b/sound/pci/hda/patch_realtek.c
> @@ -8585,7 +8585,7 @@ static void alc262_hippo1_unsol_event(struct hda_codec *codec,
>  
>  /*
>   * fujitsu model
> - *  0x14 = headphone/spdif-out, 0x15 = internal speaker
> + *  0x14 = headphone/spdif-out, 0x15 = internal speaker, 0x1B = dock headphone out

Please fold the line to fit within 80 chars.

>   */
>  
>  #define ALC_HP_EVENT	0x37
> @@ -8593,6 +8593,8 @@ static void alc262_hippo1_unsol_event(struct hda_codec *codec,
>  static struct hda_verb alc262_fujitsu_unsol_verbs[] = {
>  	{0x14, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN | ALC_HP_EVENT},
>  	{0x14, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP},
> +	{0x1B, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN | ALC_HP_EVENT},
> +	{0x1B, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP},

0x1b is preferred to 0x1B.

>  	{}
>  };
>  
> @@ -8633,12 +8635,16 @@ static void alc262_fujitsu_automute(struct hda_codec *codec, int force)
>  	unsigned int mute;
>  
>  	if (force || !spec->sense_updated) {
> -		unsigned int present;
> +		unsigned int present_int_hp, present_dock_hp;
>  		/* need to execute and sync at first */
>  		snd_hda_codec_read(codec, 0x14, 0, AC_VERB_SET_PIN_SENSE, 0);
> -		present = snd_hda_codec_read(codec, 0x14, 0,
> +		present_int_hp = snd_hda_codec_read(codec, 0x14, 0,
>  				    	 AC_VERB_GET_PIN_SENSE, 0);
> -		spec->jack_present = (present & 0x80000000) != 0;
> +		snd_hda_codec_read(codec, 0x1B, 0, AC_VERB_SET_PIN_SENSE, 0);
> +		present_dock_hp = snd_hda_codec_read(codec, 0x1B, 0,
> +				    	 AC_VERB_GET_PIN_SENSE, 0);
> +		spec->jack_present = (present_int_hp & 0x80000000) != 0;
> +		spec->jack_present += (present_dock_hp & 0x80000000) != 0;

This must be "|=".  jack_present is a one-bit value and thus
overflow.

>  		spec->sense_updated = 1;
>  	}
>  	if (spec->jack_present) {
> @@ -8686,6 +8692,12 @@ static int alc262_fujitsu_master_sw_put(struct snd_kcontrol *kcontrol,
>  	change |= snd_hda_codec_amp_update(codec, 0x14, 1, HDA_OUTPUT, 0,
>  					   HDA_AMP_MUTE,
>  					   valp[1] ? 0 : HDA_AMP_MUTE);
> +	change |= snd_hda_codec_amp_update(codec, 0x1B, 0, HDA_OUTPUT, 0,
> +					  HDA_AMP_MUTE,
> +					  valp[0] ? 0 : HDA_AMP_MUTE);
> +	change |= snd_hda_codec_amp_update(codec, 0x1B, 1, HDA_OUTPUT, 0,
> +					   HDA_AMP_MUTE,
> +					   valp[1] ? 0 : HDA_AMP_MUTE);

You can use snd_hda_codec_amp_stereo().  Then it'll be a single call.

Could you fix and repost?  Thanks.


Takashi


More information about the Alsa-devel mailing list