At Wed, 6 Aug 2014 10:07:49 -0700, Vincent Lejeune wrote:
It looks like GPIO mask is frozen, I don't know why :
[vlj@localhost alsa]$ hda-verb /dev/snd/hwC1D1 0x1 SET_GPIO_MASK 1 nid = 0x1, verb = 0x716, param = 0x1 value = 0x0 [vlj@localhost alsa]$ hda-verb /dev/snd/hwC1D1 0x1 GET_GPIO_MASK 1 nid = 0x1, verb = 0xf16, param = 0x1 value = 0x0 [vlj@localhost alsa]$
What about other bits, e.g. 0x02, 0x04, 0x08, ... 0x80?
hwC1D1 is the phoebus according to hda-verb /dev/snd/hwC1D1 0x1 PARAMETERS SUBSYSTEM_ID and it reports 8 input gpio
[vlj@localhost alsa]$ hda-verb /dev/snd/hwC1D1 0x1 PARAMETERS GPIO_CAP nid = 0x1, verb = 0xf00, param = 0x11 value = 0x80000
I thought of the false value (-1), but the GPIO_COUNT mask is 0xff, so 0x0f must be a valid response from the codec.
but with mask set to 0, I can't pass any data to them...
Yep.
Another thing to check is to listen from the headphone output jack. The line out jacks are set up without the headphone amp bit while the HP jack is set up with it. It might be that the HP amp bit is mandatory on this board.
Takashi
Le Mercredi 6 août 2014 18h08, Takashi Iwai tiwai@suse.de a écrit :
At Wed, 6 Aug 2014 09:05:59 -0700, Vincent Lejeune wrote:
Ok thank.
How can I change GPIOs value ? It looks like the option is not present anymore as hints string option in kernel 3.17. Looking in the realtek patch code suggest to use snd_hda_sequence_write in the patch_cmi8888 function.
Just use hda-verb or such to manipulate GPIO bits on the fly.
Takashi
Le Mercredi 6 août 2014 14h39, Takashi Iwai tiwai@suse.de a écrit :
At Wed, 06 Aug 2014 08:30:56 +0200, Takashi Iwai wrote:
At Tue, 5 Aug 2014 15:26:20 -0700, Vincent Lejeune wrote:
With this patch, volume is still low but the error message in dmesg disappeared. I attached an updated alsa-info.txt report. I removed the probe_mask in modprobe.conf.d file so the hdmi output of my video card also appears now.
Is the volume also low from the headphone output? There is no EAPD control found in the codec pins, so the rest possibility is either GPIO or vendor-specific verbs. Try to adjust each GPIO pin on/off at first.
In anyway, I'm going to merge the fix patch as is. It's much better than nothing. Let's handle the too-low-volume problem separately.
Takashi
Takashi
Le Mardi 5 août 2014 9h25, Takashi Iwai tiwai@suse.de a écrit :
> > >At Mon, 4 Aug 2014 12:44:00 -0700, >Vincent Lejeune wrote: >> >> Here it is. > >OK, blow is an untested fix patch, based on the latest sound git >tree. For applying to the older kernels, you may need some manual >adjustment. > > >Takashi > >--- >diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c >index 5db1948699d8..aa302fb03fc5 100644 >--- a/sound/pci/hda/hda_intel.c >+++ b/sound/pci/hda/hda_intel.c >@@ -265,6 +265,7 @@ enum { > AZX_DRIVER_TERA, > AZX_DRIVER_CTX, > AZX_DRIVER_CTHDA, >+ AZX_DRIVER_CMEDIA, > AZX_DRIVER_GENERIC, > AZX_NUM_DRIVERS, /* keep this as last entry */ >}; >@@ -330,6 +331,7 @@ static char *driver_short_names[] = { > [AZX_DRIVER_TERA] = "HDA Teradici", > [AZX_DRIVER_CTX] = "HDA Creative", > [AZX_DRIVER_CTHDA] = "HDA Creative", >+ [AZX_DRIVER_CMEDIA] = "HDA C-Media", > [AZX_DRIVER_GENERIC] = "HD-Audio Generic", >}; > >@@ -1373,6 +1375,7 @@ static void azx_check_snoop_available(struct azx *chip) > snoop = false; > break; > case AZX_DRIVER_CTHDA: >+ case AZX_DRIVER_CMEDIA: > snoop = false; > break; > } >@@ -2154,6 +2157,10 @@ static const struct pci_device_id azx_ids[] = { > .driver_data = AZX_DRIVER_CTX | AZX_DCAPS_CTX_WORKAROUND | > AZX_DCAPS_RIRB_PRE_DELAY | AZX_DCAPS_POSFIX_LPIB }, >#endif >+ /* CM8888 */ >+ { PCI_DEVICE(0x13f6, 0x5011), >+ .driver_data = AZX_DRIVER_CMEDIA | >+ AZX_DCAPS_NO_MSI | AZX_DCAPS_POSFIX_LPIB }, > /* Vortex86MX */ > { PCI_DEVICE(0x17f3, 0x3010), .driver_data = AZX_DRIVER_GENERIC }, > /* VMware HDAudio */ >diff --git a/sound/pci/hda/patch_cmedia.c b/sound/pci/hda/patch_cmedia.c >index ed3d133ffbb6..3ed5d5613bc1 100644 >--- a/sound/pci/hda/patch_cmedia.c >+++ b/sound/pci/hda/patch_cmedia.c >@@ -75,15 +75,62 @@ static int patch_cmi9880(struct hda_codec *codec) > return err; >} > >+static int patch_cmi8888(struct hda_codec *codec) >+{ >+ struct cmi_spec *spec; >+ struct auto_pin_cfg *cfg; >+ int err; >+ >+ spec = kzalloc(sizeof(*spec), GFP_KERNEL); >+ if (!spec) >+ return -ENOMEM; >+ >+ codec->spec = spec; >+ cfg = &spec->gen.autocfg; >+ snd_hda_gen_spec_init(&spec->gen); >+ >+ /* mask NID 0x10 from the playback volume selection; >+ * it's a headphone boost volume handled manually below >+ */ >+ spec->gen.out_vol_mask = (1ULL << 0x10); >+ >+ err = snd_hda_parse_pin_defcfg(codec, cfg, NULL, 0); >+ if (err < 0) >+ goto error; >+ err = snd_hda_gen_parse_auto_config(codec, cfg); >+ if (err < 0) >+ goto error; >+ >+ if (get_defcfg_device(snd_hda_codec_get_pincfg(codec, 0x10)) == >+ AC_JACK_HP_OUT) { >+ static const struct snd_kcontrol_new amp_kctl = >+ HDA_CODEC_VOLUME("Headphone Amp Playback Volume", >+ 0x10, 0, HDA_OUTPUT); >+ if (!snd_hda_gen_add_kctl(&spec->gen, NULL, &_kctl)) { >+ err = -ENOMEM; >+ goto error; >+ } >+ } >+ >+ codec->patch_ops = cmi_auto_patch_ops; >+ return 0; >+ >+ error: >+ snd_hda_gen_free(codec); >+ return err; >+} >+ >/* > * patch entries > */ >static const struct hda_codec_preset snd_hda_preset_cmedia[] = { >+ { .id = 0x13f68888, .name = "CMI8888", .patch = patch_cmi8888 }, > { .id = 0x13f69880, .name = "CMI9880", .patch = patch_cmi9880 }, > { .id = 0x434d4980, .name = "CMI9880", .patch = patch_cmi9880 }, > {} /* terminator */ >}; > >+MODULE_ALIAS("snd-hda-codec-id:13f68888"); >MODULE_ALIAS("snd-hda-codec-id:13f69880"); >MODULE_ALIAS("snd-hda-codec-id:434d4980"); > > >_______________________________________________ >Alsa-devel mailing list >Alsa-devel@alsa-project.org >http://mailman.alsa-project.org/mailman/listinfo/alsa-devel > > >
Alsa-devel mailing list Alsa-devel@alsa-project.org http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
[2 <text/html; iso-8859-1 (quoted-printable)>]
Alsa-devel mailing list Alsa-devel@alsa-project.org http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
[2 <text/html; iso-8859-1 (quoted-printable)>]