Lines Matching refs: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 if ((i = install_resident_loader(chip)) < 0)
357 if (send_vector(chip, DSP_VC_RESET) < 0) {
358 dev_err(chip->card->dev,
367 if (get_dsp_register(chip, CHI32_STATUS_REG) &
374 dev_err(chip->card->dev,
380 set_dsp_register(chip, CHI32_CONTROL_REG,
381 get_dsp_register(chip, CHI32_CONTROL_REG) | 0x900);
411 if (write_dsp(chip, words) < 0) {
412 dev_err(chip->card->dev,
416 if (write_dsp(chip, address) < 0) {
417 dev_err(chip->card->dev,
421 if (write_dsp(chip, mem_type) < 0) {
422 dev_err(chip->card->dev,
429 if (write_dsp(chip, data) < 0) {
430 dev_err(chip->card->dev,
437 if (write_dsp(chip, 0) < 0) { /* We're done!!! */
438 dev_err(chip->card->dev,
446 if (get_dsp_register(chip, CHI32_STATUS_REG) &
448 set_dsp_register(chip, CHI32_CONTROL_REG,
449 get_dsp_register(chip, CHI32_CONTROL_REG) & ~0x1b00);
451 if (write_dsp(chip, DSP_FNC_SET_COMMPAGE_ADDR) < 0) {
452 dev_err(chip->card->dev,
457 if (write_dsp(chip, chip->comm_page_phys) < 0) {
458 dev_err(chip->card->dev,
467 if (read_sn(chip) < 0) {
468 dev_err(chip->card->dev,
473 chip->dsp_code = code; /* Show which DSP code loaded */
474 chip->bad_board = false; /* DSP OK */
480 dev_err(chip->card->dev,
488 static int load_firmware(struct echoaudio *chip)
493 if (snd_BUG_ON(!chip->comm_page))
497 if (chip->dsp_code) {
498 if ((box_type = check_asic_status(chip)) >= 0)
501 chip->dsp_code = NULL;
504 err = get_firmware(&fw, chip, chip->dsp_code_to_load);
507 err = load_dsp(chip, (u16 *)fw->data);
508 free_firmware(fw, chip);
512 if ((box_type = load_asic(chip)) < 0)
528 static int set_nominal_level(struct echoaudio *chip, u16 index, char consumer)
530 if (snd_BUG_ON(index >= num_busses_out(chip) + num_busses_in(chip)))
534 if (wait_handshake(chip))
537 chip->nominal_level[index] = consumer;
540 chip->comm_page->nominal_level_mask |= cpu_to_le32(1 << index);
542 chip->comm_page->nominal_level_mask &= ~cpu_to_le32(1 << index);
552 static int set_output_gain(struct echoaudio *chip, u16 channel, s8 gain)
554 if (snd_BUG_ON(channel >= num_busses_out(chip)))
557 if (wait_handshake(chip))
561 chip->output_gain[channel] = gain;
562 chip->comm_page->line_out_level[channel] = gain;
570 static int set_monitor_gain(struct echoaudio *chip, u16 output, u16 input,
573 if (snd_BUG_ON(output >= num_busses_out(chip) ||
574 input >= num_busses_in(chip)))
577 if (wait_handshake(chip))
580 chip->monitor_gain[output][input] = gain;
581 chip->comm_page->monitors[monitor_index(chip, output, input)] = gain;
588 static int update_output_line_level(struct echoaudio *chip)
590 if (wait_handshake(chip))
592 clear_handshake(chip);
593 return send_vector(chip, DSP_VC_UPDATE_OUTVOL);
599 static int update_input_line_level(struct echoaudio *chip)
601 if (wait_handshake(chip))
603 clear_handshake(chip);
604 return send_vector(chip, DSP_VC_UPDATE_INGAIN);
611 static void set_meters_on(struct echoaudio *chip, char on)
613 if (on && !chip->meters_enabled) {
614 send_vector(chip, DSP_VC_METERS_ON);
615 chip->meters_enabled = 1;
616 } else if (!on && chip->meters_enabled) {
617 send_vector(chip, DSP_VC_METERS_OFF);
618 chip->meters_enabled = 0;
619 memset((s8 *)chip->comm_page->vu_meter, ECHOGAIN_MUTED,
621 memset((s8 *)chip->comm_page->peak_meter, ECHOGAIN_MUTED,
636 static void get_audio_meters(struct echoaudio *chip, long *meters)
643 for (m = 0, n = 0, i = 0; i < num_busses_out(chip); i++, m++) {
644 meters[n++] = chip->comm_page->vu_meter[m];
645 meters[n++] = chip->comm_page->peak_meter[m];
652 for (n = 32, i = 0; i < num_busses_in(chip); i++, m++) {
653 meters[n++] = chip->comm_page->vu_meter[m];
654 meters[n++] = chip->comm_page->peak_meter[m];
657 for (n = 64, i = 0; i < num_pipes_out(chip); i++, m++) {
658 meters[n++] = chip->comm_page->vu_meter[m];
659 meters[n++] = chip->comm_page->peak_meter[m];
666 static int restore_dsp_rettings(struct echoaudio *chip)
670 if ((err = check_asic_status(chip)) < 0)
674 chip->comm_page->gd_clock_state = GD_CLOCK_UNDEF;
675 chip->comm_page->gd_spdif_status = GD_SPDIF_STATUS_UNDEF;
676 chip->comm_page->handshake = cpu_to_le32(0xffffffff);
679 for (i = 0; i < num_busses_out(chip); i++) {
680 err = set_output_gain(chip, i, chip->output_gain[i]);
686 for (i = 0; i < num_pipes_out(chip); i++)
687 for (o = 0; o < num_busses_out(chip); o++) {
688 err = set_vmixer_gain(chip, o, i,
689 chip->vmixer_gain[o][i]);
693 if (update_vmixer_level(chip) < 0)
698 for (o = 0; o < num_busses_out(chip); o++)
699 for (i = 0; i < num_busses_in(chip); i++) {
700 err = set_monitor_gain(chip, o, i,
701 chip->monitor_gain[o][i]);
708 for (i = 0; i < num_busses_in(chip); i++) {
709 err = set_input_gain(chip, i, chip->input_gain[i]);
715 err = update_output_line_level(chip);
719 err = update_input_line_level(chip);
723 err = set_sample_rate(chip, chip->sample_rate);
727 if (chip->meters_enabled) {
728 err = send_vector(chip, DSP_VC_METERS_ON);
734 if (set_digital_mode(chip, chip->digital_mode) < 0)
739 if (set_professional_spdif(chip, chip->professional_spdif) < 0)
744 if (set_phantom_power(chip, chip->phantom_power) < 0)
750 if (set_input_clock(chip, chip->input_clock) < 0)
755 if (set_output_clock(chip, chip->output_clock) < 0)
759 if (wait_handshake(chip) < 0)
761 clear_handshake(chip);
762 if (send_vector(chip, DSP_VC_UPDATE_FLAGS) < 0)
777 static void set_audio_format(struct echoaudio *chip, u16 pipe_index,
844 dev_dbg(chip->card->dev,
846 chip->comm_page->audio_format[pipe_index] = cpu_to_le16(dsp_format);
855 static int start_transport(struct echoaudio *chip, u32 channel_mask,
859 if (wait_handshake(chip))
862 chip->comm_page->cmd_start |= cpu_to_le32(channel_mask);
864 if (chip->comm_page->cmd_start) {
865 clear_handshake(chip);
866 send_vector(chip, DSP_VC_START_TRANSFER);
867 if (wait_handshake(chip))
870 chip->active_mask |= channel_mask;
871 chip->comm_page->cmd_start = 0;
875 dev_err(chip->card->dev, "start_transport: No pipes to start!\n");
881 static int pause_transport(struct echoaudio *chip, u32 channel_mask)
884 if (wait_handshake(chip))
887 chip->comm_page->cmd_stop |= cpu_to_le32(channel_mask);
888 chip->comm_page->cmd_reset = 0;
889 if (chip->comm_page->cmd_stop) {
890 clear_handshake(chip);
891 send_vector(chip, DSP_VC_STOP_TRANSFER);
892 if (wait_handshake(chip))
895 chip->active_mask &= ~channel_mask;
896 chip->comm_page->cmd_stop = 0;
897 chip->comm_page->cmd_reset = 0;
901 dev_dbg(chip->card->dev, "pause_transport: No pipes to stop!\n");
907 static int stop_transport(struct echoaudio *chip, u32 channel_mask)
910 if (wait_handshake(chip))
913 chip->comm_page->cmd_stop |= cpu_to_le32(channel_mask);
914 chip->comm_page->cmd_reset |= cpu_to_le32(channel_mask);
915 if (chip->comm_page->cmd_reset) {
916 clear_handshake(chip);
917 send_vector(chip, DSP_VC_STOP_TRANSFER);
918 if (wait_handshake(chip))
921 chip->active_mask &= ~channel_mask;
922 chip->comm_page->cmd_stop = 0;
923 chip->comm_page->cmd_reset = 0;
927 dev_dbg(chip->card->dev, "stop_transport: No pipes to stop!\n");
933 static inline int is_pipe_allocated(struct echoaudio *chip, u16 pipe_index)
935 return (chip->pipe_alloc_mask & (1 << pipe_index));
942 static int rest_in_peace(struct echoaudio *chip)
946 stop_transport(chip, chip->active_mask);
948 set_meters_on(chip, false);
951 enable_midi_input(chip, false);
955 if (chip->dsp_code) {
957 chip->dsp_code = NULL;
959 return send_vector(chip, DSP_VC_GO_COMATOSE);
967 static int init_dsp_comm_page(struct echoaudio *chip)
971 dev_err(chip->card->dev,
977 chip->card_name = ECHOCARD_NAME;
978 chip->bad_board = true; /* Set true until DSP loaded */
979 chip->dsp_code = NULL; /* Current DSP code not loaded */
980 chip->asic_loaded = false;
981 memset(chip->comm_page, 0, sizeof(struct comm_page));
984 chip->comm_page->comm_size =
986 chip->comm_page->handshake = cpu_to_le32(0xffffffff);
987 chip->comm_page->midi_out_free_count =
989 chip->comm_page->sample_rate = cpu_to_le32(44100);
992 memset(chip->comm_page->monitors, ECHOGAIN_MUTED, MONITOR_ARRAY_SIZE);
993 memset(chip->comm_page->vmixer, ECHOGAIN_MUTED, VMIXER_ARRAY_SIZE);
1000 /* This function initializes the chip structure with default values, ie. all
1004 static int init_line_levels(struct echoaudio *chip)
1006 memset(chip->output_gain, ECHOGAIN_MUTED, sizeof(chip->output_gain));
1007 memset(chip->input_gain, ECHOGAIN_MUTED, sizeof(chip->input_gain));
1008 memset(chip->monitor_gain, ECHOGAIN_MUTED, sizeof(chip->monitor_gain));
1009 memset(chip->vmixer_gain, ECHOGAIN_MUTED, sizeof(chip->vmixer_gain));
1010 chip->input_clock = ECHO_CLOCK_INTERNAL;
1011 chip->output_clock = ECHO_CLOCK_WORD;
1012 chip->sample_rate = 44100;
1013 return restore_dsp_rettings(chip);
1021 static int service_irq(struct echoaudio *chip)
1026 if (get_dsp_register(chip, CHI32_STATUS_REG) & CHI32_STATUS_IRQ) {
1030 if (chip->comm_page->midi_input[0]) /* The count is at index 0 */
1031 st = midi_service_irq(chip); /* Returns how many midi bytes we received */
1034 chip->comm_page->midi_input[0] = 0;
1035 send_vector(chip, DSP_VC_ACK_INT);
1050 static int allocate_pipes(struct echoaudio *chip, struct audiopipe *pipe,
1056 dev_dbg(chip->card->dev,
1059 if (chip->bad_board)
1064 if (chip->pipe_alloc_mask & channel_mask) {
1065 dev_err(chip->card->dev,
1070 chip->comm_page->position[pipe_index] = 0;
1071 chip->pipe_alloc_mask |= channel_mask;
1073 chip->pipe_cyclic_mask |= channel_mask;
1081 pipe->dma_counter = (__le32 *)&chip->comm_page->position[pipe_index];
1088 static int free_pipes(struct echoaudio *chip, struct audiopipe *pipe)
1093 if (snd_BUG_ON(!is_pipe_allocated(chip, pipe->index)))
1101 chip->pipe_alloc_mask &= ~channel_mask;
1102 chip->pipe_cyclic_mask &= ~channel_mask;
1112 static int sglist_init(struct echoaudio *chip, struct audiopipe *pipe)
1116 chip->comm_page->sglist_addr[pipe->index].addr =
1123 static int sglist_add_mapping(struct echoaudio *chip, struct audiopipe *pipe,
1134 dev_err(chip->card->dev, "SGlist: too many fragments\n");
1142 static inline int sglist_add_irq(struct echoaudio *chip, struct audiopipe *pipe)
1144 return sglist_add_mapping(chip, pipe, 0, 0);
1149 static inline int sglist_wrap(struct echoaudio *chip, struct audiopipe *pipe)
1151 return sglist_add_mapping(chip, pipe, pipe->sgpage.addr, 0);