Custom mixer for MCP55 High Definition Audio

OSS specific Linux discussion (x86/amd64)

Moderators: cesium, dev, kodachi, hannu

Custom mixer for MCP55 High Definition Audio

Postby Matti » Sun Feb 05, 2012 5:48 pm

I wanted to create custom mixer for that device, because I can't get recording to work. I've fiddled with mixer controls, but that seems totally pointless and stupid solution for the problem. Open Sound System recognizes my soundcard as High Definition Audio ALC888, but lspci -v and program for retriving system information (i-Nex) shows it as nVidia Corporation MCP55 High Definition Audio (rev a2):

Code: Select all
$ lspci -v
00:06.1 Audio device: nVidia Corporation MCP55 High Definition Audio (rev a2)
       Subsystem: Giga-byte Technology Device a002
       Flags: bus master, 66MHz, fast devsel, latency 0, IRQ 21
       Memory at fc100000 (32-bit, non-prefetchable) [size=16K]
       Capabilities: <access denied>
       Kernel driver in use: oss_hdaudio
       Kernel modules: snd-hda-intel


I've compiled and run both mixgen and mixgen2 here are the outputs:

Code: Select all
$ sudo ./mixgen
#define COPYING Copyright (C) 4Front Technologies 2007. All rights reserved.
/* Codec index is 0 */
/* Codec vendor 10ec:0888 */
/* HD codec revision 1.0 (0.1) (0x00100001) */
/* Subsystem ID 1458e601 */
/* Default amplifier caps: in=00000000, out=00000000 */
#include "oss_hdaudio_cfg.h"
#include "hdaudio.h"
#include "hdaudio_codec.h"
#include "hdaudio_dedicated.h"

