On Sat, Jun 20, 2009 at 11:58:52PM +0000, Jacob Meuser wrote: > On Sat, Jun 20, 2009 at 11:18:44AM +0000, Jacob Meuser wrote: > > for codecs with multiple line out jacks, this patch would use the > > color of the jack (according to the codec) in the name instead > > of enumerating the jacks, if all the line out jack have different > > colors. for example: > > > > outputs.line -> outputs.line-grn > > outputs.line2 -> outputs.line-org > > outputs.line3 -> outputs.line-blk > > outputs.line4 -> outputs.line-gry > > > > unfortunately, there isn't enough room in mixer names for the color > > to be spelled out fully. the abbreviations are as follows: > > > > blk -> black > > gry -> grey > > blu -> blue > > grn -> green > > red -> red > > org -> orange > > yel -> yellow > > pur -> purple > > pnk -> pink > > whi -> white > > oth -> other > > > > I would be surprised to see colors other than grn, org, blk, gry being > > used for line out jacks. the others are usually used for inputs or > > digital connections. > > > > comments? > > forgot to initialize a variable. please try this diff instead.
third times the charm? -- [email protected] SDF Public Access UNIX System - http://sdf.lonestar.org Index: azalia.c =================================================================== RCS file: /cvs/src/sys/dev/pci/azalia.c,v retrieving revision 1.140 diff -u azalia.c --- azalia.c 18 Jun 2009 08:19:03 -0000 1.140 +++ azalia.c 21 Jun 2009 05:17:54 -0000 @@ -311,6 +311,9 @@ "dac", "adc", "mix", "sel", "pin", "pow", "volume", "beep", "wid08", "wid09", "wid0a", "wid0b", "wid0c", "wid0d", "wid0e", "vendor"}; +static const char *line_colors[16] = { + "unk", "blk", "gry", "blu", "grn", "red", "org", "yel", + "pur", "pnk", "0xa", "0xb", "0xc", "0xd", "wht", "oth"}; /* ================================================================ * PCI functions @@ -1319,11 +1322,13 @@ switch (this->w[i].d.pin.device) { case CORB_CD_SPEAKER: this->speaker = i; - this->spkr_dac = azalia_codec_find_defdac(this, i, 0); + this->spkr_dac = + azalia_codec_find_defdac(this, i, 0); break; case CORB_CD_MICIN: this->mic = i; - this->mic_adc = azalia_codec_find_defadc(this, i, 0); + this->mic_adc = + azalia_codec_find_defadc(this, i, 0); break; } break; @@ -2636,11 +2641,29 @@ widget_t *w; int types[16]; int pins[16]; + int colors_used, use_colors; int i, j; bzero(&pins, sizeof(pins)); bzero(&types, sizeof(types)); + /* If codec has more than one line-out jack, check if the jacks + * have unique colors. If so, use the colors in the mixer names. + */ + use_colors = 1; + colors_used = 0; + if (codec->nout_jacks < 2) + use_colors = 0; + for (i = 0; use_colors && i < codec->nopins; i++) { + w = &codec->w[codec->opins[i].nid]; + if (w->d.pin.device != CORB_CD_LINEOUT) + continue; + if (colors_used & (1 << w->d.pin.color)) + use_colors = 0; + else + colors_used |= (1 << w->d.pin.color); + } + FOR_EACH_WIDGET(codec, i) { w = &codec->w[i]; /* default for disabled/unused widgets */ @@ -2650,13 +2673,18 @@ switch (w->type) { case COP_AWTYPE_PIN_COMPLEX: pins[w->d.pin.device]++; - if (pins[w->d.pin.device] > 1) + if (use_colors && w->d.pin.device == CORB_CD_LINEOUT) { + snprintf(w->name, sizeof(w->name), "%s-%s", + pin_devices[w->d.pin.device], + line_colors[w->d.pin.color]); + } else if (pins[w->d.pin.device] > 1) { snprintf(w->name, sizeof(w->name), "%s%d", pin_devices[w->d.pin.device], pins[w->d.pin.device]); - else + } else { snprintf(w->name, sizeof(w->name), "%s", pin_devices[w->d.pin.device]); + } break; case COP_AWTYPE_AUDIO_OUTPUT: if (codec->dacs.ngroups < 1)
