awacs.c (7022b15e2a9f878fd5184586064c63352c3dd225) awacs.c (5e246b850df563224be26f1d409cf66fd6c968df)
1/*
2 * PMac AWACS lowlevel functions
3 *
4 * Copyright (c) by Takashi Iwai <tiwai@suse.de>
5 * code based on dmasound.c.
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by

--- 305 unchanged lines hidden (view full) ---

314 else
315 vol = 32 - (vol - 79);
316 awacs_set_cuda(1, vol);
317}
318
319static void awacs_amp_free(struct snd_pmac *chip)
320{
321 struct awacs_amp *amp = chip->mixer_data;
1/*
2 * PMac AWACS lowlevel functions
3 *
4 * Copyright (c) by Takashi Iwai <tiwai@suse.de>
5 * code based on dmasound.c.
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by

--- 305 unchanged lines hidden (view full) ---

314 else
315 vol = 32 - (vol - 79);
316 awacs_set_cuda(1, vol);
317}
318
319static void awacs_amp_free(struct snd_pmac *chip)
320{
321 struct awacs_amp *amp = chip->mixer_data;
322 snd_assert(amp, return);
322 if (!amp)
323 return;
323 kfree(amp);
324 chip->mixer_data = NULL;
325 chip->mixer_free = NULL;
326}
327
328
329/*
330 * mixer controls

--- 9 unchanged lines hidden (view full) ---

340}
341
342static int snd_pmac_awacs_get_volume_amp(struct snd_kcontrol *kcontrol,
343 struct snd_ctl_elem_value *ucontrol)
344{
345 struct snd_pmac *chip = snd_kcontrol_chip(kcontrol);
346 int index = kcontrol->private_value;
347 struct awacs_amp *amp = chip->mixer_data;
324 kfree(amp);
325 chip->mixer_data = NULL;
326 chip->mixer_free = NULL;
327}
328
329
330/*
331 * mixer controls

--- 9 unchanged lines hidden (view full) ---

341}
342
343static int snd_pmac_awacs_get_volume_amp(struct snd_kcontrol *kcontrol,
344 struct snd_ctl_elem_value *ucontrol)
345{
346 struct snd_pmac *chip = snd_kcontrol_chip(kcontrol);
347 int index = kcontrol->private_value;
348 struct awacs_amp *amp = chip->mixer_data;
348 snd_assert(amp, return -EINVAL);
349 snd_assert(index >= 0 && index <= 1, return -EINVAL);
349
350 ucontrol->value.integer.value[0] = 31 - (amp->amp_vol[index][0] & 31);
351 ucontrol->value.integer.value[1] = 31 - (amp->amp_vol[index][1] & 31);
352 return 0;
353}
354
355static int snd_pmac_awacs_put_volume_amp(struct snd_kcontrol *kcontrol,
356 struct snd_ctl_elem_value *ucontrol)
357{
358 struct snd_pmac *chip = snd_kcontrol_chip(kcontrol);
359 int index = kcontrol->private_value;
360 int vol[2];
361 struct awacs_amp *amp = chip->mixer_data;
350 ucontrol->value.integer.value[0] = 31 - (amp->amp_vol[index][0] & 31);
351 ucontrol->value.integer.value[1] = 31 - (amp->amp_vol[index][1] & 31);
352 return 0;
353}
354
355static int snd_pmac_awacs_put_volume_amp(struct snd_kcontrol *kcontrol,
356 struct snd_ctl_elem_value *ucontrol)
357{
358 struct snd_pmac *chip = snd_kcontrol_chip(kcontrol);
359 int index = kcontrol->private_value;
360 int vol[2];
361 struct awacs_amp *amp = chip->mixer_data;
362 snd_assert(amp, return -EINVAL);
363 snd_assert(index >= 0 && index <= 1, return -EINVAL);
364
365 vol[0] = (31 - (ucontrol->value.integer.value[0] & 31))
366 | (amp->amp_vol[index][0] & 32);
367 vol[1] = (31 - (ucontrol->value.integer.value[1] & 31))
368 | (amp->amp_vol[index][1] & 32);
369 return awacs_amp_set_vol(amp, index, vol[0], vol[1], 1);
370}
371
372static int snd_pmac_awacs_get_switch_amp(struct snd_kcontrol *kcontrol,
373 struct snd_ctl_elem_value *ucontrol)
374{
375 struct snd_pmac *chip = snd_kcontrol_chip(kcontrol);
376 int index = kcontrol->private_value;
377 struct awacs_amp *amp = chip->mixer_data;
362
363 vol[0] = (31 - (ucontrol->value.integer.value[0] & 31))
364 | (amp->amp_vol[index][0] & 32);
365 vol[1] = (31 - (ucontrol->value.integer.value[1] & 31))
366 | (amp->amp_vol[index][1] & 32);
367 return awacs_amp_set_vol(amp, index, vol[0], vol[1], 1);
368}
369
370static int snd_pmac_awacs_get_switch_amp(struct snd_kcontrol *kcontrol,
371 struct snd_ctl_elem_value *ucontrol)
372{
373 struct snd_pmac *chip = snd_kcontrol_chip(kcontrol);
374 int index = kcontrol->private_value;
375 struct awacs_amp *amp = chip->mixer_data;
378 snd_assert(amp, return -EINVAL);
379 snd_assert(index >= 0 && index <= 1, return -EINVAL);
376
380 ucontrol->value.integer.value[0] = (amp->amp_vol[index][0] & 32)
381 ? 0 : 1;
382 ucontrol->value.integer.value[1] = (amp->amp_vol[index][1] & 32)
383 ? 0 : 1;
384 return 0;
385}
386
387static int snd_pmac_awacs_put_switch_amp(struct snd_kcontrol *kcontrol,
388 struct snd_ctl_elem_value *ucontrol)
389{
390 struct snd_pmac *chip = snd_kcontrol_chip(kcontrol);
391 int index = kcontrol->private_value;
392 int vol[2];
393 struct awacs_amp *amp = chip->mixer_data;
377 ucontrol->value.integer.value[0] = (amp->amp_vol[index][0] & 32)
378 ? 0 : 1;
379 ucontrol->value.integer.value[1] = (amp->amp_vol[index][1] & 32)
380 ? 0 : 1;
381 return 0;
382}
383
384static int snd_pmac_awacs_put_switch_amp(struct snd_kcontrol *kcontrol,
385 struct snd_ctl_elem_value *ucontrol)
386{
387 struct snd_pmac *chip = snd_kcontrol_chip(kcontrol);
388 int index = kcontrol->private_value;
389 int vol[2];
390 struct awacs_amp *amp = chip->mixer_data;
394 snd_assert(amp, return -EINVAL);
395 snd_assert(index >= 0 && index <= 1, return -EINVAL);
396
397 vol[0] = (ucontrol->value.integer.value[0] ? 0 : 32)
398 | (amp->amp_vol[index][0] & 31);
399 vol[1] = (ucontrol->value.integer.value[1] ? 0 : 32)
400 | (amp->amp_vol[index][1] & 31);
401 return awacs_amp_set_vol(amp, index, vol[0], vol[1], 1);
402}
403

--- 8 unchanged lines hidden (view full) ---

412}
413
414static int snd_pmac_awacs_get_tone_amp(struct snd_kcontrol *kcontrol,
415 struct snd_ctl_elem_value *ucontrol)
416{
417 struct snd_pmac *chip = snd_kcontrol_chip(kcontrol);
418 int index = kcontrol->private_value;
419 struct awacs_amp *amp = chip->mixer_data;
391
392 vol[0] = (ucontrol->value.integer.value[0] ? 0 : 32)
393 | (amp->amp_vol[index][0] & 31);
394 vol[1] = (ucontrol->value.integer.value[1] ? 0 : 32)
395 | (amp->amp_vol[index][1] & 31);
396 return awacs_amp_set_vol(amp, index, vol[0], vol[1], 1);
397}
398

--- 8 unchanged lines hidden (view full) ---

407}
408
409static int snd_pmac_awacs_get_tone_amp(struct snd_kcontrol *kcontrol,
410 struct snd_ctl_elem_value *ucontrol)
411{
412 struct snd_pmac *chip = snd_kcontrol_chip(kcontrol);
413 int index = kcontrol->private_value;
414 struct awacs_amp *amp = chip->mixer_data;
420 snd_assert(amp, return -EINVAL);
421 snd_assert(index >= 0 && index <= 1, return -EINVAL);
415
422 ucontrol->value.integer.value[0] = amp->amp_tone[index];
423 return 0;
424}
425
426static int snd_pmac_awacs_put_tone_amp(struct snd_kcontrol *kcontrol,
427 struct snd_ctl_elem_value *ucontrol)
428{
429 struct snd_pmac *chip = snd_kcontrol_chip(kcontrol);
430 int index = kcontrol->private_value;
431 struct awacs_amp *amp = chip->mixer_data;
432 unsigned int val;
416 ucontrol->value.integer.value[0] = amp->amp_tone[index];
417 return 0;
418}
419
420static int snd_pmac_awacs_put_tone_amp(struct snd_kcontrol *kcontrol,
421 struct snd_ctl_elem_value *ucontrol)
422{
423 struct snd_pmac *chip = snd_kcontrol_chip(kcontrol);
424 int index = kcontrol->private_value;
425 struct awacs_amp *amp = chip->mixer_data;
426 unsigned int val;
433 snd_assert(amp, return -EINVAL);
434 snd_assert(index >= 0 && index <= 1, return -EINVAL);
427
435 val = ucontrol->value.integer.value[0];
436 if (val > 14)
437 return -EINVAL;
438 if (val != amp->amp_tone[index]) {
439 amp->amp_tone[index] = val;
440 awacs_amp_set_tone(amp, amp->amp_tone[0], amp->amp_tone[1]);
441 return 1;
442 }

--- 10 unchanged lines hidden (view full) ---

453 return 0;
454}
455
456static int snd_pmac_awacs_get_master_amp(struct snd_kcontrol *kcontrol,
457 struct snd_ctl_elem_value *ucontrol)
458{
459 struct snd_pmac *chip = snd_kcontrol_chip(kcontrol);
460 struct awacs_amp *amp = chip->mixer_data;
428 val = ucontrol->value.integer.value[0];
429 if (val > 14)
430 return -EINVAL;
431 if (val != amp->amp_tone[index]) {
432 amp->amp_tone[index] = val;
433 awacs_amp_set_tone(amp, amp->amp_tone[0], amp->amp_tone[1]);
434 return 1;
435 }

--- 10 unchanged lines hidden (view full) ---

446 return 0;
447}
448
449static int snd_pmac_awacs_get_master_amp(struct snd_kcontrol *kcontrol,
450 struct snd_ctl_elem_value *ucontrol)
451{
452 struct snd_pmac *chip = snd_kcontrol_chip(kcontrol);
453 struct awacs_amp *amp = chip->mixer_data;
461 snd_assert(amp, return -EINVAL);
454
462 ucontrol->value.integer.value[0] = amp->amp_master;
463 return 0;
464}
465
466static int snd_pmac_awacs_put_master_amp(struct snd_kcontrol *kcontrol,
467 struct snd_ctl_elem_value *ucontrol)
468{
469 struct snd_pmac *chip = snd_kcontrol_chip(kcontrol);
470 struct awacs_amp *amp = chip->mixer_data;
471 unsigned int val;
455 ucontrol->value.integer.value[0] = amp->amp_master;
456 return 0;
457}
458
459static int snd_pmac_awacs_put_master_amp(struct snd_kcontrol *kcontrol,
460 struct snd_ctl_elem_value *ucontrol)
461{
462 struct snd_pmac *chip = snd_kcontrol_chip(kcontrol);
463 struct awacs_amp *amp = chip->mixer_data;
464 unsigned int val;
472 snd_assert(amp, return -EINVAL);
465
473 val = ucontrol->value.integer.value[0];
474 if (val > 99)
475 return -EINVAL;
476 if (val != amp->amp_master) {
477 amp->amp_master = val;
478 awacs_amp_set_master(amp, amp->amp_master);
479 return 1;
480 }

--- 135 unchanged lines hidden (view full) ---

616};
617
618static struct snd_kcontrol_new snd_pmac_screamer_mixers_imac[] __initdata = {
619 AWACS_VOLUME("Line out Playback Volume", 2, 6, 1),
620 AWACS_VOLUME("Master Playback Volume", 5, 6, 1),
621 AWACS_SWITCH("CD Capture Switch", 0, SHIFT_MUX_CD, 0),
622};
623
466 val = ucontrol->value.integer.value[0];
467 if (val > 99)
468 return -EINVAL;
469 if (val != amp->amp_master) {
470 amp->amp_master = val;
471 awacs_amp_set_master(amp, amp->amp_master);
472 return 1;
473 }

--- 135 unchanged lines hidden (view full) ---

609};
610
611static struct snd_kcontrol_new snd_pmac_screamer_mixers_imac[] __initdata = {
612 AWACS_VOLUME("Line out Playback Volume", 2, 6, 1),
613 AWACS_VOLUME("Master Playback Volume", 5, 6, 1),
614 AWACS_SWITCH("CD Capture Switch", 0, SHIFT_MUX_CD, 0),
615};
616
617static struct snd_kcontrol_new snd_pmac_screamer_mixers_g4agp[] __initdata = {
618 AWACS_VOLUME("Line out Playback Volume", 2, 6, 1),
619 AWACS_VOLUME("Master Playback Volume", 5, 6, 1),
620 AWACS_SWITCH("CD Capture Switch", 0, SHIFT_MUX_CD, 0),
621 AWACS_SWITCH("Line Capture Switch", 0, SHIFT_MUX_MIC, 0),
622};
623
624static struct snd_kcontrol_new snd_pmac_awacs_mixers_pmac7500[] __initdata = {
625 AWACS_VOLUME("Line out Playback Volume", 2, 6, 1),
626 AWACS_SWITCH("CD Capture Switch", 0, SHIFT_MUX_CD, 0),
627 AWACS_SWITCH("Line Capture Switch", 0, SHIFT_MUX_MIC, 0),
628};
629
630static struct snd_kcontrol_new snd_pmac_awacs_mixers_pmac[] __initdata = {
631 AWACS_VOLUME("Master Playback Volume", 2, 6, 1),

--- 51 unchanged lines hidden (view full) ---

683
684static struct snd_kcontrol_new snd_pmac_awacs_speaker_vol[] __initdata = {
685 AWACS_VOLUME("PC Speaker Playback Volume", 4, 6, 1),
686};
687
688static struct snd_kcontrol_new snd_pmac_awacs_speaker_sw __initdata =
689AWACS_SWITCH("PC Speaker Playback Switch", 1, SHIFT_SPKMUTE, 1);
690
624static struct snd_kcontrol_new snd_pmac_awacs_mixers_pmac7500[] __initdata = {
625 AWACS_VOLUME("Line out Playback Volume", 2, 6, 1),
626 AWACS_SWITCH("CD Capture Switch", 0, SHIFT_MUX_CD, 0),
627 AWACS_SWITCH("Line Capture Switch", 0, SHIFT_MUX_MIC, 0),
628};
629
630static struct snd_kcontrol_new snd_pmac_awacs_mixers_pmac[] __initdata = {
631 AWACS_VOLUME("Master Playback Volume", 2, 6, 1),

--- 51 unchanged lines hidden (view full) ---

683
684static struct snd_kcontrol_new snd_pmac_awacs_speaker_vol[] __initdata = {
685 AWACS_VOLUME("PC Speaker Playback Volume", 4, 6, 1),
686};
687
688static struct snd_kcontrol_new snd_pmac_awacs_speaker_sw __initdata =
689AWACS_SWITCH("PC Speaker Playback Switch", 1, SHIFT_SPKMUTE, 1);
690
691static struct snd_kcontrol_new snd_pmac_awacs_speaker_sw_imac __initdata =
691static struct snd_kcontrol_new snd_pmac_awacs_speaker_sw_imac1 __initdata =
692AWACS_SWITCH("PC Speaker Playback Switch", 1, SHIFT_PAROUT1, 1);
693
694static struct snd_kcontrol_new snd_pmac_awacs_speaker_sw_imac2 __initdata =
692AWACS_SWITCH("PC Speaker Playback Switch", 1, SHIFT_PAROUT1, 0);
693
694
695/*
696 * add new mixer elements to the card
697 */
698static int build_mixers(struct snd_pmac *chip, int nums,
699 struct snd_kcontrol_new *mixers)