int
hdaudio_subdevice1458e601_mixer_init (int dev, hdaudio_mixer_t * mixer, int cad, int top_group)
{
  int ctl=0;

  DDB(cmn_err(CE_CONT, "hdaudio_subdevice1458e601_mixer_init got called.\n"));

  /* Handle PIN widgets */
  {
   int n, group, pin_group;

   n=0;

   HDA_GROUP(pin_group, top_group, "jack");

   if (HDA_PIN_GROUP(0x14, group, pin_group, "green", n, "jack", 4))   /* Pin widget 0x14 */
      {
      /* Src 0xc=front */
      /* Src 0xd=rear */
      /* Src 0xe=center/LFE */
      /* Src 0xf=side */
      /* Src 0x26=pcm4 */
      if (HDA_PINSELECT(0x14, ctl, group, "mode", -1))
         HDA_CHOICES(ctl, "front-out rear-out center/LFE-out side-out pcm4-out input");
      HDA_OUTMUTE(0x14, group, "inmute", UNMUTE);
      HDA_INAMP(0x14, 0, group, "out", 90);   /* From widget 0x0c */
      }

   if (HDA_PIN_GROUP(0x15, group, pin_group, "black", n, "jack", 4))   /* Pin widget 0x15 */
      {
      /* Src 0xc=front */
      /* Src 0xd=rear */
      /* Src 0xe=center/LFE */
      /* Src 0xf=side */
      /* Src 0x26=pcm4 */
      if (HDA_PINSELECT(0x15, ctl, group, "mode", -1))
         HDA_CHOICES(ctl, "front-out rear-out center/LFE-out side-out pcm4-out input");
      HDA_OUTMUTE(0x15, group, "inmute", UNMUTE);
      HDA_INAMP(0x15, 0, group, "out", 90);   /* From widget 0x0c */
      }

   if (HDA_PIN_GROUP(0x16, group, pin_group, "orange", n, "jack", 4))   /* Pin widget 0x16 */
      {
      /* Src 0xc=front */
      /* Src 0xd=rear */
      /* Src 0xe=center/LFE */
      /* Src 0xf=side */
      /* Src 0x26=pcm4 */
      if (HDA_PINSELECT(0x16, ctl, group, "mode", -1))
         HDA_CHOICES(ctl, "front-out rear-out center/LFE-out side-out pcm4-out input");
      HDA_OUTMUTE(0x16, group, "inmute", UNMUTE);
      HDA_INAMP(0x16, 0, group, "out", 90);   /* From widget 0x0c */
      }

   if (HDA_PIN_GROUP(0x17, group, pin_group, "gray", n, "jack", 4))   /* Pin widget 0x17 */
      {
      /* Src 0xc=front */
      /* Src 0xd=rear */
      /* Src 0xe=center/LFE */
      /* Src 0xf=side */
      /* Src 0x26=pcm4 */
      if (HDA_PINSELECT(0x17, ctl, group, "mode", -1))
         HDA_CHOICES(ctl, "front-out rear-out center/LFE-out side-out pcm4-out input");
      HDA_OUTMUTE(0x17, group, "inmute", UNMUTE);
      HDA_INAMP(0x17, 0, group, "out", 90);   /* From widget 0x0c */
      }

   if (HDA_PIN_GROUP(0x18, group, pin_group, "pink", n, "jack", 4))   /* Pin widget 0x18 */
      {
      /* Src 0xc=front */
      /* Src 0xd=rear */
      /* Src 0xe=center/LFE */
      /* Src 0xf=side */
      /* Src 0x26=pcm4 */
      if (HDA_PINSELECT(0x18, ctl, group, "mode", -1))
         HDA_CHOICES(ctl, "front-out rear-out center/LFE-out side-out pcm4-out input");
      HDA_OUTMUTE(0x18, group, "inmute", UNMUTE);
      HDA_INAMP(0x18, 0, group, "out", 90);   /* From widget 0x0c */
      }

   if (HDA_PIN_GROUP(0x19, group, pin_group, "fp-pink", n, "jack", 4))   /* Pin widget 0x19 */
      {
      /* Src 0xc=front */
      /* Src 0xd=rear */
      /* Src 0xe=center/LFE */
      /* Src 0xf=side */
      /* Src 0x26=pcm4 */
      if (HDA_PINSELECT(0x19, ctl, group, "mode", -1))
         HDA_CHOICES(ctl, "front-out rear-out center/LFE-out side-out pcm4-out input");
      HDA_OUTMUTE(0x19, group, "inmute", UNMUTE);
      HDA_INAMP(0x19, 0, group, "out", 90);   /* From widget 0x0c */
      }

   if (HDA_PIN_GROUP(0x1a, group, pin_group, "blue", n, "jack", 4))   /* Pin widget 0x1a */
      {
      /* Src 0xc=front */
      /* Src 0xd=rear */
      /* Src 0xe=center/LFE */
      /* Src 0xf=side */
      /* Src 0x26=pcm4 */
      if (HDA_PINSELECT(0x1a, ctl, group, "mode", -1))
         HDA_CHOICES(ctl, "front-out rear-out center/LFE-out side-out pcm4-out input");
      HDA_OUTMUTE(0x1a, group, "inmute", UNMUTE);
      HDA_INAMP(0x1a, 0, group, "out", 90);   /* From widget 0x0c */
      }

   if (HDA_PIN_GROUP(0x1b, group, pin_group, "fp-green", n, "jack", 4))   /* Pin widget 0x1b */
      {
      /* Src 0xc=front */
      /* Src 0xd=rear */
      /* Src 0xe=center/LFE */
      /* Src 0xf=side */
      /* Src 0x26=pcm4 */
      if (HDA_PINSELECT(0x1b, ctl, group, "mode", -1))
         HDA_CHOICES(ctl, "front-out rear-out center/LFE-out side-out pcm4-out input");
      HDA_OUTMUTE(0x1b, group, "inmute", UNMUTE);
      HDA_INAMP(0x1b, 0, group, "out", 90);   /* From widget 0x0c */
      }

   if (HDA_PIN_GROUP(0x1c, group, pin_group, "int-cd", n, "jack", 4))   /* Pin widget 0x1c */
      {
      if (HDA_PINSELECT(0x1c, ctl, group, "mode", -1))
         HDA_CHOICES(ctl, "input");
      }

   if (HDA_PIN_GROUP(0x1d, group, pin_group, "black", n, "jack", 4))   /* Pin widget 0x1d */
      {
      if (HDA_PINSELECT(0x1d, ctl, group, "mode", -1))
         HDA_CHOICES(ctl, "input");
      }
  }
  /* Handle ADC widgets */
  {
   int n, group, rec_group;

   n=0;

   HDA_GROUP(rec_group, top_group, "record");

   if (HDA_ADC_GROUP(0x08, group, rec_group, "mix", n, "record", 4))   /* ADC widget 0x08 */
      {
      /* Src 0x23=mix */
      HDA_INAMP(0x08, 0, group, "mix", 90);   /* From widget 0x23 */

      /* Widget 0x23 (mix) */
      /* Src 0x18=pink */
      /* Src 0x19=fp-pink */
      /* Src 0x1a=blue */
      /* Src 0x1b=fp-green */
      /* Src 0x1c=int-cd */
      /* Src 0x1d=black */
      /* Src 0x14=green */
      /* Src 0x15=black */
      /* Src 0x16=orange */
      /* Src 0x17=gray */
      /* Src 0xb=input-mix */
      {
         int amp_group;

         HDA_GROUP(amp_group, group, "mute");
         HDA_INMUTE(0x23, 0, amp_group, "pink", UNMUTE);   /* From widget 0x18 */
         HDA_INMUTE(0x23, 1, amp_group, "fp-pink", UNMUTE);   /* From widget 0x19 */
         HDA_INMUTE(0x23, 2, amp_group, "blue", UNMUTE);   /* From widget 0x1a */
         HDA_INMUTE(0x23, 3, amp_group, "fp-green", UNMUTE);   /* From widget 0x1b */
         HDA_INMUTE(0x23, 4, amp_group, "int-cd", UNMUTE);   /* From widget 0x1c */
         HDA_INMUTE(0x23, 5, amp_group, "black", UNMUTE);   /* From widget 0x1d */
         HDA_INMUTE(0x23, 6, amp_group, "green", UNMUTE);   /* From widget 0x14 */
         HDA_INMUTE(0x23, 7, amp_group, "black", UNMUTE);   /* From widget 0x15 */
         HDA_INMUTE(0x23, 8, amp_group, "orange", UNMUTE);   /* From widget 0x16 */
         HDA_INMUTE(0x23, 9, amp_group, "gray", UNMUTE);   /* From widget 0x17 */
         HDA_INMUTE(0x23, 10, amp_group, "input-mix", UNMUTE);   /* From widget 0x0b */
      }
      }

   if (HDA_ADC_GROUP(0x09, group, rec_group, "mix", n, "record", 4))   /* ADC widget 0x09 */
      {
      /* Src 0x22=mix */
      HDA_INAMP(0x09, 0, group, "mix", 90);   /* From widget 0x22 */

      /* Widget 0x22 (mix) */
      /* Src 0x18=pink */
      /* Src 0x19=fp-pink */
      /* Src 0x1a=blue */
      /* Src 0x1b=fp-green */
      /* Src 0x1c=int-cd */
      /* Src 0x1d=black */
      /* Src 0x14=green */
      /* Src 0x15=black */
      /* Src 0x16=orange */
      /* Src 0x17=gray */
      /* Src 0xb=input-mix */
      {
         int amp_group;

         HDA_GROUP(amp_group, group, "mute");
         HDA_INMUTE(0x22, 0, amp_group, "pink", UNMUTE);   /* From widget 0x18 */
         HDA_INMUTE(0x22, 1, amp_group, "fp-pink", UNMUTE);   /* From widget 0x19 */
         HDA_INMUTE(0x22, 2, amp_group, "blue", UNMUTE);   /* From widget 0x1a */
         HDA_INMUTE(0x22, 3, amp_group, "fp-green", UNMUTE);   /* From widget 0x1b */
         HDA_INMUTE(0x22, 4, amp_group, "int-cd", UNMUTE);   /* From widget 0x1c */
         HDA_INMUTE(0x22, 5, amp_group, "black", UNMUTE);   /* From widget 0x1d */
         HDA_INMUTE(0x22, 6, amp_group, "green", UNMUTE);   /* From widget 0x14 */
         HDA_INMUTE(0x22, 7, amp_group, "black", UNMUTE);   /* From widget 0x15 */
         HDA_INMUTE(0x22, 8, amp_group, "orange", UNMUTE);   /* From widget 0x16 */
         HDA_INMUTE(0x22, 9, amp_group, "gray", UNMUTE);   /* From widget 0x17 */
         HDA_INMUTE(0x22, 10, amp_group, "input-mix", UNMUTE);   /* From widget 0x0b */
      }
      }

   if (HDA_ADC_GROUP(0x0a, group, rec_group, "spdifin", n, "record", 4))   /* ADC widget 0x0a */
      {
      /* Src 0x1f=spdifin */
      }
  }
  /* Handle misc widgets */
  {
   int n, group, misc_group;

   n=0;

   HDA_GROUP(misc_group, top_group, "misc");

   if (HDA_MISC_GROUP(0x0b, group, misc_group, "input-mix", n, "misc", 8))/* Misc widget 0x0b */
      {
      /* Src 0x18=mic */
      /* Src 0x19=fp-mic */
      /* Src 0x1a=linein */
      /* Src 0x1b=fp-headphone */
      /* Src 0x1c=int-cd */
      /* Src 0x1d=speaker */
      /* Src 0x14=green */
      /* Src 0x15=black */
      /* Src 0x16=orange */
      /* Src 0x17=gray */
      HDA_INAMP(0x0b, 0, group, "pink", 90);   /* From widget 0x18 */
      HDA_INAMP(0x0b, 1, group, "fp-pink", 90);   /* From widget 0x19 */
      HDA_INAMP(0x0b, 2, group, "blue", 90);   /* From widget 0x1a */
      HDA_INAMP(0x0b, 3, group, "fp-green", 90);   /* From widget 0x1b */
      HDA_INAMP(0x0b, 4, group, "int-cd", 90);   /* From widget 0x1c */
      HDA_INAMP(0x0b, 5, group, "black", 90);   /* From widget 0x1d */
      HDA_INAMP(0x0b, 6, group, "green", 90);   /* From widget 0x14 */
      HDA_INAMP(0x0b, 7, group, "black", 90);   /* From widget 0x15 */
      HDA_INAMP(0x0b, 8, group, "orange", 90);   /* From widget 0x16 */
      HDA_INAMP(0x0b, 9, group, "gray", 90);   /* From widget 0x17 */
      }

   if (HDA_MISC_GROUP(0x0c, group, misc_group, "front", n, "misc", 8))   /* Misc widget 0x0c */
      {
      /* Src 0x2=front */
      /* Src 0xb=input-mix */
      HDA_OUTAMP(0x0c, group, "-", 90);
      {
         int amp_group;

         HDA_GROUP(amp_group, group, "mute");
         HDA_INMUTE(0x0c, 0, amp_group, "front", UNMUTE);   /* From widget 0x02 */
         HDA_INMUTE(0x0c, 1, amp_group, "input-mix", UNMUTE);   /* From widget 0x0b */
      }
      }

   if (HDA_MISC_GROUP(0x0d, group, misc_group, "rear", n, "misc", 8))   /* Misc widget 0x0d */
      {
      /* Src 0x3=rear */
      /* Src 0xb=input-mix */
      HDA_OUTAMP(0x0d, group, "-", 90);
      {
         int amp_group;

         HDA_GROUP(amp_group, group, "mute");
         HDA_INMUTE(0x0d, 0, amp_group, "rear", UNMUTE);   /* From widget 0x03 */
         HDA_INMUTE(0x0d, 1, amp_group, "input-mix", UNMUTE);   /* From widget 0x0b */
      }
      }

   if (HDA_MISC_GROUP(0x0e, group, misc_group, "center/LFE", n, "misc", 8))/* Misc widget 0x0e */
      {
      /* Src 0x4=center/LFE */
      /* Src 0xb=input-mix */
      HDA_OUTAMP(0x0e, group, "-", 90);
      {
         int amp_group;

         HDA_GROUP(amp_group, group, "mute");
         HDA_INMUTE(0x0e, 0, amp_group, "center/LFE", UNMUTE);   /* From widget 0x04 */
         HDA_INMUTE(0x0e, 1, amp_group, "input-mix", UNMUTE);   /* From widget 0x0b */
      }
      }

   if (HDA_MISC_GROUP(0x0f, group, misc_group, "side", n, "misc", 8))   /* Misc widget 0x0f */
      {
      /* Src 0x5=side */
      /* Src 0xb=input-mix */
      HDA_OUTAMP(0x0f, group, "-", 90);
      {
         int amp_group;

         HDA_GROUP(amp_group, group, "mute");
         HDA_INMUTE(0x0f, 0, amp_group, "side", UNMUTE);   /* From widget 0x05 */
         HDA_INMUTE(0x0f, 1, amp_group, "input-mix", UNMUTE);   /* From widget 0x0b */
      }
      }

   if (HDA_MISC_GROUP(0x26, group, misc_group, "pcm4", n, "misc", 8))   /* Misc widget 0x26 */
      {
      /* Src 0x25=pcm4 */
      /* Src 0xb=input-mix */
      HDA_OUTAMP(0x26, group, "-", 90);
      {
         int amp_group;

         HDA_GROUP(amp_group, group, "mute");
         HDA_INMUTE(0x26, 0, amp_group, "pcm4", UNMUTE);   /* From widget 0x25 */
         HDA_INMUTE(0x26, 1, amp_group, "input-mix", UNMUTE);   /* From widget 0x0b */
      }
      }
  }
  return 0;
}



