vserver 1.9.3
[linux-2.6.git] / sound / ppc / awacs.c
index 5dd5a48..e052bd0 100644 (file)
@@ -29,8 +29,6 @@
 #include <sound/core.h>
 #include "pmac.h"
 
-#define chip_t pmac_t
-
 
 #ifdef CONFIG_ADB_CUDA
 #define PMAC_AMP_AVAIL
@@ -574,11 +572,22 @@ static snd_kcontrol_new_t snd_pmac_awacs_mixers[] __initdata = {
        AWACS_VOLUME("Master Playback Volume", 2, 6, 1),
        AWACS_SWITCH("Master Capture Switch", 1, SHIFT_LOOPTHRU, 0),
        AWACS_VOLUME("Capture Volume", 0, 4, 0),
-       AWACS_SWITCH("Line Capture Switch", 0, SHIFT_MUX_LINE, 0),
        AWACS_SWITCH("CD Capture Switch", 0, SHIFT_MUX_CD, 0),
+};
+
+/* FIXME: is this correct order?
+ * screamer (powerbook G3 pismo) seems to have different bits...
+ */
+static snd_kcontrol_new_t snd_pmac_awacs_mixers2[] __initdata = {
+       AWACS_SWITCH("Line Capture Switch", 0, SHIFT_MUX_LINE, 0),
        AWACS_SWITCH("Mic Capture Switch", 0, SHIFT_MUX_MIC, 0),
 };
 
+static snd_kcontrol_new_t snd_pmac_screamer_mixers2[] __initdata = {
+       AWACS_SWITCH("Line Capture Switch", 0, SHIFT_MUX_MIC, 0),
+       AWACS_SWITCH("Mic Capture Switch", 0, SHIFT_MUX_LINE, 0),
+};
+
 static snd_kcontrol_new_t snd_pmac_awacs_master_sw __initdata =
 AWACS_SWITCH("Master Playback Switch", 1, SHIFT_HDMUTE, 1);
 
@@ -602,8 +611,6 @@ static snd_kcontrol_new_t snd_pmac_awacs_speaker_sw __initdata =
 AWACS_SWITCH("PC Speaker Playback Switch", 1, SHIFT_SPKMUTE, 1);
 
 
-#define num_controls(ary) (sizeof(ary) / sizeof(snd_kcontrol_new_t))
-
 /*
  * add new mixer elements to the card
  */
@@ -818,9 +825,17 @@ snd_pmac_awacs_init(pmac_t *chip)
         */
        strcpy(chip->card->mixername, "PowerMac AWACS");
 
-       if ((err = build_mixers(chip, num_controls(snd_pmac_awacs_mixers),
+       if ((err = build_mixers(chip, ARRAY_SIZE(snd_pmac_awacs_mixers),
                                snd_pmac_awacs_mixers)) < 0)
                return err;
+       if (chip->model == PMAC_SCREAMER)
+               err = build_mixers(chip, ARRAY_SIZE(snd_pmac_screamer_mixers2),
+                                  snd_pmac_screamer_mixers2);
+       else
+               err = build_mixers(chip, ARRAY_SIZE(snd_pmac_awacs_mixers2),
+                                  snd_pmac_awacs_mixers2);
+       if (err < 0)
+               return err;
        chip->master_sw_ctl = snd_ctl_new1(&snd_pmac_awacs_master_sw, chip);
        if ((err = snd_ctl_add(chip->card, chip->master_sw_ctl)) < 0)
                return err;
@@ -832,7 +847,7 @@ snd_pmac_awacs_init(pmac_t *chip)
                 * screamer registers.
                 * in this case, it seems the route C is not used.
                 */
-               if ((err = build_mixers(chip, num_controls(snd_pmac_awacs_amp_vol),
+               if ((err = build_mixers(chip, ARRAY_SIZE(snd_pmac_awacs_amp_vol),
                                        snd_pmac_awacs_amp_vol)) < 0)
                        return err;
                /* overwrite */
@@ -846,7 +861,7 @@ snd_pmac_awacs_init(pmac_t *chip)
 #endif /* PMAC_AMP_AVAIL */
        {
                /* route A = headphone, route C = speaker */
-               if ((err = build_mixers(chip, num_controls(snd_pmac_awacs_speaker_vol),
+               if ((err = build_mixers(chip, ARRAY_SIZE(snd_pmac_awacs_speaker_vol),
                                        snd_pmac_awacs_speaker_vol)) < 0)
                        return err;
                chip->speaker_sw_ctl = snd_ctl_new1(&snd_pmac_awacs_speaker_sw, chip);
@@ -855,11 +870,11 @@ snd_pmac_awacs_init(pmac_t *chip)
        }
 
        if (chip->model == PMAC_SCREAMER) {
-               if ((err = build_mixers(chip, num_controls(snd_pmac_screamer_mic_boost),
+               if ((err = build_mixers(chip, ARRAY_SIZE(snd_pmac_screamer_mic_boost),
                                        snd_pmac_screamer_mic_boost)) < 0)
                        return err;
        } else {
-               if ((err = build_mixers(chip, num_controls(snd_pmac_awacs_mic_boost),
+               if ((err = build_mixers(chip, ARRAY_SIZE(snd_pmac_awacs_mic_boost),
                                        snd_pmac_awacs_mic_boost)) < 0)
                        return err;
        }