Lines Matching refs:chip
31 static int write_control_reg(struct echoaudio *chip, u32 value, char force);
32 static int set_input_clock(struct echoaudio *chip, u16 clock);
33 static int set_professional_spdif(struct echoaudio *chip, char prof);
34 static int set_digital_mode(struct echoaudio *chip, u8 mode);
35 static int load_asic_generic(struct echoaudio *chip, u32 cmd, short asic);
36 static int check_asic_status(struct echoaudio *chip);
39 static int init_hw(struct echoaudio *chip, u16 device_id, u16 subdevice_id) in init_hw() argument
46 if ((err = init_dsp_comm_page(chip))) { in init_hw()
47 dev_err(chip->card->dev, in init_hw()
52 chip->device_id = device_id; in init_hw()
53 chip->subdevice_id = subdevice_id; in init_hw()
54 chip->bad_board = TRUE; in init_hw()
55 chip->has_midi = TRUE; in init_hw()
56 chip->dsp_code_to_load = FW_LAYLA24_DSP; in init_hw()
57 chip->input_clock_types = in init_hw()
60 chip->digital_modes = in init_hw()
65 if ((err = load_firmware(chip)) < 0) in init_hw()
67 chip->bad_board = FALSE; in init_hw()
69 if ((err = init_line_levels(chip)) < 0) in init_hw()
77 static int set_mixer_defaults(struct echoaudio *chip) in set_mixer_defaults() argument
79 chip->digital_mode = DIGITAL_MODE_SPDIF_RCA; in set_mixer_defaults()
80 chip->professional_spdif = FALSE; in set_mixer_defaults()
81 chip->digital_in_automute = TRUE; in set_mixer_defaults()
82 return init_line_levels(chip); in set_mixer_defaults()
87 static u32 detect_input_clocks(const struct echoaudio *chip) in detect_input_clocks() argument
92 clocks_from_dsp = le32_to_cpu(chip->comm_page->status_clocks); in detect_input_clocks()
112 static int load_asic(struct echoaudio *chip) in load_asic() argument
116 if (chip->asic_loaded) in load_asic()
124 err = load_asic_generic(chip, DSP_FNC_LOAD_LAYLA24_PCI_CARD_ASIC, in load_asic()
129 chip->asic_code = FW_LAYLA24_2S_ASIC; in load_asic()
135 err = load_asic_generic(chip, DSP_FNC_LOAD_LAYLA24_EXTERNAL_ASIC, in load_asic()
144 err = check_asic_status(chip); in load_asic()
149 err = write_control_reg(chip, GML_CONVERTER_ENABLE | GML_48KHZ, in load_asic()
157 static int set_sample_rate(struct echoaudio *chip, u32 rate) in set_sample_rate() argument
162 chip->digital_mode == DIGITAL_MODE_ADAT)) in set_sample_rate()
166 if (chip->input_clock != ECHO_CLOCK_INTERNAL) { in set_sample_rate()
167 dev_warn(chip->card->dev, in set_sample_rate()
170 chip->comm_page->sample_rate = cpu_to_le32(rate); in set_sample_rate()
171 chip->sample_rate = rate; in set_sample_rate()
176 control_reg = le32_to_cpu(chip->comm_page->control_register); in set_sample_rate()
227 if (wait_handshake(chip)) in set_sample_rate()
230 chip->comm_page->sample_rate = in set_sample_rate()
233 clear_handshake(chip); in set_sample_rate()
234 send_vector(chip, DSP_VC_SET_LAYLA24_FREQUENCY_REG); in set_sample_rate()
239 chip->comm_page->sample_rate = cpu_to_le32(rate); /* ignored by the DSP ? */ in set_sample_rate()
240 chip->sample_rate = rate; in set_sample_rate()
241 dev_dbg(chip->card->dev, in set_sample_rate()
244 return write_control_reg(chip, control_reg, FALSE); in set_sample_rate()
249 static int set_input_clock(struct echoaudio *chip, u16 clock) in set_input_clock() argument
254 control_reg = le32_to_cpu(chip->comm_page->control_register) & in set_input_clock()
256 clocks_from_dsp = le32_to_cpu(chip->comm_page->status_clocks); in set_input_clock()
261 chip->input_clock = ECHO_CLOCK_INTERNAL; in set_input_clock()
262 return set_sample_rate(chip, chip->sample_rate); in set_input_clock()
264 if (chip->digital_mode == DIGITAL_MODE_ADAT) in set_input_clock()
278 if (chip->digital_mode != DIGITAL_MODE_ADAT) in set_input_clock()
284 dev_err(chip->card->dev, in set_input_clock()
289 chip->input_clock = clock; in set_input_clock()
290 return write_control_reg(chip, control_reg, TRUE); in set_input_clock()
298 static int switch_asic(struct echoaudio *chip, short asic) in switch_asic() argument
303 if (asic != chip->asic_code) { in switch_asic()
304 monitors = kmemdup(chip->comm_page->monitors, in switch_asic()
309 memset(chip->comm_page->monitors, ECHOGAIN_MUTED, in switch_asic()
313 if (load_asic_generic(chip, DSP_FNC_LOAD_LAYLA24_EXTERNAL_ASIC, in switch_asic()
315 memcpy(chip->comm_page->monitors, monitors, in switch_asic()
320 chip->asic_code = asic; in switch_asic()
321 memcpy(chip->comm_page->monitors, monitors, MONITOR_ARRAY_SIZE); in switch_asic()
330 static int dsp_set_digital_mode(struct echoaudio *chip, u8 mode) in dsp_set_digital_mode() argument
341 if (chip->input_clock == ECHO_CLOCK_ADAT) in dsp_set_digital_mode()
346 if (chip->input_clock == ECHO_CLOCK_SPDIF) in dsp_set_digital_mode()
351 dev_err(chip->card->dev, in dsp_set_digital_mode()
357 chip->sample_rate = 48000; in dsp_set_digital_mode()
358 spin_lock_irq(&chip->lock); in dsp_set_digital_mode()
359 set_input_clock(chip, ECHO_CLOCK_INTERNAL); in dsp_set_digital_mode()
360 spin_unlock_irq(&chip->lock); in dsp_set_digital_mode()
364 if (switch_asic(chip, asic) < 0) in dsp_set_digital_mode()
367 spin_lock_irq(&chip->lock); in dsp_set_digital_mode()
370 control_reg = le32_to_cpu(chip->comm_page->control_register); in dsp_set_digital_mode()
386 err = write_control_reg(chip, control_reg, TRUE); in dsp_set_digital_mode()
387 spin_unlock_irq(&chip->lock); in dsp_set_digital_mode()
390 chip->digital_mode = mode; in dsp_set_digital_mode()
392 dev_dbg(chip->card->dev, "set_digital_mode to %d\n", mode); in dsp_set_digital_mode()