Code: Select all
$sudo ./mixgen2
Codec  0: HD codec revision 1.0 (0.1) (0x00100001)
Attach function group, cad=00, wid=01
Widget 14: default_device=0, name=green, color=green
Widget 15: default_device=0, name=black, color=black
Widget 16: default_device=0, name=orange, color=orange
Widget 17: default_device=0, name=gray, color=gray
Widget 18: default_device=10, name=mic, color=pink
Widget 19: default_device=10, name=fp-mic, color=fp-pink
Widget 1a: default_device=8, name=linein, color=blue
Widget 1b: default_device=2, name=fp-headphone, color=fp-green
Widget 1c: default_device=3, name=int-cd, color=int-cd
Widget 1d: default_device=1, name=speaker, color=black
Widget 1e: default_device=4, name=spdifout, color=orange
Widget 1f: default_device=12, name=spdifin, color=yellow
Attach function group, cad=00, wid=01
*** Codec 0
Create path list 1 (rec)
Create path list 2 (mix)
Create path list 3 (select)
Path (a=1, s=0, jc=1):
   14(jack/green/nc=5/rc=3)
      Output amp
      5 input amp(s)
         0c(mix/mix/nc=2/rc=8)
         0d(mix/mix/nc=2/rc=8)
         0e(mix/mix/nc=2/rc=8)
         0f(mix/mix/nc=2/rc=8)
         26(mix/mix/nc=2/rc=8)
   0c(mix/mix/nc=2/rc=8)
      Output amp
      2 input amp(s)
         02(pcm/pcm/nc=0/rc=1)
         0b(mix/mix/nc=10/rc=7)

