* Re: Fixup set PCM/headphones volume from Master
2016-11-08 14:42 ` Takashi Iwai
@ 2016-11-08 19:17 ` David Jordan
2016-11-10 18:21 ` David Jordan
1 sibling, 0 replies; 7+ messages in thread
From: David Jordan @ 2016-11-08 19:17 UTC (permalink / raw)
To: Takashi Iwai; +Cc: alsa-devel, Clemens Ladisch
[-- Attachment #1: Type: text/plain, Size: 1286 bytes --]
I've attached both the patch I've been working with, and the
alsa-info.txt for the hardware running an unmodified kernel.
--
David Jordan
david2@system76.com
On Tue, Nov 8, 2016, at 06:42 AM, Takashi Iwai wrote:
> On Mon, 07 Nov 2016 22:36:21 +0100,
> David Jordan wrote:
> >
> > It's HDA, Realtek ALC898. The headphones jack (analog 3.5mm output)
> > (0x1b) is connected to a separate ESS DAC, which takes sound input from
> > the PCM SPDIF output.
>
> Note that the "Master" volume is a vmaster control, and usually it
> covers all DAC volume controls.
>
> It'd be better if you provide a patch you're fighting with, together
> with alsa-info.sh output. Then other people can track the issue
> either with the real h/w or hda-emu.
>
>
> Takashi
>
>
> >
> > --
> > David Jordan
> > david2@system76.com
> >
> > On Mon, Nov 7, 2016, at 01:19 PM, Clemens Ladisch wrote:
> > > David Jordan wrote:
> > > > I'm working on a kernel-level fixup for a set of hardware
> > >
> > > What hardware? If HDA, which codec, and how is it connected?
> > >
> > >
> > > Regards,
> > > Clemens
> > _______________________________________________
> > Alsa-devel mailing list
> > Alsa-devel@alsa-project.org
> > http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
> >
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: alsa-hda-alc898-pcm-hp-dac-vol-test.patch --]
[-- Type: text/x-patch; name="alsa-hda-alc898-pcm-hp-dac-vol-test.patch", Size: 11432 bytes --]
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
index 4b6d861..4419a7e 100644
--- a/sound/pci/hda/patch_realtek.c
+++ b/sound/pci/hda/patch_realtek.c
@@ -32,6 +32,7 @@
#include <linux/input.h>
#include <sound/core.h>
#include <sound/jack.h>
+#include <sound/tlv.h>
#include "hda_codec.h"
#include "hda_local.h"
#include "hda_auto_parser.h"
@@ -128,6 +129,14 @@ struct alc_spec {
unsigned int coef0;
struct input_dev *kb_dev;
u8 alc_mute_keycode_map[1];
+
+ /* for clevo headphones fix */
+ unsigned int hp_volume;
+ unsigned int num_inits;
+ struct snd_kcontrol *master_kctl;
+ struct snd_kcontrol *pcm_kctl;
+ struct snd_kcontrol embedded_pcm_kctl;
+/* struct snd_kcontrol *master_kctl;*/
};
/*
@@ -1797,6 +1806,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 +1966,205 @@ static void alc882_fixup_no_primary_hp(struct hda_codec *codec,
}
}
+
+
+
+
+/* Set PCM volume from Master. HP volume is based on PCM volume exclusively.
+ * TODO: Trigger this function on Master Volume Change.
+ * TODO: Ensure appropriate scaling of PCM levels relative to Master.
+ */
+
+#define CLEVO_PCM_MAX_VOLUME 31
+
+static int snd_clevo_pcm_volume_info(struct snd_kcontrol *kcontrol,
+ struct snd_ctl_elem_info *uinfo)
+{
+
+ printk("SYS76: snd_clevo_pcm_volume_info\n");
+ uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
+ uinfo->count = 2;
+ uinfo->value.integer.min = 0;
+ uinfo->value.integer.max = CLEVO_PCM_MAX_VOLUME;
+ return 0;
+}
+
+static int snd_clevo_pcm_volume_get(struct snd_kcontrol *kcontrol,
+ struct snd_ctl_elem_value *ucontrol)
+{
+
+ printk("SYS76: snd_clevo_pcm_volume_get\n");
+ struct hda_codec *chip = snd_kcontrol_chip(kcontrol);
+ unsigned int idx = kcontrol->id.subdevice;
+
+
+ struct alc_spec *spec = chip->spec;
+
+ printk("SYS76: pcm_volume get...addrs\n");
+ printk("addr spec %lu \n", spec);
+ printk("addr codec %lu \n", chip);
+ printk("spec->hp_volume %u\n", spec->hp_volume);
+
+ if (spec != 0) {
+ printk("meep!\n");
+ ucontrol->value.integer.value[0] = CLEVO_PCM_MAX_VOLUME - spec->hp_volume;//chip->playback_volume[idx][0];
+ ucontrol->value.integer.value[1] = CLEVO_PCM_MAX_VOLUME - spec->hp_volume;//chip->playback_volume[idx][1];
+ }
+ else {
+ printk("leep!\n");
+ ucontrol->value.integer.value[0] = CLEVO_PCM_MAX_VOLUME - 1;//chip->playback_volume[idx][0];
+ ucontrol->value.integer.value[1] = CLEVO_PCM_MAX_VOLUME - 1;//chip->playback_volume[idx][1];
+ }
+ return 0;
+}
+
+//Okay, so this is creating the pcm_volume_ctl, but how is hard?
+static int snd_clevo_pcm_volume_put(struct snd_kcontrol *kcontrol,
+ struct snd_ctl_elem_value *ucontrol)
+{
+ struct hda_codec *chip = snd_kcontrol_chip(kcontrol);
+ unsigned int idx;
+ unsigned char val;
+ int i, change = 0;
+
+ printk("SYS76: snd_clevo_pcm_volume_put\n");
+
+ struct alc_spec *spec = chip->spec;
+ struct snd_card *card = chip->card;
+
+ printk(kcontrol->id.name);
+
+
+ /* */
+/* struct snd_ctl_elem_id pcm_id;*/
+/* struct snd_kcontrol *pcm_control;*/
+/* memset(&pcm_id, 0, sizeof(pcm_id));*/
+/* pcm_id.iface = SNDRV_CTL_ELEM_IFACE_MIXER;*/
+/* pcm_id.device = 0;*/
+/* pcm_id.index = 0;*/
+/* strcpy(pcm_id.name, "PCM Playback Volume");*/
+/* Crashes Here:*/
+/* pcm_control = snd_ctl_find_id(chip->card, &pcm_id);*/
+/* */
+
+ printk("SYS76: PUT snd before find mixer ctl\n");
+
+/* Get the PCM Control to set it. For some reason this fails.*/
+ struct snd_kcontrol * pcm_kctl = snd_hda_find_mixer_ctl(chip, "PCM Playback Volume");
+ struct snd_ctl_elem_value *pcm_uctl;
+
+ printk("SYS76: PUT snd_hda_find_mixer_ctl\n");
+
+ if (!pcm_kctl)
+ printk("SYS76: PUT no kctl\n");
+ return;
+ pcm_uctl = kzalloc(sizeof(*pcm_uctl), GFP_KERNEL);
+ if (!pcm_uctl)
+ return;
+
+/* Set the PCM ucontrol from Master ucontrol*/
+ val = ucontrol->value.integer.value[0];
+ val &= HDA_AMP_VOLMASK;
+
+ pcm_uctl->value.integer.value[0] = val;
+ pcm_uctl->value.integer.value[1] = val;
+ pcm_kctl->put(pcm_kctl, pcm_uctl);
+
+ kfree(pcm_uctl);
+
+ return change;
+}
+
+
+static void alc898_clevo_automute_hook(struct hda_codec *codec,
+ struct hda_jack_callback *jack)
+{
+ int val;
+ snd_hda_codec_write(codec, codec->core.afg, 0,
+ AC_VERB_SET_GPIO_MASK, 2);
+ snd_hda_codec_write(codec, codec->core.afg, 0,
+ AC_VERB_SET_GPIO_DIRECTION, 0);
+
+ struct alc_spec *spec = codec->spec;
+
+ if (snd_hda_jack_detect(codec, 0x1b) && (snd_hda_codec_read(codec, codec->core.afg, 0,
+ AC_VERB_GET_GPIO_DATA, 0) >= 0)) {
+ val = snd_hda_codec_get_pin_target(codec, 0x1b);
+ val |= AC_PINCTL_VREF_80;
+ snd_hda_set_pin_ctl(codec, 0x1b, val);
+ snd_hda_gen_hp_automute(codec, jack);
+ } else {
+ printk("S76: automute case B\n");
+ val = snd_hda_codec_get_pin_target(codec, 0x1b);
+ val = val & 0xfff8;
+ snd_hda_set_pin_ctl(codec, 0x1b, val);
+ snd_hda_gen_hp_automute(codec, jack);
+
+ /* Don't mute the digital output, needed for ESS DAC operation */
+ /* TODO: This might belong in alc898_fixup_clevo instead. */
+ /* struct snd_kcontrol *kctl;
+ kctl = snd_hda_find_mixer_ctl(codec, "IEC958 Playback Switch");
+ if (!kctl)
+ return;
+ kctl->put = NULL; */
+
+ }
+}
+static void alc898_fixup_clevo(struct hda_codec *codec,
+ const struct hda_fixup *fix, int action)
+{
+ struct alc_spec *spec = codec->spec;
+
+ printk("SYS76: version 0020\n");
+ printk("SYS76: num_mixers = %u\n", spec->num_mixers);
+ if (action == HDA_FIXUP_ACT_PRE_PROBE) {
+ spec->gen.detect_hp = 1;
+ spec->gen.automute_speaker = 1;
+ spec->gen.autocfg.hp_pins[0] = 0x1b; /* copy it for automute */
+ snd_hda_jack_detect_enable_callback(codec, 0x1b,
+ alc898_clevo_automute_hook);
+ spec->gen.hp_automute_hook = alc898_clevo_automute_hook;
+ }
+
+
+ struct snd_ctl_elem_id mid;
+ memset(&mid, 0, sizeof(mid));
+ strcpy(mid.name, "PCM Playback Volume");
+ mid.iface = SNDRV_CTL_ELEM_IFACE_MIXER;
+ struct snd_kcontrol * pcm_kcontrol;
+ pcm_kcontrol = snd_ctl_find_id(codec->card, &mid);
+ if (!pcm_kcontrol) {
+ printk("SYS76: No PCM_kcontrol\n");
+ printk("SYS76: oh well\n");
+ return; //returning so we don't do the master stuff until pcm exists...maybe fix kernel panic this way
+ }
+ else {
+ spec->pcm_kctl = pcm_kcontrol;
+ spec->embedded_pcm_kctl = *pcm_kcontrol;
+ printk("MY PCM NUMID IS: %x", pcm_kcontrol->id.numid);
+ }
+
+ struct snd_ctl_elem_id sid;
+ memset(&sid, 0, sizeof(sid));
+ strcpy(sid.name, "Master Playback Volume");
+ sid.iface = SNDRV_CTL_ELEM_IFACE_MIXER;
+ struct snd_kcontrol * newsid;
+ //huh, find_id and find_numid are different...look into this
+ newsid = snd_ctl_find_id(codec->card, &sid);
+ if (!newsid) {
+ printk("SYS76: No PCM Playback Volume ctl\n");
+ //Now try *replacing* the headphone control instead of adding another
+ //the snd_ctl_activate function is interesting maybe?
+ //snd_ctl_replace(codec->card, snd_ctl_new1(&snd_clevo_pcm_volume_control, codec), 0);
+ }
+ else {
+ printk("SYS76: PCM Playback Volume ctl id is %d\n", newsid->id.numid);
+ newsid->put = snd_clevo_pcm_volume_put;
+ printk("SYS76: My ID hahaha!\n");
+ }
+}
+
+
static void alc_fixup_bass_chmap(struct hda_codec *codec,
const struct hda_fixup *fix, int action);
@@ -2195,6 +2404,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[] = {
@@ -2264,6 +2477,41 @@ static const struct snd_pci_quirk alc882_fixup_tbl[] = {
SND_PCI_QUIRK_VENDOR(0x1462, "MSI", ALC882_FIXUP_GPIO3),
SND_PCI_QUIRK(0x1458, 0xa002, "Gigabyte EP45-DS3/Z87X-UD3H", ALC889_FIXUP_FRONT_HP_NO_PRESENCE),
SND_PCI_QUIRK(0x147b, 0x107a, "Abit AW9D-MAX", ALC882_FIXUP_ABIT_AW9D_MAX),
+ SND_PCI_QUIRK(0x1558, 0x0872, "Clevo P870DM2/P870DM3", ALC898_FIXUP_CLEVO_SPDIF),
+ SND_PCI_QUIRK(0x1558, 0x0873, "Clevo P870DM2-G/P870DM3-G", ALC898_FIXUP_CLEVO_SPDIF),
+ SND_PCI_QUIRK(0x1558, 0x0874, "Clevo P870DM2-G/P870DM3-G", ALC898_FIXUP_CLEVO_SPDIF),
+ SND_PCI_QUIRK(0x1558, 0x0875, "Clevo P870KM/P870KM1", ALC898_FIXUP_CLEVO_SPDIF),
+ SND_PCI_QUIRK(0x1558, 0x0876, "Clevo P870KM-G/P870KM1_G", ALC898_FIXUP_CLEVO_SPDIF),
+ SND_PCI_QUIRK(0x1558, 0x65a1, "Clevo P65xHS_HP-D0", ALC898_FIXUP_CLEVO_SPDIF),
+ SND_PCI_QUIRK(0x1558, 0x65a2, "Clevo P65xHS_HP-D", ALC898_FIXUP_CLEVO_SPDIF),
+ SND_PCI_QUIRK(0x1558, 0x65a3, "Clevo P65xHS_HP-G0", ALC898_FIXUP_CLEVO_SPDIF),
+ SND_PCI_QUIRK(0x1558, 0x65a4, "Clevo P65xHS_HP-G", ALC898_FIXUP_CLEVO_SPDIF),
+ SND_PCI_QUIRK(0x1558, 0x67a1, "Clevo P67xHS_HP-D0", ALC898_FIXUP_CLEVO_SPDIF),
+ SND_PCI_QUIRK(0x1558, 0x67a2, "Clevo P67xHS_HP-D", ALC898_FIXUP_CLEVO_SPDIF),
+ SND_PCI_QUIRK(0x1558, 0x67a3, "Clevo P67xHS_HP-G0", ALC898_FIXUP_CLEVO_SPDIF),
+ SND_PCI_QUIRK(0x1558, 0x67a4, "Clevo P67xHS_HP-G", ALC898_FIXUP_CLEVO_SPDIF),
+ SND_PCI_QUIRK(0x1558, 0x6a01, "Clevo P65xRS_RP-D0", ALC898_FIXUP_CLEVO_SPDIF),
+ SND_PCI_QUIRK(0x1558, 0x6a02, "Clevo P65xRS_RP-D", ALC898_FIXUP_CLEVO_SPDIF),
+ SND_PCI_QUIRK(0x1558, 0x6a03, "Clevo P65xRS_RP-G0", ALC898_FIXUP_CLEVO_SPDIF),
+ SND_PCI_QUIRK(0x1558, 0x6a04, "Clevo P65xRS_RP-G", ALC898_FIXUP_CLEVO_SPDIF),
+ SND_PCI_QUIRK(0x1558, 0x6a05, "Clevo P65xRS_RP-V", ALC898_FIXUP_CLEVO_SPDIF),
+ SND_PCI_QUIRK(0x1558, 0x6a06, "Clevo P65xRS_RP-Direct", ALC898_FIXUP_CLEVO_SPDIF),
+ SND_PCI_QUIRK(0x1558, 0x6b01, "Clevo P67xRS_RP-D0", ALC898_FIXUP_CLEVO_SPDIF),
+ SND_PCI_QUIRK(0x1558, 0x6b02, "Clevo P67xRS_RP-D", ALC898_FIXUP_CLEVO_SPDIF),
+ SND_PCI_QUIRK(0x1558, 0x6b03, "Clevo P67xRS_RP-G0", ALC898_FIXUP_CLEVO_SPDIF),
+ SND_PCI_QUIRK(0x1558, 0x6b04, "Clevo P67xRS_RP-G", ALC898_FIXUP_CLEVO_SPDIF),
+ SND_PCI_QUIRK(0x1558, 0x6b05, "Clevo P67xRS_RP-V", ALC898_FIXUP_CLEVO_SPDIF),
+ SND_PCI_QUIRK(0x1558, 0x6b06, "Clevo P67xRS_RP-Direct", ALC898_FIXUP_CLEVO_SPDIF),
+ SND_PCI_QUIRK(0x1558, 0x7504, "Clevo P750DM2", ALC898_FIXUP_CLEVO_SPDIF),
+ SND_PCI_QUIRK(0x1558, 0x7505, "Clevo P750DM2G", ALC898_FIXUP_CLEVO_SPDIF),
+ SND_PCI_QUIRK(0x1558, 0x7506, "Clevo P750KM", ALC898_FIXUP_CLEVO_SPDIF),
+ SND_PCI_QUIRK(0x1558, 0x7507, "Clevo P750KMG", ALC898_FIXUP_CLEVO_SPDIF),
+ SND_PCI_QUIRK(0x1558, 0x7705, "Clevo P775DM2", ALC898_FIXUP_CLEVO_SPDIF),
+ SND_PCI_QUIRK(0x1558, 0x7706, "Clevo P775DM2G", ALC898_FIXUP_CLEVO_SPDIF),
+ SND_PCI_QUIRK(0x1558, 0x7707, "Clevo P775KM", ALC898_FIXUP_CLEVO_SPDIF),
+ SND_PCI_QUIRK(0x1558, 0x7708, "Clevo P775KMG", ALC898_FIXUP_CLEVO_SPDIF),
+ SND_PCI_QUIRK(0x1558, 0x7705, "System76 serw10", ALC898_FIXUP_CLEVO_SPDIF),
+ SND_PCI_QUIRK(0x1558, 0x6b01, "System76 oryp2-ess", ALC898_FIXUP_CLEVO_SPDIF),
SND_PCI_QUIRK_VENDOR(0x1558, "Clevo laptop", ALC882_FIXUP_EAPD),
SND_PCI_QUIRK(0x161f, 0x2054, "Medion laptop", ALC883_FIXUP_EAPD),
SND_PCI_QUIRK(0x17aa, 0x3a0d, "Lenovo Y530", ALC882_FIXUP_LENOVO_Y530),
@@ -2277,6 +2525,7 @@ static const struct hda_model_fixup alc882_fixup_models[] = {
{.id = ALC883_FIXUP_ACER_EAPD, .name = "acer-aspire"},
{.id = ALC882_FIXUP_INV_DMIC, .name = "inv-dmic"},
{.id = ALC882_FIXUP_NO_PRIMARY_HP, .name = "no-primary-hp"},
+ {.id = ALC898_FIXUP_CLEVO_SPDIF, .name = "system76"},
{}
};
[-- Attachment #3: alsa-info.txt --]
[-- Type: text/plain, Size: 48228 bytes --]
upload=true&script=true&cardinfo=
!!################################
!!ALSA Information Script v 0.4.64
!!################################
!!Script ran on: Tue Nov 8 18:28:09 UTC 2016
!!Linux Distribution
!!------------------
Ubuntu 16.04.1 LTS \n \l DISTRIB_ID=Ubuntu DISTRIB_DESCRIPTION="Ubuntu 16.04.1 LTS" NAME="Ubuntu" ID=ubuntu ID_LIKE=debian PRETTY_NAME="Ubuntu 16.04.1 LTS" HOME_URL="http://www.ubuntu.com/" SUPPORT_URL="http://help.ubuntu.com/" BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/" UBUNTU_CODENAME=xenial
!!DMI Information
!!---------------
Manufacturer: System76, Inc.
Product Name: Oryx Pro
Product Version: oryp2-ess
Firmware Version: 1.05.04RSA2
!!Kernel Information
!!------------------
Kernel release: 4.4.0-38-generic
Operating System: GNU/Linux
Architecture: x86_64
Processor: x86_64
SMP Enabled: Yes
!!ALSA Version
!!------------
Driver version: k4.4.0-38-generic
Library version: 1.1.0
Utilities version: 1.1.0
!!Loaded ALSA modules
!!-------------------
snd_hda_intel
snd_hda_intel
!!Sound Servers on this system
!!----------------------------
Pulseaudio:
Installed - Yes (/usr/bin/pulseaudio)
Running - Yes
!!Soundcards recognised by ALSA
!!-----------------------------
0 [PCH ]: HDA-Intel - HDA Intel PCH
HDA Intel PCH at 0x2ffff20000 irq 127
1 [NVidia ]: HDA-Intel - HDA NVidia
HDA NVidia at 0xdc080000 irq 17
!!PCI Soundcards installed in the system
!!--------------------------------------
00:1f.3 Audio device: Intel Corporation Sunrise Point-H HD Audio (rev 31)
01:00.1 Audio device: NVIDIA Corporation Device 10f0 (rev a1)
!!Advanced information - PCI Vendor/Device/Subsystem ID's
!!-------------------------------------------------------
00:1f.3 0403: 8086:a170 (rev 31)
Subsystem: 1558:6b02
--
01:00.1 0403: 10de:10f0 (rev a1)
Subsystem: 1558:6b01
!!Modprobe options (Sound related)
!!--------------------------------
snd_pcsp: index=-2
snd_usb_audio: index=-2
snd_atiixp_modem: index=-2
snd_intel8x0m: index=-2
snd_via82xx_modem: index=-2
snd_atiixp_modem: index=-2
snd_intel8x0m: index=-2
snd_via82xx_modem: index=-2
snd_usb_audio: index=-2
snd_usb_caiaq: index=-2
snd_usb_ua101: index=-2
snd_usb_us122l: index=-2
snd_usb_usx2y: index=-2
snd_cmipci: mpu_port=0x330 fm_port=0x388
snd_pcsp: index=-2
snd_usb_audio: index=-2
snd_hda_intel: system76-audio-patch
snd_hda_intel: patch=system76-audio-patch
!!Loaded sound module options
!!---------------------------
!!Module: snd_hda_intel
align_buffer_size : -1
bdl_pos_adj : 1,32,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
beep_mode : N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N
enable : Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y
enable_msi : -1
id : (null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null)
index : -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
jackpoll_ms : 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
model : (null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null)
patch : system76-audio-patch,(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null)
position_fix : -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
power_save : 0
power_save_controller : Y
probe_mask : -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
probe_only : 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
single_cmd : N
snoop : -1
!!Module: snd_hda_intel
align_buffer_size : -1
bdl_pos_adj : 1,32,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
beep_mode : N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N
enable : Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y
enable_msi : -1
id : (null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null)
index : -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
jackpoll_ms : 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
model : (null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null)
patch : system76-audio-patch,(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null)
position_fix : -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
power_save : 0
power_save_controller : Y
probe_mask : -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
probe_only : 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
single_cmd : N
snoop : -1
!!HDA-Intel Codec information
!!---------------------------
--startcollapse--
Codec: Realtek ALC898
Address: 0
AFG Function Id: 0x1 (unsol 1)
Vendor Id: 0x10ec0899
Subsystem Id: 0x15586b02
Revision Id: 0x100003
No Modem Function Group found
Default PCM:
rates [0x5f0]: 32000 44100 48000 88200 96000 192000
bits [0xe]: 16 20 24
formats [0x1]: PCM
Default Amp-In caps: N/A
Default Amp-Out caps: N/A
State of AFG node 0x01:
Power states: D0 D1 D2 D3 CLKSTOP EPSS
Power: setting=D0, actual=D0
GPIO: io=2, o=0, i=0, unsolicited=1, wake=0
IO[0]: enable=0, dir=0, wake=0, sticky=0, data=0, unsol=0
IO[1]: enable=0, dir=0, wake=0, sticky=0, data=0, unsol=0
Node 0x02 [Audio Output] wcaps 0x411: Stereo
Device: name="ALC898 Analog", type="Audio", device=0
Converter: stream=1, channel=0
PCM:
rates [0x5e0]: 44100 48000 88200 96000 192000
bits [0xe]: 16 20 24
formats [0x1]: PCM
Power states: D0 D1 D2 D3 EPSS
Power: setting=D0, actual=D0
Node 0x03 [Audio Output] wcaps 0x411: Stereo
Converter: stream=1, channel=0
PCM:
rates [0x5e0]: 44100 48000 88200 96000 192000
bits [0xe]: 16 20 24
formats [0x1]: PCM
Power states: D0 D1 D2 D3 EPSS
Power: setting=D0, actual=D0
Node 0x04 [Audio Output] wcaps 0x411: Stereo
Converter: stream=1, channel=0
PCM:
rates [0x5e0]: 44100 48000 88200 96000 192000
bits [0xe]: 16 20 24
formats [0x1]: PCM
Power states: D0 D1 D2 D3 EPSS
Power: setting=D0, actual=D0
Node 0x05 [Audio Output] wcaps 0x411: Stereo
Converter: stream=0, channel=0
PCM:
rates [0x5e0]: 44100 48000 88200 96000 192000
bits [0xe]: 16 20 24
formats [0x1]: PCM
Power states: D0 D1 D2 D3 EPSS
Power: setting=D0, actual=D0
Node 0x06 [Audio Output] wcaps 0x611: Stereo Digital
Control: name="IEC958 Playback Con Mask", index=0, device=0
Control: name="IEC958 Playback Pro Mask", index=0, device=0
Control: name="IEC958 Playback Default", index=0, device=0
Control: name="IEC958 Playback Switch", index=0, device=0
Control: name="IEC958 Default PCM Playback Switch", index=0, device=0
Device: name="ALC898 Digital", type="SPDIF", device=1
Converter: stream=1, channel=0
Digital:
Digital category: 0x0
IEC Coding Type: 0x0
PCM:
rates [0x5f0]: 32000 44100 48000 88200 96000 192000
bits [0xe]: 16 20 24
formats [0x1]: PCM
Power states: D0 D1 D2 D3 EPSS
Power: setting=D0, actual=D0
Node 0x07 [Audio Input] wcaps 0x10051b: Stereo Amp-In
Control: name="Capture Volume", index=0, device=0
ControlAmp: chs=3, dir=In, idx=0, ofs=0
Control: name="Capture Switch", index=0, device=0
ControlAmp: chs=3, dir=In, idx=0, ofs=0
Device: name="ALC898 Analog", type="Audio", device=0
Amp-In caps: ofs=0x17, nsteps=0x3f, stepsize=0x02, mute=1
Amp-In vals: [0xb2 0xb2]
Converter: stream=1, channel=0
SDI-Select: 0
PCM:
rates [0x5e0]: 44100 48000 88200 96000 192000
bits [0xe]: 16 20 24
formats [0x1]: PCM
Power states: D0 D1 D2 D3 EPSS
Power: setting=D0, actual=D0
Connection: 1
0x24
Node 0x08 [Audio Input] wcaps 0x10051b: Stereo Amp-In
Amp-In caps: ofs=0x17, nsteps=0x3f, stepsize=0x02, mute=1
Amp-In vals: [0x97 0x97]
Converter: stream=0, channel=0
SDI-Select: 0
PCM:
rates [0x5e0]: 44100 48000 88200 96000 192000
bits [0xe]: 16 20 24
formats [0x1]: PCM
Power states: D0 D1 D2 D3 EPSS
Power: setting=D0, actual=D0
Connection: 1
0x23
Node 0x09 [Audio Input] wcaps 0x10051b: Stereo Amp-In
Amp-In caps: ofs=0x17, nsteps=0x3f, stepsize=0x02, mute=1
Amp-In vals: [0x97 0x97]
Converter: stream=0, channel=0
SDI-Select: 0
PCM:
rates [0x5e0]: 44100 48000 88200 96000 192000
bits [0xe]: 16 20 24
formats [0x1]: PCM
Power states: D0 D1 D2 D3 EPSS
Power: setting=D0, actual=D0
Connection: 1
0x22
Node 0x0a [Audio Input] wcaps 0x100791: Stereo Digital
Converter: stream=0, channel=0
SDI-Select: 0
Digital:
Digital category: 0x0
IEC Coding Type: 0x0
PCM:
rates [0x570]: 32000 44100 48000 96000 192000
bits [0xe]: 16 20 24
formats [0x1]: PCM
Unsolicited: tag=00, enabled=0
Power states: D0 D1 D2 D3 EPSS
Power: setting=D0, actual=D0
Connection: 1
0x1f
Node 0x0b [Audio Mixer] wcaps 0x20010b: Stereo Amp-In
Control: name="Mic Playback Volume", index=0, device=0
ControlAmp: chs=3, dir=In, idx=0, ofs=0
Control: name="Mic Playback Switch", index=0, device=0
ControlAmp: chs=3, dir=In, idx=0, ofs=0
Control: name="Beep Playback Volume", index=0, device=0
ControlAmp: chs=3, dir=In, idx=5, ofs=0
Control: name="Beep Playback Switch", index=0, device=0
ControlAmp: chs=3, dir=In, idx=5, ofs=0
Amp-In caps: ofs=0x17, nsteps=0x1f, stepsize=0x05, mute=1
Amp-In vals: [0x80 0x80] [0x80 0x80] [0x80 0x80] [0x80 0x80] [0x80 0x80] [0x80 0x80] [0x80 0x80] [0x80 0x80] [0x80 0x80] [0x80 0x80]
Connection: 10
0x18 0x19 0x1a 0x1b 0x1c 0x1d 0x14 0x15 0x16 0x17
Node 0x0c [Audio Mixer] wcaps 0x20010f: Stereo Amp-In Amp-Out
Control: name="Line Out Playback Volume", index=0, device=0
ControlAmp: chs=3, dir=Out, idx=0, ofs=0
Amp-In caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
Amp-In vals: [0x00 0x00] [0x00 0x00]
Amp-Out caps: ofs=0x57, nsteps=0x57, stepsize=0x02, mute=0
Amp-Out vals: [0x00 0x00]
Connection: 2
0x02 0x0b
Node 0x0d [Audio Mixer] wcaps 0x20010f: Stereo Amp-In Amp-Out
Control: name="Headphone Playback Volume", index=0, device=0
ControlAmp: chs=3, dir=Out, idx=0, ofs=0
Amp-In caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
Amp-In vals: [0x00 0x00] [0x00 0x00]
Amp-Out caps: ofs=0x57, nsteps=0x57, stepsize=0x02, mute=0
Amp-Out vals: [0x00 0x00]
Connection: 2
0x03 0x0b
Node 0x0e [Audio Mixer] wcaps 0x20010f: Stereo Amp-In Amp-Out
Control: name="Speaker Playback Volume", index=0, device=0
ControlAmp: chs=3, dir=Out, idx=0, ofs=0
Amp-In caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
Amp-In vals: [0x00 0x00] [0x00 0x00]
Amp-Out caps: ofs=0x57, nsteps=0x57, stepsize=0x02, mute=0
Amp-Out vals: [0x00 0x00]
Connection: 2
0x04 0x0b
Node 0x0f [Audio Mixer] wcaps 0x20010f: Stereo Amp-In Amp-Out
Amp-In caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
Amp-In vals: [0x00 0x00] [0x80 0x80]
Amp-Out caps: ofs=0x57, nsteps=0x57, stepsize=0x02, mute=0
Amp-Out vals: [0x57 0x57]
Connection: 2
0x05 0x0b
Node 0x10 [Audio Output] wcaps 0x611: Stereo Digital
Converter: stream=0, channel=0
Digital:
Digital category: 0x0
IEC Coding Type: 0x0
PCM:
rates [0x5f0]: 32000 44100 48000 88200 96000 192000
bits [0xe]: 16 20 24
formats [0x1]: PCM
Power states: D0 D1 D2 D3 EPSS
Power: setting=D0, actual=D0
Node 0x11 [Pin Complex] wcaps 0x400701: Stereo Digital
Pincap 0x00000010: OUT
Pin Default 0x4000d000: [N/A] Line Out at Ext N/A
Conn = Unknown, Color = UNKNOWN
DefAssociation = 0x0, Sequence = 0x0
Pin-ctls: 0x40: OUT
Power states: D0 D1 D2 D3 EPSS
Power: setting=D0, actual=D0
Connection: 1
0x10
Node 0x12 [Pin Complex] wcaps 0x400401: Stereo
Pincap 0x00000020: IN
Pin Default 0x90a60150: [Fixed] Mic at Int N/A
Conn = Digital, Color = Unknown
DefAssociation = 0x5, Sequence = 0x0
Misc = NO_PRESENCE
Pin-ctls: 0x20: IN
Power states: D0 D1 D2 D3 EPSS
Power: setting=D0, actual=D0
Node 0x13 [Vendor Defined Widget] wcaps 0xf00000: Mono
Node 0x14 [Pin Complex] wcaps 0x40058d: Stereo Amp-Out
Control: name="Speaker Playback Switch", index=0, device=0
ControlAmp: chs=3, dir=Out, idx=0, ofs=0
Amp-Out caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
Amp-Out vals: [0x00 0x00]
Pincap 0x0001003c: IN OUT HP EAPD Detect
EAPD 0x2: EAPD
Pin Default 0x90170110: [Fixed] Speaker at Int N/A
Conn = Analog, Color = Unknown
DefAssociation = 0x1, Sequence = 0x0
Misc = NO_PRESENCE
Pin-ctls: 0x40: OUT
Unsolicited: tag=00, enabled=0
Power states: D0 D1 D2 D3 EPSS
Power: setting=D0, actual=D0
Connection: 5
0x0c 0x0d 0x0e* 0x0f 0x26
Node 0x15 [Pin Complex] wcaps 0x40058d: Stereo Amp-Out
Amp-Out caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
Amp-Out vals: [0x80 0x80]
Pincap 0x0000003c: IN OUT HP Detect
Pin Default 0x411111f0: [N/A] Speaker at Ext Rear
Conn = 1/8, Color = Black
DefAssociation = 0xf, Sequence = 0x0
Misc = NO_PRESENCE
Pin-ctls: 0x20: IN
Unsolicited: tag=00, enabled=0
Power states: D0 D1 D2 D3 EPSS
Power: setting=D0, actual=D0
Connection: 5
0x0c 0x0d* 0x0e 0x0f 0x26
Node 0x16 [Pin Complex] wcaps 0x40058d: Stereo Amp-Out
Amp-Out caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
Amp-Out vals: [0x80 0x80]
Pincap 0x0000003c: IN OUT HP Detect
Pin Default 0x411111f0: [N/A] Speaker at Ext Rear
Conn = 1/8, Color = Black
DefAssociation = 0xf, Sequence = 0x0
Misc = NO_PRESENCE
Pin-ctls: 0x20: IN
Unsolicited: tag=00, enabled=0
Power states: D0 D1 D2 D3 EPSS
Power: setting=D0, actual=D0
Connection: 5
0x0c 0x0d 0x0e* 0x0f 0x26
Node 0x17 [Pin Complex] wcaps 0x40058d: Stereo Amp-Out
Control: name="Line Out Playback Switch", index=0, device=0
ControlAmp: chs=3, dir=Out, idx=0, ofs=0
Amp-Out caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
Amp-Out vals: [0x00 0x00]
Pincap 0x0000003c: IN OUT HP Detect
Pin Default 0x01011020: [Jack] Line Out at Ext Rear
Conn = 1/8, Color = Black
DefAssociation = 0x2, Sequence = 0x0
Pin-ctls: 0x40: OUT
Unsolicited: tag=02, enabled=1
Power states: D0 D1 D2 D3 EPSS
Power: setting=D0, actual=D0
Connection: 5
0x0c* 0x0d 0x0e 0x0f 0x26
Node 0x18 [Pin Complex] wcaps 0x40058f: Stereo Amp-In Amp-Out
Control: name="Mic Boost Volume", index=0, device=0
ControlAmp: chs=3, dir=In, idx=0, ofs=0
Amp-In caps: ofs=0x00, nsteps=0x03, stepsize=0x27, mute=0
Amp-In vals: [0x00 0x00]
Amp-Out caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
Amp-Out vals: [0x80 0x80]
Pincap 0x0000373c: IN OUT HP Detect
Vref caps: HIZ 50 GRD 80 100
Pin Default 0x01a11040: [Jack] Mic at Ext Rear
Conn = 1/8, Color = Black
DefAssociation = 0x4, Sequence = 0x0
Pin-ctls: 0x21: IN VREF_50
Unsolicited: tag=03, enabled=1
Power states: D0 D1 D2 D3 EPSS
Power: setting=D0, actual=D0
Connection: 5
0x0c* 0x0d 0x0e 0x0f 0x26
Node 0x19 [Pin Complex] wcaps 0x40058f: Stereo Amp-In Amp-Out
Amp-In caps: ofs=0x00, nsteps=0x03, stepsize=0x27, mute=0
Amp-In vals: [0x00 0x00]
Amp-Out caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
Amp-Out vals: [0x80 0x80]
Pincap 0x0000373c: IN OUT HP Detect
Vref caps: HIZ 50 GRD 80 100
Pin Default 0x411111f0: [N/A] Speaker at Ext Rear
Conn = 1/8, Color = Black
DefAssociation = 0xf, Sequence = 0x0
Misc = NO_PRESENCE
Pin-ctls: 0x20: IN VREF_HIZ
Unsolicited: tag=00, enabled=0
Power states: D0 D1 D2 D3 EPSS
Power: setting=D0, actual=D0
Connection: 5
0x0c* 0x0d 0x0e 0x0f 0x26
Node 0x1a [Pin Complex] wcaps 0x40058f: Stereo Amp-In Amp-Out
Amp-In caps: ofs=0x00, nsteps=0x03, stepsize=0x27, mute=0
Amp-In vals: [0x00 0x00]
Amp-Out caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
Amp-Out vals: [0x80 0x80]
Pincap 0x0000373c: IN OUT HP Detect
Vref caps: HIZ 50 GRD 80 100
Pin Default 0x411111f0: [N/A] Speaker at Ext Rear
Conn = 1/8, Color = Black
DefAssociation = 0xf, Sequence = 0x0
Misc = NO_PRESENCE
Pin-ctls: 0x20: IN VREF_HIZ
Unsolicited: tag=00, enabled=0
Power states: D0 D1 D2 D3 EPSS
Power: setting=D0, actual=D0
Connection: 5
0x0c* 0x0d 0x0e 0x0f 0x26
Node 0x1b [Pin Complex] wcaps 0x40058f: Stereo Amp-In Amp-Out
Control: name="Headphone Playback Switch", index=0, device=0
ControlAmp: chs=3, dir=Out, idx=0, ofs=0
Amp-In caps: ofs=0x00, nsteps=0x03, stepsize=0x27, mute=0
Amp-In vals: [0x00 0x00]
Amp-Out caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
Amp-Out vals: [0x80 0x80]
Pincap 0x0001373c: IN OUT HP EAPD Detect
Vref caps: HIZ 50 GRD 80 100
EAPD 0x2: EAPD
Pin Default 0x411111f0: [N/A] Speaker at Ext Rear
Conn = 1/8, Color = Black
DefAssociation = 0xf, Sequence = 0x0
Misc = NO_PRESENCE
Pin-ctls: 0xc0: OUT HP VREF_HIZ
Unsolicited: tag=01, enabled=1
Power states: D0 D1 D2 D3 EPSS
Power: setting=D0, actual=D0
Connection: 5
0x0c 0x0d* 0x0e 0x0f 0x26
Node 0x1c [Pin Complex] wcaps 0x400481: Stereo
Pincap 0x00000024: IN Detect
Pin Default 0x411111f0: [N/A] Speaker at Ext Rear
Conn = 1/8, Color = Black
DefAssociation = 0xf, Sequence = 0x0
Misc = NO_PRESENCE
Pin-ctls: 0x20: IN
Unsolicited: tag=00, enabled=0
Power states: D0 D1 D2 D3 EPSS
Power: setting=D0, actual=D0
Node 0x1d [Pin Complex] wcaps 0x400400: Mono
Pincap 0x00000020: IN
Pin Default 0x40330829: [N/A] CD at Ext N/A
Conn = ATAPI, Color = Unknown
DefAssociation = 0x2, Sequence = 0x9
Pin-ctls: 0x20: IN
Power states: D0 D1 D2 D3 EPSS
Power: setting=D0, actual=D0
Node 0x1e [Pin Complex] wcaps 0x400701: Stereo Digital
Pincap 0x00000010: OUT
Pin Default 0x01441130: [Jack] SPDIF Out at Ext Rear
Conn = RCA, Color = Black
DefAssociation = 0x3, Sequence = 0x0
Misc = NO_PRESENCE
Pin-ctls: 0x40: OUT
Power states: D0 D1 D2 D3 EPSS
Power: setting=D0, actual=D0
Connection: 1
0x06
Node 0x1f [Pin Complex] wcaps 0x400681: Stereo Digital
Pincap 0x00000020: IN
Pin Default 0x411111f0: [N/A] Speaker at Ext Rear
Conn = 1/8, Color = Black
DefAssociation = 0xf, Sequence = 0x0
Misc = NO_PRESENCE
Pin-ctls: 0x20: IN
Unsolicited: tag=00, enabled=0
Power states: D0 D1 D2 D3 EPSS
Power: setting=D0, actual=D0
Node 0x20 [Vendor Defined Widget] wcaps 0xf00040: Mono
Processing caps: benign=0, ncoeff=28
Node 0x21 [Vendor Defined Widget] wcaps 0xf00000: Mono
Node 0x22 [Audio Mixer] wcaps 0x20010b: Stereo Amp-In
Amp-In caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
Amp-In vals: [0x80 0x80] [0x80 0x80] [0x80 0x80] [0x80 0x80] [0x80 0x80] [0x80 0x80] [0x80 0x80] [0x80 0x80] [0x80 0x80] [0x80 0x80] [0x80 0x80]
Connection: 11
0x18 0x19 0x1a 0x1b 0x1c 0x1d 0x14 0x15 0x16 0x17 0x0b
Node 0x23 [Audio Mixer] wcaps 0x20010b: Stereo Amp-In
Amp-In caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
Amp-In vals: [0x80 0x80] [0x80 0x80] [0x80 0x80] [0x80 0x80] [0x80 0x80] [0x80 0x80] [0x80 0x80] [0x80 0x80] [0x80 0x80] [0x80 0x80] [0x80 0x80]
Connection: 11
0x18 0x19 0x1a 0x1b 0x1c 0x1d 0x14 0x15 0x16 0x17 0x0b
Node 0x24 [Audio Selector] wcaps 0x300101: Stereo
Connection: 12
0x18 0x19 0x1a 0x1b 0x1c 0x1d 0x14 0x15 0x16 0x17 0x0b 0x12*
Node 0x25 [Audio Output] wcaps 0x411: Stereo
Converter: stream=0, channel=0
PCM:
rates [0x5e0]: 44100 48000 88200 96000 192000
bits [0xe]: 16 20 24
formats [0x1]: PCM
Power states: D0 D1 D2 D3 EPSS
Power: setting=D0, actual=D0
Node 0x26 [Audio Mixer] wcaps 0x20010f: Stereo Amp-In Amp-Out
Amp-In caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
Amp-In vals: [0x00 0x00] [0x80 0x80]
Amp-Out caps: ofs=0x57, nsteps=0x57, stepsize=0x02, mute=0
Amp-Out vals: [0x57 0x57]
Connection: 2
0x25 0x0b
Codec: Nvidia Generic HDMI
Address: 0
AFG Function Id: 0x1 (unsol 0)
Vendor Id: 0x10de0083
Subsystem Id: 0x15586b01
Revision Id: 0x100100
No Modem Function Group found
Default PCM:
rates [0x0]:
bits [0x0]:
formats [0x0]:
Default Amp-In caps: N/A
Default Amp-Out caps: N/A
State of AFG node 0x01:
Power states: D0 D1 D2 D3 CLKSTOP EPSS
Power: setting=D0, actual=D0
GPIO: io=0, o=0, i=0, unsolicited=0, wake=0
Node 0x04 [Pin Complex] wcaps 0x407381: 8-Channels Digital CP
Control: name="IEC958 Playback Con Mask", index=0, device=0
Control: name="IEC958 Playback Pro Mask", index=0, device=0
Control: name="IEC958 Playback Default", index=0, device=0
Control: name="IEC958 Playback Switch", index=0, device=0
Control: name="ELD", index=0, device=3
Pincap 0x09000094: OUT Detect HBR HDMI DP
Pin Default 0x185600f0: [Jack] Digital Out at Int HDMI
Conn = Digital, Color = Unknown
DefAssociation = 0xf, Sequence = 0x0
Pin-ctls: 0x40: OUT
Unsolicited: tag=01, enabled=1
Connection: 4
0x0a* 0x0b 0x0c 0x0d
Node 0x05 [Pin Complex] wcaps 0x407381: 8-Channels Digital CP
Pincap 0x09000094: OUT Detect HBR HDMI DP
Pin Default 0x585600f0: [N/A] Digital Out at Int HDMI
Conn = Digital, Color = Unknown
DefAssociation = 0xf, Sequence = 0x0
Pin-ctls: 0x00:
Unsolicited: tag=00, enabled=0
Connection: 4
0x0a* 0x0b 0x0c 0x0d
Node 0x06 [Pin Complex] wcaps 0x407381: 8-Channels Digital CP
Control: name="IEC958 Playback Con Mask", index=1, device=0
Control: name="IEC958 Playback Pro Mask", index=1, device=0
Control: name="IEC958 Playback Default", index=1, device=0
Control: name="IEC958 Playback Switch", index=1, device=0
Control: name="ELD", index=0, device=7
Pincap 0x09000094: OUT Detect HBR HDMI DP
Pin Default 0x185600f0: [Jack] Digital Out at Int HDMI
Conn = Digital, Color = Unknown
DefAssociation = 0xf, Sequence = 0x0
Pin-ctls: 0x40: OUT
Unsolicited: tag=02, enabled=1
Connection: 4
0x0a* 0x0b 0x0c 0x0d
Node 0x07 [Pin Complex] wcaps 0x407381: 8-Channels Digital CP
Control: name="IEC958 Playback Con Mask", index=2, device=0
Control: name="IEC958 Playback Pro Mask", index=2, device=0
Control: name="IEC958 Playback Default", index=2, device=0
Control: name="IEC958 Playback Switch", index=2, device=0
Control: name="ELD", index=0, device=8
Pincap 0x09000094: OUT Detect HBR HDMI DP
Pin Default 0x185600f0: [Jack] Digital Out at Int HDMI
Conn = Digital, Color = Unknown
DefAssociation = 0xf, Sequence = 0x0
Pin-ctls: 0x40: OUT
Unsolicited: tag=03, enabled=1
Connection: 4
0x0a* 0x0b 0x0c 0x0d
Node 0x08 [Pin Complex] wcaps 0x407381: 8-Channels Digital CP
Pincap 0x09000094: OUT Detect HBR HDMI DP
Pin Default 0x585600f0: [N/A] Digital Out at Int HDMI
Conn = Digital, Color = Unknown
DefAssociation = 0xf, Sequence = 0x0
Pin-ctls: 0x00:
Unsolicited: tag=00, enabled=0
Connection: 4
0x0a* 0x0b 0x0c 0x0d
Node 0x09 [Pin Complex] wcaps 0x407381: 8-Channels Digital CP
Pincap 0x09000094: OUT Detect HBR HDMI DP
Pin Default 0x585600f0: [N/A] Digital Out at Int HDMI
Conn = Digital, Color = Unknown
DefAssociation = 0xf, Sequence = 0x0
Pin-ctls: 0x00:
Unsolicited: tag=00, enabled=0
Connection: 4
0x0a* 0x0b 0x0c 0x0d
Node 0x0a [Audio Output] wcaps 0x62b1: 8-Channels Digital Stripe
Converter: stream=5, channel=0
Digital: Enabled
Digital category: 0x0
IEC Coding Type: 0x0
PCM:
rates [0x7f0]: 32000 44100 48000 88200 96000 176400 192000
bits [0xe]: 16 20 24
formats [0x5]: PCM AC3
Unsolicited: tag=00, enabled=0
Node 0x0b [Audio Output] wcaps 0x62b1: 8-Channels Digital Stripe
Converter: stream=0, channel=0
Digital:
Digital category: 0x0
IEC Coding Type: 0x0
PCM:
rates [0x7f0]: 32000 44100 48000 88200 96000 176400 192000
bits [0xe]: 16 20 24
formats [0x5]: PCM AC3
Unsolicited: tag=00, enabled=0
Node 0x0c [Audio Output] wcaps 0x62b1: 8-Channels Digital Stripe
Converter: stream=0, channel=0
Digital:
Digital category: 0x0
IEC Coding Type: 0x0
PCM:
rates [0x7f0]: 32000 44100 48000 88200 96000 176400 192000
bits [0xe]: 16 20 24
formats [0x5]: PCM AC3
Unsolicited: tag=00, enabled=0
Node 0x0d [Audio Output] wcaps 0x62b1: 8-Channels Digital Stripe
Converter: stream=0, channel=0
Digital:
Digital category: 0x0
IEC Coding Type: 0x0
PCM:
rates [0x7f0]: 32000 44100 48000 88200 96000 176400 192000
bits [0xe]: 16 20 24
formats [0x5]: PCM AC3
Unsolicited: tag=00, enabled=0
--endcollapse--
!!ALSA Device nodes
!!-----------------
crw-rw----+ 1 root audio 116, 2 Nov 8 11:26 /dev/snd/controlC0
crw-rw----+ 1 root audio 116, 7 Nov 8 11:26 /dev/snd/controlC1
crw-rw----+ 1 root audio 116, 6 Nov 8 11:26 /dev/snd/hwC0D0
crw-rw----+ 1 root audio 116, 11 Nov 8 11:26 /dev/snd/hwC1D0
crw-rw----+ 1 root audio 116, 4 Nov 8 11:26 /dev/snd/pcmC0D0c
crw-rw----+ 1 root audio 116, 3 Nov 8 11:26 /dev/snd/pcmC0D0p
crw-rw----+ 1 root audio 116, 5 Nov 8 11:26 /dev/snd/pcmC0D1p
crw-rw----+ 1 root audio 116, 8 Nov 8 11:27 /dev/snd/pcmC1D3p
crw-rw----+ 1 root audio 116, 9 Nov 8 11:26 /dev/snd/pcmC1D7p
crw-rw----+ 1 root audio 116, 10 Nov 8 11:26 /dev/snd/pcmC1D8p
crw-rw----+ 1 root audio 116, 1 Nov 8 11:26 /dev/snd/seq
crw-rw----+ 1 root audio 116, 33 Nov 8 11:26 /dev/snd/timer
/dev/snd/by-path:
total 0
drwxr-xr-x 2 root root 80 Nov 8 11:26 .
drwxr-xr-x 3 root root 300 Nov 8 11:26 ..
lrwxrwxrwx 1 root root 12 Nov 8 11:26 pci-0000:00:1f.3 -> ../controlC0
lrwxrwxrwx 1 root root 12 Nov 8 11:26 pci-0000:01:00.1 -> ../controlC1
!!Aplay/Arecord output
!!--------------------
APLAY
**** List of PLAYBACK Hardware Devices ****
card 0: PCH [HDA Intel PCH], device 0: ALC898 Analog [ALC898 Analog]
Subdevices: 0/1
Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 1: ALC898 Digital [ALC898 Digital]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 1: NVidia [HDA NVidia], device 3: HDMI 0 [HDMI 0]
Subdevices: 0/1
Subdevice #0: subdevice #0
card 1: NVidia [HDA NVidia], device 7: HDMI 1 [HDMI 1]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 1: NVidia [HDA NVidia], device 8: HDMI 2 [HDMI 2]
Subdevices: 1/1
Subdevice #0: subdevice #0
ARECORD
**** List of CAPTURE Hardware Devices ****
card 0: PCH [HDA Intel PCH], device 0: ALC898 Analog [ALC898 Analog]
Subdevices: 0/1
Subdevice #0: subdevice #0
!!Amixer output
!!-------------
!!-------Mixer controls for card 0 [PCH]
Card hw:0 'PCH'/'HDA Intel PCH at 0x2ffff20000 irq 127'
Mixer name : 'Realtek ALC898'
Components : 'HDA:10ec0899,15586b02,00100003'
Controls : 32
Simple ctrls : 13
Simple mixer control 'Master',0
Capabilities: pvolume pvolume-joined pswitch pswitch-joined
Playback channels: Mono
Limits: Playback 0 - 87
Mono: Playback 78 [90%] [-6.75dB] [on]
Simple mixer control 'Headphone',0
Capabilities: pvolume pswitch
Playback channels: Front Left - Front Right
Limits: Playback 0 - 87
Mono:
Front Left: Playback 0 [0%] [-65.25dB] [off]
Front Right: Playback 0 [0%] [-65.25dB] [off]
Simple mixer control 'Speaker',0
Capabilities: pvolume pswitch
Playback channels: Front Left - Front Right
Limits: Playback 0 - 87
Mono:
Front Left: Playback 87 [100%] [0.00dB] [on]
Front Right: Playback 87 [100%] [0.00dB] [on]
Simple mixer control 'PCM',0
Capabilities: pvolume
Playback channels: Front Left - Front Right
Limits: Playback 0 - 255
Mono:
Front Left: Playback 255 [100%] [0.00dB]
Front Right: Playback 255 [100%] [0.00dB]
Simple mixer control 'Line Out',0
Capabilities: pvolume pswitch
Playback channels: Front Left - Front Right
Limits: Playback 0 - 87
Mono:
Front Left: Playback 87 [100%] [0.00dB] [on]
Front Right: Playback 87 [100%] [0.00dB] [on]
Simple mixer control 'Mic',0
Capabilities: pvolume pswitch
Playback channels: Front Left - Front Right
Limits: Playback 0 - 31
Mono:
Front Left: Playback 0 [0%] [-34.50dB] [off]
Front Right: Playback 0 [0%] [-34.50dB] [off]
Simple mixer control 'Mic Boost',0
Capabilities: volume
Playback channels: Front Left - Front Right
Capture channels: Front Left - Front Right
Limits: 0 - 3
Front Left: 0 [0%] [0.00dB]
Front Right: 0 [0%] [0.00dB]
Simple mixer control 'IEC958',0
Capabilities: pswitch pswitch-joined
Playback channels: Mono
Mono: Playback [off]
Simple mixer control 'IEC958 Default PCM',0
Capabilities: pswitch pswitch-joined
Playback channels: Mono
Mono: Playback [on]
Simple mixer control 'Beep',0
Capabilities: pvolume pswitch
Playback channels: Front Left - Front Right
Limits: Playback 0 - 31
Mono:
Front Left: Playback 0 [0%] [-34.50dB] [off]
Front Right: Playback 0 [0%] [-34.50dB] [off]
Simple mixer control 'Capture',0
Capabilities: cvolume cswitch
Capture channels: Front Left - Front Right
Limits: Capture 0 - 63
Front Left: Capture 50 [79%] [20.25dB] [off]
Front Right: Capture 50 [79%] [20.25dB] [off]
Simple mixer control 'Auto-Mute Mode',0
Capabilities: enum
Items: 'Disabled' 'Speaker Only' 'Line Out+Speaker'
Item0: 'Line Out+Speaker'
Simple mixer control 'Loopback Mixing',0
Capabilities: enum
Items: 'Disabled' 'Enabled'
Item0: 'Enabled'
!!-------Mixer controls for card 1 [NVidia]
Card hw:1 'NVidia'/'HDA NVidia at 0xdc080000 irq 17'
Mixer name : 'Nvidia Generic HDMI'
Components : 'HDA:10de0083,15586b01,00100100'
Controls : 21
Simple ctrls : 3
Simple mixer control 'IEC958',0
Capabilities: pswitch pswitch-joined
Playback channels: Mono
Mono: Playback [on]
Simple mixer control 'IEC958',1
Capabilities: pswitch pswitch-joined
Playback channels: Mono
Mono: Playback [on]
Simple mixer control 'IEC958',2
Capabilities: pswitch pswitch-joined
Playback channels: Mono
Mono: Playback [on]
!!Alsactl output
!!--------------
--startcollapse--
state.PCH {
control.1 {
iface MIXER
name 'Line Out Playback Volume'
value.0 87
value.1 87
comment {
access 'read write'
type INTEGER
count 2
range '0 - 87'
dbmin -6525
dbmax 0
dbvalue.0 0
dbvalue.1 0
}
}
control.2 {
iface MIXER
name 'Line Out Playback Switch'
value.0 true
value.1 true
comment {
access 'read write'
type BOOLEAN
count 2
}
}
control.3 {
iface MIXER
name 'Headphone Playback Volume'
value.0 0
value.1 0
comment {
access 'read write'
type INTEGER
count 2
range '0 - 87'
dbmin -6525
dbmax 0
dbvalue.0 -6525
dbvalue.1 -6525
}
}
control.4 {
iface MIXER
name 'Headphone Playback Switch'
value.0 false
value.1 false
comment {
access 'read write'
type BOOLEAN
count 2
}
}
control.5 {
iface MIXER
name 'Speaker Playback Volume'
value.0 87
value.1 87
comment {
access 'read write'
type INTEGER
count 2
range '0 - 87'
dbmin -6525
dbmax 0
dbvalue.0 0
dbvalue.1 0
}
}
control.6 {
iface MIXER
name 'Speaker Playback Switch'
value.0 true
value.1 true
comment {
access 'read write'
type BOOLEAN
count 2
}
}
control.7 {
iface MIXER
name 'Loopback Mixing'
value Enabled
comment {
access 'read write'
type ENUMERATED
count 1
item.0 Disabled
item.1 Enabled
}
}
control.8 {
iface MIXER
name 'Mic Playback Volume'
value.0 0
value.1 0
comment {
access 'read write'
type INTEGER
count 2
range '0 - 31'
dbmin -3450
dbmax 1200
dbvalue.0 -3450
dbvalue.1 -3450
}
}
control.9 {
iface MIXER
name 'Mic Playback Switch'
value.0 false
value.1 false
comment {
access 'read write'
type BOOLEAN
count 2
}
}
control.10 {
iface MIXER
name 'Auto-Mute Mode'
value 'Line Out+Speaker'
comment {
access 'read write'
type ENUMERATED
count 1
item.0 Disabled
item.1 'Speaker Only'
item.2 'Line Out+Speaker'
}
}
control.11 {
iface MIXER
name 'Capture Volume'
value.0 50
value.1 50
comment {
access 'read write'
type INTEGER
count 2
range '0 - 63'
dbmin -1725
dbmax 3000
dbvalue.0 2025
dbvalue.1 2025
}
}
control.12 {
iface MIXER
name 'Capture Switch'
value.0 false
value.1 false
comment {
access 'read write'
type BOOLEAN
count 2
}
}
control.13 {
iface MIXER
name 'Mic Boost Volume'
value.0 0
value.1 0
comment {
access 'read write'
type INTEGER
count 2
range '0 - 3'
dbmin 0
dbmax 3000
dbvalue.0 0
dbvalue.1 0
}
}
control.14 {
iface MIXER
name 'IEC958 Playback Con Mask'
value '0fff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
comment {
access read
type IEC958
count 1
}
}
control.15 {
iface MIXER
name 'IEC958 Playback Pro Mask'
value '0f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
comment {
access read
type IEC958
count 1
}
}
control.16 {
iface MIXER
name 'IEC958 Playback Default'
value '0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
comment {
access 'read write'
type IEC958
count 1
}
}
control.17 {
iface MIXER
name 'IEC958 Playback Switch'
value false
comment {
access 'read write'
type BOOLEAN
count 1
}
}
control.18 {
iface MIXER
name 'IEC958 Default PCM Playback Switch'
value true
comment {
access 'read write'
type BOOLEAN
count 1
}
}
control.19 {
iface MIXER
name 'Master Playback Volume'
value 78
comment {
access 'read write'
type INTEGER
count 1
range '0 - 87'
dbmin -6525
dbmax 0
dbvalue.0 -675
}
}
control.20 {
iface MIXER
name 'Master Playback Switch'
value true
comment {
access 'read write'
type BOOLEAN
count 1
}
}
control.21 {
iface CARD
name 'Mic Jack'
value false
comment {
access read
type BOOLEAN
count 1
}
}
control.22 {
iface CARD
name 'Internal Mic Phantom Jack'
value true
comment {
access read
type BOOLEAN
count 1
}
}
control.23 {
iface CARD
name 'Line Out Jack'
value false
comment {
access read
type BOOLEAN
count 1
}
}
control.24 {
iface CARD
name 'Headphone Jack'
value false
comment {
access read
type BOOLEAN
count 1
}
}
control.25 {
iface CARD
name 'Speaker Phantom Jack'
value true
comment {
access read
type BOOLEAN
count 1
}
}
control.26 {
iface CARD
name 'SPDIF Phantom Jack'
value true
comment {
access read
type BOOLEAN
count 1
}
}
control.27 {
iface MIXER
name 'Beep Playback Volume'
value.0 0
value.1 0
comment {
access 'read write'
type INTEGER
count 2
range '0 - 31'
dbmin -3450
dbmax 1200
dbvalue.0 -3450
dbvalue.1 -3450
}
}
control.28 {
iface MIXER
name 'Beep Playback Switch'
value.0 false
value.1 false
comment {
access 'read write'
type BOOLEAN
count 2
}
}
control.29 {
iface PCM
name 'Playback Channel Map'
value.0 3
value.1 4
comment {
access read
type INTEGER
count 2
range '0 - 36'
}
}
control.30 {
iface PCM
name 'Capture Channel Map'
value.0 3
value.1 4
comment {
access read
type INTEGER
count 2
range '0 - 36'
}
}
control.31 {
iface PCM
device 1
name 'Playback Channel Map'
value.0 0
value.1 0
comment {
access read
type INTEGER
count 2
range '0 - 36'
}
}
control.32 {
iface MIXER
name 'PCM Playback Volume'
value.0 255
value.1 255
comment {
access 'read write user'
type INTEGER
count 2
range '0 - 255'
tlv '0000000100000008ffffec1400000014'
dbmin -5100
dbmax 0
dbvalue.0 0
dbvalue.1 0
}
}
}
state.NVidia {
control.1 {
iface CARD
name 'HDMI/DP,pcm=3 Jack'
value false
comment {
access read
type BOOLEAN
count 1
}
}
control.2 {
iface MIXER
name 'IEC958 Playback Con Mask'
value '0fff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
comment {
access read
type IEC958
count 1
}
}
control.3 {
iface MIXER
name 'IEC958 Playback Pro Mask'
value '0f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
comment {
access read
type IEC958
count 1
}
}
control.4 {
iface MIXER
name 'IEC958 Playback Default'
value '0482000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
comment {
access 'read write locked'
type IEC958
count 1
}
}
control.5 {
iface MIXER
name 'IEC958 Playback Switch'
value true
comment {
access 'read write'
type BOOLEAN
count 1
}
}
control.6 {
iface PCM
device 3
name ELD
value ''
comment {
access 'read volatile'
type BYTES
count 0
}
}
control.7 {
iface CARD
name 'HDMI/DP,pcm=7 Jack'
value false
comment {
access read
type BOOLEAN
count 1
}
}
control.8 {
iface MIXER
name 'IEC958 Playback Con Mask'
index 1
value '0fff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
comment {
access read
type IEC958
count 1
}
}
control.9 {
iface MIXER
name 'IEC958 Playback Pro Mask'
index 1
value '0f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
comment {
access read
type IEC958
count 1
}
}
control.10 {
iface MIXER
name 'IEC958 Playback Default'
index 1
value '0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
comment {
access 'read write'
type IEC958
count 1
}
}
control.11 {
iface MIXER
name 'IEC958 Playback Switch'
index 1
value true
comment {
access 'read write'
type BOOLEAN
count 1
}
}
control.12 {
iface PCM
device 7
name ELD
value ''
comment {
access 'read volatile'
type BYTES
count 0
}
}
control.13 {
iface CARD
name 'HDMI/DP,pcm=8 Jack'
value false
comment {
access read
type BOOLEAN
count 1
}
}
control.14 {
iface MIXER
name 'IEC958 Playback Con Mask'
index 2
value '0fff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
comment {
access read
type IEC958
count 1
}
}
control.15 {
iface MIXER
name 'IEC958 Playback Pro Mask'
index 2
value '0f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
comment {
access read
type IEC958
count 1
}
}
control.16 {
iface MIXER
name 'IEC958 Playback Default'
index 2
value '0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
comment {
access 'read write'
type IEC958
count 1
}
}
control.17 {
iface MIXER
name 'IEC958 Playback Switch'
index 2
value true
comment {
access 'read write'
type BOOLEAN
count 1
}
}
control.18 {
iface PCM
device 8
name ELD
value ''
comment {
access 'read volatile'
type BYTES
count 0
}
}
control.19 {
iface PCM
device 3
name 'Playback Channel Map'
value.0 3
value.1 4
value.2 0
value.3 0
value.4 0
value.5 0
value.6 0
value.7 0
comment {
access 'read write'
type INTEGER
count 8
range '0 - 36'
}
}
control.20 {
iface PCM
device 7
name 'Playback Channel Map'
value.0 0
value.1 0
value.2 0
value.3 0
value.4 0
value.5 0
value.6 0
value.7 0
comment {
access 'read write'
type INTEGER
count 8
range '0 - 36'
}
}
control.21 {
iface PCM
device 8
name 'Playback Channel Map'
value.0 0
value.1 0
value.2 0
value.3 0
value.4 0
value.5 0
value.6 0
value.7 0
comment {
access 'read write'
type INTEGER
count 8
range '0 - 36'
}
}
}
--endcollapse--
!!All Loaded Modules
!!------------------
Module
drbg
ansi_cprng
ctr
ccm
rfcomm
bnep
nls_iso8859_1
snd_hda_codec_hdmi
arc4
intel_rapl
x86_pkg_temp_thermal
snd_hda_codec_realtek
intel_powerclamp
snd_hda_codec_generic
coretemp
kvm_intel
kvm
i915_bpo
mxm_wmi
irqbypass
iwlmvm
crct10dif_pclmul
intel_ips
crc32_pclmul
i2c_algo_bit
mac80211
aesni_intel
aes_x86_64
lrw
gf128mul
glue_helper
ablk_helper
cryptd
uvcvideo
snd_seq_midi
snd_seq_midi_event
snd_hda_intel
videobuf2_vmalloc
videobuf2_memops
joydev
btusb
videobuf2_v4l2
snd_hda_codec
btrtl
videobuf2_core
btbcm
iwlwifi
v4l2_common
btintel
videodev
snd_hda_core
snd_rawmidi
mei_me
media
bluetooth
input_leds
snd_hwdep
cfg80211
snd_seq
rtsx_pci_ms
mei
snd_pcm
memstick
snd_seq_device
serio_raw
snd_timer
snd
soundcore
shpchp
wmi
mac_hid
acpi_pad
parport_pc
ppdev
lp
parport
autofs4
btrfs
xor
uas
usb_storage
raid6_pq
hid_generic
usbhid
hid
dm_mirror
dm_region_hash
dm_log
rtsx_pci_sdmmc
nvidia_drm
nvidia_modeset
drm_kms_helper
syscopyarea
sysfillrect
sysimgblt
fb_sys_fops
drm
psmouse
r8169
nvidia
rtsx_pci
ahci
mii
libahci
video
fjes
!!Sysfs Files
!!-----------
/sys/class/sound/hwC0D0/init_pin_configs:
0x11 0x4000d000
0x12 0x90a60150
0x14 0x90170110
0x15 0x411111f0
0x16 0x411111f0
0x17 0x01011020
0x18 0x01a11040
0x19 0x411111f0
0x1a 0x411111f0
0x1b 0x411111f0
0x1c 0x411111f0
0x1d 0x40330829
0x1e 0x01441130
0x1f 0x411111f0
/sys/class/sound/hwC0D0/driver_pin_configs:
/sys/class/sound/hwC0D0/user_pin_configs:
0x1b 0x01211030
/sys/class/sound/hwC0D0/init_verbs:
/sys/class/sound/hwC0D0/hints:
/sys/class/sound/hwC1D0/init_pin_configs:
0x04 0x185600f0
0x05 0x585600f0
0x06 0x185600f0
0x07 0x185600f0
0x08 0x585600f0
0x09 0x585600f0
/sys/class/sound/hwC1D0/driver_pin_configs:
/sys/class/sound/hwC1D0/user_pin_configs:
/sys/class/sound/hwC1D0/init_verbs:
/sys/class/sound/hwC1D0/hints:
!!ALSA/HDA dmesg
!!--------------
[ 2.926733] Bluetooth: hci0: Bootloader revision 0.0 build 2 week 52 2014
[ 2.928935] snd_hda_intel: unknown parameter 'system76-audio-patch' ignored
[ 2.930985] snd_hda_intel 0000:00:1f.3: enabling device (0000 -> 0002)
[ 2.931071] snd_hda_intel 0000:00:1f.3: Applying patch firmware 'system76-audio-patch'
[ 2.931114] snd_hda_intel 0000:01:00.1: enabling device (0000 -> 0002)
[ 2.931152] snd_hda_intel 0000:01:00.1: Disabling MSI
[ 2.931156] snd_hda_intel 0000:01:00.1: Handle vga_switcheroo audio client
[ 2.931791] Bluetooth: hci0: Device revision is 5
--
[ 3.008519] cfg80211: (57240000 KHz - 63720000 KHz @ 2160000 KHz), (N/A, 0 mBm), (N/A)
[ 3.010481] snd_hda_intel 0000:00:1f.3: failed to add i915_bpo component master (-19)
[ 3.026340] snd_hda_codec_realtek hdaudioC0D0: autoconfig for ALC898: line_outs=1 (0x17/0x0/0x0/0x0/0x0) type:line
[ 3.026342] snd_hda_codec_realtek hdaudioC0D0: speaker_outs=1 (0x14/0x0/0x0/0x0/0x0)
[ 3.026344] snd_hda_codec_realtek hdaudioC0D0: hp_outs=1 (0x1b/0x0/0x0/0x0/0x0)
[ 3.026345] snd_hda_codec_realtek hdaudioC0D0: mono: mono_out=0x0
[ 3.026345] snd_hda_codec_realtek hdaudioC0D0: dig-out=0x1e/0x0
[ 3.026346] snd_hda_codec_realtek hdaudioC0D0: inputs:
[ 3.026347] snd_hda_codec_realtek hdaudioC0D0: Mic=0x18
[ 3.026348] snd_hda_codec_realtek hdaudioC0D0: Internal Mic=0x12
[ 3.034197] intel_rapl: Found RAPL domain package
--
[ 3.034203] intel_rapl: Found RAPL domain dram
[ 3.035326] input: HDA Intel PCH Mic as /devices/pci0000:00/0000:00:1f.3/sound/card0/input17
[ 3.035374] input: HDA Intel PCH Line Out as /devices/pci0000:00/0000:00:1f.3/sound/card0/input18
[ 3.035411] input: HDA Intel PCH Headphone as /devices/pci0000:00/0000:00:1f.3/sound/card0/input19
[ 3.120867] ieee80211 phy0: Selected rate control algorithm 'iwl-mvm-rs'
--
[ 3.446425] audit: type=1400 audit(1478629606.038:10): apparmor="STATUS" operation="profile_load" profile="unconfined" name="/usr/lib/lightdm/lightdm-guest-session//chromium" pid=747 comm="apparmor_parser"
[ 3.477387] input: HDA NVidia HDMI/DP,pcm=3 as /devices/pci0000:00/0000:00:01.0/0000:01:00.1/sound/card1/input20
[ 3.477487] input: HDA NVidia HDMI/DP,pcm=7 as /devices/pci0000:00/0000:00:01.0/0000:01:00.1/sound/card1/input21
[ 3.478591] input: HDA NVidia HDMI/DP,pcm=8 as /devices/pci0000:00/0000:00:01.0/0000:01:00.1/sound/card1/input22
[ 3.663594] IPv6: ADDRCONF(NETDEV_UP): wlp110s0: link is not ready
[-- Attachment #4: Type: text/plain, Size: 0 bytes --]
^ permalink raw reply related [flat|nested] 7+ messages in thread* Re: Fixup set PCM/headphones volume from Master
2016-11-08 14:42 ` Takashi Iwai
2016-11-08 19:17 ` David Jordan
@ 2016-11-10 18:21 ` David Jordan
2016-11-10 19:16 ` David Jordan
1 sibling, 1 reply; 7+ messages in thread
From: David Jordan @ 2016-11-10 18:21 UTC (permalink / raw)
To: Takashi Iwai; +Cc: alsa-devel, Clemens Ladisch
[-- Attachment #1: Type: text/plain, Size: 1210 bytes --]
I've attached the patch I've been working with.
--
David Jordan
david2@system76.com
On Tue, Nov 8, 2016, at 06:42 AM, Takashi Iwai wrote:
> On Mon, 07 Nov 2016 22:36:21 +0100,
> David Jordan wrote:
> >
> > It's HDA, Realtek ALC898. The headphones jack (analog 3.5mm output)
> > (0x1b) is connected to a separate ESS DAC, which takes sound input from
> > the PCM SPDIF output.
>
> Note that the "Master" volume is a vmaster control, and usually it
> covers all DAC volume controls.
>
> It'd be better if you provide a patch you're fighting with, together
> with alsa-info.sh output. Then other people can track the issue
> either with the real h/w or hda-emu.
>
>
> Takashi
>
>
> >
> > --
> > David Jordan
> > david2@system76.com
> >
> > On Mon, Nov 7, 2016, at 01:19 PM, Clemens Ladisch wrote:
> > > David Jordan wrote:
> > > > I'm working on a kernel-level fixup for a set of hardware
> > >
> > > What hardware? If HDA, which codec, and how is it connected?
> > >
> > >
> > > Regards,
> > > Clemens
> > _______________________________________________
> > Alsa-devel mailing list
> > Alsa-devel@alsa-project.org
> > http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
> >
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: alsa-hda-alc898-pcm-hp-dac-vol-test.patch --]
[-- Type: text/x-patch; name="alsa-hda-alc898-pcm-hp-dac-vol-test.patch", Size: 11432 bytes --]
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
index 4b6d861..4419a7e 100644
--- a/sound/pci/hda/patch_realtek.c
+++ b/sound/pci/hda/patch_realtek.c
@@ -32,6 +32,7 @@
#include <linux/input.h>
#include <sound/core.h>
#include <sound/jack.h>
+#include <sound/tlv.h>
#include "hda_codec.h"
#include "hda_local.h"
#include "hda_auto_parser.h"
@@ -128,6 +129,14 @@ struct alc_spec {
unsigned int coef0;
struct input_dev *kb_dev;
u8 alc_mute_keycode_map[1];
+
+ /* for clevo headphones fix */
+ unsigned int hp_volume;
+ unsigned int num_inits;
+ struct snd_kcontrol *master_kctl;
+ struct snd_kcontrol *pcm_kctl;
+ struct snd_kcontrol embedded_pcm_kctl;
+/* struct snd_kcontrol *master_kctl;*/
};
/*
@@ -1797,6 +1806,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 +1966,205 @@ static void alc882_fixup_no_primary_hp(struct hda_codec *codec,
}
}
+
+
+
+
+/* Set PCM volume from Master. HP volume is based on PCM volume exclusively.
+ * TODO: Trigger this function on Master Volume Change.
+ * TODO: Ensure appropriate scaling of PCM levels relative to Master.
+ */
+
+#define CLEVO_PCM_MAX_VOLUME 31
+
+static int snd_clevo_pcm_volume_info(struct snd_kcontrol *kcontrol,
+ struct snd_ctl_elem_info *uinfo)
+{
+
+ printk("SYS76: snd_clevo_pcm_volume_info\n");
+ uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
+ uinfo->count = 2;
+ uinfo->value.integer.min = 0;
+ uinfo->value.integer.max = CLEVO_PCM_MAX_VOLUME;
+ return 0;
+}
+
+static int snd_clevo_pcm_volume_get(struct snd_kcontrol *kcontrol,
+ struct snd_ctl_elem_value *ucontrol)
+{
+
+ printk("SYS76: snd_clevo_pcm_volume_get\n");
+ struct hda_codec *chip = snd_kcontrol_chip(kcontrol);
+ unsigned int idx = kcontrol->id.subdevice;
+
+
+ struct alc_spec *spec = chip->spec;
+
+ printk("SYS76: pcm_volume get...addrs\n");
+ printk("addr spec %lu \n", spec);
+ printk("addr codec %lu \n", chip);
+ printk("spec->hp_volume %u\n", spec->hp_volume);
+
+ if (spec != 0) {
+ printk("meep!\n");
+ ucontrol->value.integer.value[0] = CLEVO_PCM_MAX_VOLUME - spec->hp_volume;//chip->playback_volume[idx][0];
+ ucontrol->value.integer.value[1] = CLEVO_PCM_MAX_VOLUME - spec->hp_volume;//chip->playback_volume[idx][1];
+ }
+ else {
+ printk("leep!\n");
+ ucontrol->value.integer.value[0] = CLEVO_PCM_MAX_VOLUME - 1;//chip->playback_volume[idx][0];
+ ucontrol->value.integer.value[1] = CLEVO_PCM_MAX_VOLUME - 1;//chip->playback_volume[idx][1];
+ }
+ return 0;
+}
+
+//Okay, so this is creating the pcm_volume_ctl, but how is hard?
+static int snd_clevo_pcm_volume_put(struct snd_kcontrol *kcontrol,
+ struct snd_ctl_elem_value *ucontrol)
+{
+ struct hda_codec *chip = snd_kcontrol_chip(kcontrol);
+ unsigned int idx;
+ unsigned char val;
+ int i, change = 0;
+
+ printk("SYS76: snd_clevo_pcm_volume_put\n");
+
+ struct alc_spec *spec = chip->spec;
+ struct snd_card *card = chip->card;
+
+ printk(kcontrol->id.name);
+
+
+ /* */
+/* struct snd_ctl_elem_id pcm_id;*/
+/* struct snd_kcontrol *pcm_control;*/
+/* memset(&pcm_id, 0, sizeof(pcm_id));*/
+/* pcm_id.iface = SNDRV_CTL_ELEM_IFACE_MIXER;*/
+/* pcm_id.device = 0;*/
+/* pcm_id.index = 0;*/
+/* strcpy(pcm_id.name, "PCM Playback Volume");*/
+/* Crashes Here:*/
+/* pcm_control = snd_ctl_find_id(chip->card, &pcm_id);*/
+/* */
+
+ printk("SYS76: PUT snd before find mixer ctl\n");
+
+/* Get the PCM Control to set it. For some reason this fails.*/
+ struct snd_kcontrol * pcm_kctl = snd_hda_find_mixer_ctl(chip, "PCM Playback Volume");
+ struct snd_ctl_elem_value *pcm_uctl;
+
+ printk("SYS76: PUT snd_hda_find_mixer_ctl\n");
+
+ if (!pcm_kctl)
+ printk("SYS76: PUT no kctl\n");
+ return;
+ pcm_uctl = kzalloc(sizeof(*pcm_uctl), GFP_KERNEL);
+ if (!pcm_uctl)
+ return;
+
+/* Set the PCM ucontrol from Master ucontrol*/
+ val = ucontrol->value.integer.value[0];
+ val &= HDA_AMP_VOLMASK;
+
+ pcm_uctl->value.integer.value[0] = val;
+ pcm_uctl->value.integer.value[1] = val;
+ pcm_kctl->put(pcm_kctl, pcm_uctl);
+
+ kfree(pcm_uctl);
+
+ return change;
+}
+
+
+static void alc898_clevo_automute_hook(struct hda_codec *codec,
+ struct hda_jack_callback *jack)
+{
+ int val;
+ snd_hda_codec_write(codec, codec->core.afg, 0,
+ AC_VERB_SET_GPIO_MASK, 2);
+ snd_hda_codec_write(codec, codec->core.afg, 0,
+ AC_VERB_SET_GPIO_DIRECTION, 0);
+
+ struct alc_spec *spec = codec->spec;
+
+ if (snd_hda_jack_detect(codec, 0x1b) && (snd_hda_codec_read(codec, codec->core.afg, 0,
+ AC_VERB_GET_GPIO_DATA, 0) >= 0)) {
+ val = snd_hda_codec_get_pin_target(codec, 0x1b);
+ val |= AC_PINCTL_VREF_80;
+ snd_hda_set_pin_ctl(codec, 0x1b, val);
+ snd_hda_gen_hp_automute(codec, jack);
+ } else {
+ printk("S76: automute case B\n");
+ val = snd_hda_codec_get_pin_target(codec, 0x1b);
+ val = val & 0xfff8;
+ snd_hda_set_pin_ctl(codec, 0x1b, val);
+ snd_hda_gen_hp_automute(codec, jack);
+
+ /* Don't mute the digital output, needed for ESS DAC operation */
+ /* TODO: This might belong in alc898_fixup_clevo instead. */
+ /* struct snd_kcontrol *kctl;
+ kctl = snd_hda_find_mixer_ctl(codec, "IEC958 Playback Switch");
+ if (!kctl)
+ return;
+ kctl->put = NULL; */
+
+ }
+}
+static void alc898_fixup_clevo(struct hda_codec *codec,
+ const struct hda_fixup *fix, int action)
+{
+ struct alc_spec *spec = codec->spec;
+
+ printk("SYS76: version 0020\n");
+ printk("SYS76: num_mixers = %u\n", spec->num_mixers);
+ if (action == HDA_FIXUP_ACT_PRE_PROBE) {
+ spec->gen.detect_hp = 1;
+ spec->gen.automute_speaker = 1;
+ spec->gen.autocfg.hp_pins[0] = 0x1b; /* copy it for automute */
+ snd_hda_jack_detect_enable_callback(codec, 0x1b,
+ alc898_clevo_automute_hook);
+ spec->gen.hp_automute_hook = alc898_clevo_automute_hook;
+ }
+
+
+ struct snd_ctl_elem_id mid;
+ memset(&mid, 0, sizeof(mid));
+ strcpy(mid.name, "PCM Playback Volume");
+ mid.iface = SNDRV_CTL_ELEM_IFACE_MIXER;
+ struct snd_kcontrol * pcm_kcontrol;
+ pcm_kcontrol = snd_ctl_find_id(codec->card, &mid);
+ if (!pcm_kcontrol) {
+ printk("SYS76: No PCM_kcontrol\n");
+ printk("SYS76: oh well\n");
+ return; //returning so we don't do the master stuff until pcm exists...maybe fix kernel panic this way
+ }
+ else {
+ spec->pcm_kctl = pcm_kcontrol;
+ spec->embedded_pcm_kctl = *pcm_kcontrol;
+ printk("MY PCM NUMID IS: %x", pcm_kcontrol->id.numid);
+ }
+
+ struct snd_ctl_elem_id sid;
+ memset(&sid, 0, sizeof(sid));
+ strcpy(sid.name, "Master Playback Volume");
+ sid.iface = SNDRV_CTL_ELEM_IFACE_MIXER;
+ struct snd_kcontrol * newsid;
+ //huh, find_id and find_numid are different...look into this
+ newsid = snd_ctl_find_id(codec->card, &sid);
+ if (!newsid) {
+ printk("SYS76: No PCM Playback Volume ctl\n");
+ //Now try *replacing* the headphone control instead of adding another
+ //the snd_ctl_activate function is interesting maybe?
+ //snd_ctl_replace(codec->card, snd_ctl_new1(&snd_clevo_pcm_volume_control, codec), 0);
+ }
+ else {
+ printk("SYS76: PCM Playback Volume ctl id is %d\n", newsid->id.numid);
+ newsid->put = snd_clevo_pcm_volume_put;
+ printk("SYS76: My ID hahaha!\n");
+ }
+}
+
+
static void alc_fixup_bass_chmap(struct hda_codec *codec,
const struct hda_fixup *fix, int action);
@@ -2195,6 +2404,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[] = {
@@ -2264,6 +2477,41 @@ static const struct snd_pci_quirk alc882_fixup_tbl[] = {
SND_PCI_QUIRK_VENDOR(0x1462, "MSI", ALC882_FIXUP_GPIO3),
SND_PCI_QUIRK(0x1458, 0xa002, "Gigabyte EP45-DS3/Z87X-UD3H", ALC889_FIXUP_FRONT_HP_NO_PRESENCE),
SND_PCI_QUIRK(0x147b, 0x107a, "Abit AW9D-MAX", ALC882_FIXUP_ABIT_AW9D_MAX),
+ SND_PCI_QUIRK(0x1558, 0x0872, "Clevo P870DM2/P870DM3", ALC898_FIXUP_CLEVO_SPDIF),
+ SND_PCI_QUIRK(0x1558, 0x0873, "Clevo P870DM2-G/P870DM3-G", ALC898_FIXUP_CLEVO_SPDIF),
+ SND_PCI_QUIRK(0x1558, 0x0874, "Clevo P870DM2-G/P870DM3-G", ALC898_FIXUP_CLEVO_SPDIF),
+ SND_PCI_QUIRK(0x1558, 0x0875, "Clevo P870KM/P870KM1", ALC898_FIXUP_CLEVO_SPDIF),
+ SND_PCI_QUIRK(0x1558, 0x0876, "Clevo P870KM-G/P870KM1_G", ALC898_FIXUP_CLEVO_SPDIF),
+ SND_PCI_QUIRK(0x1558, 0x65a1, "Clevo P65xHS_HP-D0", ALC898_FIXUP_CLEVO_SPDIF),
+ SND_PCI_QUIRK(0x1558, 0x65a2, "Clevo P65xHS_HP-D", ALC898_FIXUP_CLEVO_SPDIF),
+ SND_PCI_QUIRK(0x1558, 0x65a3, "Clevo P65xHS_HP-G0", ALC898_FIXUP_CLEVO_SPDIF),
+ SND_PCI_QUIRK(0x1558, 0x65a4, "Clevo P65xHS_HP-G", ALC898_FIXUP_CLEVO_SPDIF),
+ SND_PCI_QUIRK(0x1558, 0x67a1, "Clevo P67xHS_HP-D0", ALC898_FIXUP_CLEVO_SPDIF),
+ SND_PCI_QUIRK(0x1558, 0x67a2, "Clevo P67xHS_HP-D", ALC898_FIXUP_CLEVO_SPDIF),
+ SND_PCI_QUIRK(0x1558, 0x67a3, "Clevo P67xHS_HP-G0", ALC898_FIXUP_CLEVO_SPDIF),
+ SND_PCI_QUIRK(0x1558, 0x67a4, "Clevo P67xHS_HP-G", ALC898_FIXUP_CLEVO_SPDIF),
+ SND_PCI_QUIRK(0x1558, 0x6a01, "Clevo P65xRS_RP-D0", ALC898_FIXUP_CLEVO_SPDIF),
+ SND_PCI_QUIRK(0x1558, 0x6a02, "Clevo P65xRS_RP-D", ALC898_FIXUP_CLEVO_SPDIF),
+ SND_PCI_QUIRK(0x1558, 0x6a03, "Clevo P65xRS_RP-G0", ALC898_FIXUP_CLEVO_SPDIF),
+ SND_PCI_QUIRK(0x1558, 0x6a04, "Clevo P65xRS_RP-G", ALC898_FIXUP_CLEVO_SPDIF),
+ SND_PCI_QUIRK(0x1558, 0x6a05, "Clevo P65xRS_RP-V", ALC898_FIXUP_CLEVO_SPDIF),
+ SND_PCI_QUIRK(0x1558, 0x6a06, "Clevo P65xRS_RP-Direct", ALC898_FIXUP_CLEVO_SPDIF),
+ SND_PCI_QUIRK(0x1558, 0x6b01, "Clevo P67xRS_RP-D0", ALC898_FIXUP_CLEVO_SPDIF),
+ SND_PCI_QUIRK(0x1558, 0x6b02, "Clevo P67xRS_RP-D", ALC898_FIXUP_CLEVO_SPDIF),
+ SND_PCI_QUIRK(0x1558, 0x6b03, "Clevo P67xRS_RP-G0", ALC898_FIXUP_CLEVO_SPDIF),
+ SND_PCI_QUIRK(0x1558, 0x6b04, "Clevo P67xRS_RP-G", ALC898_FIXUP_CLEVO_SPDIF),
+ SND_PCI_QUIRK(0x1558, 0x6b05, "Clevo P67xRS_RP-V", ALC898_FIXUP_CLEVO_SPDIF),
+ SND_PCI_QUIRK(0x1558, 0x6b06, "Clevo P67xRS_RP-Direct", ALC898_FIXUP_CLEVO_SPDIF),
+ SND_PCI_QUIRK(0x1558, 0x7504, "Clevo P750DM2", ALC898_FIXUP_CLEVO_SPDIF),
+ SND_PCI_QUIRK(0x1558, 0x7505, "Clevo P750DM2G", ALC898_FIXUP_CLEVO_SPDIF),
+ SND_PCI_QUIRK(0x1558, 0x7506, "Clevo P750KM", ALC898_FIXUP_CLEVO_SPDIF),
+ SND_PCI_QUIRK(0x1558, 0x7507, "Clevo P750KMG", ALC898_FIXUP_CLEVO_SPDIF),
+ SND_PCI_QUIRK(0x1558, 0x7705, "Clevo P775DM2", ALC898_FIXUP_CLEVO_SPDIF),
+ SND_PCI_QUIRK(0x1558, 0x7706, "Clevo P775DM2G", ALC898_FIXUP_CLEVO_SPDIF),
+ SND_PCI_QUIRK(0x1558, 0x7707, "Clevo P775KM", ALC898_FIXUP_CLEVO_SPDIF),
+ SND_PCI_QUIRK(0x1558, 0x7708, "Clevo P775KMG", ALC898_FIXUP_CLEVO_SPDIF),
+ SND_PCI_QUIRK(0x1558, 0x7705, "System76 serw10", ALC898_FIXUP_CLEVO_SPDIF),
+ SND_PCI_QUIRK(0x1558, 0x6b01, "System76 oryp2-ess", ALC898_FIXUP_CLEVO_SPDIF),
SND_PCI_QUIRK_VENDOR(0x1558, "Clevo laptop", ALC882_FIXUP_EAPD),
SND_PCI_QUIRK(0x161f, 0x2054, "Medion laptop", ALC883_FIXUP_EAPD),
SND_PCI_QUIRK(0x17aa, 0x3a0d, "Lenovo Y530", ALC882_FIXUP_LENOVO_Y530),
@@ -2277,6 +2525,7 @@ static const struct hda_model_fixup alc882_fixup_models[] = {
{.id = ALC883_FIXUP_ACER_EAPD, .name = "acer-aspire"},
{.id = ALC882_FIXUP_INV_DMIC, .name = "inv-dmic"},
{.id = ALC882_FIXUP_NO_PRIMARY_HP, .name = "no-primary-hp"},
+ {.id = ALC898_FIXUP_CLEVO_SPDIF, .name = "system76"},
{}
};
[-- Attachment #3: Type: text/plain, Size: 0 bytes --]
^ permalink raw reply related [flat|nested] 7+ messages in thread