[alsa-devel] ASUS Phoebus (CMI8888) HDA Support

Vincent Lejeune vljn at ovi.com
Thu Aug 7 19:13:05 CEST 2014


I tried with several mask (1, 0x2, 0x3, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80, 127 and 255) and with several node id (from 0x1 to 0x8), no changes.
I tried to changes some value in hda-analyzer but it doesnt look to do anything at all (I tried setting "HP" here). Some values are even reverted when I close/reopen hda-analyzer (but not HP, which stay on their enabled/disabled state)
hdajackretask doest in "apply now" mode, I need to apply the boot override to remap channel, and the remapping is quite random : if I swap headphone and line out, I get front speaker output redirected on the back for instance, and nothing comes from my front speakers/headphones.
I don't really understand what's going on, I doubt Windows drivers uses vendor specific verb to communicate with the device.

Vincent 


Le Jeudi 7 août 2014 10h02, Takashi Iwai <tiwai at suse.de> a écrit :
  

>
>
>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 at localhost alsa]$ hda-verb /dev/snd/hwC1D1  0x1 SET_GPIO_MASK 1
>> nid = 0x1, verb = 0x716, param = 0x1
>> value = 0x0
>> [vlj at localhost alsa]$ hda-verb /dev/snd/hwC1D1  0x1 GET_GPIO_MASK 1
>> nid = 0x1, verb = 0xf16, param = 0x1
>> value = 0x0
>> [vlj at 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 at 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 at 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 at 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 at 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, &amp_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 at alsa-project.org
>> >> >> > >http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
>> >> >> > >
>> >> >> > >
>> >> >> > >
>> >> >_______________________________________________
>> >> >Alsa-devel mailing list
>> >> >Alsa-devel at 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 at 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 at alsa-project.org
>http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
>
>
>     


More information about the Alsa-devel mailing list