Path (a=1, s=1, jc=1):
   16(jack/orange/nc=5/rc=3)
      Output amp
      5 input amp(s)
         0c(mix/mix/nc=2/rc=8)
         0d(mix/mix/nc=2/rc=8)
         0e(mix/mix/nc=2/rc=8)
         0f(mix/mix/nc=2/rc=8)
         26(mix/mix/nc=2/rc=8)
   0d(mix/mix/nc=2/rc=8)
      Output amp
      2 input amp(s)
         03(pcm/pcm/nc=0/rc=1)
         0b(mix/mix/nc=10/rc=7)

Path (a=1, s=2, jc=1):
   15(jack/black/nc=5/rc=3)
      Output amp
      5 input amp(s)
         0c(mix/mix/nc=2/rc=8)
         0d(mix/mix/nc=2/rc=8)
         0e(mix/mix/nc=2/rc=8)
         0f(mix/mix/nc=2/rc=8)
         26(mix/mix/nc=2/rc=8)
   0e(mix/mix/nc=2/rc=8)
      Output amp
      2 input amp(s)
         04(pcm/pcm/nc=0/rc=1)
         0b(mix/mix/nc=10/rc=7)

Path (a=1, s=4, jc=1):
   17(jack/gray/nc=5/rc=3)
      Output amp
      5 input amp(s)
         0c(mix/mix/nc=2/rc=8)
         0d(mix/mix/nc=2/rc=8)
         0e(mix/mix/nc=2/rc=8)
         0f(mix/mix/nc=2/rc=8)
         26(mix/mix/nc=2/rc=8)
   0f(mix/mix/nc=2/rc=8)
      Output amp
      2 input amp(s)
         05(pcm/pcm/nc=0/rc=1)
         0b(mix/mix/nc=10/rc=7)

