Commit 19b50063780953563e3c3a2867c39aad7b9e64cf

Authored by Giuliano Pochini
Committed by Takashi Iwai
1 parent a540e13386

ALSA: Echoaudio - Add firmware cache #1

Changes the way the firmware is passed through functions.

When CONFIG_PM is enabled the firmware cannot be released because the
driver will need it again to resume the card.
With this patch the firmware is passed as an index of the struct
firmware card_fw[] in place of a pointer. That same index is then used
to locate the firmware in the firmware cache.

Signed-off-by: Giuliano Pochini <pochini@shiny.it>
Signed-off-by: Takashi Iwai <tiwai@suse.de>

Showing 18 changed files with 69 additions and 65 deletions Side-by-side Diff

sound/pci/echoaudio/darla20_dsp.c
... ... @@ -45,7 +45,7 @@
45 45 chip->device_id = device_id;
46 46 chip->subdevice_id = subdevice_id;
47 47 chip->bad_board = TRUE;
48   - chip->dsp_code_to_load = &card_fw[FW_DARLA20_DSP];
  48 + chip->dsp_code_to_load = FW_DARLA20_DSP;
49 49 chip->spdif_status = GD_SPDIF_STATUS_UNDEF;
50 50 chip->clock_state = GD_CLOCK_UNDEF;
51 51 /* Since this card has no ASIC, mark it as loaded so everything
sound/pci/echoaudio/darla24_dsp.c
... ... @@ -45,7 +45,7 @@
45 45 chip->device_id = device_id;
46 46 chip->subdevice_id = subdevice_id;
47 47 chip->bad_board = TRUE;
48   - chip->dsp_code_to_load = &card_fw[FW_DARLA24_DSP];
  48 + chip->dsp_code_to_load = FW_DARLA24_DSP;
49 49 /* Since this card has no ASIC, mark it as loaded so everything
50 50 works OK */
51 51 chip->asic_loaded = TRUE;
sound/pci/echoaudio/echo3g_dsp.c
... ... @@ -61,7 +61,7 @@
61 61 chip->subdevice_id = subdevice_id;
62 62 chip->bad_board = TRUE;
63 63 chip->has_midi = TRUE;
64   - chip->dsp_code_to_load = &card_fw[FW_ECHO3G_DSP];
  64 + chip->dsp_code_to_load = FW_ECHO3G_DSP;
65 65  
66 66 /* Load the DSP code and the ASIC on the PCI card and get
67 67 what type of external box is attached */
sound/pci/echoaudio/echoaudio.c
... ... @@ -36,17 +36,23 @@
36 36 static unsigned int channels_list[10] = {1, 2, 4, 6, 8, 10, 12, 14, 16, 999999};
37 37 static const DECLARE_TLV_DB_SCALE(db_scale_output_gain, -12800, 100, 1);
38 38  
  39 +
  40 +
39 41 static int get_firmware(const struct firmware **fw_entry,
40   - const struct firmware *frm, struct echoaudio *chip)
  42 + struct echoaudio *chip, const short fw_index)
41 43 {
42 44 int err;
43 45 char name[30];
  46 + const struct firmware *frm = &card_fw[fw_index];
  47 +
44 48 DE_ACT(("firmware requested: %s\n", frm->data));
45 49 snprintf(name, sizeof(name), "ea/%s", frm->data);
46 50 if ((err = request_firmware(fw_entry, name, pci_device(chip))) < 0)
47 51 snd_printk(KERN_ERR "get_firmware(): Firmware not available (%d)\n", err);
48 52 return err;
49 53 }
  54 +
  55 +
50 56  
51 57 static void free_firmware(const struct firmware *fw_entry)
52 58 {
sound/pci/echoaudio/echoaudio.h
... ... @@ -442,8 +442,8 @@
442 442 u16 device_id, subdevice_id;
443 443 u16 *dsp_code; /* Current DSP code loaded,
444 444 * NULL if nothing loaded */
445   - const struct firmware *dsp_code_to_load;/* DSP code to load */
446   - const struct firmware *asic_code; /* Current ASIC code */
  445 + short dsp_code_to_load; /* DSP code to load */
  446 + short asic_code; /* Current ASIC code */
447 447 u32 comm_page_phys; /* Physical address of the
448 448 * memory seen by DSP */
449 449 volatile u32 __iomem *dsp_registers; /* DSP's register base */
... ... @@ -464,7 +464,7 @@
464 464 static int wait_handshake(struct echoaudio *chip);
465 465 static int send_vector(struct echoaudio *chip, u32 command);
466 466 static int get_firmware(const struct firmware **fw_entry,
467   - const struct firmware *frm, struct echoaudio *chip);
  467 + struct echoaudio *chip, const short fw_index);
