aboutsummaryrefslogtreecommitdiffstats
path: root/sound/pci/oxygen/oxygen_mixer.c
diff options
context:
space:
mode:
authorClemens Ladisch <clemens@ladisch.de>2008-01-14 02:56:01 -0500
committerJaroslav Kysela <perex@perex.cz>2008-01-31 11:29:57 -0500
commit01a3affb2eebfd6c996c36d82bbbc6040eb3a7f1 (patch)
treea80f44ba4a5d6997d932a7d80e9b517064eb2555 /sound/pci/oxygen/oxygen_mixer.c
parent7113e95812f508bff10f95f2e52ce6ee8cda1875 (diff)
[ALSA] oxygen: use an array of snd_kcontrol pointers
Use an array for the pointers to known controls so that it is easier to add more. Signed-off-by: Clemens Ladisch <clemens@ladisch.de> Signed-off-by: Jaroslav Kysela <perex@perex.cz>
Diffstat (limited to 'sound/pci/oxygen/oxygen_mixer.c')
-rw-r--r--sound/pci/oxygen/oxygen_mixer.c27
1 files changed, 15 insertions, 12 deletions
diff --git a/sound/pci/oxygen/oxygen_mixer.c b/sound/pci/oxygen/oxygen_mixer.c
index ca72799bea27..f7350faada1a 100644
--- a/sound/pci/oxygen/oxygen_mixer.c
+++ b/sound/pci/oxygen/oxygen_mixer.c
@@ -586,15 +586,22 @@ static const struct snd_kcontrol_new controls[] = {
586static void oxygen_any_ctl_free(struct snd_kcontrol *ctl) 586static void oxygen_any_ctl_free(struct snd_kcontrol *ctl)
587{ 587{
588 struct oxygen *chip = ctl->private_data; 588 struct oxygen *chip = ctl->private_data;
589 unsigned int i;
589 590
590 /* I'm too lazy to write a function for each control :-) */ 591 /* I'm too lazy to write a function for each control :-) */
591 chip->spdif_pcm_ctl = NULL; 592 for (i = 0; i < ARRAY_SIZE(chip->controls); ++i)
592 chip->spdif_input_bits_ctl = NULL; 593 chip->controls[i] = NULL;
593} 594}
594 595
595int oxygen_mixer_init(struct oxygen *chip) 596int oxygen_mixer_init(struct oxygen *chip)
596{ 597{
597 unsigned int i; 598 static const char *const known_ctl_names[CONTROL_COUNT] = {
599 [CONTROL_SPDIF_PCM] =
600 SNDRV_CTL_NAME_IEC958("", PLAYBACK, PCM_STREAM),
601 [CONTROL_SPDIF_INPUT_BITS] =
602 SNDRV_CTL_NAME_IEC958("", CAPTURE, DEFAULT),
603 };
604 unsigned int i, j;
598 struct snd_kcontrol *ctl; 605 struct snd_kcontrol *ctl;
599 int err; 606 int err;
600 607
@@ -610,15 +617,11 @@ int oxygen_mixer_init(struct oxygen *chip)
610 err = snd_ctl_add(chip->card, ctl); 617 err = snd_ctl_add(chip->card, ctl);
611 if (err < 0) 618 if (err < 0)
612 return err; 619 return err;
613 if (!strcmp(ctl->id.name, 620 for (j = 0; j < CONTROL_COUNT; ++j)
614 SNDRV_CTL_NAME_IEC958("", PLAYBACK, PCM_STREAM))) { 621 if (!strcmp(ctl->id.name, known_ctl_names[j])) {
615 chip->spdif_pcm_ctl = ctl; 622 chip->controls[j] = ctl;
616 ctl->private_free = oxygen_any_ctl_free; 623 ctl->private_free = oxygen_any_ctl_free;
617 } else if (!strcmp(ctl->id.name, 624 }
618 SNDRV_CTL_NAME_IEC958("", CAPTURE, DEFAULT))) {
619 chip->spdif_input_bits_ctl = ctl;
620 ctl->private_free = oxygen_any_ctl_free;
621 }
622 } 625 }
623 return chip->model->mixer_init ? chip->model->mixer_init(chip) : 0; 626 return chip->model->mixer_init ? chip->model->mixer_init(chip) : 0;
624} 627}