Path (a=2, s=0, jc=1):
   1b(jack/fp-headphone/nc=5/rc=3)
      Output amp
      5 input amp(s)
         0c(mix/mix/nc=2/rc=8)
         0d(mix/mix/nc=2/rc=8)
         0e(mix/mix/nc=2/rc=8)
         0f(mix/mix/nc=2/rc=8)
         26(mix/mix/nc=2/rc=8)
   26(mix/mix/nc=2/rc=8)
      Output amp
      2 input amp(s)
         25(pcm/pcm/nc=0/rc=1)
         0b(mix/mix/nc=10/rc=7)

Path (a=3, s=0, jc=1):
   1e(jack/spdifout/nc=1/rc=0)
   06(pcm/pcm/nc=0/rc=1)

Path (a=0, s=0, jc=0):
   08(rec/rec/nc=1/rc=0)
      1 input amp(s)
         23(mix/mix/nc=11/rc=1)
   23(mix/mix/nc=11/rc=1)
      11 input amp(s)
         18(jack/mic/nc=5/rc=3)
         19(jack/fp-mic/nc=5/rc=3)
         1a(jack/linein/nc=5/rc=3)
         1b(jack/fp-headphone/nc=5/rc=3)
         1c(jack/int-cd/nc=0/rc=3)
         1d(jack/speaker/nc=0/rc=3)
         14(jack/green/nc=5/rc=3)
         15(jack/black/nc=5/rc=3)
         16(jack/orange/nc=5/rc=3)
         17(jack/gray/nc=5/rc=3)
         0b(mix/mix/nc=10/rc=7)