468 468 static void free_firmware(const struct firmware *fw_entry);
469 469  
470 470 #ifdef ECHOCARD_HAS_MIDI
sound/pci/echoaudio/echoaudio_3g.c
... ... @@ -227,12 +227,11 @@
227 227 /* Give the DSP a few milliseconds to settle down */
228 228 mdelay(2);
229 229  
230   - err = load_asic_generic(chip, DSP_FNC_LOAD_3G_ASIC,
231   - &card_fw[FW_3G_ASIC]);
  230 + err = load_asic_generic(chip, DSP_FNC_LOAD_3G_ASIC, FW_3G_ASIC);
232 231 if (err < 0)
233 232 return err;
234 233  
235   - chip->asic_code = &card_fw[FW_3G_ASIC];
  234 + chip->asic_code = FW_3G_ASIC;
236 235  
237 236 /* Now give the new ASIC some time to set up */
238 237 msleep(1000);
sound/pci/echoaudio/echoaudio_dsp.c
... ... @@ -175,15 +175,15 @@
175 175 #ifdef ECHOCARD_HAS_ASIC
176 176  
177 177 /* Load ASIC code - done after the DSP is loaded */
178   -static int load_asic_generic(struct echoaudio *chip, u32 cmd,
179   - const struct firmware *asic)
  178 +static int load_asic_generic(struct echoaudio *chip, u32 cmd, short asic)
