1a2328d02SGiuliano Pochini /************************************************************************
2a2328d02SGiuliano Pochini 
3a2328d02SGiuliano Pochini This file is part of Echo Digital Audio's generic driver library.
4a2328d02SGiuliano Pochini Copyright Echo Digital Audio Corporation (c) 1998 - 2005
5a2328d02SGiuliano Pochini All rights reserved
6a2328d02SGiuliano Pochini www.echoaudio.com
7a2328d02SGiuliano Pochini 
8a2328d02SGiuliano Pochini This library is free software; you can redistribute it and/or
9a2328d02SGiuliano Pochini modify it under the terms of the GNU Lesser General Public
10a2328d02SGiuliano Pochini License as published by the Free Software Foundation; either
11a2328d02SGiuliano Pochini version 2.1 of the License, or (at your option) any later version.
12a2328d02SGiuliano Pochini 
13a2328d02SGiuliano Pochini This library is distributed in the hope that it will be useful,
14a2328d02SGiuliano Pochini but WITHOUT ANY WARRANTY; without even the implied warranty of
15a2328d02SGiuliano Pochini MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16a2328d02SGiuliano Pochini Lesser General Public License for more details.
17a2328d02SGiuliano Pochini 
18a2328d02SGiuliano Pochini You should have received a copy of the GNU Lesser General Public
19a2328d02SGiuliano Pochini License along with this library; if not, write to the Free Software
20a2328d02SGiuliano Pochini Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21a2328d02SGiuliano Pochini 
22a2328d02SGiuliano Pochini *************************************************************************
23a2328d02SGiuliano Pochini 
24a2328d02SGiuliano Pochini  Translation from C++ and adaptation for use in ALSA-Driver
25a2328d02SGiuliano Pochini  were made by Giuliano Pochini <pochini@shiny.it>
26a2328d02SGiuliano Pochini 
27a2328d02SGiuliano Pochini *************************************************************************/
28a2328d02SGiuliano Pochini 
29a2328d02SGiuliano Pochini static int update_vmixer_level(struct echoaudio *chip);
30a2328d02SGiuliano Pochini static int set_vmixer_gain(struct echoaudio *chip, u16 output,
31a2328d02SGiuliano Pochini 			   u16 pipe, int gain);
32a2328d02SGiuliano Pochini 
33a2328d02SGiuliano Pochini 
init_hw(struct echoaudio * chip,u16 device_id,u16 subdevice_id)34a2328d02SGiuliano Pochini static int init_hw(struct echoaudio *chip, u16 device_id, u16 subdevice_id)
35a2328d02SGiuliano Pochini {
36a2328d02SGiuliano Pochini 	int err;
37a2328d02SGiuliano Pochini 
38a2328d02SGiuliano Pochini 	if (snd_BUG_ON((subdevice_id & 0xfff0) != INDIGO_IOX))
39a2328d02SGiuliano Pochini 		return -ENODEV;
40a2328d02SGiuliano Pochini 
41a2328d02SGiuliano Pochini 	err = init_dsp_comm_page(chip);
42a2328d02SGiuliano Pochini 	if (err < 0) {
43b5b4a41bSSudip Mukherjee 		dev_err(chip->card->dev,
44b5b4a41bSSudip Mukherjee 			"init_hw - could not initialize DSP comm page\n");
45a2328d02SGiuliano Pochini 		return err;
46a2328d02SGiuliano Pochini 	}
47a2328d02SGiuliano Pochini 
48a2328d02SGiuliano Pochini 	chip->device_id = device_id;
49a2328d02SGiuliano Pochini 	chip->subdevice_id = subdevice_id;
503f6175ecSMark Brown 	chip->bad_board = true;
5119b50063SGiuliano Pochini 	chip->dsp_code_to_load = FW_INDIGO_IOX_DSP;
52a2328d02SGiuliano Pochini 	/* Since this card has no ASIC, mark it as loaded so everything
53a2328d02SGiuliano Pochini 	   works OK */
543f6175ecSMark Brown 	chip->asic_loaded = true;
55a2328d02SGiuliano Pochini 	chip->input_clock_types = ECHO_CLOCK_BIT_INTERNAL;
56a2328d02SGiuliano Pochini 
57a2328d02SGiuliano Pochini 	err = load_firmware(chip);
58a2328d02SGiuliano Pochini 	if (err < 0)
59a2328d02SGiuliano Pochini 		return err;
603f6175ecSMark Brown 	chip->bad_board = false;
61a2328d02SGiuliano Pochini 
62a2328d02SGiuliano Pochini 	return err;
63a2328d02SGiuliano Pochini }
64ad3499f4SGiuliano Pochini 
65ad3499f4SGiuliano Pochini 
66ad3499f4SGiuliano Pochini 
set_mixer_defaults(struct echoaudio * chip)67ad3499f4SGiuliano Pochini static int set_mixer_defaults(struct echoaudio *chip)
68ad3499f4SGiuliano Pochini {
69ad3499f4SGiuliano Pochini 	return init_line_levels(chip);
70ad3499f4SGiuliano Pochini }
71