Path (a=0, s=0, jc=0):
   09(rec/rec/nc=1/rc=0)
      1 input amp(s)
         22(mix/mix/nc=11/rc=1)
   22(mix/mix/nc=11/rc=1)
      11 input amp(s)
         18(jack/mic/nc=5/rc=3)
         19(jack/fp-mic/nc=5/rc=3)
         1a(jack/linein/nc=5/rc=3)
         1b(jack/fp-headphone/nc=5/rc=3)
         1c(jack/int-cd/nc=0/rc=3)
         1d(jack/speaker/nc=0/rc=3)
         14(jack/green/nc=5/rc=3)
         15(jack/black/nc=5/rc=3)
         16(jack/orange/nc=5/rc=3)
         17(jack/gray/nc=5/rc=3)
         0b(mix/mix/nc=10/rc=7)

Path (a=6, s=0, jc=1):
   0a(rec/rec/nc=1/rc=0)
   1f(jack/spdifin/nc=0/rc=1)

Path (a=4, s=0, jc=1):
   0b(mix/mix/nc=10/rc=7)
      10 input amp(s)
         18(jack/mic/nc=5/rc=3)
         19(jack/fp-mic/nc=5/rc=3)
         1a(jack/linein/nc=5/rc=3)
         1b(jack/fp-headphone/nc=5/rc=3)
         1c(jack/int-cd/nc=0/rc=3)
         1d(jack/speaker/nc=0/rc=3)
         14(jack/green/nc=5/rc=3)
         15(jack/black/nc=5/rc=3)
         16(jack/orange/nc=5/rc=3)
         17(jack/gray/nc=5/rc=3)
   18(jack/mic/nc=5/rc=3)
      Output amp
      5 input amp(s)
         0c(mix/mix/nc=2/rc=8)
         0d(mix/mix/nc=2/rc=8)
         0e(mix/mix/nc=2/rc=8)
         0f(mix/mix/nc=2/rc=8)
         26(mix/mix/nc=2/rc=8)