180 179 {
181 180 const struct firmware *fw;
182 181 int err;
183 182 u32 i, size;
184 183 u8 *code;
185 184  
186   - if ((err = get_firmware(&fw, asic, chip)) < 0) {
  185 + err = get_firmware(&fw, chip, asic);
  186 + if (err < 0) {
187 187 snd_printk(KERN_WARNING "Firmware not found !\n");
188 188 return err;
189 189 }
... ... @@ -245,7 +245,8 @@
245 245 return 0;
246 246 }
247 247  
248   - if ((i = get_firmware(&fw, &card_fw[FW_361_LOADER], chip)) < 0) {
  248 + i = get_firmware(&fw, chip, FW_361_LOADER);
  249 + if (i < 0) {
249 250 snd_printk(KERN_WARNING "Firmware not found !\n");
250 251 return i;
251 252 }
... ... @@ -485,7 +486,8 @@
485 486 chip->dsp_code = NULL;
486 487 }
487 488  
488   - if ((err = get_firmware(&fw, chip->dsp_code_to_load, chip)) < 0)
  489 + err = get_firmware(&fw, chip, chip->dsp_code_to_load);
  490 + if (err < 0)
489 491 return err;
490 492 err = load_dsp(chip, (u16 *)fw->data);
491 493 free_firmware(fw);
sound/pci/echoaudio/gina20_dsp.c
... ... @@ -49,7 +49,7 @@
49 49 chip->device_id = device_id;
50 50 chip->subdevice_id = subdevice_id;
51 51 chip->bad_board = TRUE;
52   - chip->dsp_code_to_load = &card_fw[FW_GINA20_DSP];
  52 + chip->dsp_code_to_load = FW_GINA20_DSP;
53 53 chip->spdif_status = GD_SPDIF_STATUS_UNDEF;
54 54 chip->clock_state = GD_CLOCK_UNDEF;
55 55 /* Since this card has no ASIC, mark it as loaded so everything
sound/pci/echoaudio/gina24_dsp.c
... ... @@ -33,8 +33,7 @@
33 33 static int set_input_clock(struct echoaudio *chip, u16 clock);
34 34 static int set_professional_spdif(struct echoaudio *chip, char prof);
35 35 static int set_digital_mode(struct echoaudio *chip, u8 mode);
36   -static int load_asic_generic(struct echoaudio *chip, u32 cmd,
37   - const struct firmware *asic);
  36 +static int load_asic_generic(struct echoaudio *chip, u32 cmd, short asic);
38 37 static int check_asic_status(struct echoaudio *chip);
39 38  
40 39  
41 40  
... ... @@ -64,13 +63,13 @@
64 63  
65 64 /* Gina24 comes in both '301 and '361 flavors */
66 65 if (chip->device_id == DEVICE_ID_56361) {
67   - chip->dsp_code_to_load = &card_fw[FW_GINA24_361_DSP];
  66 + chip->dsp_code_to_load = FW_GINA24_361_DSP;
68 67 chip->digital_modes =
69 68 ECHOCAPS_HAS_DIGITAL_MODE_SPDIF_RCA |
70 69 ECHOCAPS_HAS_DIGITAL_MODE_SPDIF_OPTICAL |
71 70 ECHOCAPS_HAS_DIGITAL_MODE_ADAT;
72 71 } else {
73   - chip->dsp_code_to_load = &card_fw[FW_GINA24_301_DSP];
  72 + chip->dsp_code_to_load = FW_GINA24_301_DSP;
74 73 chip->digital_modes =
75 74 ECHOCAPS_HAS_DIGITAL_MODE_SPDIF_RCA |
76 75 ECHOCAPS_HAS_DIGITAL_MODE_SPDIF_OPTICAL |
... ... @@ -125,7 +124,7 @@
125 124 {
126 125 u32 control_reg;
127 126 int err;
128   - const struct firmware *fw;
  127 + short asic;
129 128  
130 129 if (chip->asic_loaded)
131 130 return 1;
132 131  
133 132  
134 133  
... ... @@ -135,14 +134,15 @@
135 134  
136 135 /* Pick the correct ASIC for '301 or '361 Gina24 */
137 136 if (chip->device_id == DEVICE_ID_56361)
138   - fw = &card_fw[FW_GINA24_361_ASIC];
  137 + asic = FW_GINA24_361_ASIC;
139 138 else
140   - fw = &card_fw[FW_GINA24_301_ASIC];
  139 + asic = FW_GINA24_301_ASIC;
141 140  
142   - if ((err = load_asic_generic(chip, DSP_FNC_LOAD_GINA24_ASIC, fw)) < 0)
  141 + err = load_asic_generic(chip, DSP_FNC_LOAD_GINA24_ASIC, asic);
  142 + if (err < 0)
143 143 return err;
144 144  
145   - chip->asic_code = fw;
  145 + chip->asic_code = asic;
146 146  
147 147 /* Now give the new ASIC a little time to set up */
148 148 mdelay(10);
sound/pci/echoaudio/indigo_dsp.c
... ... @@ -50,7 +50,7 @@
50 50 chip->device_id = device_id;
51 51 chip->subdevice_id = subdevice_id;
52 52 chip->bad_board = TRUE;
53   - chip->dsp_code_to_load = &card_fw[FW_INDIGO_DSP];
  53 + chip->dsp_code_to_load = FW_INDIGO_DSP;
54 54 /* Since this card has no ASIC, mark it as loaded so everything
55 55 works OK */
56 56 chip->asic_loaded = TRUE;
sound/pci/echoaudio/indigodj_dsp.c
... ... @@ -50,7 +50,7 @@
50 50 chip->device_id = device_id;
51 51 chip->subdevice_id = subdevice_id;
52 52 chip->bad_board = TRUE;
53   - chip->dsp_code_to_load = &card_fw[FW_INDIGO_DJ_DSP];
  53 + chip->dsp_code_to_load = FW_INDIGO_DJ_DSP;
54 54 /* Since this card has no ASIC, mark it as loaded so everything
55 55 works OK */
56 56 chip->asic_loaded = TRUE;
sound/pci/echoaudio/indigodjx_dsp.c
... ... @@ -48,7 +48,7 @@
48 48 chip->device_id = device_id;
49 49 chip->subdevice_id = subdevice_id;
50 50 chip->bad_board = TRUE;
51   - chip->dsp_code_to_load = &card_fw[FW_INDIGO_DJX_DSP];
  51 + chip->dsp_code_to_load = FW_INDIGO_DJX_DSP;
52 52 /* Since this card has no ASIC, mark it as loaded so everything
53 53 works OK */
54 54 chip->asic_loaded = TRUE;
sound/pci/echoaudio/indigoio_dsp.c
... ... @@ -50,7 +50,7 @@
50 50 chip->device_id = device_id;
51 51 chip->subdevice_id = subdevice_id;
52 52 chip->bad_board = TRUE;
53   - chip->dsp_code_to_load = &card_fw[FW_INDIGO_IO_DSP];
  53 + chip->dsp_code_to_load = FW_INDIGO_IO_DSP;
54 54 /* Since this card has no ASIC, mark it as loaded so everything
55 55 works OK */
56 56 chip->asic_loaded = TRUE;
sound/pci/echoaudio/indigoiox_dsp.c
... ... @@ -48,7 +48,7 @@
48 48 chip->device_id = device_id;
49 49 chip->subdevice_id = subdevice_id;
50 50 chip->bad_board = TRUE;
51   - chip->dsp_code_to_load = &card_fw[FW_INDIGO_IOX_DSP];
  51 + chip->dsp_code_to_load = FW_INDIGO_IOX_DSP;
52 52 /* Since this card has no ASIC, mark it as loaded so everything
53 53 works OK */
54 54 chip->asic_loaded = TRUE;
sound/pci/echoaudio/layla20_dsp.c
... ... @@ -31,8 +31,7 @@
31 31  
32 32 static int read_dsp(struct echoaudio *chip, u32 *data);
33 33 static int set_professional_spdif(struct echoaudio *chip, char prof);
34   -static int load_asic_generic(struct echoaudio *chip, u32 cmd,
35   - const struct firmware *asic);
  34 +static int load_asic_generic(struct echoaudio *chip, u32 cmd, short asic);
36 35 static int check_asic_status(struct echoaudio *chip);
37 36 static int update_flags(struct echoaudio *chip);
38 37  
... ... @@ -54,7 +53,7 @@
54 53 chip->subdevice_id = subdevice_id;
55 54 chip->bad_board = TRUE;
56 55 chip->has_midi = TRUE;
57   - chip->dsp_code_to_load = &card_fw[FW_LAYLA20_DSP];
  56 + chip->dsp_code_to_load = FW_LAYLA20_DSP;
58 57 chip->input_clock_types =
59 58 ECHO_CLOCK_BIT_INTERNAL | ECHO_CLOCK_BIT_SPDIF |
60 59 ECHO_CLOCK_BIT_WORD | ECHO_CLOCK_BIT_SUPER;
... ... @@ -144,7 +143,7 @@
144 143 return 0;
145 144  
146 145 err = load_asic_generic(chip, DSP_FNC_LOAD_LAYLA_ASIC,
147   - &card_fw[FW_LAYLA20_ASIC]);
  146 + FW_LAYLA20_ASIC);
148 147 if (err < 0)
149 148 return err;
150 149  
sound/pci/echoaudio/layla24_dsp.c
... ... @@ -32,8 +32,7 @@
32 32 static int set_input_clock(struct echoaudio *chip, u16 clock);
33 33 static int set_professional_spdif(struct echoaudio *chip, char prof);
34 34 static int set_digital_mode(struct echoaudio *chip, u8 mode);
35   -static int load_asic_generic(struct echoaudio *chip, u32 cmd,
36   - const struct firmware *asic);
  35 +static int load_asic_generic(struct echoaudio *chip, u32 cmd, short asic);
37 36 static int check_asic_status(struct echoaudio *chip);
38 37  
39 38  
... ... @@ -54,7 +53,7 @@
54 53 chip->subdevice_id = subdevice_id;
55 54 chip->bad_board = TRUE;
56 55 chip->has_midi = TRUE;
57   - chip->dsp_code_to_load = &card_fw[FW_LAYLA24_DSP];
  56 + chip->dsp_code_to_load = FW_LAYLA24_DSP;
58 57 chip->input_clock_types =
59 58 ECHO_CLOCK_BIT_INTERNAL | ECHO_CLOCK_BIT_SPDIF |
60 59 ECHO_CLOCK_BIT_WORD | ECHO_CLOCK_BIT_ADAT;
61 60  
62 61  
... ... @@ -123,18 +122,18 @@
123 122  
124 123 /* Load the ASIC for the PCI card */
125 124 err = load_asic_generic(chip, DSP_FNC_LOAD_LAYLA24_PCI_CARD_ASIC,
126   - &card_fw[FW_LAYLA24_1_ASIC]);
  125 + FW_LAYLA24_1_ASIC);
127 126 if (err < 0)
128 127 return err;
129 128  
130   - chip->asic_code = &card_fw[FW_LAYLA24_2S_ASIC];
  129 + chip->asic_code = FW_LAYLA24_2S_ASIC;
131 130  
132 131 /* Now give the new ASIC a little time to set up */
133 132 mdelay(10);
134 133  
135 134 /* Do the external one */
136 135 err = load_asic_generic(chip, DSP_FNC_LOAD_LAYLA24_EXTERNAL_ASIC,
137   - &card_fw[FW_LAYLA24_2S_ASIC]);
  136 + FW_LAYLA24_2S_ASIC);
