diff options
author | Clemens Ladisch <clemens@ladisch.de> | 2008-01-14 02:56:01 -0500 |
---|---|---|
committer | Jaroslav Kysela <perex@perex.cz> | 2008-01-31 11:29:57 -0500 |
commit | 01a3affb2eebfd6c996c36d82bbbc6040eb3a7f1 (patch) | |
tree | a80f44ba4a5d6997d932a7d80e9b517064eb2555 /sound/pci/oxygen/oxygen_mixer.c | |
parent | 7113e95812f508bff10f95f2e52ce6ee8cda1875 (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.c | 27 |
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[] = { | |||
586 | static void oxygen_any_ctl_free(struct snd_kcontrol *ctl) | 586 | static 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 | ||
595 | int oxygen_mixer_init(struct oxygen *chip) | 596 | int 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 | } |