Lines Matching refs:chip
94 static int lx_set_granularity(struct lx6464es *chip, u32 gran);
97 static int lx_hardware_open(struct lx6464es *chip,
107 dev_dbg(chip->card->dev, "allocating pipe for %d channels\n", channels);
108 err = lx_pipe_allocate(chip, 0, is_capture, channels);
110 dev_err(chip->card->dev, LXP "allocating pipe failed\n");
114 err = lx_set_granularity(chip, period_size);
116 dev_err(chip->card->dev, "setting granularity to %ld failed\n",
124 static int lx_hardware_start(struct lx6464es *chip,
131 dev_dbg(chip->card->dev, "setting stream format\n");
132 err = lx_stream_set_format(chip, runtime, 0, is_capture);
134 dev_err(chip->card->dev, "setting stream format failed\n");
138 dev_dbg(chip->card->dev, "starting pipe\n");
139 err = lx_pipe_start(chip, 0, is_capture);
141 dev_err(chip->card->dev, "starting pipe failed\n");
145 dev_dbg(chip->card->dev, "waiting for pipe to start\n");
146 err = lx_pipe_wait_for_start(chip, 0, is_capture);
148 dev_err(chip->card->dev, "waiting for pipe failed\n");
156 static int lx_hardware_stop(struct lx6464es *chip,
162 dev_dbg(chip->card->dev, "pausing pipe\n");
163 err = lx_pipe_pause(chip, 0, is_capture);
165 dev_err(chip->card->dev, "pausing pipe failed\n");
169 dev_dbg(chip->card->dev, "waiting for pipe to become idle\n");
170 err = lx_pipe_wait_for_idle(chip, 0, is_capture);
172 dev_err(chip->card->dev, "waiting for pipe failed\n");
176 dev_dbg(chip->card->dev, "stopping pipe\n");
177 err = lx_pipe_stop(chip, 0, is_capture);
179 dev_err(chip->card->dev, "stopping pipe failed\n");
187 static int lx_hardware_close(struct lx6464es *chip,
193 dev_dbg(chip->card->dev, "releasing pipe\n");
194 err = lx_pipe_release(chip, 0, is_capture);
196 dev_err(chip->card->dev, "releasing pipe failed\n");
206 struct lx6464es *chip = snd_pcm_substream_chip(substream);
211 dev_dbg(chip->card->dev, "->lx_pcm_open\n");
212 mutex_lock(&chip->setup_mutex);
222 dev_warn(chip->card->dev, "could not constrain periods\n");
228 board_rate = chip->board_sample_rate;
233 dev_warn(chip->card->dev, "could not constrain periods\n");
243 dev_warn(chip->card->dev,
255 runtime->private_data = chip;
257 mutex_unlock(&chip->setup_mutex);
258 dev_dbg(chip->card->dev, "<-lx_pcm_open, %d\n", err);
271 struct lx6464es *chip = snd_pcm_substream_chip(substream);
275 struct lx_stream *lx_stream = is_capture ? &chip->capture_stream :
276 &chip->playback_stream;
278 dev_dbg(chip->card->dev, "->lx_pcm_stream_pointer\n");
280 mutex_lock(&chip->lock);
282 mutex_unlock(&chip->lock);
284 dev_dbg(chip->card->dev, "stream_pointer at %ld\n", pos);
290 struct lx6464es *chip = snd_pcm_substream_chip(substream);
294 dev_dbg(chip->card->dev, "->lx_pcm_prepare\n");
296 mutex_lock(&chip->setup_mutex);
298 if (chip->hardware_running[is_capture]) {
299 err = lx_hardware_stop(chip, substream);
301 dev_err(chip->card->dev, "failed to stop hardware. "
306 err = lx_hardware_close(chip, substream);
308 dev_err(chip->card->dev, "failed to close hardware. "
314 dev_dbg(chip->card->dev, "opening hardware\n");
315 err = lx_hardware_open(chip, substream);
317 dev_err(chip->card->dev, "failed to open hardware. "
322 err = lx_hardware_start(chip, substream);
324 dev_err(chip->card->dev, "failed to start hardware. "
329 chip->hardware_running[is_capture] = 1;
331 if (chip->board_sample_rate != substream->runtime->rate) {
333 chip->board_sample_rate = substream->runtime->rate;
337 mutex_unlock(&chip->setup_mutex);
344 struct lx6464es *chip = snd_pcm_substream_chip(substream);
346 dev_dbg(chip->card->dev, "->lx_pcm_hw_params\n");
348 mutex_lock(&chip->setup_mutex);
351 chip->capture_stream.stream = substream;
353 chip->playback_stream.stream = substream;
355 mutex_unlock(&chip->setup_mutex);
373 struct lx6464es *chip = snd_pcm_substream_chip(substream);
377 dev_dbg(chip->card->dev, "->lx_pcm_hw_free\n");
378 mutex_lock(&chip->setup_mutex);
380 if (chip->hardware_running[is_capture]) {
381 err = lx_hardware_stop(chip, substream);
383 dev_err(chip->card->dev, "failed to stop hardware. "
388 err = lx_hardware_close(chip, substream);
390 dev_err(chip->card->dev, "failed to close hardware. "
395 chip->hardware_running[is_capture] = 0;
399 chip->capture_stream.stream = NULL;
401 chip->playback_stream.stream = NULL;
404 mutex_unlock(&chip->setup_mutex);
408 static void lx_trigger_start(struct lx6464es *chip, struct lx_stream *lx_stream)
430 err = lx_buffer_ask(chip, 0, is_capture, &needed, &freed,
432 dev_dbg(chip->card->dev, "starting: needed %d, freed %d\n",
435 err = lx_buffer_give(chip, 0, is_capture, period_bytes,
439 dev_dbg(chip->card->dev, "starting: buffer index %x on 0x%lx (%d bytes)\n",
444 err = lx_buffer_ask(chip, 0, is_capture, &needed, &freed, size_array);
445 dev_dbg(chip->card->dev, "starting: needed %d, freed %d\n", needed, freed);
447 dev_dbg(chip->card->dev, "starting: starting stream\n");
448 err = lx_stream_start(chip, 0, is_capture);
450 dev_err(chip->card->dev, "couldn't start stream\n");
457 static void lx_trigger_stop(struct lx6464es *chip, struct lx_stream *lx_stream)
462 dev_dbg(chip->card->dev, "stopping: stopping stream\n");
463 err = lx_stream_stop(chip, 0, is_capture);
465 dev_err(chip->card->dev, "couldn't stop stream\n");
471 static void lx_trigger_dispatch_stream(struct lx6464es *chip,
476 lx_trigger_start(chip, lx_stream);
480 lx_trigger_stop(chip, lx_stream);
488 static int lx_pcm_trigger_dispatch(struct lx6464es *chip,
493 mutex_lock(&chip->lock);
508 lx_trigger_dispatch_stream(chip, &chip->capture_stream);
509 lx_trigger_dispatch_stream(chip, &chip->playback_stream);
512 mutex_unlock(&chip->lock);
519 struct lx6464es *chip = snd_pcm_substream_chip(substream);
521 struct lx_stream *stream = is_capture ? &chip->capture_stream :
522 &chip->playback_stream;
524 dev_dbg(chip->card->dev, "->lx_pcm_trigger\n");
526 return lx_pcm_trigger_dispatch(chip, stream, cmd);
529 static int snd_lx6464es_free(struct lx6464es *chip)
531 dev_dbg(chip->card->dev, "->snd_lx6464es_free\n");
533 lx_irq_disable(chip);
535 if (chip->irq >= 0)
536 free_irq(chip->irq, chip);
538 iounmap(chip->port_dsp_bar);
539 ioport_unmap(chip->port_plx_remapped);
541 pci_release_regions(chip->pci);
542 pci_disable_device(chip->pci);
544 kfree(chip);
555 static int lx_init_xilinx_reset(struct lx6464es *chip)
558 u32 plx_reg = lx_plx_reg_read(chip, ePLX_CHIPSC);
560 dev_dbg(chip->card->dev, "->lx_init_xilinx_reset\n");
565 lx_plx_reg_write(chip, ePLX_CHIPSC, plx_reg);
568 lx_plx_reg_write(chip, ePLX_MBOX3, 0);
572 lx_plx_reg_write(chip, ePLX_CHIPSC, plx_reg);
578 reg_mbox3 = lx_plx_reg_read(chip, ePLX_MBOX3);
580 dev_dbg(chip->card->dev, "xilinx reset done\n");
581 dev_dbg(chip->card->dev, "xilinx took %d loops\n", i);
589 lx_dsp_reg_write(chip, eReg_CSM, 0);
597 static int lx_init_xilinx_test(struct lx6464es *chip)
601 dev_dbg(chip->card->dev, "->lx_init_xilinx_test\n");
604 lx_dsp_reg_write(chip, eReg_CSM, 0);
606 reg = lx_dsp_reg_read(chip, eReg_CSM);
609 dev_err(chip->card->dev, "Problem: Reg_CSM %x.\n", reg);
612 lx_plx_reg_write(chip, ePLX_PCICR, 1);
614 reg = lx_dsp_reg_read(chip, eReg_CSM);
616 dev_err(chip->card->dev, "Error: Reg_CSM %x.\n", reg);
621 dev_dbg(chip->card->dev, "Xilinx/MicroBlaze access test successful\n");
627 static int lx_init_ethersound_config(struct lx6464es *chip)
630 u32 orig_conf_es = lx_dsp_reg_read(chip, eReg_CONFES);
638 dev_dbg(chip->card->dev, "->lx_init_ethersound\n");
640 chip->freq_ratio = FREQ_RATIO_SINGLE_MODE;
648 lx_dsp_reg_write(chip, eReg_CONFES, conf_es);
651 if (lx_dsp_reg_read(chip, eReg_CSES) & 4) {
652 dev_dbg(chip->card->dev, "ethersound initialized after %dms\n",
658 dev_warn(chip->card->dev,
663 dev_dbg(chip->card->dev, "ethersound initialized\n");
667 static int lx_init_get_version_features(struct lx6464es *chip)
673 dev_dbg(chip->card->dev, "->lx_init_get_version_features\n");
675 err = lx_dsp_get_version(chip, &dsp_version);
680 dev_info(chip->card->dev, "DSP version: V%02d.%02d #%d\n",
692 err = lx_dsp_get_clock_frequency(chip, &freq);
694 chip->board_sample_rate = freq;
695 dev_dbg(chip->card->dev, "actual clock frequency %d\n", freq);
697 dev_err(chip->card->dev, "DSP corrupted \n");
704 static int lx_set_granularity(struct lx6464es *chip, u32 gran)
709 dev_dbg(chip->card->dev, "->lx_set_granularity\n");
717 if (snapped_gran == chip->pcm_granularity)
720 err = lx_dsp_set_granularity(chip, snapped_gran);
722 dev_warn(chip->card->dev, "could not set granularity\n");
727 dev_err(chip->card->dev, "snapped blocksize to %d\n", snapped_gran);
729 dev_dbg(chip->card->dev, "set blocksize on board %d\n", snapped_gran);
730 chip->pcm_granularity = snapped_gran;
735 /* initialize and test the xilinx dsp chip */
736 static int lx_init_dsp(struct lx6464es *chip)
741 dev_dbg(chip->card->dev, "->lx_init_dsp\n");
743 dev_dbg(chip->card->dev, "initialize board\n");
744 err = lx_init_xilinx_reset(chip);
748 dev_dbg(chip->card->dev, "testing board\n");
749 err = lx_init_xilinx_test(chip);
753 dev_dbg(chip->card->dev, "initialize ethersound configuration\n");
754 err = lx_init_ethersound_config(chip);
758 lx_irq_enable(chip);
763 err = lx_dsp_get_mac(chip);
766 if (chip->mac_address[0] || chip->mac_address[1] || chip->mac_address[2] ||
767 chip->mac_address[3] || chip->mac_address[4] || chip->mac_address[5])
774 dev_dbg(chip->card->dev, "mac address ready read after: %dms\n", i);
775 dev_info(chip->card->dev,
777 chip->mac_address[0], chip->mac_address[1], chip->mac_address[2],
778 chip->mac_address[3], chip->mac_address[4], chip->mac_address[5]);
780 err = lx_init_get_version_features(chip);
784 lx_set_granularity(chip, MICROBLAZE_IBL_DEFAULT);
786 chip->playback_mute = 0;
811 static int lx_pcm_create(struct lx6464es *chip)
825 err = snd_pcm_new(chip->card, (char *)card_name, 0,
830 pcm->private_data = chip;
840 &chip->pci->dev, size, size);
842 chip->pcm = pcm;
843 chip->capture_stream.is_capture = 1;
861 struct lx6464es *chip = snd_kcontrol_chip(kcontrol);
862 ucontrol->value.integer.value[0] = chip->playback_mute;
869 struct lx6464es *chip = snd_kcontrol_chip(kcontrol);
871 int current_value = chip->playback_mute;
874 lx_level_unmute(chip, 0, !current_value);
875 chip->playback_mute = !current_value;
900 struct lx6464es *chip = entry->private_data;
903 err = lx_level_peaks(chip, 1, 64, levels);
915 err = lx_level_peaks(chip, 0, 64, levels);
928 static int lx_proc_create(struct snd_card *card, struct lx6464es *chip)
930 return snd_card_ro_proc_new(card, "levels", chip, lx_proc_levels_read);
938 struct lx6464es *chip;
965 chip = kzalloc(sizeof(*chip), GFP_KERNEL);
966 if (chip == NULL) {
971 chip->card = card;
972 chip->pci = pci;
973 chip->irq = -1;
976 mutex_init(&chip->lock);
977 mutex_init(&chip->msg_lock);
978 mutex_init(&chip->setup_mutex);
986 chip->port_plx = pci_resource_start(pci, 1);
987 chip->port_plx_remapped = ioport_map(chip->port_plx,
991 chip->port_dsp_bar = pci_ioremap_bar(pci, 2);
992 if (!chip->port_dsp_bar) {
999 IRQF_SHARED, KBUILD_MODNAME, chip);
1004 chip->irq = pci->irq;
1005 card->sync_irq = chip->irq;
1007 err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops);
1011 err = lx_init_dsp(chip);
1017 err = lx_pcm_create(chip);
1021 err = lx_proc_create(card, chip);
1026 chip));
1030 *rchip = chip;
1034 free_irq(pci->irq, chip);
1037 iounmap(chip->port_dsp_bar);
1043 kfree(chip);
1056 struct lx6464es *chip;
1073 err = snd_lx6464es_create(card, pci, &chip);
1081 chip->mac_address[3], chip->mac_address[4], chip->mac_address[5]);
1084 chip->mac_address[0], chip->mac_address[1], chip->mac_address[2],
1085 chip->mac_address[3], chip->mac_address[4], chip->mac_address[5]);
1088 card->shortname, chip->port_plx,
1089 chip->port_dsp_bar, chip->irq);
1095 dev_dbg(chip->card->dev, "initialization successful\n");