This source file includes following definitions.
- init_hw
- set_mixer_defaults
- detect_input_clocks
- load_asic
- set_sample_rate
- set_vmixer_gain
- update_vmixer_level
   1 
   2 
   3 
   4 
   5 
   6 
   7 
   8 
   9 
  10 
  11 
  12 
  13 
  14 
  15 
  16 
  17 
  18 
  19 
  20 
  21 
  22 
  23 
  24 
  25 
  26 
  27 
  28 
  29 
  30 
  31 
  32 static int set_vmixer_gain(struct echoaudio *chip, u16 output, u16 pipe,
  33                            int gain);
  34 static int update_vmixer_level(struct echoaudio *chip);
  35 
  36 
  37 static int init_hw(struct echoaudio *chip, u16 device_id, u16 subdevice_id)
  38 {
  39         int err;
  40 
  41         if (snd_BUG_ON((subdevice_id & 0xfff0) != INDIGO_DJ))
  42                 return -ENODEV;
  43 
  44         if ((err = init_dsp_comm_page(chip))) {
  45                 dev_err(chip->card->dev,
  46                         "init_hw - could not initialize DSP comm page\n");
  47                 return err;
  48         }
  49 
  50         chip->device_id = device_id;
  51         chip->subdevice_id = subdevice_id;
  52         chip->bad_board = true;
  53         chip->dsp_code_to_load = FW_INDIGO_DJ_DSP;
  54         
  55 
  56         chip->asic_loaded = true;
  57         chip->input_clock_types = ECHO_CLOCK_BIT_INTERNAL;
  58 
  59         if ((err = load_firmware(chip)) < 0)
  60                 return err;
  61         chip->bad_board = false;
  62 
  63         return err;
  64 }
  65 
  66 
  67 
  68 static int set_mixer_defaults(struct echoaudio *chip)
  69 {
  70         return init_line_levels(chip);
  71 }
  72 
  73 
  74 
  75 static u32 detect_input_clocks(const struct echoaudio *chip)
  76 {
  77         return ECHO_CLOCK_BIT_INTERNAL;
  78 }
  79 
  80 
  81 
  82 
  83 static int load_asic(struct echoaudio *chip)
  84 {
  85         return 0;
  86 }
  87 
  88 
  89 
  90 static int set_sample_rate(struct echoaudio *chip, u32 rate)
  91 {
  92         u32 control_reg;
  93 
  94         switch (rate) {
  95         case 96000:
  96                 control_reg = MIA_96000;
  97                 break;
  98         case 88200:
  99                 control_reg = MIA_88200;
 100                 break;
 101         case 48000:
 102                 control_reg = MIA_48000;
 103                 break;
 104         case 44100:
 105                 control_reg = MIA_44100;
 106                 break;
 107         case 32000:
 108                 control_reg = MIA_32000;
 109                 break;
 110         default:
 111                 dev_err(chip->card->dev,
 112                         "set_sample_rate: %d invalid!\n", rate);
 113                 return -EINVAL;
 114         }
 115 
 116         
 117         if (control_reg != le32_to_cpu(chip->comm_page->control_register)) {
 118                 if (wait_handshake(chip))
 119                         return -EIO;
 120 
 121                 chip->comm_page->sample_rate = cpu_to_le32(rate);       
 122                 chip->comm_page->control_register = cpu_to_le32(control_reg);
 123                 chip->sample_rate = rate;
 124 
 125                 clear_handshake(chip);
 126                 return send_vector(chip, DSP_VC_UPDATE_CLOCKS);
 127         }
 128         return 0;
 129 }
 130 
 131 
 132 
 133 
 134 static int set_vmixer_gain(struct echoaudio *chip, u16 output, u16 pipe,
 135                            int gain)
 136 {
 137         int index;
 138 
 139         if (snd_BUG_ON(pipe >= num_pipes_out(chip) ||
 140                        output >= num_busses_out(chip)))
 141                 return -EINVAL;
 142 
 143         if (wait_handshake(chip))
 144                 return -EIO;
 145 
 146         chip->vmixer_gain[output][pipe] = gain;
 147         index = output * num_pipes_out(chip) + pipe;
 148         chip->comm_page->vmixer[index] = gain;
 149 
 150         dev_dbg(chip->card->dev,
 151                 "set_vmixer_gain: pipe %d, out %d = %d\n", pipe, output, gain);
 152         return 0;
 153 }
 154 
 155 
 156 
 157 
 158 static int update_vmixer_level(struct echoaudio *chip)
 159 {
 160         if (wait_handshake(chip))
 161                 return -EIO;
 162         clear_handshake(chip);
 163         return send_vector(chip, DSP_VC_SET_VMIXER_GAIN);
 164 }
 165