/[openvortex]/alsa/alsa-kernel/pci/emu10k1/emumixer.c
ViewVC logotype

Diff of /alsa/alsa-kernel/pci/emu10k1/emumixer.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.2 by vizard, Sat May 31 02:35:12 2003 UTC revision 1.3 by vizard, Mon Aug 11 00:06:40 2003 UTC
# Line 423  static void snd_emu10k1_mixer_free_ac97( Line 423  static void snd_emu10k1_mixer_free_ac97(
423          emu->ac97 = NULL;          emu->ac97 = NULL;
424  }  }
425    
426    /*
427     */
428    static int remove_ctl(snd_card_t *card, const char *name)
429    {
430            snd_ctl_elem_id_t id;
431            memset(&id, 0, sizeof(id));
432            strcpy(id.name, name);
433            id.iface = SNDRV_CTL_ELEM_IFACE_MIXER;
434            return snd_ctl_remove_id(card, &id);
435    }
436    
437    static snd_kcontrol_t *ctl_find(snd_card_t *card, const char *name)
438    {
439            snd_ctl_elem_id_t sid;
440            memset(&sid, 0, sizeof(sid));
441            strcpy(sid.name, name);
442            sid.iface = SNDRV_CTL_ELEM_IFACE_MIXER;
443            return snd_ctl_find_id(card, &sid);
444    }
445    
446    static int rename_ctl(snd_card_t *card, const char *src, const char *dst)
447    {
448            snd_kcontrol_t *kctl = ctl_find(card, src);
449            if (kctl) {
450                    strcpy(kctl->id.name, dst);
451                    return 0;
452            }
453            return -ENOENT;
454    }
455    
456  int __devinit snd_emu10k1_mixer(emu10k1_t *emu)  int __devinit snd_emu10k1_mixer(emu10k1_t *emu)
457  {  {
458          ac97_t ac97;          ac97_t ac97;
# Line 430  int __devinit snd_emu10k1_mixer(emu10k1_ Line 460  int __devinit snd_emu10k1_mixer(emu10k1_
460          snd_kcontrol_t *kctl;          snd_kcontrol_t *kctl;
461          snd_card_t *card = emu->card;          snd_card_t *card = emu->card;
462    
463          if (!emu->APS) {          if (!emu->no_ac97) {
464                  memset(&ac97, 0, sizeof(ac97));                  memset(&ac97, 0, sizeof(ac97));
465                  ac97.write = snd_emu10k1_ac97_write;                  ac97.write = snd_emu10k1_ac97_write;
466                  ac97.read = snd_emu10k1_ac97_read;                  ac97.read = snd_emu10k1_ac97_read;
# Line 438  int __devinit snd_emu10k1_mixer(emu10k1_ Line 468  int __devinit snd_emu10k1_mixer(emu10k1_
468                  ac97.private_free = snd_emu10k1_mixer_free_ac97;                  ac97.private_free = snd_emu10k1_mixer_free_ac97;
469                  if ((err = snd_ac97_mixer(emu->card, &ac97, &emu->ac97)) < 0)                  if ((err = snd_ac97_mixer(emu->card, &ac97, &emu->ac97)) < 0)
470                          return err;                          return err;
471                    if (emu->audigy && emu->revision == 4) {
472                            /* Master/PCM controls on ac97 of Audigy2 has no effect */
473                            /* FIXME: keep master volume/switch to be sure.
474                             * once after we check that they play really no roles,
475                             * they shall be removed.
476                             */
477                            rename_ctl(card, "Master Playback Switch", "AC97 Master Playback Switch");
478                            rename_ctl(card, "Master Playback Volume", "AC97 Master Playback Volume");
479                            /* pcm controls are removed */
480                            remove_ctl(card, "PCM Playback Switch");
481                            remove_ctl(card, "PCM Playback Volume");
482                    }
483          } else {          } else {
484                  strcpy(emu->card->mixername, "EMU APS");                  if (emu->APS)
485                            strcpy(emu->card->mixername, "EMU APS");
486                    else if (emu->audigy)
487                            strcpy(emu->card->mixername, "SB Audigy");
488                    else
489                            strcpy(emu->card->mixername, "Emu10k1");
490            }
491    
492            if (emu->audigy && emu->revision == 4) {
493                    /* Audigy2 and Audigy2 EX */
494                    /* use the conventional names */
495                    rename_ctl(card, "Wave Playback Volume", "PCM Playback Volume");
496                    rename_ctl(card, "Wave Playback Volume", "PCM Capture Volume");
497                    rename_ctl(card, "Wave Master Playback Volume", "Master Playback Volume");
498          }          }
499    
500          if ((kctl = emu->ctl_send_routing = snd_ctl_new1(&snd_emu10k1_send_routing_control, emu)) == NULL)          if ((kctl = emu->ctl_send_routing = snd_ctl_new1(&snd_emu10k1_send_routing_control, emu)) == NULL)
# Line 455  int __devinit snd_emu10k1_mixer(emu10k1_ Line 510  int __devinit snd_emu10k1_mixer(emu10k1_
510          if ((err = snd_ctl_add(card, kctl)))          if ((err = snd_ctl_add(card, kctl)))
511                  return err;                  return err;
512    
513            /* intiailize the routing and volume table for each pcm playback stream */
514          for (pcm = 0; pcm < 32; pcm++) {          for (pcm = 0; pcm < 32; pcm++) {
515                  emu10k1_pcm_mixer_t *mix;                  emu10k1_pcm_mixer_t *mix;
516                  int v;                  int v;
# Line 474  int __devinit snd_emu10k1_mixer(emu10k1_ Line 530  int __devinit snd_emu10k1_mixer(emu10k1_
530                  mix->attn[0] = mix->attn[1] = mix->attn[2] = 0xffff;                  mix->attn[0] = mix->attn[1] = mix->attn[2] = 0xffff;
531          }          }
532                    
533          if ((kctl = snd_ctl_new1(&snd_emu10k1_spdif_mask_control, emu)) == NULL)          if (! emu->APS) { /* FIXME: APS has these controls? */
534                  return -ENOMEM;                  /* sb live! and audigy */
535          if ((err = snd_ctl_add(card, kctl)))                  if ((kctl = snd_ctl_new1(&snd_emu10k1_spdif_mask_control, emu)) == NULL)
536                  return err;                          return -ENOMEM;
537          if ((kctl = snd_ctl_new1(&snd_emu10k1_spdif_control, emu)) == NULL)                  if ((err = snd_ctl_add(card, kctl)))
538                  return -ENOMEM;                          return err;
539          if ((err = snd_ctl_add(card, kctl)))                  if ((kctl = snd_ctl_new1(&snd_emu10k1_spdif_control, emu)) == NULL)
540                  return err;                          return -ENOMEM;
541                    if ((err = snd_ctl_add(card, kctl)))
542                            return err;
543            }
544    
545          if (emu->audigy) {          if (emu->audigy) {
546                  if ((kctl = snd_ctl_new1(&snd_audigy_shared_spdif, emu)) == NULL)                  if ((kctl = snd_ctl_new1(&snd_audigy_shared_spdif, emu)) == NULL)
547                          return -ENOMEM;                          return -ENOMEM;
548                  if ((err = snd_ctl_add(card, kctl)))                  if ((err = snd_ctl_add(card, kctl)))
549                          return err;                          return err;
550          } else {          } else if (! emu->APS) {
551                    /* sb live! */
552                  if ((kctl = snd_ctl_new1(&snd_emu10k1_shared_spdif, emu)) == NULL)                  if ((kctl = snd_ctl_new1(&snd_emu10k1_shared_spdif, emu)) == NULL)
553                          return -ENOMEM;                          return -ENOMEM;
554                  if ((err = snd_ctl_add(card, kctl)))                  if ((err = snd_ctl_add(card, kctl)))

Legend:
Removed from v.1.2  
changed lines
  Added in v.1.3

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26