Lines Matching refs:chip
32 static int write_control_reg(struct echoaudio *chip, u32 value, char force);
33 static int set_input_clock(struct echoaudio *chip, u16 clock);
34 static int set_professional_spdif(struct echoaudio *chip, char prof);
35 static int set_digital_mode(struct echoaudio *chip, u8 mode);
36 static int load_asic_generic(struct echoaudio *chip, u32 cmd, short asic);
37 static int check_asic_status(struct echoaudio *chip);
40 static int init_hw(struct echoaudio *chip, u16 device_id, u16 subdevice_id)
47 if ((err = init_dsp_comm_page(chip))) {
48 dev_err(chip->card->dev,
53 chip->device_id = device_id;
54 chip->subdevice_id = subdevice_id;
55 chip->bad_board = true;
56 chip->input_clock_types =
59 chip->digital_modes =
65 if (chip->device_id == DEVICE_ID_56361)
66 chip->dsp_code_to_load = FW_MONA_361_DSP;
68 chip->dsp_code_to_load = FW_MONA_301_DSP;
70 if ((err = load_firmware(chip)) < 0)
72 chip->bad_board = false;
79 static int set_mixer_defaults(struct echoaudio *chip)
81 chip->digital_mode = DIGITAL_MODE_SPDIF_RCA;
82 chip->professional_spdif = false;
83 chip->digital_in_automute = true;
84 return init_line_levels(chip);
89 static u32 detect_input_clocks(const struct echoaudio *chip)
95 clocks_from_dsp = le32_to_cpu(chip->comm_page->status_clocks);
115 static int load_asic(struct echoaudio *chip)
121 if (chip->asic_loaded)
126 if (chip->device_id == DEVICE_ID_56361)
131 err = load_asic_generic(chip, DSP_FNC_LOAD_MONA_PCI_CARD_ASIC, asic);
135 chip->asic_code = asic;
139 err = load_asic_generic(chip, DSP_FNC_LOAD_MONA_EXTERNAL_ASIC,
145 err = check_asic_status(chip);
151 err = write_control_reg(chip, control_reg, true);
162 static int switch_asic(struct echoaudio *chip, char double_speed)
170 if (chip->device_id == DEVICE_ID_56361) {
182 if (asic != chip->asic_code) {
184 err = load_asic_generic(chip, DSP_FNC_LOAD_MONA_PCI_CARD_ASIC,
188 chip->asic_code = asic;
196 static int set_sample_rate(struct echoaudio *chip, u32 rate)
203 if (chip->input_clock != ECHO_CLOCK_INTERNAL) {
204 dev_dbg(chip->card->dev,
207 chip->comm_page->sample_rate = cpu_to_le32(rate);
208 chip->sample_rate = rate;
214 if (chip->digital_mode == DIGITAL_MODE_ADAT)
216 if (chip->device_id == DEVICE_ID_56361)
221 if (chip->device_id == DEVICE_ID_56361)
228 if (asic != chip->asic_code) {
231 spin_unlock_irq(&chip->lock);
232 err = load_asic_generic(chip, DSP_FNC_LOAD_MONA_PCI_CARD_ASIC,
234 spin_lock_irq(&chip->lock);
238 chip->asic_code = asic;
244 control_reg = le32_to_cpu(chip->comm_page->control_register);
281 dev_err(chip->card->dev,
288 chip->comm_page->sample_rate = cpu_to_le32(rate); /* ignored by the DSP */
289 chip->sample_rate = rate;
290 dev_dbg(chip->card->dev,
293 return write_control_reg(chip, control_reg, force_write);
298 static int set_input_clock(struct echoaudio *chip, u16 clock)
304 control_reg = le32_to_cpu(chip->comm_page->control_register) &
306 clocks_from_dsp = le32_to_cpu(chip->comm_page->status_clocks);
310 chip->input_clock = ECHO_CLOCK_INTERNAL;
311 return set_sample_rate(chip, chip->sample_rate);
313 if (chip->digital_mode == DIGITAL_MODE_ADAT)
315 spin_unlock_irq(&chip->lock);
316 err = switch_asic(chip, clocks_from_dsp &
318 spin_lock_irq(&chip->lock);
328 spin_unlock_irq(&chip->lock);
329 err = switch_asic(chip, clocks_from_dsp &
331 spin_lock_irq(&chip->lock);
341 dev_dbg(chip->card->dev, "Set Mona clock to ADAT\n");
342 if (chip->digital_mode != DIGITAL_MODE_ADAT)
348 dev_err(chip->card->dev,
353 chip->input_clock = clock;
354 return write_control_reg(chip, control_reg, true);
359 static int dsp_set_digital_mode(struct echoaudio *chip, u8 mode)
369 if (chip->input_clock == ECHO_CLOCK_ADAT)
373 if (chip->input_clock == ECHO_CLOCK_SPDIF)
377 dev_err(chip->card->dev,
382 spin_lock_irq(&chip->lock);
385 chip->sample_rate = 48000;
386 set_input_clock(chip, ECHO_CLOCK_INTERNAL);
390 control_reg = le32_to_cpu(chip->comm_page->control_register);
404 if (chip->asic_code == FW_MONA_361_1_ASIC96 ||
405 chip->asic_code == FW_MONA_301_1_ASIC96) {
406 set_sample_rate(chip, 48000);
413 err = write_control_reg(chip, control_reg, false);
414 spin_unlock_irq(&chip->lock);
417 chip->digital_mode = mode;
419 dev_dbg(chip->card->dev, "set_digital_mode to %d\n", mode);