138 137 if (err < 0)
139 138 return FALSE;
140 139  
... ... @@ -299,7 +298,7 @@
299 298 /* Depending on what digital mode you want, Layla24 needs different ASICs
300 299 loaded. This function checks the ASIC needed for the new mode and sees
301 300 if it matches the one already loaded. */
302   -static int switch_asic(struct echoaudio *chip, const struct firmware *asic)
  301 +static int switch_asic(struct echoaudio *chip, short asic)
303 302 {
304 303 s8 *monitors;
305 304  
... ... @@ -335,7 +334,7 @@
335 334 {
336 335 u32 control_reg;
337 336 int err, incompatible_clock;
338   - const struct firmware *asic;
  337 + short asic;
339 338  
340 339 /* Set clock to "internal" if it's not compatible with the new mode */
341 340 incompatible_clock = FALSE;
342 341  
... ... @@ -344,12 +343,12 @@
344 343 case DIGITAL_MODE_SPDIF_RCA:
345 344 if (chip->input_clock == ECHO_CLOCK_ADAT)
346 345 incompatible_clock = TRUE;
347   - asic = &card_fw[FW_LAYLA24_2S_ASIC];
  346 + asic = FW_LAYLA24_2S_ASIC;
348 347 break;
349 348 case DIGITAL_MODE_ADAT:
350 349 if (chip->input_clock == ECHO_CLOCK_SPDIF)
351 350 incompatible_clock = TRUE;
352   - asic = &card_fw[FW_LAYLA24_2A_ASIC];
  351 + asic = FW_LAYLA24_2A_ASIC;
353 352 break;
354 353 default:
355 354 DE_ACT(("Digital mode not supported: %d\n", mode));
sound/pci/echoaudio/mia_dsp.c
... ... @@ -53,7 +53,7 @@
53 53 chip->device_id = device_id;
54 54 chip->subdevice_id = subdevice_id;
55 55 chip->bad_board = TRUE;
56   - chip->dsp_code_to_load = &card_fw[FW_MIA_DSP];
  56 + chip->dsp_code_to_load = FW_MIA_DSP;
57 57 /* Since this card has no ASIC, mark it as loaded so everything
58 58 works OK */
59 59 chip->asic_loaded = TRUE;
sound/pci/echoaudio/mona_dsp.c
... ... @@ -33,8 +33,7 @@
33 33 static int set_input_clock(struct echoaudio *chip, u16 clock);
34 34 static int set_professional_spdif(struct echoaudio *chip, char prof);
35 35 static int set_digital_mode(struct echoaudio *chip, u8 mode);
36   -static int load_asic_generic(struct echoaudio *chip, u32 cmd,
37   - const struct firmware *asic);
  36 +static int load_asic_generic(struct echoaudio *chip, u32 cmd, short asic);
38 37 static int check_asic_status(struct echoaudio *chip);
39 38  
40 39  
41 40  
... ... @@ -64,9 +63,9 @@
64 63  
65 64 /* Mona comes in both '301 and '361 flavors */
66 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 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 69  
71 70 chip->digital_mode = DIGITAL_MODE_SPDIF_RCA;
72 71 chip->professional_spdif = FALSE;
... ... @@ -120,7 +119,7 @@
120 119 {
121 120 u32 control_reg;
122 121 int err;
123   - const struct firmware *asic;
  122 + short asic;
124 123  
125 124 if (chip->asic_loaded)
126 125 return 0;
127 126  
... ... @@ -128,9 +127,9 @@
128 127 mdelay(10);
129 128  
130 129 if (chip->device_id == DEVICE_ID_56361)
131   - asic = &card_fw[FW_MONA_361_1_ASIC48];
  130 + asic = FW_MONA_361_1_ASIC48;
132 131 else
133   - asic = &card_fw[FW_MONA_301_1_ASIC48];
  132 + asic = FW_MONA_301_1_ASIC48;
134 133  
135 134 err = load_asic_generic(chip, DSP_FNC_LOAD_MONA_PCI_CARD_ASIC, asic);
136 135 if (err < 0)
... ... @@ -141,7 +140,7 @@
141 140  
142 141 /* Do the external one */
143 142 err = load_asic_generic(chip, DSP_FNC_LOAD_MONA_EXTERNAL_ASIC,
144   - &card_fw[FW_MONA_2_ASIC]);
  143 + FW_MONA_2_ASIC);
145 144 if (err < 0)
146 145 return err;
147 146  
148 147  
149 148  
150 149  
151 150  
152 151  
... ... @@ -165,22 +164,22 @@
165 164 if it matches the one already loaded. */
166 165 static int switch_asic(struct echoaudio *chip, char double_speed)
167 166 {
168   - const struct firmware *asic;
169 167 int err;
  168 + short asic;
170 169  
171 170 /* Check the clock detect bits to see if this is
172 171 a single-speed clock or a double-speed clock; load
173 172 a new ASIC if necessary. */
174 173 if (chip->device_id == DEVICE_ID_56361) {
175 174 if (double_speed)
176   - asic = &card_fw[FW_MONA_361_1_ASIC96];
  175 + asic = FW_MONA_361_1_ASIC96;
177 176 else
178   - asic = &card_fw[FW_MONA_361_1_ASIC48];
  177 + asic = FW_MONA_361_1_ASIC48;
179 178 } else {
180 179 if (double_speed)
181   - asic = &card_fw[FW_MONA_301_1_ASIC96];
  180 + asic = FW_MONA_301_1_ASIC96;
182 181 else
183   - asic = &card_fw[FW_MONA_301_1_ASIC48];
  182 + asic = FW_MONA_301_1_ASIC48;
184 183 }
185 184  
186 185 if (asic != chip->asic_code) {
... ... @@ -200,7 +199,7 @@
200 199 static int set_sample_rate(struct echoaudio *chip, u32 rate)
201 200 {
202 201 u32 control_reg, clock;
203   - const struct firmware *asic;
  202 + short asic;
204 203 char force_write;
205 204  
206 205 /* Only set the clock for internal mode. */
207 206  
208 207  
209 208  
... ... @@ -218,14 +217,14 @@
218 217 if (chip->digital_mode == DIGITAL_MODE_ADAT)
219 218 return -EINVAL;
220 219 if (chip->device_id == DEVICE_ID_56361)
221   - asic = &card_fw[FW_MONA_361_1_ASIC96];
  220 + asic = FW_MONA_361_1_ASIC96;
222 221 else
223   - asic = &card_fw[FW_MONA_301_1_ASIC96];
  222 + asic = FW_MONA_301_1_ASIC96;
224 223 } else {
225 224 if (chip->device_id == DEVICE_ID_56361)
226   - asic = &card_fw[FW_MONA_361_1_ASIC48];
  225 + asic = FW_MONA_361_1_ASIC48;
227 226 else
228   - asic = &card_fw[FW_MONA_301_1_ASIC48];
  227 + asic = FW_MONA_301_1_ASIC48;
229 228 }
230 229  
231 230 force_write = 0;
... ... @@ -410,8 +409,8 @@
410 409 case DIGITAL_MODE_ADAT:
411 410 /* If the current ASIC is the 96KHz ASIC, switch the ASIC
412 411 and set to 48 KHz */
413   - if (chip->asic_code == &card_fw[FW_MONA_361_1_ASIC96] ||
414   - chip->asic_code == &card_fw[FW_MONA_301_1_ASIC96]) {
  412 + if (chip->asic_code == FW_MONA_361_1_ASIC96 ||
  413 + chip->asic_code == FW_MONA_301_1_ASIC96) {
415 414 set_sample_rate(chip, 48000);
416 415 }
417 416 control_reg |= GML_ADAT_MODE;