[alsa-devel] [PATCH] Add support for Sabre HiFi on System76 and Clevo laptops

Takashi Iwai tiwai at suse.de
Wed Feb 8 14:11:00 CET 2017


On Wed, 01 Feb 2017 21:57:13 +0100,
Jeremy Soller wrote:
> 
> This patch adds support for the ESS Sabre HiFi DAC found on some
> System76 and Clevo laptops. These devices can be identified using the
> Clevo subvendor id, and the Realtek ALC898 codec vendor ID. When a
> connection is detected on the ESS DAC, identified by GPIO pin 2 being
> set low, the 0x1b pin VREF should be set to 80%. Otherwise, it should be
> set to HIZ. Testing has been performed on the current System76 line of
> laptops, with and without DACs, no regressions have been found.
> 

Please give your sign off.  Otherwise it can't be merged at all.

Looking at the changes, the changes themselves look almost good.
But the patch isn't applicable as is because of spacing or line
break.  Please fix your MUA setup or use an attachment if it really
doesn't work.

Also, last but not least, try to run checkpatch.pl and fix the
reported issues there.


thanks,

Takashi

> ---
>  sound/pci/hda/patch_realtek.c | 53
>  ++++++++++++++++++++++++++++++++++++++++++-
>  1 file changed, 52 insertions(+), 1 deletion(-)
> 
> diff --git a/sound/pci/hda/patch_realtek.c
> b/sound/pci/hda/patch_realtek.c
> index 7d660ee..ed15317 100644
> --- a/sound/pci/hda/patch_realtek.c
> +++ b/sound/pci/hda/patch_realtek.c
> @@ -1797,6 +1797,7 @@ enum {
>  	ALC882_FIXUP_NO_PRIMARY_HP,
>  	ALC887_FIXUP_ASUS_BASS,
>  	ALC887_FIXUP_BASS_CHMAP,
> +       ALC898_FIXUP_CLEVO_SPDIF,
>  };
>  
>  static void alc889_fixup_coef(struct hda_codec *codec,
> @@ -1956,6 +1957,43 @@ static void alc882_fixup_no_primary_hp(struct
> hda_codec *codec,
>  	}
>  }
>  
> +static void alc898_clevo_dac_hook(struct hda_codec *codec,
> +                                   struct hda_jack_callback *jack)
> +{
> +       int val;
> +
> +       // Read ESS DAC status
> +       snd_hda_codec_write(codec, codec->core.afg, 0,
> AC_VERB_SET_GPIO_MASK, 4);
> +       snd_hda_codec_write(codec, codec->core.afg, 0,
> AC_VERB_SET_GPIO_DIRECTION, 0);
> +       val = snd_hda_codec_read(codec, codec->core.afg, 0,
> AC_VERB_GET_GPIO_DATA, 0);
> +       val &= 0x04;
> +
> +       if (val == 0) {
> +               // Set VREF on headphone pin to 80%
> +               val = snd_hda_codec_get_pin_target(codec, 0x1b);
> +               val |= AC_PINCTL_VREF_80;
> +               snd_hda_set_pin_ctl(codec, 0x1b, val);
> +       } else {
> +               // Set VREF on headphone pin to HIZ
> +               val = snd_hda_codec_get_pin_target(codec, 0x1b);
> +               val = val & 0xfff8;
> +               snd_hda_set_pin_ctl(codec, 0x1b, val);
> +       }
> +}
> +
> +static void alc898_fixup_clevo(struct hda_codec *codec,
> +                                      const struct hda_fixup *fix, int
> action)
> +{
> +       switch (action) {
> +       case HDA_FIXUP_ACT_PRE_PROBE:
> +               snd_hda_jack_detect_enable_callback(codec, 0x1b,
> alc898_clevo_dac_hook);
> +               break;
> +       case HDA_FIXUP_ACT_INIT:
> +               snd_hda_codec_read(codec, 0x1b, 0,
> AC_VERB_SET_PIN_WIDGET_CONTROL, 4);
> +               break;
> +       }
> +}
> +
>  static void alc_fixup_bass_chmap(struct hda_codec *codec,
>  				 const struct hda_fixup *fix, int
>  				 action);
>  
> @@ -2195,6 +2233,10 @@ static const struct hda_fixup alc882_fixups[] = {
>  		.type = HDA_FIXUP_FUNC,
>  		.v.func = alc_fixup_bass_chmap,
>  	},
> +       [ALC898_FIXUP_CLEVO_SPDIF] = {
> +               .type = HDA_FIXUP_FUNC,
> +               .v.func = alc898_fixup_clevo,
> +       },
>  };
>  
>  static const struct snd_pci_quirk alc882_fixup_tbl[] = {
> @@ -2271,6 +2313,10 @@ static const struct snd_pci_quirk
> alc882_fixup_tbl[] = {
>  	SND_PCI_QUIRK(0x8086, 0x0022, "DX58SO", ALC889_FIXUP_COEF),
>  	{}
>  };
> +static const struct snd_pci_quirk alc898_fixup_tbl[] = {
> +       SND_PCI_QUIRK_VENDOR(0x1558, "Clevo laptop",
> ALC898_FIXUP_CLEVO_SPDIF),
> +       {}
> +};
>  
>  static const struct hda_model_fixup alc882_fixup_models[] = {
>  	{.id = ALC882_FIXUP_ACER_ASPIRE_4930G, .name =
>  	"acer-aspire-4930g"},
> @@ -2310,6 +2356,11 @@ static int patch_alc882(struct hda_codec *codec)
>  	case 0x10ec0885:
>  	case 0x10ec0900:
>  		break;
> +       case 0x10ec0898:
> +       case 0x10ec0899:
> +               snd_hda_pick_fixup(codec, NULL, alc898_fixup_tbl,
> +                      alc882_fixups);
> +               break;
>  	default:
>  		/* ALC883 and variants */
>  		alc_fix_pll_init(codec, 0x20, 0x0a, 10);
> @@ -4357,7 +4408,7 @@ static void
> alc_fixup_headset_mode_alc255_no_hp_mic(struct hda_codec *codec,
>  		struct alc_spec *spec = codec->spec;
>  		spec->parse_flags |= HDA_PINCFG_HEADSET_MIC;
>  		alc255_set_default_jack_type(codec);
> -       } 
> +       }
>  	else
>  		alc_fixup_headset_mode(codec, fix, action);
>  }
> -- 
> 2.9.3
> 
> _______________________________________________
> Alsa-devel mailing list
> Alsa-devel at alsa-project.org
> http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
> 


More information about the Alsa-devel mailing list