X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;ds=sidebyside;f=sound%2Fppc%2Fawacs.c;h=e052bd071e5bf1875af5732995e7871e26045d1c;hb=c7b5ebbddf7bcd3651947760f423e3783bbe6573;hp=5dd5a48922c53dc070e68f708712b6d758908ea4;hpb=a2c21200f1c81b08cb55e417b68150bba439b646;p=linux-2.6.git diff --git a/sound/ppc/awacs.c b/sound/ppc/awacs.c index 5dd5a4892..e052bd071 100644 --- a/sound/ppc/awacs.c +++ b/sound/ppc/awacs.c @@ -29,8 +29,6 @@ #include #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; }