diff options
Diffstat (limited to 'sound/pci/echoaudio/mona_dsp.c')
-rw-r--r-- | sound/pci/echoaudio/mona_dsp.c | 61 |
1 files changed, 29 insertions, 32 deletions
diff --git a/sound/pci/echoaudio/mona_dsp.c b/sound/pci/echoaudio/mona_dsp.c index eaa619bd2a03..6e6a7eb555b8 100644 --- a/sound/pci/echoaudio/mona_dsp.c +++ b/sound/pci/echoaudio/mona_dsp.c | |||
@@ -33,8 +33,7 @@ static int write_control_reg(struct echoaudio *chip, u32 value, char force); | |||
33 | static int set_input_clock(struct echoaudio *chip, u16 clock); | 33 | static int set_input_clock(struct echoaudio *chip, u16 clock); |
34 | static int set_professional_spdif(struct echoaudio *chip, char prof); | 34 | static int set_professional_spdif(struct echoaudio *chip, char prof); |
35 | static int set_digital_mode(struct echoaudio *chip, u8 mode); | 35 | static int set_digital_mode(struct echoaudio *chip, u8 mode); |
36 | static int load_asic_generic(struct echoaudio *chip, u32 cmd, | 36 | static int load_asic_generic(struct echoaudio *chip, u32 cmd, short asic); |
37 | const struct firmware *asic); | ||
38 | static int check_asic_status(struct echoaudio *chip); | 37 | static int check_asic_status(struct echoaudio *chip); |
39 | 38 | ||
40 | 39 | ||
@@ -64,32 +63,30 @@ static int init_hw(struct echoaudio *chip, u16 device_id, u16 subdevice_id) | |||
64 | 63 | ||
65 | /* Mona comes in both '301 and '361 flavors */ | 64 | /* Mona comes in both '301 and '361 flavors */ |
66 | if (chip->device_id == DEVICE_ID_56361) | 65 | if (chip->device_id == DEVICE_ID_56361) |
67 | chip->dsp_code_to_load = &card_fw[FW_MONA_361_DSP]; | 66 | chip->dsp_code_to_load = FW_MONA_361_DSP; |
68 | else | 67 | else |
69 | chip->dsp_code_to_load = &card_fw[FW_MONA_301_DSP]; | 68 | chip->dsp_code_to_load = FW_MONA_301_DSP; |
70 | |||
71 | chip->digital_mode = DIGITAL_MODE_SPDIF_RCA; | ||
72 | chip->professional_spdif = FALSE; | ||
73 | chip->digital_in_automute = TRUE; | ||
74 | 69 | ||
75 | if ((err = load_firmware(chip)) < 0) | 70 | if ((err = load_firmware(chip)) < 0) |
76 | return err; | 71 | return err; |
77 | chip->bad_board = FALSE; | 72 | chip->bad_board = FALSE; |
78 | 73 | ||
79 | if ((err = init_line_levels(chip)) < 0) | ||
80 | return err; | ||
81 | |||
82 | err = set_digital_mode(chip, DIGITAL_MODE_SPDIF_RCA); | ||
83 | if (err < 0) | ||
84 | return err; | ||
85 | err = set_professional_spdif(chip, TRUE); | ||
86 | |||
87 | DE_INIT(("init_hw done\n")); | 74 | DE_INIT(("init_hw done\n")); |
88 | return err; | 75 | return err; |
89 | } | 76 | } |
90 | 77 | ||
91 | 78 | ||
92 | 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 | |||
93 | static u32 detect_input_clocks(const struct echoaudio *chip) | 90 | static u32 detect_input_clocks(const struct echoaudio *chip) |
94 | { | 91 | { |
95 | u32 clocks_from_dsp, clock_bits; | 92 | u32 clocks_from_dsp, clock_bits; |
@@ -120,7 +117,7 @@ static int load_asic(struct echoaudio *chip) | |||
120 | { | 117 | { |
121 | u32 control_reg; | 118 | u32 control_reg; |
122 | int err; | 119 | int err; |
123 | const struct firmware *asic; | 120 | short asic; |
124 | 121 | ||
125 | if (chip->asic_loaded) | 122 | if (chip->asic_loaded) |
126 | return 0; | 123 | return 0; |
@@ -128,9 +125,9 @@ static int load_asic(struct echoaudio *chip) | |||
128 | mdelay(10); | 125 | mdelay(10); |
129 | 126 | ||
130 | if (chip->device_id == DEVICE_ID_56361) | 127 | if (chip->device_id == DEVICE_ID_56361) |
131 | asic = &card_fw[FW_MONA_361_1_ASIC48]; | 128 | asic = FW_MONA_361_1_ASIC48; |
132 | else | 129 | else |
133 | asic = &card_fw[FW_MONA_301_1_ASIC48]; | 130 | asic = FW_MONA_301_1_ASIC48; |
134 | 131 | ||
135 | err = load_asic_generic(chip, DSP_FNC_LOAD_MONA_PCI_CARD_ASIC, asic); | 132 | err = load_asic_generic(chip, DSP_FNC_LOAD_MONA_PCI_CARD_ASIC, asic); |
136 | if (err < 0) | 133 | if (err < 0) |
@@ -141,7 +138,7 @@ static int load_asic(struct echoaudio *chip) | |||
141 | 138 | ||
142 | /* Do the external one */ | 139 | /* Do the external one */ |
143 | err = load_asic_generic(chip, DSP_FNC_LOAD_MONA_EXTERNAL_ASIC, | 140 | err = load_asic_generic(chip, DSP_FNC_LOAD_MONA_EXTERNAL_ASIC, |
144 | &card_fw[FW_MONA_2_ASIC]); | 141 | FW_MONA_2_ASIC); |
145 | if (err < 0) | 142 | if (err < 0) |
146 | return err; | 143 | return err; |
147 | 144 | ||
@@ -165,22 +162,22 @@ loaded. This function checks the ASIC needed for the new mode and sees | |||
165 | if it matches the one already loaded. */ | 162 | if it matches the one already loaded. */ |
166 | static int switch_asic(struct echoaudio *chip, char double_speed) | 163 | static int switch_asic(struct echoaudio *chip, char double_speed) |
167 | { | 164 | { |
168 | const struct firmware *asic; | ||
169 | int err; | 165 | int err; |
166 | short asic; | ||
170 | 167 | ||
171 | /* Check the clock detect bits to see if this is | 168 | /* Check the clock detect bits to see if this is |
172 | a single-speed clock or a double-speed clock; load | 169 | a single-speed clock or a double-speed clock; load |
173 | a new ASIC if necessary. */ | 170 | a new ASIC if necessary. */ |
174 | if (chip->device_id == DEVICE_ID_56361) { | 171 | if (chip->device_id == DEVICE_ID_56361) { |
175 | if (double_speed) | 172 | if (double_speed) |
176 | asic = &card_fw[FW_MONA_361_1_ASIC96]; | 173 | asic = FW_MONA_361_1_ASIC96; |
177 | else | 174 | else |
178 | asic = &card_fw[FW_MONA_361_1_ASIC48]; | 175 | asic = FW_MONA_361_1_ASIC48; |
179 | } else { | 176 | } else { |
180 | if (double_speed) | 177 | if (double_speed) |
181 | asic = &card_fw[FW_MONA_301_1_ASIC96]; | 178 | asic = FW_MONA_301_1_ASIC96; |
182 | else | 179 | else |
183 | asic = &card_fw[FW_MONA_301_1_ASIC48]; | 180 | asic = FW_MONA_301_1_ASIC48; |
184 | } | 181 | } |
185 | 182 | ||
186 | if (asic != chip->asic_code) { | 183 | if (asic != chip->asic_code) { |
@@ -200,7 +197,7 @@ static int switch_asic(struct echoaudio *chip, char double_speed) | |||
200 | static int set_sample_rate(struct echoaudio *chip, u32 rate) | 197 | static int set_sample_rate(struct echoaudio *chip, u32 rate) |
201 | { | 198 | { |
202 | u32 control_reg, clock; | 199 | u32 control_reg, clock; |
203 | const struct firmware *asic; | 200 | short asic; |
204 | char force_write; | 201 | char force_write; |
205 | 202 | ||
206 | /* Only set the clock for internal mode. */ | 203 | /* Only set the clock for internal mode. */ |
@@ -218,14 +215,14 @@ static int set_sample_rate(struct echoaudio *chip, u32 rate) | |||
218 | if (chip->digital_mode == DIGITAL_MODE_ADAT) | 215 | if (chip->digital_mode == DIGITAL_MODE_ADAT) |
219 | return -EINVAL; | 216 | return -EINVAL; |
220 | if (chip->device_id == DEVICE_ID_56361) | 217 | if (chip->device_id == DEVICE_ID_56361) |
221 | asic = &card_fw[FW_MONA_361_1_ASIC96]; | 218 | asic = FW_MONA_361_1_ASIC96; |
222 | else | 219 | else |
223 | asic = &card_fw[FW_MONA_301_1_ASIC96]; | 220 | asic = FW_MONA_301_1_ASIC96; |
224 | } else { | 221 | } else { |
225 | if (chip->device_id == DEVICE_ID_56361) | 222 | if (chip->device_id == DEVICE_ID_56361) |
226 | asic = &card_fw[FW_MONA_361_1_ASIC48]; | 223 | asic = FW_MONA_361_1_ASIC48; |
227 | else | 224 | else |
228 | asic = &card_fw[FW_MONA_301_1_ASIC48]; | 225 | asic = FW_MONA_301_1_ASIC48; |
229 | } | 226 | } |
230 | 227 | ||
231 | force_write = 0; | 228 | force_write = 0; |
@@ -410,8 +407,8 @@ static int dsp_set_digital_mode(struct echoaudio *chip, u8 mode) | |||
410 | case DIGITAL_MODE_ADAT: | 407 | case DIGITAL_MODE_ADAT: |
411 | /* If the current ASIC is the 96KHz ASIC, switch the ASIC | 408 | /* If the current ASIC is the 96KHz ASIC, switch the ASIC |
412 | and set to 48 KHz */ | 409 | and set to 48 KHz */ |
413 | if (chip->asic_code == &card_fw[FW_MONA_361_1_ASIC96] || | 410 | if (chip->asic_code == FW_MONA_361_1_ASIC96 || |
414 | chip->asic_code == &card_fw[FW_MONA_301_1_ASIC96]) { | 411 | chip->asic_code == FW_MONA_301_1_ASIC96) { |
415 | set_sample_rate(chip, 48000); | 412 | set_sample_rate(chip, 48000); |
416 | } | 413 | } |
417 | control_reg |= GML_ADAT_MODE; | 414 | control_reg |= GML_ADAT_MODE; |