--- 60 unchanged lines hidden (view full) ---

760 awacs_amp_set_master(amp, amp->amp_master);
761 }
762#endif
763}
764#endif /* CONFIG_PM */
765
766#define IS_PM7500 (machine_is_compatible("AAPL,7500"))
767#define IS_BEIGE (machine_is_compatible("AAPL,Gossamer"))
695AWACS_SWITCH("PC Speaker Playback Switch", 1, SHIFT_PAROUT1, 0);
696
697
698/*
699 * add new mixer elements to the card
700 */
701static int build_mixers(struct snd_pmac *chip, int nums,
702 struct snd_kcontrol_new *mixers)

--- 60 unchanged lines hidden (view full) ---

763 awacs_amp_set_master(amp, amp->amp_master);
764 }
765#endif
766}
767#endif /* CONFIG_PM */
768
769#define IS_PM7500 (machine_is_compatible("AAPL,7500"))
770#define IS_BEIGE (machine_is_compatible("AAPL,Gossamer"))
768#define IS_IMAC (machine_is_compatible("PowerMac2,1") \
769 || machine_is_compatible("PowerMac2,2") \
771#define IS_IMAC1 (machine_is_compatible("PowerMac2,1"))
772#define IS_IMAC2 (machine_is_compatible("PowerMac2,2") \
770 || machine_is_compatible("PowerMac4,1"))
773 || machine_is_compatible("PowerMac4,1"))
774#define IS_G4AGP (machine_is_compatible("PowerMac3,1"))
771
775
772static int imac;
776static int imac1, imac2;
773
774#ifdef PMAC_SUPPORT_AUTOMUTE
775/*
776 * auto-mute stuffs
777 */
778static int snd_pmac_awacs_detect_headphone(struct snd_pmac *chip)
779{
780 return (in_le32(&chip->awacs->codec_stat) & chip->hp_stat_mask) ? 1 : 0;

--- 29 unchanged lines hidden (view full) ---

810 }
811 if (do_notify && ! changed)
812 return;
813 } else
814#endif
815 {
816 int reg = chip->awacs_reg[1]
817 | (MASK_HDMUTE | MASK_SPKMUTE);
777
778#ifdef PMAC_SUPPORT_AUTOMUTE
779/*
780 * auto-mute stuffs
781 */
782static int snd_pmac_awacs_detect_headphone(struct snd_pmac *chip)
783{
784 return (in_le32(&chip->awacs->codec_stat) & chip->hp_stat_mask) ? 1 : 0;

--- 29 unchanged lines hidden (view full) ---

814 }
815 if (do_notify && ! changed)
816 return;
817 } else
818#endif
819 {
820 int reg = chip->awacs_reg[1]
821 | (MASK_HDMUTE | MASK_SPKMUTE);
818 if (imac) {
822 if (imac1) {
819 reg &= ~MASK_SPKMUTE;
823 reg &= ~MASK_SPKMUTE;
824 reg |= MASK_PAROUT1;
825 } else if (imac2) {
826 reg &= ~MASK_SPKMUTE;
820 reg &= ~MASK_PAROUT1;
821 }
822 if (snd_pmac_awacs_detect_headphone(chip))
823 reg &= ~MASK_HDMUTE;
827 reg &= ~MASK_PAROUT1;
828 }
829 if (snd_pmac_awacs_detect_headphone(chip))
830 reg &= ~MASK_HDMUTE;
824 else if (imac)
831 else if (imac1)
832 reg &= ~MASK_PAROUT1;
833 else if (imac2)
825 reg |= MASK_PAROUT1;
826 else
827 reg &= ~MASK_SPKMUTE;
828 if (do_notify && reg == chip->awacs_reg[1])
829 return;
830 snd_pmac_awacs_write_reg(chip, 1, reg);
831 }
832 if (do_notify) {

--- 12 unchanged lines hidden (view full) ---

845/*
846 * initialize chip
847 */
848int __init
849snd_pmac_awacs_init(struct snd_pmac *chip)
850{
851 int pm7500 = IS_PM7500;
852 int beige = IS_BEIGE;
834 reg |= MASK_PAROUT1;
835 else
836 reg &= ~MASK_SPKMUTE;
837 if (do_notify && reg == chip->awacs_reg[1])
838 return;
839 snd_pmac_awacs_write_reg(chip, 1, reg);
840 }
841 if (do_notify) {

--- 12 unchanged lines hidden (view full) ---

854/*
855 * initialize chip
856 */
857int __init
858snd_pmac_awacs_init(struct snd_pmac *chip)
859{
860 int pm7500 = IS_PM7500;
861 int beige = IS_BEIGE;
862 int g4agp = IS_G4AGP;
863 int imac;
853 int err, vol;
854
864 int err, vol;
865
855 imac = IS_IMAC;
866 imac1 = IS_IMAC1;
867 imac2 = IS_IMAC2;
868 imac = imac1 || imac2;
856 /* looks like MASK_GAINLINE triggers something, so we set here
857 * as start-up
858 */
859 chip->awacs_reg[0] = MASK_MUX_CD | 0xff | MASK_GAINLINE;
860 chip->awacs_reg[1] = MASK_CMUTE | MASK_AMUTE;
861 /* FIXME: Only machines with external SRS module need MASK_PAROUT */
862 if (chip->has_iic || chip->device_id == 0x5 ||
863 /* chip->_device_id == 0x8 || */

--- 70 unchanged lines hidden (view full) ---

934 * build mixers
935 */
936 strcpy(chip->card->mixername, "PowerMac AWACS");
937
938 err = build_mixers(chip, ARRAY_SIZE(snd_pmac_awacs_mixers),
939 snd_pmac_awacs_mixers);
940 if (err < 0)
941 return err;
869 /* looks like MASK_GAINLINE triggers something, so we set here
870 * as start-up
871 */
872 chip->awacs_reg[0] = MASK_MUX_CD | 0xff | MASK_GAINLINE;
873 chip->awacs_reg[1] = MASK_CMUTE | MASK_AMUTE;
874 /* FIXME: Only machines with external SRS module need MASK_PAROUT */
875 if (chip->has_iic || chip->device_id == 0x5 ||
876 /* chip->_device_id == 0x8 || */

--- 70 unchanged lines hidden (view full) ---

947 * build mixers
948 */
949 strcpy(chip->card->mixername, "PowerMac AWACS");
950
951 err = build_mixers(chip, ARRAY_SIZE(snd_pmac_awacs_mixers),
952 snd_pmac_awacs_mixers);
953 if (err < 0)
954 return err;
942 if (beige)
955 if (beige || g4agp)
943 ;
944 else if (chip->model == PMAC_SCREAMER)
945 err = build_mixers(chip, ARRAY_SIZE(snd_pmac_screamer_mixers2),
946 snd_pmac_screamer_mixers2);
947 else if (!pm7500)
948 err = build_mixers(chip, ARRAY_SIZE(snd_pmac_awacs_mixers2),
949 snd_pmac_awacs_mixers2);
950 if (err < 0)

--- 5 unchanged lines hidden (view full) ---

956 else if (beige)
957 err = build_mixers(chip,
958 ARRAY_SIZE(snd_pmac_screamer_mixers_beige),
959 snd_pmac_screamer_mixers_beige);
960 else if (imac)
961 err = build_mixers(chip,
962 ARRAY_SIZE(snd_pmac_screamer_mixers_imac),
963 snd_pmac_screamer_mixers_imac);
956 ;
957 else if (chip->model == PMAC_SCREAMER)
958 err = build_mixers(chip, ARRAY_SIZE(snd_pmac_screamer_mixers2),
959 snd_pmac_screamer_mixers2);
960 else if (!pm7500)
961 err = build_mixers(chip, ARRAY_SIZE(snd_pmac_awacs_mixers2),
962 snd_pmac_awacs_mixers2);
963 if (err < 0)

--- 5 unchanged lines hidden (view full) ---

969 else if (beige)
970 err = build_mixers(chip,
971 ARRAY_SIZE(snd_pmac_screamer_mixers_beige),
972 snd_pmac_screamer_mixers_beige);
973 else if (imac)
974 err = build_mixers(chip,
975 ARRAY_SIZE(snd_pmac_screamer_mixers_imac),
976 snd_pmac_screamer_mixers_imac);
977 else if (g4agp)
978 err = build_mixers(chip,
979 ARRAY_SIZE(snd_pmac_screamer_mixers_g4agp),
980 snd_pmac_screamer_mixers_g4agp);
964 else
965 err = build_mixers(chip,
966 ARRAY_SIZE(snd_pmac_awacs_mixers_pmac),
967 snd_pmac_awacs_mixers_pmac);
968 if (err < 0)
969 return err;
981 else
982 err = build_mixers(chip,
983 ARRAY_SIZE(snd_pmac_awacs_mixers_pmac),
984 snd_pmac_awacs_mixers_pmac);
985 if (err < 0)
986 return err;
970 chip->master_sw_ctl = snd_ctl_new1((pm7500 || imac)
987 chip->master_sw_ctl = snd_ctl_new1((pm7500 || imac || g4agp)
971 ? &snd_pmac_awacs_master_sw_imac
972 : &snd_pmac_awacs_master_sw, chip);
973 err = snd_ctl_add(chip->card, chip->master_sw_ctl);
974 if (err < 0)
975 return err;
976#ifdef PMAC_AMP_AVAIL
977 if (chip->mixer_data) {
978 /* use amplifier. the signal is connected from route A

--- 20 unchanged lines hidden (view full) ---

999 } else
1000#endif /* PMAC_AMP_AVAIL */
1001 {
1002 /* route A = headphone, route C = speaker */
1003 err = build_mixers(chip, ARRAY_SIZE(snd_pmac_awacs_speaker_vol),
1004 snd_pmac_awacs_speaker_vol);
1005 if (err < 0)
1006 return err;
988 ? &snd_pmac_awacs_master_sw_imac
989 : &snd_pmac_awacs_master_sw, chip);
990 err = snd_ctl_add(chip->card, chip->master_sw_ctl);
991 if (err < 0)
992 return err;
993#ifdef PMAC_AMP_AVAIL
994 if (chip->mixer_data) {
995 /* use amplifier. the signal is connected from route A

--- 20 unchanged lines hidden (view full) ---

1016 } else
1017#endif /* PMAC_AMP_AVAIL */
1018 {
1019 /* route A = headphone, route C = speaker */
1020 err = build_mixers(chip, ARRAY_SIZE(snd_pmac_awacs_speaker_vol),
1021 snd_pmac_awacs_speaker_vol);
1022 if (err < 0)
1023 return err;
1007 chip->speaker_sw_ctl = snd_ctl_new1(imac
1008 ? &snd_pmac_awacs_speaker_sw_imac
1024 chip->speaker_sw_ctl = snd_ctl_new1(imac1
1025 ? &snd_pmac_awacs_speaker_sw_imac1
1026 : imac2
1027 ? &snd_pmac_awacs_speaker_sw_imac2
1009 : &snd_pmac_awacs_speaker_sw, chip);
1010 err = snd_ctl_add(chip->card, chip->speaker_sw_ctl);
1011 if (err < 0)
1012 return err;
1013 }
1014
1028 : &snd_pmac_awacs_speaker_sw, chip);
1029 err = snd_ctl_add(chip->card, chip->speaker_sw_ctl);
1030 if (err < 0)
1031 return err;
1032 }
1033
1015 if (beige)
1034 if (beige || g4agp)
1016 err = build_mixers(chip,
1017 ARRAY_SIZE(snd_pmac_screamer_mic_boost_beige),
1018 snd_pmac_screamer_mic_boost_beige);
1019 else if (imac)
1020 err = build_mixers(chip,
1021 ARRAY_SIZE(snd_pmac_screamer_mic_boost_imac),
1022 snd_pmac_screamer_mic_boost_imac);
1023 else if (chip->model == PMAC_SCREAMER)

--- 36 unchanged lines hidden ---
1035 err = build_mixers(chip,
1036 ARRAY_SIZE(snd_pmac_screamer_mic_boost_beige),
1037 snd_pmac_screamer_mic_boost_beige);
1038 else if (imac)
1039 err = build_mixers(chip,
1040 ARRAY_SIZE(snd_pmac_screamer_mic_boost_imac),
1041 snd_pmac_screamer_mic_boost_imac);
1042 else if (chip->model == PMAC_SCREAMER)

--- 36 unchanged lines hidden ---