Lines Matching defs:chip
35 static int restore_dsp_rettings(struct echoaudio *chip);
42 static int wait_handshake(struct echoaudio *chip)
50 if (chip->comm_page->handshake) {
56 dev_err(chip->card->dev, "wait_handshake(): Timeout waiting for DSP\n");
66 static int send_vector(struct echoaudio *chip, u32 command)
74 if (!(get_dsp_register(chip, CHI32_VECTOR_REG) &
76 set_dsp_register(chip, CHI32_VECTOR_REG, command);
83 dev_err(chip->card->dev, "timeout on send_vector\n");
91 static int write_dsp(struct echoaudio *chip, u32 data)
96 status = get_dsp_register(chip, CHI32_STATUS_REG);
98 set_dsp_register(chip, CHI32_DATA_REG, data);
106 chip->bad_board = true; /* Set true until DSP re-loaded */
107 dev_dbg(chip->card->dev, "write_dsp: Set bad_board to true\n");
115 static int read_dsp(struct echoaudio *chip, u32 *data)
120 status = get_dsp_register(chip, CHI32_STATUS_REG);
122 *data = get_dsp_register(chip, CHI32_DATA_REG);
129 chip->bad_board = true; /* Set true until DSP re-loaded */
130 dev_err(chip->card->dev, "read_dsp: Set bad_board to true\n");
145 static int read_sn(struct echoaudio *chip)
151 if (read_dsp(chip, &sn[i])) {
152 dev_err(chip->card->dev,
157 dev_dbg(chip->card->dev,
167 static inline int check_asic_status(struct echoaudio *chip)
169 chip->asic_loaded = true;
180 static int load_asic_generic(struct echoaudio *chip, u32 cmd, short asic)
187 err = get_firmware(&fw, chip, asic);
189 dev_warn(chip->card->dev, "Firmware not found !\n");
197 if (write_dsp(chip, cmd) < 0)
201 if (write_dsp(chip, size) < 0)
205 if (write_dsp(chip, code[i]) < 0)
209 free_firmware(fw, chip);
213 dev_err(chip->card->dev, "failed on write_dsp\n");
214 free_firmware(fw, chip);
227 static int install_resident_loader(struct echoaudio *chip)
237 if (chip->device_id != DEVICE_ID_56361)
242 status = get_dsp_register(chip, CHI32_STATUS_REG);
244 dev_dbg(chip->card->dev,
250 i = get_firmware(&fw, chip, FW_361_LOADER);
252 dev_warn(chip->card->dev, "Firmware not found !\n");
265 set_dsp_register(chip, CHI32_CONTROL_REG,
266 get_dsp_register(chip, CHI32_CONTROL_REG) | 0x900);
286 if (write_dsp(chip, words)) {
287 dev_err(chip->card->dev,
292 if (write_dsp(chip, address)) {
293 dev_err(chip->card->dev,
302 if (write_dsp(chip, data)) {
303 dev_err(chip->card->dev,
313 status = get_dsp_register(chip, CHI32_STATUS_REG);
319 dev_err(chip->card->dev, "Resident loader failed to set HF5\n");
323 dev_dbg(chip->card->dev, "Resident loader successfully installed\n");
324 free_firmware(fw, chip);
328 free_firmware(fw, chip);
335 static int load_dsp(struct echoaudio *chip, u16 *code)
340 if (chip->dsp_code == code) {
341 dev_warn(chip->card->dev, "DSP is already loaded!\n");
344 chip->bad_board = true; /* Set true until DSP loaded */
345 chip->dsp_code = NULL; /* Current DSP code not loaded */
346 chip->asic_loaded = false; /* Loading the DSP code will reset the ASIC */
348 dev_dbg(chip->card->dev, "load_dsp: Set bad_board to true\n");
352 i = install_resident_loader(chip);
358 if (send_vector(chip, DSP_VC_RESET) < 0) {
359 dev_err(chip->card->dev,
368 if (get_dsp_register(chip, CHI32_STATUS_REG) &
375 dev_err(chip->card->dev,
381 set_dsp_register(chip, CHI32_CONTROL_REG,
382 get_dsp_register(chip, CHI32_CONTROL_REG) | 0x900);
412 if (write_dsp(chip, words) < 0) {
413 dev_err(chip->card->dev,
417 if (write_dsp(chip, address) < 0) {
418 dev_err(chip->card->dev,
422 if (write_dsp(chip, mem_type) < 0) {
423 dev_err(chip->card->dev,
430 if (write_dsp(chip, data) < 0) {
431 dev_err(chip->card->dev,
438 if (write_dsp(chip, 0) < 0) { /* We're done!!! */
439 dev_err(chip->card->dev,
447 if (get_dsp_register(chip, CHI32_STATUS_REG) &
449 set_dsp_register(chip, CHI32_CONTROL_REG,
450 get_dsp_register(chip, CHI32_CONTROL_REG) & ~0x1b00);
452 if (write_dsp(chip, DSP_FNC_SET_COMMPAGE_ADDR) < 0) {
453 dev_err(chip->card->dev,
458 if (write_dsp(chip, chip->comm_page_phys) < 0) {
459 dev_err(chip->card->dev,
468 if (read_sn(chip) < 0) {
469 dev_err(chip->card->dev,
474 chip->dsp_code = code; /* Show which DSP code loaded */
475 chip->bad_board = false; /* DSP OK */
481 dev_err(chip->card->dev,
489 static int load_firmware(struct echoaudio *chip)
494 if (snd_BUG_ON(!chip->comm_page))
498 if (chip->dsp_code) {
499 box_type = check_asic_status(chip);
503 chip->dsp_code = NULL;
506 err = get_firmware(&fw, chip, chip->dsp_code_to_load);
509 err = load_dsp(chip, (u16 *)fw->data);
510 free_firmware(fw, chip);
514 box_type = load_asic(chip);
531 static int set_nominal_level(struct echoaudio *chip, u16 index, char consumer)
533 if (snd_BUG_ON(index >= num_busses_out(chip) + num_busses_in(chip)))
537 if (wait_handshake(chip))
540 chip->nominal_level[index] = consumer;
543 chip->comm_page->nominal_level_mask |= cpu_to_le32(1 << index);
545 chip->comm_page->nominal_level_mask &= ~cpu_to_le32(1 << index);
555 static int set_output_gain(struct echoaudio *chip, u16 channel, s8 gain)
557 if (snd_BUG_ON(channel >= num_busses_out(chip)))
560 if (wait_handshake(chip))
564 chip->output_gain[channel] = gain;
565 chip->comm_page->line_out_level[channel] = gain;
573 static int set_monitor_gain(struct echoaudio *chip, u16 output, u16 input,
576 if (snd_BUG_ON(output >= num_busses_out(chip) ||
577 input >= num_busses_in(chip)))
580 if (wait_handshake(chip))
583 chip->monitor_gain[output][input] = gain;
584 chip->comm_page->monitors[monitor_index(chip, output, input)] = gain;
591 static int update_output_line_level(struct echoaudio *chip)
593 if (wait_handshake(chip))
595 clear_handshake(chip);
596 return send_vector(chip, DSP_VC_UPDATE_OUTVOL);
602 static int update_input_line_level(struct echoaudio *chip)
604 if (wait_handshake(chip))
606 clear_handshake(chip);
607 return send_vector(chip, DSP_VC_UPDATE_INGAIN);
614 static void set_meters_on(struct echoaudio *chip, char on)
616 if (on && !chip->meters_enabled) {
617 send_vector(chip, DSP_VC_METERS_ON);
618 chip->meters_enabled = 1;
619 } else if (!on && chip->meters_enabled) {
620 send_vector(chip, DSP_VC_METERS_OFF);
621 chip->meters_enabled = 0;
622 memset((s8 *)chip->comm_page->vu_meter, ECHOGAIN_MUTED,
624 memset((s8 *)chip->comm_page->peak_meter, ECHOGAIN_MUTED,
639 static void get_audio_meters(struct echoaudio *chip, long *meters)
646 for (m = 0, n = 0, i = 0; i < num_busses_out(chip); i++, m++) {
647 meters[n++] = chip->comm_page->vu_meter[m];
648 meters[n++] = chip->comm_page->peak_meter[m];
655 for (n = 32, i = 0; i < num_busses_in(chip); i++, m++) {
656 meters[n++] = chip->comm_page->vu_meter[m];
657 meters[n++] = chip->comm_page->peak_meter[m];
660 for (n = 64, i = 0; i < num_pipes_out(chip); i++, m++) {
661 meters[n++] = chip->comm_page->vu_meter[m];
662 meters[n++] = chip->comm_page->peak_meter[m];
669 static int restore_dsp_rettings(struct echoaudio *chip)
673 err = check_asic_status(chip);
678 chip->comm_page->gd_clock_state = GD_CLOCK_UNDEF;
679 chip->comm_page->gd_spdif_status = GD_SPDIF_STATUS_UNDEF;
680 chip->comm_page->handshake = cpu_to_le32(0xffffffff);
683 for (i = 0; i < num_busses_out(chip); i++) {
684 err = set_output_gain(chip, i, chip->output_gain[i]);
690 for (i = 0; i < num_pipes_out(chip); i++)
691 for (o = 0; o < num_busses_out(chip); o++) {
692 err = set_vmixer_gain(chip, o, i,
693 chip->vmixer_gain[o][i]);
697 if (update_vmixer_level(chip) < 0)
702 for (o = 0; o < num_busses_out(chip); o++)
703 for (i = 0; i < num_busses_in(chip); i++) {
704 err = set_monitor_gain(chip, o, i,
705 chip->monitor_gain[o][i]);
712 for (i = 0; i < num_busses_in(chip); i++) {
713 err = set_input_gain(chip, i, chip->input_gain[i]);
719 err = update_output_line_level(chip);
723 err = update_input_line_level(chip);
727 err = set_sample_rate(chip, chip->sample_rate);
731 if (chip->meters_enabled) {
732 err = send_vector(chip, DSP_VC_METERS_ON);
738 if (set_digital_mode(chip, chip->digital_mode) < 0)
743 if (set_professional_spdif(chip, chip->professional_spdif) < 0)
748 if (set_phantom_power(chip, chip->phantom_power) < 0)
754 if (set_input_clock(chip, chip->input_clock) < 0)
759 if (set_output_clock(chip, chip->output_clock) < 0)
763 if (wait_handshake(chip) < 0)
765 clear_handshake(chip);
766 if (send_vector(chip, DSP_VC_UPDATE_FLAGS) < 0)
781 static void set_audio_format(struct echoaudio *chip, u16 pipe_index,
848 dev_dbg(chip->card->dev,
850 chip->comm_page->audio_format[pipe_index] = cpu_to_le16(dsp_format);
859 static int start_transport(struct echoaudio *chip, u32 channel_mask,
863 if (wait_handshake(chip))
866 chip->comm_page->cmd_start |= cpu_to_le32(channel_mask);
868 if (chip->comm_page->cmd_start) {
869 clear_handshake(chip);
870 send_vector(chip, DSP_VC_START_TRANSFER);
871 if (wait_handshake(chip))
874 chip->active_mask |= channel_mask;
875 chip->comm_page->cmd_start = 0;
879 dev_err(chip->card->dev, "start_transport: No pipes to start!\n");
885 static int pause_transport(struct echoaudio *chip, u32 channel_mask)
888 if (wait_handshake(chip))
891 chip->comm_page->cmd_stop |= cpu_to_le32(channel_mask);
892 chip->comm_page->cmd_reset = 0;
893 if (chip->comm_page->cmd_stop) {
894 clear_handshake(chip);
895 send_vector(chip, DSP_VC_STOP_TRANSFER);
896 if (wait_handshake(chip))
899 chip->active_mask &= ~channel_mask;
900 chip->comm_page->cmd_stop = 0;
901 chip->comm_page->cmd_reset = 0;
905 dev_dbg(chip->card->dev, "pause_transport: No pipes to stop!\n");
911 static int stop_transport(struct echoaudio *chip, u32 channel_mask)
914 if (wait_handshake(chip))
917 chip->comm_page->cmd_stop |= cpu_to_le32(channel_mask);
918 chip->comm_page->cmd_reset |= cpu_to_le32(channel_mask);
919 if (chip->comm_page->cmd_reset) {
920 clear_handshake(chip);
921 send_vector(chip, DSP_VC_STOP_TRANSFER);
922 if (wait_handshake(chip))
925 chip->active_mask &= ~channel_mask;
926 chip->comm_page->cmd_stop = 0;
927 chip->comm_page->cmd_reset = 0;
931 dev_dbg(chip->card->dev, "stop_transport: No pipes to stop!\n");
937 static inline int is_pipe_allocated(struct echoaudio *chip, u16 pipe_index)
939 return (chip->pipe_alloc_mask & (1 << pipe_index));
946 static int rest_in_peace(struct echoaudio *chip)
950 stop_transport(chip, chip->active_mask);
952 set_meters_on(chip, false);
955 enable_midi_input(chip, false);
959 if (chip->dsp_code) {
961 chip->dsp_code = NULL;
963 return send_vector(chip, DSP_VC_GO_COMATOSE);
971 static int init_dsp_comm_page(struct echoaudio *chip)
975 dev_err(chip->card->dev,
981 chip->card_name = ECHOCARD_NAME;
982 chip->bad_board = true; /* Set true until DSP loaded */
983 chip->dsp_code = NULL; /* Current DSP code not loaded */
984 chip->asic_loaded = false;
985 memset(chip->comm_page, 0, sizeof(struct comm_page));
988 chip->comm_page->comm_size =
990 chip->comm_page->handshake = cpu_to_le32(0xffffffff);
991 chip->comm_page->midi_out_free_count =
993 chip->comm_page->sample_rate = cpu_to_le32(44100);
996 memset(chip->comm_page->monitors, ECHOGAIN_MUTED, MONITOR_ARRAY_SIZE);
997 memset(chip->comm_page->vmixer, ECHOGAIN_MUTED, VMIXER_ARRAY_SIZE);
1004 /* This function initializes the chip structure with default values, ie. all
1008 static int init_line_levels(struct echoaudio *chip)
1010 memset(chip->output_gain, ECHOGAIN_MUTED, sizeof(chip->output_gain));
1011 memset(chip->input_gain, ECHOGAIN_MUTED, sizeof(chip->input_gain));
1012 memset(chip->monitor_gain, ECHOGAIN_MUTED, sizeof(chip->monitor_gain));
1013 memset(chip->vmixer_gain, ECHOGAIN_MUTED, sizeof(chip->vmixer_gain));
1014 chip->input_clock = ECHO_CLOCK_INTERNAL;
1015 chip->output_clock = ECHO_CLOCK_WORD;
1016 chip->sample_rate = 44100;
1017 return restore_dsp_rettings(chip);
1025 static int service_irq(struct echoaudio *chip)
1030 if (get_dsp_register(chip, CHI32_STATUS_REG) & CHI32_STATUS_IRQ) {
1034 if (chip->comm_page->midi_input[0]) /* The count is at index 0 */
1035 st = midi_service_irq(chip); /* Returns how many midi bytes we received */
1038 chip->comm_page->midi_input[0] = 0;
1039 send_vector(chip, DSP_VC_ACK_INT);
1054 static int allocate_pipes(struct echoaudio *chip, struct audiopipe *pipe,
1060 dev_dbg(chip->card->dev,
1063 if (chip->bad_board)
1068 if (chip->pipe_alloc_mask & channel_mask) {
1069 dev_err(chip->card->dev,
1074 chip->comm_page->position[pipe_index] = 0;
1075 chip->pipe_alloc_mask |= channel_mask;
1077 chip->pipe_cyclic_mask |= channel_mask;
1085 pipe->dma_counter = (__le32 *)&chip->comm_page->position[pipe_index];
1092 static int free_pipes(struct echoaudio *chip, struct audiopipe *pipe)
1097 if (snd_BUG_ON(!is_pipe_allocated(chip, pipe->index)))
1105 chip->pipe_alloc_mask &= ~channel_mask;
1106 chip->pipe_cyclic_mask &= ~channel_mask;
1116 static int sglist_init(struct echoaudio *chip, struct audiopipe *pipe)
1120 chip->comm_page->sglist_addr[pipe->index].addr =
1127 static int sglist_add_mapping(struct echoaudio *chip, struct audiopipe *pipe,
1138 dev_err(chip->card->dev, "SGlist: too many fragments\n");
1146 static inline int sglist_add_irq(struct echoaudio *chip, struct audiopipe *pipe)
1148 return sglist_add_mapping(chip, pipe, 0, 0);
1153 static inline int sglist_wrap(struct echoaudio *chip, struct audiopipe *pipe)
1155 return sglist_add_mapping(chip, pipe, pipe->sgpage.addr, 0);