Other widgets:
Codec 0, Widget 00 pcm//0
Codec 0, Widget 07 vendor/vendor/0
Codec 0, Widget 10 vendor/vendor/0
Codec 0, Widget 11 vendor/vendor/0
Codec 0, Widget 12 vendor/vendor/0
Codec 0, Widget 13 vendor/vendor/0
Codec 0, Widget 20 vendor/vendor/0
Codec 0, Widget 21 vendor/vendor/0
Codec 0, Widget 24 vendor/vendor/0
sudo ./mixgen2
Codec  0: HD codec revision 1.0 (0.1) (0x00100001)
Attach function group, cad=00, wid=01
Widget 14: default_device=0, name=green, color=green
Widget 15: default_device=0, name=black, color=black
Widget 16: default_device=0, name=orange, color=orange
Widget 17: default_device=0, name=gray, color=gray
Widget 18: default_device=10, name=mic, color=pink
Widget 19: default_device=10, name=fp-mic, color=fp-pink
Widget 1a: default_device=8, name=linein, color=blue
Widget 1b: default_device=2, name=fp-headphone, color=fp-green
Widget 1c: default_device=3, name=int-cd, color=int-cd
Widget 1d: default_device=1, name=speaker, color=black
Widget 1e: default_device=4, name=spdifout, color=orange
Widget 1f: default_device=12, name=spdifin, color=yellow
Attach function group, cad=00, wid=01
*** Codec 0
Create path list 1 (rec)
Create path list 2 (mix)
Create path list 3 (select)
Path (a=1, s=0, jc=1):
   14(jack/green/nc=5/rc=3)
      Output amp
      5 input amp(s)
         0c(mix/mix/nc=2/rc=8)
         0d(mix/mix/nc=2/rc=8)
         0e(mix/mix/nc=2/rc=8)
         0f(mix/mix/nc=2/rc=8)
         26(mix/mix/nc=2/rc=8)
   0c(mix/mix/nc=2/rc=8)
      Output amp
      2 input amp(s)
         02(pcm/pcm/nc=0/rc=1)
         0b(mix/mix/nc=10/rc=7)

Path (a=1, s=1, jc=1):
   16(jack/orange/nc=5/rc=3)
      Output amp
      5 input amp(s)
         0c(mix/mix/nc=2/rc=8)
         0d(mix/mix/nc=2/rc=8)
         0e(mix/mix/nc=2/rc=8)
         0f(mix/mix/nc=2/rc=8)
         26(mix/mix/nc=2/rc=8)
   0d(mix/mix/nc=2/rc=8)
      Output amp
      2 input amp(s)
         03(pcm/pcm/nc=0/rc=1)
         0b(mix/mix/nc=10/rc=7)

Path (a=1, s=2, jc=1):
   15(jack/black/nc=5/rc=3)
      Output amp
      5 input amp(s)
         0c(mix/mix/nc=2/rc=8)
         0d(mix/mix/nc=2/rc=8)
         0e(mix/mix/nc=2/rc=8)
         0f(mix/mix/nc=2/rc=8)
         26(mix/mix/nc=2/rc=8)
   0e(mix/mix/nc=2/rc=8)
      Output amp
      2 input amp(s)
         04(pcm/pcm/nc=0/rc=1)
         0b(mix/mix/nc=10/rc=7)

Path (a=1, s=4, jc=1):
   17(jack/gray/nc=5/rc=3)
      Output amp
      5 input amp(s)
         0c(mix/mix/nc=2/rc=8)
         0d(mix/mix/nc=2/rc=8)
         0e(mix/mix/nc=2/rc=8)
         0f(mix/mix/nc=2/rc=8)
         26(mix/mix/nc=2/rc=8)
   0f(mix/mix/nc=2/rc=8)
      Output amp
      2 input amp(s)
         05(pcm/pcm/nc=0/rc=1)
         0b(mix/mix/nc=10/rc=7)

Path (a=2, s=0, jc=1):
   1b(jack/fp-headphone/nc=5/rc=3)
      Output amp
      5 input amp(s)
         0c(mix/mix/nc=2/rc=8)
         0d(mix/mix/nc=2/rc=8)
         0e(mix/mix/nc=2/rc=8)
         0f(mix/mix/nc=2/rc=8)
         26(mix/mix/nc=2/rc=8)
   26(mix/mix/nc=2/rc=8)
      Output amp
      2 input amp(s)
         25(pcm/pcm/nc=0/rc=1)
         0b(mix/mix/nc=10/rc=7)

Path (a=3, s=0, jc=1):
   1e(jack/spdifout/nc=1/rc=0)
   06(pcm/pcm/nc=0/rc=1)

Path (a=0, s=0, jc=0):
   08(rec/rec/nc=1/rc=0)
      1 input amp(s)
         23(mix/mix/nc=11/rc=1)
   23(mix/mix/nc=11/rc=1)
      11 input amp(s)
         18(jack/mic/nc=5/rc=3)
         19(jack/fp-mic/nc=5/rc=3)
         1a(jack/linein/nc=5/rc=3)
         1b(jack/fp-headphone/nc=5/rc=3)
         1c(jack/int-cd/nc=0/rc=3)
         1d(jack/speaker/nc=0/rc=3)
         14(jack/green/nc=5/rc=3)
         15(jack/black/nc=5/rc=3)
         16(jack/orange/nc=5/rc=3)
         17(jack/gray/nc=5/rc=3)
         0b(mix/mix/nc=10/rc=7)

