diff options
| author | Giuliano Pochini <pochini@shiny.it> | 2010-02-14 12:15:59 -0500 |
|---|---|---|
| committer | Takashi Iwai <tiwai@suse.de> | 2010-02-15 04:39:22 -0500 |
| commit | ad3499f4668f684ef6e5d0222ae14d5e4ade1fdd (patch) | |
| tree | 6c4599e78d3f29df5cd17b8d2006f69f006acea3 | |
| parent | 4f8ada444cc7a7ea70cdc81f098b34c5f1f2df41 (diff) | |
ALSA: Echoaudio - Add suspend support #1
Move the controls init code outside the init_hw() function because is must
not be called during resume.
This patch moves the code that initializes the card's controls with
default valued from the init_hw() function into a separated
set_mixer_defaults() function (one for each of the 16 supported
cards). This change is necessary because during resume we must
resurrect the hardware without losing the previous
settings. set_mixer_defaults() must be called only once when the
module is loaded.
Signed-off-by: Giuliano Pochini <pochini@shiny.it>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
| -rw-r--r-- | sound/pci/echoaudio/darla20_dsp.c | 10 | ||||
| -rw-r--r-- | sound/pci/echoaudio/darla24_dsp.c | 10 | ||||
| -rw-r--r-- | sound/pci/echoaudio/echo3g_dsp.c | 26 | ||||
| -rw-r--r-- | sound/pci/echoaudio/gina20_dsp.c | 13 | ||||
| -rw-r--r-- | sound/pci/echoaudio/gina24_dsp.c | 20 | ||||
| -rw-r--r-- | sound/pci/echoaudio/indigo_dsp.c | 10 | ||||
| -rw-r--r-- | sound/pci/echoaudio/indigo_express_dsp.c | 1 | ||||
| -rw-r--r-- | sound/pci/echoaudio/indigodj_dsp.c | 10 | ||||
| -rw-r--r-- | sound/pci/echoaudio/indigodjx_dsp.c | 11 | ||||
| -rw-r--r-- | sound/pci/echoaudio/indigoio_dsp.c | 10 | ||||
| -rw-r--r-- | sound/pci/echoaudio/indigoiox_dsp.c | 11 | ||||
| -rw-r--r-- | sound/pci/echoaudio/layla20_dsp.c | 13 | ||||
| -rw-r--r-- | sound/pci/echoaudio/layla24_dsp.c | 18 | ||||
| -rw-r--r-- | sound/pci/echoaudio/mia_dsp.c | 10 | ||||
| -rw-r--r-- | sound/pci/echoaudio/mona_dsp.c | 22 |
15 files changed, 115 insertions, 80 deletions
diff --git a/sound/pci/echoaudio/darla20_dsp.c b/sound/pci/echoaudio/darla20_dsp.c index a44135d6acbb..20c7cbc89bb3 100644 --- a/sound/pci/echoaudio/darla20_dsp.c +++ b/sound/pci/echoaudio/darla20_dsp.c | |||
| @@ -57,15 +57,19 @@ static int init_hw(struct echoaudio *chip, u16 device_id, u16 subdevice_id) | |||
| 57 | return err; | 57 | return err; |
| 58 | chip->bad_board = FALSE; | 58 | chip->bad_board = FALSE; |
| 59 | 59 | ||
| 60 | if ((err = init_line_levels(chip)) < 0) | ||
| 61 | return err; | ||
| 62 | |||
| 63 | DE_INIT(("init_hw done\n")); | 60 | DE_INIT(("init_hw done\n")); |
| 64 | return err; | 61 | return err; |
| 65 | } | 62 | } |
| 66 | 63 | ||
| 67 | 64 | ||
| 68 | 65 | ||
| 66 | static int set_mixer_defaults(struct echoaudio *chip) | ||
| 67 | { | ||
| 68 | return init_line_levels(chip); | ||
| 69 | } | ||
| 70 | |||
| 71 | |||
| 72 | |||
| 69 | /* The Darla20 has no external clock sources */ | 73 | /* The Darla20 has no external clock sources */ |
| 70 | static u32 detect_input_clocks(const struct echoaudio *chip) | 74 | static u32 detect_input_clocks(const struct echoaudio *chip) |
| 71 | { | 75 | { |
diff --git a/sound/pci/echoaudio/darla24_dsp.c b/sound/pci/echoaudio/darla24_dsp.c index d681da180829..6da6663e9176 100644 --- a/sound/pci/echoaudio/darla24_dsp.c +++ b/sound/pci/echoaudio/darla24_dsp.c | |||
| @@ -56,15 +56,19 @@ static int init_hw(struct echoaudio *chip, u16 device_id, u16 subdevice_id) | |||
| 56 | return err; | 56 | return err; |
| 57 | chip->bad_board = FALSE; | 57 | chip->bad_board = FALSE; |
| 58 | 58 | ||
| 59 | if ((err = init_line_levels(chip)) < 0) | ||
| 60 | return err; | ||
| 61 | |||
| 62 | DE_INIT(("init_hw done\n")); | 59 | DE_INIT(("init_hw done\n")); |
| 63 | return err; | 60 | return err; |
| 64 | } | 61 | } |
| 65 | 62 | ||
| 66 | 63 | ||
| 67 | 64 | ||
| 65 | static int set_mixer_defaults(struct echoaudio *chip) | ||
| 66 | { | ||
| 67 | return init_line_levels(chip); | ||
| 68 | } | ||
| 69 | |||
| 70 | |||
| 71 | |||
| 68 | static u32 detect_input_clocks(const struct echoaudio *chip) | 72 | static u32 detect_input_clocks(const struct echoaudio *chip) |
| 69 | { | 73 | { |
| 70 | u32 clocks_from_dsp, clock_bits; | 74 | u32 clocks_from_dsp, clock_bits; |
diff --git a/sound/pci/echoaudio/echo3g_dsp.c b/sound/pci/echoaudio/echo3g_dsp.c index f0071935c0cb..3cdc2ee2d1dd 100644 --- a/sound/pci/echoaudio/echo3g_dsp.c +++ b/sound/pci/echoaudio/echo3g_dsp.c | |||
| @@ -97,20 +97,6 @@ static int init_hw(struct echoaudio *chip, u16 device_id, u16 subdevice_id) | |||
| 97 | chip->digital_modes = ECHOCAPS_HAS_DIGITAL_MODE_SPDIF_RCA | | 97 | chip->digital_modes = ECHOCAPS_HAS_DIGITAL_MODE_SPDIF_RCA | |
| 98 | ECHOCAPS_HAS_DIGITAL_MODE_SPDIF_OPTICAL | | 98 | ECHOCAPS_HAS_DIGITAL_MODE_SPDIF_OPTICAL | |
| 99 | ECHOCAPS_HAS_DIGITAL_MODE_ADAT; | 99 | ECHOCAPS_HAS_DIGITAL_MODE_ADAT; |
| 100 | chip->digital_mode = DIGITAL_MODE_SPDIF_RCA; | ||
| 101 | chip->professional_spdif = FALSE; | ||
| 102 | chip->non_audio_spdif = FALSE; | ||
| 103 | chip->bad_board = FALSE; | ||
| 104 | |||
| 105 | if ((err = init_line_levels(chip)) < 0) | ||
| 106 | return err; | ||
| 107 | err = set_digital_mode(chip, DIGITAL_MODE_SPDIF_RCA); | ||
| 108 | if (err < 0) | ||
| 109 | return err; | ||
| 110 | err = set_phantom_power(chip, 0); | ||
| 111 | if (err < 0) | ||
| 112 | return err; | ||
| 113 | err = set_professional_spdif(chip, TRUE); | ||
| 114 | 100 | ||
| 115 | DE_INIT(("init_hw done\n")); | 101 | DE_INIT(("init_hw done\n")); |
| 116 | return err; | 102 | return err; |
| @@ -118,6 +104,18 @@ static int init_hw(struct echoaudio *chip, u16 device_id, u16 subdevice_id) | |||
| 118 | 104 | ||
| 119 | 105 | ||
| 120 | 106 | ||
| 107 | static int set_mixer_defaults(struct echoaudio *chip) | ||
| 108 | { | ||
| 109 | chip->digital_mode = DIGITAL_MODE_SPDIF_RCA; | ||
| 110 | chip->professional_spdif = FALSE; | ||
| 111 | chip->non_audio_spdif = FALSE; | ||
| 112 | chip->bad_board = FALSE; | ||
| 113 | chip->phantom_power = FALSE; | ||
| 114 | return init_line_levels(chip); | ||
| 115 | } | ||
| 116 | |||
| 117 | |||
| 118 | |||
| 121 | static int set_phantom_power(struct echoaudio *chip, char on) | 119 | static int set_phantom_power(struct echoaudio *chip, char on) |
| 122 | { | 120 | { |
| 123 | u32 control_reg = le32_to_cpu(chip->comm_page->control_register); | 121 | u32 control_reg = le32_to_cpu(chip->comm_page->control_register); |
diff --git a/sound/pci/echoaudio/gina20_dsp.c b/sound/pci/echoaudio/gina20_dsp.c index c5de88b6792d..d1615a0579d1 100644 --- a/sound/pci/echoaudio/gina20_dsp.c +++ b/sound/pci/echoaudio/gina20_dsp.c | |||
| @@ -62,17 +62,20 @@ static int init_hw(struct echoaudio *chip, u16 device_id, u16 subdevice_id) | |||
| 62 | return err; | 62 | return err; |
| 63 | chip->bad_board = FALSE; | 63 | chip->bad_board = FALSE; |
| 64 | 64 | ||
| 65 | if ((err = init_line_levels(chip)) < 0) | ||
| 66 | return err; | ||
| 67 | |||
| 68 | err = set_professional_spdif(chip, TRUE); | ||
| 69 | |||
| 70 | DE_INIT(("init_hw done\n")); | 65 | DE_INIT(("init_hw done\n")); |
| 71 | return err; | 66 | return err; |
| 72 | } | 67 | } |
| 73 | 68 | ||
| 74 | 69 | ||
| 75 | 70 | ||
| 71 | static int set_mixer_defaults(struct echoaudio *chip) | ||
| 72 | { | ||
| 73 | chip->professional_spdif = FALSE; | ||
| 74 | return init_line_levels(chip); | ||
| 75 | } | ||
| 76 | |||
| 77 | |||
| 78 | |||
| 76 | static u32 detect_input_clocks(const struct echoaudio *chip) | 79 | static u32 detect_input_clocks(const struct echoaudio *chip) |
| 77 | { | 80 | { |
| 78 | u32 clocks_from_dsp, clock_bits; | 81 | u32 clocks_from_dsp, clock_bits; |
diff --git a/sound/pci/echoaudio/gina24_dsp.c b/sound/pci/echoaudio/gina24_dsp.c index 093dd7ba0e81..98f7cfa81b5f 100644 --- a/sound/pci/echoaudio/gina24_dsp.c +++ b/sound/pci/echoaudio/gina24_dsp.c | |||
| @@ -57,9 +57,6 @@ static int init_hw(struct echoaudio *chip, u16 device_id, u16 subdevice_id) | |||
| 57 | ECHO_CLOCK_BIT_INTERNAL | ECHO_CLOCK_BIT_SPDIF | | 57 | ECHO_CLOCK_BIT_INTERNAL | ECHO_CLOCK_BIT_SPDIF | |
| 58 | ECHO_CLOCK_BIT_ESYNC | ECHO_CLOCK_BIT_ESYNC96 | | 58 | ECHO_CLOCK_BIT_ESYNC | ECHO_CLOCK_BIT_ESYNC96 | |
| 59 | ECHO_CLOCK_BIT_ADAT; | 59 | ECHO_CLOCK_BIT_ADAT; |
| 60 | chip->professional_spdif = FALSE; | ||
| 61 | chip->digital_in_automute = TRUE; | ||
| 62 | chip->digital_mode = DIGITAL_MODE_SPDIF_RCA; | ||
| 63 | 60 | ||
| 64 | /* Gina24 comes in both '301 and '361 flavors */ | 61 | /* Gina24 comes in both '301 and '361 flavors */ |
| 65 | if (chip->device_id == DEVICE_ID_56361) { | 62 | if (chip->device_id == DEVICE_ID_56361) { |
| @@ -81,19 +78,22 @@ static int init_hw(struct echoaudio *chip, u16 device_id, u16 subdevice_id) | |||
| 81 | return err; | 78 | return err; |
| 82 | chip->bad_board = FALSE; | 79 | chip->bad_board = FALSE; |
| 83 | 80 | ||
| 84 | if ((err = init_line_levels(chip)) < 0) | ||
| 85 | return err; | ||
| 86 | err = set_digital_mode(chip, DIGITAL_MODE_SPDIF_RCA); | ||
| 87 | if (err < 0) | ||
| 88 | return err; | ||
| 89 | err = set_professional_spdif(chip, TRUE); | ||
| 90 | |||
| 91 | DE_INIT(("init_hw done\n")); | 81 | DE_INIT(("init_hw done\n")); |
| 92 | return err; | 82 | return err; |
| 93 | } | 83 | } |
| 94 | 84 | ||
| 95 | 85 | ||
| 96 | 86 | ||
| 87 | static int set_mixer_defaults(struct echoaudio *chip) | ||
| 88 | { | ||
| 89 | chip->digital_mode = DIGITAL_MODE_SPDIF_RCA; | ||
| 90 | chip->professional_spdif = FALSE; | ||
| 91 | chip->digital_in_automute = TRUE; | ||
| 92 | return init_line_levels(chip); | ||
| 93 | } | ||
| 94 | |||
| 95 | |||
| 96 | |||
| 97 | static u32 detect_input_clocks(const struct echoaudio *chip) | 97 | static u32 detect_input_clocks(const struct echoaudio *chip) |
| 98 | { | 98 | { |
| 99 | u32 clocks_from_dsp, clock_bits; | 99 | u32 clocks_from_dsp, clock_bits; |
diff --git a/sound/pci/echoaudio/indigo_dsp.c b/sound/pci/echoaudio/indigo_dsp.c index 8799d2e6536a..5e85f14fe5a8 100644 --- a/sound/pci/echoaudio/indigo_dsp.c +++ b/sound/pci/echoaudio/indigo_dsp.c | |||
| @@ -60,15 +60,19 @@ static int init_hw(struct echoaudio *chip, u16 device_id, u16 subdevice_id) | |||
| 60 | return err; | 60 | return err; |
| 61 | chip->bad_board = FALSE; | 61 | chip->bad_board = FALSE; |
| 62 | 62 | ||
| 63 | if ((err = init_line_levels(chip)) < 0) | ||
| 64 | return err; | ||
| 65 | |||
| 66 | DE_INIT(("init_hw done\n")); | 63 | DE_INIT(("init_hw done\n")); |
| 67 | return err; | 64 | return err; |
| 68 | } | 65 | } |
| 69 | 66 | ||
| 70 | 67 | ||
| 71 | 68 | ||
| 69 | static int set_mixer_defaults(struct echoaudio *chip) | ||
| 70 | { | ||
| 71 | return init_line_levels(chip); | ||
| 72 | } | ||
| 73 | |||
| 74 | |||
| 75 | |||
| 72 | static u32 detect_input_clocks(const struct echoaudio *chip) | 76 | static u32 detect_input_clocks(const struct echoaudio *chip) |
| 73 | { | 77 | { |
| 74 | return ECHO_CLOCK_BIT_INTERNAL; | 78 | return ECHO_CLOCK_BIT_INTERNAL; |
diff --git a/sound/pci/echoaudio/indigo_express_dsp.c b/sound/pci/echoaudio/indigo_express_dsp.c index 9ab625e15652..2e4ab3e34a74 100644 --- a/sound/pci/echoaudio/indigo_express_dsp.c +++ b/sound/pci/echoaudio/indigo_express_dsp.c | |||
| @@ -61,6 +61,7 @@ static int set_sample_rate(struct echoaudio *chip, u32 rate) | |||
| 61 | 61 | ||
| 62 | control_reg |= clock; | 62 | control_reg |= clock; |
| 63 | if (control_reg != old_control_reg) { | 63 | if (control_reg != old_control_reg) { |
| 64 | DE_ACT(("set_sample_rate: %d clock %d\n", rate, clock)); | ||
| 64 | chip->comm_page->control_register = cpu_to_le32(control_reg); | 65 | chip->comm_page->control_register = cpu_to_le32(control_reg); |
| 65 | chip->sample_rate = rate; | 66 | chip->sample_rate = rate; |
| 66 | clear_handshake(chip); | 67 | clear_handshake(chip); |
diff --git a/sound/pci/echoaudio/indigodj_dsp.c b/sound/pci/echoaudio/indigodj_dsp.c index cb1c92ca9fef..68f3c8ccc1bf 100644 --- a/sound/pci/echoaudio/indigodj_dsp.c +++ b/sound/pci/echoaudio/indigodj_dsp.c | |||
| @@ -60,15 +60,19 @@ static int init_hw(struct echoaudio *chip, u16 device_id, u16 subdevice_id) | |||
| 60 | return err; | 60 | return err; |
| 61 | chip->bad_board = FALSE; | 61 | chip->bad_board = FALSE; |
| 62 | 62 | ||
| 63 | if ((err = init_line_levels(chip)) < 0) | ||
| 64 | return err; | ||
| 65 | |||
| 66 | DE_INIT(("init_hw done\n")); | 63 | DE_INIT(("init_hw done\n")); |
| 67 | return err; | 64 | return err; |
| 68 | } | 65 | } |
| 69 | 66 | ||
| 70 | 67 | ||
| 71 | 68 | ||
| 69 | static int set_mixer_defaults(struct echoaudio *chip) | ||
| 70 | { | ||
| 71 | return init_line_levels(chip); | ||
| 72 | } | ||
| 73 | |||
| 74 | |||
| 75 | |||
| 72 | static u32 detect_input_clocks(const struct echoaudio *chip) | 76 | static u32 detect_input_clocks(const struct echoaudio *chip) |
| 73 | { | 77 | { |
| 74 | return ECHO_CLOCK_BIT_INTERNAL; | 78 | return ECHO_CLOCK_BIT_INTERNAL; |
diff --git a/sound/pci/echoaudio/indigodjx_dsp.c b/sound/pci/echoaudio/indigodjx_dsp.c index 91dbfeb586a7..bb9632c752a9 100644 --- a/sound/pci/echoaudio/indigodjx_dsp.c +++ b/sound/pci/echoaudio/indigodjx_dsp.c | |||
| @@ -59,10 +59,13 @@ static int init_hw(struct echoaudio *chip, u16 device_id, u16 subdevice_id) | |||
| 59 | return err; | 59 | return err; |
| 60 | chip->bad_board = FALSE; | 60 | chip->bad_board = FALSE; |
| 61 | 61 | ||
| 62 | err = init_line_levels(chip); | ||
| 63 | if (err < 0) | ||
| 64 | return err; | ||
| 65 | |||
| 66 | DE_INIT(("init_hw done\n")); | 62 | DE_INIT(("init_hw done\n")); |
| 67 | return err; | 63 | return err; |
| 68 | } | 64 | } |
| 65 | |||
| 66 | |||
| 67 | |||
| 68 | static int set_mixer_defaults(struct echoaudio *chip) | ||
| 69 | { | ||
| 70 | return init_line_levels(chip); | ||
| 71 | } | ||
diff --git a/sound/pci/echoaudio/indigoio_dsp.c b/sound/pci/echoaudio/indigoio_dsp.c index 134e783d3486..beb9a5b69892 100644 --- a/sound/pci/echoaudio/indigoio_dsp.c +++ b/sound/pci/echoaudio/indigoio_dsp.c | |||
| @@ -60,15 +60,19 @@ static int init_hw(struct echoaudio *chip, u16 device_id, u16 subdevice_id) | |||
| 60 | return err; | 60 | return err; |
| 61 | chip->bad_board = FALSE; | 61 | chip->bad_board = FALSE; |
| 62 | 62 | ||
| 63 | if ((err = init_line_levels(chip)) < 0) | ||
| 64 | return err; | ||
| 65 | |||
| 66 | DE_INIT(("init_hw done\n")); | 63 | DE_INIT(("init_hw done\n")); |
| 67 | return err; | 64 | return err; |
| 68 | } | 65 | } |
| 69 | 66 | ||
| 70 | 67 | ||
| 71 | 68 | ||
| 69 | static int set_mixer_defaults(struct echoaudio *chip) | ||
| 70 | { | ||
| 71 | return init_line_levels(chip); | ||
| 72 | } | ||
| 73 | |||
| 74 | |||
| 75 | |||
| 72 | static u32 detect_input_clocks(const struct echoaudio *chip) | 76 | static u32 detect_input_clocks(const struct echoaudio *chip) |
| 73 | { | 77 | { |
| 74 | return ECHO_CLOCK_BIT_INTERNAL; | 78 | return ECHO_CLOCK_BIT_INTERNAL; |
diff --git a/sound/pci/echoaudio/indigoiox_dsp.c b/sound/pci/echoaudio/indigoiox_dsp.c index 766cf501799d..394c6e76bcbc 100644 --- a/sound/pci/echoaudio/indigoiox_dsp.c +++ b/sound/pci/echoaudio/indigoiox_dsp.c | |||
| @@ -59,10 +59,13 @@ static int init_hw(struct echoaudio *chip, u16 device_id, u16 subdevice_id) | |||
| 59 | return err; | 59 | return err; |
| 60 | chip->bad_board = FALSE; | 60 | chip->bad_board = FALSE; |
| 61 | 61 | ||
| 62 | err = init_line_levels(chip); | ||
| 63 | if (err < 0) | ||
| 64 | return err; | ||
| 65 | |||
| 66 | DE_INIT(("init_hw done\n")); | 62 | DE_INIT(("init_hw done\n")); |
| 67 | return err; | 63 | return err; |
| 68 | } | 64 | } |
| 65 | |||
| 66 | |||
| 67 | |||
| 68 | static int set_mixer_defaults(struct echoaudio *chip) | ||
| 69 | { | ||
| 70 | return init_line_levels(chip); | ||
| 71 | } | ||
diff --git a/sound/pci/echoaudio/layla20_dsp.c b/sound/pci/echoaudio/layla20_dsp.c index 07f32454757e..53ce94605044 100644 --- a/sound/pci/echoaudio/layla20_dsp.c +++ b/sound/pci/echoaudio/layla20_dsp.c | |||
| @@ -64,17 +64,20 @@ static int init_hw(struct echoaudio *chip, u16 device_id, u16 subdevice_id) | |||
| 64 | return err; | 64 | return err; |
| 65 | chip->bad_board = FALSE; | 65 | chip->bad_board = FALSE; |
| 66 | 66 | ||
| 67 | if ((err = init_line_levels(chip)) < 0) | ||
| 68 | return err; | ||
| 69 | |||
| 70 | err = set_professional_spdif(chip, TRUE); | ||
| 71 | |||
| 72 | DE_INIT(("init_hw done\n")); | 67 | DE_INIT(("init_hw done\n")); |
| 73 | return err; | 68 | return err; |
| 74 | } | 69 | } |
| 75 | 70 | ||
| 76 | 71 | ||
| 77 | 72 | ||
| 73 | static int set_mixer_defaults(struct echoaudio *chip) | ||
| 74 | { | ||
| 75 | chip->professional_spdif = FALSE; | ||
| 76 | return init_line_levels(chip); | ||
| 77 | } | ||
| 78 | |||
| 79 | |||
| 80 | |||
| 78 | static u32 detect_input_clocks(const struct echoaudio *chip) | 81 | static u32 detect_input_clocks(const struct echoaudio *chip) |
| 79 | { | 82 | { |
| 80 | u32 clocks_from_dsp, clock_bits; | 83 | u32 clocks_from_dsp, clock_bits; |
diff --git a/sound/pci/echoaudio/layla24_dsp.c b/sound/pci/echoaudio/layla24_dsp.c index 12dc00adca9f..8c041647f285 100644 --- a/sound/pci/echoaudio/layla24_dsp.c +++ b/sound/pci/echoaudio/layla24_dsp.c | |||
| @@ -61,9 +61,6 @@ static int init_hw(struct echoaudio *chip, u16 device_id, u16 subdevice_id) | |||
| 61 | ECHOCAPS_HAS_DIGITAL_MODE_SPDIF_RCA | | 61 | ECHOCAPS_HAS_DIGITAL_MODE_SPDIF_RCA | |
| 62 | ECHOCAPS_HAS_DIGITAL_MODE_SPDIF_OPTICAL | | 62 | ECHOCAPS_HAS_DIGITAL_MODE_SPDIF_OPTICAL | |
| 63 | ECHOCAPS_HAS_DIGITAL_MODE_ADAT; | 63 | ECHOCAPS_HAS_DIGITAL_MODE_ADAT; |
| 64 | chip->digital_mode = DIGITAL_MODE_SPDIF_RCA; | ||
| 65 | chip->professional_spdif = FALSE; | ||
| 66 | chip->digital_in_automute = TRUE; | ||
| 67 | 64 | ||
| 68 | if ((err = load_firmware(chip)) < 0) | 65 | if ((err = load_firmware(chip)) < 0) |
| 69 | return err; | 66 | return err; |
| @@ -72,17 +69,22 @@ static int init_hw(struct echoaudio *chip, u16 device_id, u16 subdevice_id) | |||
| 72 | if ((err = init_line_levels(chip)) < 0) | 69 | if ((err = init_line_levels(chip)) < 0) |
| 73 | return err; | 70 | return err; |
| 74 | 71 | ||
| 75 | err = set_digital_mode(chip, DIGITAL_MODE_SPDIF_RCA); | ||
| 76 | if (err < 0) | ||
| 77 | return err; | ||
| 78 | err = set_professional_spdif(chip, TRUE); | ||
| 79 | |||
| 80 | DE_INIT(("init_hw done\n")); | 72 | DE_INIT(("init_hw done\n")); |
| 81 | return err; | 73 | return err; |
| 82 | } | 74 | } |
| 83 | 75 | ||
| 84 | 76 | ||
| 85 | 77 | ||
| 78 | static int set_mixer_defaults(struct echoaudio *chip) | ||
| 79 | { | ||
| 80 | chip->digital_mode = DIGITAL_MODE_SPDIF_RCA; | ||
| 81 | chip->professional_spdif = FALSE; | ||
| 82 | chip->digital_in_automute = TRUE; | ||
| 83 | return init_line_levels(chip); | ||
| 84 | } | ||
| 85 | |||
| 86 | |||
| 87 | |||
| 86 | static u32 detect_input_clocks(const struct echoaudio *chip) | 88 | static u32 detect_input_clocks(const struct echoaudio *chip) |
| 87 | { | 89 | { |
| 88 | u32 clocks_from_dsp, clock_bits; | 90 | u32 clocks_from_dsp, clock_bits; |
diff --git a/sound/pci/echoaudio/mia_dsp.c b/sound/pci/echoaudio/mia_dsp.c index d0302f2f00db..6ebfa6e7ab9e 100644 --- a/sound/pci/echoaudio/mia_dsp.c +++ b/sound/pci/echoaudio/mia_dsp.c | |||
| @@ -66,15 +66,19 @@ static int init_hw(struct echoaudio *chip, u16 device_id, u16 subdevice_id) | |||
| 66 | return err; | 66 | return err; |
| 67 | chip->bad_board = FALSE; | 67 | chip->bad_board = FALSE; |
| 68 | 68 | ||
| 69 | if ((err = init_line_levels(chip))) | ||
| 70 | return err; | ||
| 71 | |||
| 72 | DE_INIT(("init_hw done\n")); | 69 | DE_INIT(("init_hw done\n")); |
| 73 | return err; | 70 | return err; |
| 74 | } | 71 | } |
| 75 | 72 | ||
| 76 | 73 | ||
| 77 | 74 | ||
| 75 | static int set_mixer_defaults(struct echoaudio *chip) | ||
| 76 | { | ||
| 77 | return init_line_levels(chip); | ||
| 78 | } | ||
| 79 | |||
| 80 | |||
| 81 | |||
| 78 | static u32 detect_input_clocks(const struct echoaudio *chip) | 82 | static u32 detect_input_clocks(const struct echoaudio *chip) |
| 79 | { | 83 | { |
| 80 | u32 clocks_from_dsp, clock_bits; | 84 | u32 clocks_from_dsp, clock_bits; |
diff --git a/sound/pci/echoaudio/mona_dsp.c b/sound/pci/echoaudio/mona_dsp.c index b28b8e4703cf..6e6a7eb555b8 100644 --- a/sound/pci/echoaudio/mona_dsp.c +++ b/sound/pci/echoaudio/mona_dsp.c | |||
| @@ -67,28 +67,26 @@ static int init_hw(struct echoaudio *chip, u16 device_id, u16 subdevice_id) | |||
| 67 | else | 67 | else |
| 68 | chip->dsp_code_to_load = FW_MONA_301_DSP; | 68 | chip->dsp_code_to_load = FW_MONA_301_DSP; |
| 69 | 69 | ||
| 70 | chip->digital_mode = DIGITAL_MODE_SPDIF_RCA; | ||
| 71 | chip->professional_spdif = FALSE; | ||
| 72 | chip->digital_in_automute = TRUE; | ||
| 73 | |||
| 74 | if ((err = load_firmware(chip)) < 0) | 70 | if ((err = load_firmware(chip)) < 0) |
| 75 | return err; | 71 | return err; |
| 76 | chip->bad_board = FALSE; | 72 | chip->bad_board = FALSE; |
| 77 | 73 | ||
| 78 | if ((err = init_line_levels(chip)) < 0) | ||
| 79 | return err; | ||
| 80 | |||
| 81 | err = set_digital_mode(chip, DIGITAL_MODE_SPDIF_RCA); | ||
| 82 | if (err < 0) | ||
| 83 | return err; | ||
| 84 | err = set_professional_spdif(chip, TRUE); | ||
| 85 | |||
| 86 | DE_INIT(("init_hw done\n")); | 74 | DE_INIT(("init_hw done\n")); |
| 87 | return err; | 75 | return err; |
| 88 | } | 76 | } |
| 89 | 77 | ||
| 90 | 78 | ||
| 91 | 79 | ||
| 80 | static int set_mixer_defaults(struct echoaudio *chip) | ||
| 81 | { | ||
| 82 | chip->digital_mode = DIGITAL_MODE_SPDIF_RCA; | ||
| 83 | chip->professional_spdif = FALSE; | ||
| 84 | chip->digital_in_automute = TRUE; | ||
| 85 | return init_line_levels(chip); | ||
| 86 | } | ||
| 87 | |||
| 88 | |||
| 89 | |||
| 92 | static u32 detect_input_clocks(const struct echoaudio *chip) | 90 | static u32 detect_input_clocks(const struct echoaudio *chip) |
| 93 | { | 91 | { |
| 94 | u32 clocks_from_dsp, clock_bits; | 92 | u32 clocks_from_dsp, clock_bits; |
