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) in init_hw() argument
47 if ((err = init_dsp_comm_page(chip))) { in init_hw()
48 dev_err(chip->card->dev, in init_hw()
53 chip->device_id = device_id; in init_hw()
54 chip->subdevice_id = subdevice_id; in init_hw()
55 chip->bad_board = TRUE; in init_hw()
56 chip->input_clock_types = in init_hw()
59 chip->digital_modes = in init_hw()
65 if (chip->device_id == DEVICE_ID_56361) in init_hw()
66 chip->dsp_code_to_load = FW_MONA_361_DSP; in init_hw()
68 chip->dsp_code_to_load = FW_MONA_301_DSP; in init_hw()
70 if ((err = load_firmware(chip)) < 0) in init_hw()
72 chip->bad_board = FALSE; in init_hw()
79 static int set_mixer_defaults(struct echoaudio *chip) in set_mixer_defaults() argument
81 chip->digital_mode = DIGITAL_MODE_SPDIF_RCA; in set_mixer_defaults()
82 chip->professional_spdif = FALSE; in set_mixer_defaults()
83 chip->digital_in_automute = TRUE; in set_mixer_defaults()
84 return init_line_levels(chip); in set_mixer_defaults()
89 static u32 detect_input_clocks(const struct echoaudio *chip) in detect_input_clocks() argument
95 clocks_from_dsp = le32_to_cpu(chip->comm_page->status_clocks); in detect_input_clocks()
115 static int load_asic(struct echoaudio *chip) in load_asic() argument
121 if (chip->asic_loaded) in load_asic()
126 if (chip->device_id == DEVICE_ID_56361) in load_asic()
131 err = load_asic_generic(chip, DSP_FNC_LOAD_MONA_PCI_CARD_ASIC, asic); in load_asic()
135 chip->asic_code = asic; in load_asic()
139 err = load_asic_generic(chip, DSP_FNC_LOAD_MONA_EXTERNAL_ASIC, in load_asic()
145 err = check_asic_status(chip); in load_asic()
151 err = write_control_reg(chip, control_reg, TRUE); in load_asic()
162 static int switch_asic(struct echoaudio *chip, char double_speed) in switch_asic() argument
170 if (chip->device_id == DEVICE_ID_56361) { in switch_asic()
182 if (asic != chip->asic_code) { in switch_asic()
184 err = load_asic_generic(chip, DSP_FNC_LOAD_MONA_PCI_CARD_ASIC, in switch_asic()
188 chip->asic_code = asic; in switch_asic()
196 static int set_sample_rate(struct echoaudio *chip, u32 rate) in set_sample_rate() argument
203 if (chip->input_clock != ECHO_CLOCK_INTERNAL) { in set_sample_rate()
204 dev_dbg(chip->card->dev, in set_sample_rate()
207 chip->comm_page->sample_rate = cpu_to_le32(rate); in set_sample_rate()
208 chip->sample_rate = rate; in set_sample_rate()
214 if (chip->digital_mode == DIGITAL_MODE_ADAT) in set_sample_rate()
216 if (chip->device_id == DEVICE_ID_56361) in set_sample_rate()
221 if (chip->device_id == DEVICE_ID_56361) in set_sample_rate()
228 if (asic != chip->asic_code) { in set_sample_rate()
231 spin_unlock_irq(&chip->lock); in set_sample_rate()
232 err = load_asic_generic(chip, DSP_FNC_LOAD_MONA_PCI_CARD_ASIC, in set_sample_rate()
234 spin_lock_irq(&chip->lock); in set_sample_rate()
238 chip->asic_code = asic; in set_sample_rate()
244 control_reg = le32_to_cpu(chip->comm_page->control_register); in set_sample_rate()
281 dev_err(chip->card->dev, in set_sample_rate()
288 chip->comm_page->sample_rate = cpu_to_le32(rate); /* ignored by the DSP */ in set_sample_rate()
289 chip->sample_rate = rate; in set_sample_rate()
290 dev_dbg(chip->card->dev, in set_sample_rate()
293 return write_control_reg(chip, control_reg, force_write); in set_sample_rate()
298 static int set_input_clock(struct echoaudio *chip, u16 clock) in set_input_clock() argument
305 if (atomic_read(&chip->opencount)) in set_input_clock()
309 control_reg = le32_to_cpu(chip->comm_page->control_register) & in set_input_clock()
311 clocks_from_dsp = le32_to_cpu(chip->comm_page->status_clocks); in set_input_clock()
315 chip->input_clock = ECHO_CLOCK_INTERNAL; in set_input_clock()
316 return set_sample_rate(chip, chip->sample_rate); in set_input_clock()
318 if (chip->digital_mode == DIGITAL_MODE_ADAT) in set_input_clock()
320 spin_unlock_irq(&chip->lock); in set_input_clock()
321 err = switch_asic(chip, clocks_from_dsp & in set_input_clock()
323 spin_lock_irq(&chip->lock); in set_input_clock()
333 spin_unlock_irq(&chip->lock); in set_input_clock()
334 err = switch_asic(chip, clocks_from_dsp & in set_input_clock()
336 spin_lock_irq(&chip->lock); in set_input_clock()
346 dev_dbg(chip->card->dev, "Set Mona clock to ADAT\n"); in set_input_clock()
347 if (chip->digital_mode != DIGITAL_MODE_ADAT) in set_input_clock()
353 dev_err(chip->card->dev, in set_input_clock()
358 chip->input_clock = clock; in set_input_clock()
359 return write_control_reg(chip, control_reg, TRUE); in set_input_clock()
364 static int dsp_set_digital_mode(struct echoaudio *chip, u8 mode) in dsp_set_digital_mode() argument
374 if (chip->input_clock == ECHO_CLOCK_ADAT) in dsp_set_digital_mode()
378 if (chip->input_clock == ECHO_CLOCK_SPDIF) in dsp_set_digital_mode()
382 dev_err(chip->card->dev, in dsp_set_digital_mode()
387 spin_lock_irq(&chip->lock); in dsp_set_digital_mode()
390 chip->sample_rate = 48000; in dsp_set_digital_mode()
391 set_input_clock(chip, ECHO_CLOCK_INTERNAL); in dsp_set_digital_mode()
395 control_reg = le32_to_cpu(chip->comm_page->control_register); in dsp_set_digital_mode()
409 if (chip->asic_code == FW_MONA_361_1_ASIC96 || in dsp_set_digital_mode()
410 chip->asic_code == FW_MONA_301_1_ASIC96) { in dsp_set_digital_mode()
411 set_sample_rate(chip, 48000); in dsp_set_digital_mode()
418 err = write_control_reg(chip, control_reg, FALSE); in dsp_set_digital_mode()
419 spin_unlock_irq(&chip->lock); in dsp_set_digital_mode()
422 chip->digital_mode = mode; in dsp_set_digital_mode()
424 dev_dbg(chip->card->dev, "set_digital_mode to %d\n", mode); in dsp_set_digital_mode()