Lines Matching +full:chip +full:- +full:to +full:- +full:chip
3 Copyright Echo Digital Audio Corporation (c) 1998 - 2004
20 along with this program; if not, write to the Free Software
21 Foundation, Inc., 59 Temple Place - Suite 330, Boston,
22 MA 02111-1307, USA.
26 Translation from C++ and adaptation for use in ALSA-Driver
32 static int read_dsp(struct echoaudio *chip, u32 *data);
33 static int set_professional_spdif(struct echoaudio *chip, char prof);
34 static int load_asic_generic(struct echoaudio *chip, u32 cmd, short asic);
35 static int check_asic_status(struct echoaudio *chip);
36 static int update_flags(struct echoaudio *chip);
39 static int init_hw(struct echoaudio *chip, u16 device_id, u16 subdevice_id) in init_hw() argument
43 DE_INIT(("init_hw() - Layla20\n")); in init_hw()
45 return -ENODEV; in init_hw()
47 if ((err = init_dsp_comm_page(chip))) { in init_hw()
48 DE_INIT(("init_hw - could not initialize DSP comm page\n")); 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_LAYLA20_DSP; in init_hw()
57 chip->input_clock_types = in init_hw()
60 chip->output_clock_types = in init_hw()
63 if ((err = load_firmware(chip)) < 0) in init_hw()
65 chip->bad_board = FALSE; in init_hw()
73 static int set_mixer_defaults(struct echoaudio *chip) in set_mixer_defaults() argument
75 chip->professional_spdif = FALSE; in set_mixer_defaults()
76 return init_line_levels(chip); in set_mixer_defaults()
81 static u32 detect_input_clocks(const struct echoaudio *chip) in detect_input_clocks() argument
85 /* Map the DSP clock detect bits to the generic driver clock detect bits */ in detect_input_clocks()
86 clocks_from_dsp = le32_to_cpu(chip->comm_page->status_clocks); in detect_input_clocks()
105 /* ASIC status check - some cards have one or two ASICs that need to be
106 loaded. Once that load is complete, this function is called to see if
109 defective - the external box may be disconnected or turned off.
112 static int check_asic_status(struct echoaudio *chip) in check_asic_status() argument
117 chip->asic_loaded = FALSE; in check_asic_status()
119 send_vector(chip, DSP_VC_TEST_ASIC); in check_asic_status()
121 /* The DSP will return a value to indicate whether or not in check_asic_status()
123 if (read_dsp(chip, &asic_status) < 0) { in check_asic_status()
125 return -EIO; in check_asic_status()
130 chip->asic_loaded = TRUE; in check_asic_status()
135 return -EIO; in check_asic_status()
141 static int load_asic(struct echoaudio *chip) in load_asic() argument
145 if (chip->asic_loaded) in load_asic()
148 err = load_asic_generic(chip, DSP_FNC_LOAD_LAYLA_ASIC, in load_asic()
154 return check_asic_status(chip); in load_asic()
159 static int set_sample_rate(struct echoaudio *chip, u32 rate) in set_sample_rate() argument
162 return -EINVAL; in set_sample_rate()
165 simply treat it as a non-event. */ in set_sample_rate()
166 if (chip->input_clock != ECHO_CLOCK_INTERNAL) { in set_sample_rate()
167 DE_ACT(("set_sample_rate: Cannot set sample rate - " in set_sample_rate()
168 "clock not set to CLK_CLOCKININTERNAL\n")); in set_sample_rate()
169 chip->comm_page->sample_rate = cpu_to_le32(rate); in set_sample_rate()
170 chip->sample_rate = rate; in set_sample_rate()
174 if (wait_handshake(chip)) in set_sample_rate()
175 return -EIO; in set_sample_rate()
178 chip->sample_rate = rate; in set_sample_rate()
179 chip->comm_page->sample_rate = cpu_to_le32(rate); in set_sample_rate()
180 clear_handshake(chip); in set_sample_rate()
181 return send_vector(chip, DSP_VC_SET_LAYLA_SAMPLE_RATE); in set_sample_rate()
186 static int set_input_clock(struct echoaudio *chip, u16 clock_source) in set_input_clock() argument
195 DE_ACT(("Set Layla20 clock to INTERNAL\n")); in set_input_clock()
196 rate = chip->sample_rate; in set_input_clock()
200 DE_ACT(("Set Layla20 clock to SPDIF\n")); in set_input_clock()
204 DE_ACT(("Set Layla20 clock to WORD\n")); in set_input_clock()
208 DE_ACT(("Set Layla20 clock to SUPER\n")); in set_input_clock()
214 return -EINVAL; in set_input_clock()
216 chip->input_clock = clock_source; in set_input_clock()
218 chip->comm_page->input_clock = cpu_to_le16(clock); in set_input_clock()
219 clear_handshake(chip); in set_input_clock()
220 send_vector(chip, DSP_VC_UPDATE_CLOCKS); in set_input_clock()
223 set_sample_rate(chip, rate); in set_input_clock()
230 static int set_output_clock(struct echoaudio *chip, u16 clock) in set_output_clock() argument
242 return -EINVAL; in set_output_clock()
245 if (wait_handshake(chip)) in set_output_clock()
246 return -EIO; in set_output_clock()
248 chip->comm_page->output_clock = cpu_to_le16(clock); in set_output_clock()
249 chip->output_clock = clock; in set_output_clock()
250 clear_handshake(chip); in set_output_clock()
251 return send_vector(chip, DSP_VC_UPDATE_CLOCKS); in set_output_clock()
257 static int set_input_gain(struct echoaudio *chip, u16 input, int gain) in set_input_gain() argument
259 if (snd_BUG_ON(input >= num_busses_in(chip))) in set_input_gain()
260 return -EINVAL; in set_input_gain()
262 if (wait_handshake(chip)) in set_input_gain()
263 return -EIO; in set_input_gain()
265 chip->input_gain[input] = gain; in set_input_gain()
267 chip->comm_page->line_in_level[input] = gain; in set_input_gain()
273 /* Tell the DSP to reread the flags from the comm page */
274 static int update_flags(struct echoaudio *chip) in update_flags() argument
276 if (wait_handshake(chip)) in update_flags()
277 return -EIO; in update_flags()
278 clear_handshake(chip); in update_flags()
279 return send_vector(chip, DSP_VC_UPDATE_FLAGS); in update_flags()
284 static int set_professional_spdif(struct echoaudio *chip, char prof) in set_professional_spdif() argument
288 chip->comm_page->flags |= in set_professional_spdif()
291 chip->comm_page->flags &= in set_professional_spdif()
293 chip->professional_spdif = prof; in set_professional_spdif()
294 return update_flags(chip); in set_professional_spdif()