if (snd_BUG_ON((subdevice_id & 0xfff0) != GINA20)) return -ENODEV;
err = init_dsp_comm_page(chip); if (err) {
dev_err(chip->card->dev, "init_hw - could not initialize DSP comm page\n"); return err;
}
chip->device_id = device_id;
chip->subdevice_id = subdevice_id;
chip->bad_board = true;
chip->dsp_code_to_load = FW_GINA20_DSP;
chip->spdif_status = GD_SPDIF_STATUS_UNDEF;
chip->clock_state = GD_CLOCK_UNDEF; /* Since this card has no ASIC, mark it as loaded so everything
works OK */
chip->asic_loaded = true;
chip->input_clock_types = ECHO_CLOCK_BIT_INTERNAL |
ECHO_CLOCK_BIT_SPDIF;
if (chip->clock_state == clock_state)
clock_state = GD_CLOCK_NOCHANGE; if (spdif_status == chip->spdif_status)
spdif_status = GD_SPDIF_STATUS_NOCHANGE;
chip->comm_page->sample_rate = cpu_to_le32(rate);
chip->comm_page->gd_clock_state = clock_state;
chip->comm_page->gd_spdif_status = spdif_status;
chip->comm_page->gd_resampler_state = 3; /* magic number - should always be 3 */
/* Save the new audio state if it changed */ if (clock_state != GD_CLOCK_NOCHANGE)
chip->clock_state = clock_state; if (spdif_status != GD_SPDIF_STATUS_NOCHANGE)
chip->spdif_status = spdif_status;
chip->sample_rate = rate;
switch (clock) { case ECHO_CLOCK_INTERNAL: /* Reset the audio state to unknown (just in case) */
chip->clock_state = GD_CLOCK_UNDEF;
chip->spdif_status = GD_SPDIF_STATUS_UNDEF;
set_sample_rate(chip, chip->sample_rate);
chip->input_clock = clock; break; case ECHO_CLOCK_SPDIF:
chip->comm_page->gd_clock_state = GD_CLOCK_SPDIFIN;
chip->comm_page->gd_spdif_status = GD_SPDIF_STATUS_NOCHANGE;
clear_handshake(chip);
send_vector(chip, DSP_VC_SET_GD_AUDIO_STATE);
chip->clock_state = GD_CLOCK_SPDIFIN;
chip->input_clock = clock; break; default: return -EINVAL;
}
return0;
}
/* Set input bus gain (one unit is 0.5dB !) */ staticint set_input_gain(struct echoaudio *chip, u16 input, int gain)
{ if (snd_BUG_ON(input >= num_busses_in(chip))) return -EINVAL;
/* Tell the DSP to reread the flags from the comm page */ staticint update_flags(struct echoaudio *chip)
{ if (wait_handshake(chip)) return -EIO;
clear_handshake(chip); return send_vector(chip, DSP_VC_UPDATE_FLAGS);
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.