Path (a=0, s=0, jc=0):
   09(rec/rec/nc=1/rc=0)
      1 input amp(s)
         22(mix/mix/nc=11/rc=1)
   22(mix/mix/nc=11/rc=1)
      11 input amp(s)
         18(jack/mic/nc=5/rc=3)
         19(jack/fp-mic/nc=5/rc=3)
         1a(jack/linein/nc=5/rc=3)
         1b(jack/fp-headphone/nc=5/rc=3)
         1c(jack/int-cd/nc=0/rc=3)
         1d(jack/speaker/nc=0/rc=3)
         14(jack/green/nc=5/rc=3)
         15(jack/black/nc=5/rc=3)
         16(jack/orange/nc=5/rc=3)
         17(jack/gray/nc=5/rc=3)
         0b(mix/mix/nc=10/rc=7)

Path (a=6, s=0, jc=1):
   0a(rec/rec/nc=1/rc=0)
   1f(jack/spdifin/nc=0/rc=1)

Path (a=4, s=0, jc=1):
   0b(mix/mix/nc=10/rc=7)
      10 input amp(s)
         18(jack/mic/nc=5/rc=3)
         19(jack/fp-mic/nc=5/rc=3)
         1a(jack/linein/nc=5/rc=3)
         1b(jack/fp-headphone/nc=5/rc=3)
         1c(jack/int-cd/nc=0/rc=3)
         1d(jack/speaker/nc=0/rc=3)
         14(jack/green/nc=5/rc=3)
         15(jack/black/nc=5/rc=3)
         16(jack/orange/nc=5/rc=3)
         17(jack/gray/nc=5/rc=3)
   18(jack/mic/nc=5/rc=3)
      Output amp
      5 input amp(s)
         0c(mix/mix/nc=2/rc=8)
         0d(mix/mix/nc=2/rc=8)
         0e(mix/mix/nc=2/rc=8)
         0f(mix/mix/nc=2/rc=8)
         26(mix/mix/nc=2/rc=8)



Other widgets:
Codec 0, Widget 00 pcm//0
Codec 0, Widget 07 vendor/vendor/0
Codec 0, Widget 10 vendor/vendor/0
Codec 0, Widget 11 vendor/vendor/0
Codec 0, Widget 12 vendor/vendor/0
Codec 0, Widget 13 vendor/vendor/0
Codec 0, Widget 20 vendor/vendor/0
Codec 0, Widget 21 vendor/vendor/0
Codec 0, Widget 24 vendor/vendor/0

I hope that some knows how to convert these into working solution.
Matti
Member
 
Posts: 39
Joined: Sun May 29, 2011 12:34 pm

Re: Custom mixer for MCP55 High Definition Audio

Postby igorzwx » Mon Feb 06, 2012 11:12 am

Matti wrote:Open Sound System recognizes my soundcard as High Definition Audio ALC888, but lspci -v and program for retriving system information (i-Nex) shows it as nVidia Corporation MCP55 High Definition Audio (rev a2)


Why do you think that it should not be recognized as ALC888 codec?

What is the difference between "codec" and "soundcard"?
http://www.realtek.com.tw/products/prod ... ProdID=135
http://en.wikipedia.org/wiki/Codec_(disambiguation)

The mixgen.c can be used to create a skeleton of a mixer driver. Then the result can be fine tuned by using trial and error approach.
http://permalink.gmane.org/gmane.comp.a ... devel/1155

If you are going to create your own "custom mixer driver", you may better post such questions to developers' forum/mailing list.

On the other hand, you seem to be right. If the developers cannot tune drivers by "trial and error" (simply because they do not have all different motherboards with HDAudio codecs), this should be done by users themselves. However, the users may need a comprehensive manual. Right?

Although OSS4 is said to be "well-documented" (in comparison with PulseALSA and other "open-source" crap), the user manual on writing own custom drivers does not seem to be available.
igorzwx
Known Member
 
Posts: 1000
Joined: Sun Jun 28, 2009 9:31 pm


Return to Linux

Who is online

Users browsing this forum: Bing [Bot] and 1 guest