Lines Matching full:chip
92 static int lx_set_granularity(struct lx6464es *chip, u32 gran);
95 static int lx_hardware_open(struct lx6464es *chip, in lx_hardware_open() argument
105 dev_dbg(chip->card->dev, "allocating pipe for %d channels\n", channels); in lx_hardware_open()
106 err = lx_pipe_allocate(chip, 0, is_capture, channels); in lx_hardware_open()
108 dev_err(chip->card->dev, LXP "allocating pipe failed\n"); in lx_hardware_open()
112 err = lx_set_granularity(chip, period_size); in lx_hardware_open()
114 dev_err(chip->card->dev, "setting granularity to %ld failed\n", in lx_hardware_open()
122 static int lx_hardware_start(struct lx6464es *chip, in lx_hardware_start() argument
129 dev_dbg(chip->card->dev, "setting stream format\n"); in lx_hardware_start()
130 err = lx_stream_set_format(chip, runtime, 0, is_capture); in lx_hardware_start()
132 dev_err(chip->card->dev, "setting stream format failed\n"); in lx_hardware_start()
136 dev_dbg(chip->card->dev, "starting pipe\n"); in lx_hardware_start()
137 err = lx_pipe_start(chip, 0, is_capture); in lx_hardware_start()
139 dev_err(chip->card->dev, "starting pipe failed\n"); in lx_hardware_start()
143 dev_dbg(chip->card->dev, "waiting for pipe to start\n"); in lx_hardware_start()
144 err = lx_pipe_wait_for_start(chip, 0, is_capture); in lx_hardware_start()
146 dev_err(chip->card->dev, "waiting for pipe failed\n"); in lx_hardware_start()
154 static int lx_hardware_stop(struct lx6464es *chip, in lx_hardware_stop() argument
160 dev_dbg(chip->card->dev, "pausing pipe\n"); in lx_hardware_stop()
161 err = lx_pipe_pause(chip, 0, is_capture); in lx_hardware_stop()
163 dev_err(chip->card->dev, "pausing pipe failed\n"); in lx_hardware_stop()
167 dev_dbg(chip->card->dev, "waiting for pipe to become idle\n"); in lx_hardware_stop()
168 err = lx_pipe_wait_for_idle(chip, 0, is_capture); in lx_hardware_stop()
170 dev_err(chip->card->dev, "waiting for pipe failed\n"); in lx_hardware_stop()
174 dev_dbg(chip->card->dev, "stopping pipe\n"); in lx_hardware_stop()
175 err = lx_pipe_stop(chip, 0, is_capture); in lx_hardware_stop()
177 dev_err(chip->card->dev, "stopping pipe failed\n"); in lx_hardware_stop()
185 static int lx_hardware_close(struct lx6464es *chip, in lx_hardware_close() argument
191 dev_dbg(chip->card->dev, "releasing pipe\n"); in lx_hardware_close()
192 err = lx_pipe_release(chip, 0, is_capture); in lx_hardware_close()
194 dev_err(chip->card->dev, "releasing pipe failed\n"); in lx_hardware_close()
204 struct lx6464es *chip = snd_pcm_substream_chip(substream); in lx_pcm_open() local
209 dev_dbg(chip->card->dev, "->lx_pcm_open\n"); in lx_pcm_open()
210 mutex_lock(&chip->setup_mutex); in lx_pcm_open()
220 dev_warn(chip->card->dev, "could not constrain periods\n"); in lx_pcm_open()
226 board_rate = chip->board_sample_rate; in lx_pcm_open()
231 dev_warn(chip->card->dev, "could not constrain periods\n"); in lx_pcm_open()
241 dev_warn(chip->card->dev, in lx_pcm_open()
253 runtime->private_data = chip; in lx_pcm_open()
255 mutex_unlock(&chip->setup_mutex); in lx_pcm_open()
256 dev_dbg(chip->card->dev, "<-lx_pcm_open, %d\n", err); in lx_pcm_open()
269 struct lx6464es *chip = snd_pcm_substream_chip(substream); in lx_pcm_stream_pointer() local
273 struct lx_stream *lx_stream = is_capture ? &chip->capture_stream : in lx_pcm_stream_pointer()
274 &chip->playback_stream; in lx_pcm_stream_pointer()
276 dev_dbg(chip->card->dev, "->lx_pcm_stream_pointer\n"); in lx_pcm_stream_pointer()
278 mutex_lock(&chip->lock); in lx_pcm_stream_pointer()
280 mutex_unlock(&chip->lock); in lx_pcm_stream_pointer()
282 dev_dbg(chip->card->dev, "stream_pointer at %ld\n", pos); in lx_pcm_stream_pointer()
288 struct lx6464es *chip = snd_pcm_substream_chip(substream); in lx_pcm_prepare() local
292 dev_dbg(chip->card->dev, "->lx_pcm_prepare\n"); in lx_pcm_prepare()
294 mutex_lock(&chip->setup_mutex); in lx_pcm_prepare()
296 if (chip->hardware_running[is_capture]) { in lx_pcm_prepare()
297 err = lx_hardware_stop(chip, substream); in lx_pcm_prepare()
299 dev_err(chip->card->dev, "failed to stop hardware. " in lx_pcm_prepare()
304 err = lx_hardware_close(chip, substream); in lx_pcm_prepare()
306 dev_err(chip->card->dev, "failed to close hardware. " in lx_pcm_prepare()
312 dev_dbg(chip->card->dev, "opening hardware\n"); in lx_pcm_prepare()
313 err = lx_hardware_open(chip, substream); in lx_pcm_prepare()
315 dev_err(chip->card->dev, "failed to open hardware. " in lx_pcm_prepare()
320 err = lx_hardware_start(chip, substream); in lx_pcm_prepare()
322 dev_err(chip->card->dev, "failed to start hardware. " in lx_pcm_prepare()
327 chip->hardware_running[is_capture] = 1; in lx_pcm_prepare()
329 if (chip->board_sample_rate != substream->runtime->rate) { in lx_pcm_prepare()
331 chip->board_sample_rate = substream->runtime->rate; in lx_pcm_prepare()
335 mutex_unlock(&chip->setup_mutex); in lx_pcm_prepare()
342 struct lx6464es *chip = snd_pcm_substream_chip(substream); in lx_pcm_hw_params() local
344 dev_dbg(chip->card->dev, "->lx_pcm_hw_params\n"); in lx_pcm_hw_params()
346 mutex_lock(&chip->setup_mutex); in lx_pcm_hw_params()
349 chip->capture_stream.stream = substream; in lx_pcm_hw_params()
351 chip->playback_stream.stream = substream; in lx_pcm_hw_params()
353 mutex_unlock(&chip->setup_mutex); in lx_pcm_hw_params()
371 struct lx6464es *chip = snd_pcm_substream_chip(substream); in lx_pcm_hw_free() local
375 dev_dbg(chip->card->dev, "->lx_pcm_hw_free\n"); in lx_pcm_hw_free()
376 mutex_lock(&chip->setup_mutex); in lx_pcm_hw_free()
378 if (chip->hardware_running[is_capture]) { in lx_pcm_hw_free()
379 err = lx_hardware_stop(chip, substream); in lx_pcm_hw_free()
381 dev_err(chip->card->dev, "failed to stop hardware. " in lx_pcm_hw_free()
386 err = lx_hardware_close(chip, substream); in lx_pcm_hw_free()
388 dev_err(chip->card->dev, "failed to close hardware. " in lx_pcm_hw_free()
393 chip->hardware_running[is_capture] = 0; in lx_pcm_hw_free()
397 chip->capture_stream.stream = NULL; in lx_pcm_hw_free()
399 chip->playback_stream.stream = NULL; in lx_pcm_hw_free()
402 mutex_unlock(&chip->setup_mutex); in lx_pcm_hw_free()
406 static void lx_trigger_start(struct lx6464es *chip, struct lx_stream *lx_stream) in lx_trigger_start() argument
428 err = lx_buffer_ask(chip, 0, is_capture, &needed, &freed, in lx_trigger_start()
430 dev_dbg(chip->card->dev, "starting: needed %d, freed %d\n", in lx_trigger_start()
433 err = lx_buffer_give(chip, 0, is_capture, period_bytes, in lx_trigger_start()
437 dev_dbg(chip->card->dev, "starting: buffer index %x on 0x%lx (%d bytes)\n", in lx_trigger_start()
442 err = lx_buffer_ask(chip, 0, is_capture, &needed, &freed, size_array); in lx_trigger_start()
443 dev_dbg(chip->card->dev, "starting: needed %d, freed %d\n", needed, freed); in lx_trigger_start()
445 dev_dbg(chip->card->dev, "starting: starting stream\n"); in lx_trigger_start()
446 err = lx_stream_start(chip, 0, is_capture); in lx_trigger_start()
448 dev_err(chip->card->dev, "couldn't start stream\n"); in lx_trigger_start()
455 static void lx_trigger_stop(struct lx6464es *chip, struct lx_stream *lx_stream) in lx_trigger_stop() argument
460 dev_dbg(chip->card->dev, "stopping: stopping stream\n"); in lx_trigger_stop()
461 err = lx_stream_stop(chip, 0, is_capture); in lx_trigger_stop()
463 dev_err(chip->card->dev, "couldn't stop stream\n"); in lx_trigger_stop()
469 static void lx_trigger_dispatch_stream(struct lx6464es *chip, in lx_trigger_dispatch_stream() argument
474 lx_trigger_start(chip, lx_stream); in lx_trigger_dispatch_stream()
478 lx_trigger_stop(chip, lx_stream); in lx_trigger_dispatch_stream()
486 static int lx_pcm_trigger_dispatch(struct lx6464es *chip, in lx_pcm_trigger_dispatch() argument
491 mutex_lock(&chip->lock); in lx_pcm_trigger_dispatch()
506 lx_trigger_dispatch_stream(chip, &chip->capture_stream); in lx_pcm_trigger_dispatch()
507 lx_trigger_dispatch_stream(chip, &chip->playback_stream); in lx_pcm_trigger_dispatch()
510 mutex_unlock(&chip->lock); in lx_pcm_trigger_dispatch()
517 struct lx6464es *chip = snd_pcm_substream_chip(substream); in lx_pcm_trigger() local
519 struct lx_stream *stream = is_capture ? &chip->capture_stream : in lx_pcm_trigger()
520 &chip->playback_stream; in lx_pcm_trigger()
522 dev_dbg(chip->card->dev, "->lx_pcm_trigger\n"); in lx_pcm_trigger()
524 return lx_pcm_trigger_dispatch(chip, stream, cmd); in lx_pcm_trigger()
529 struct lx6464es *chip = card->private_data; in snd_lx6464es_free() local
531 lx_irq_disable(chip); in snd_lx6464es_free()
535 static int lx_init_xilinx_reset(struct lx6464es *chip) in lx_init_xilinx_reset() argument
538 u32 plx_reg = lx_plx_reg_read(chip, ePLX_CHIPSC); in lx_init_xilinx_reset()
540 dev_dbg(chip->card->dev, "->lx_init_xilinx_reset\n"); in lx_init_xilinx_reset()
545 lx_plx_reg_write(chip, ePLX_CHIPSC, plx_reg); in lx_init_xilinx_reset()
548 lx_plx_reg_write(chip, ePLX_MBOX3, 0); in lx_init_xilinx_reset()
552 lx_plx_reg_write(chip, ePLX_CHIPSC, plx_reg); in lx_init_xilinx_reset()
558 reg_mbox3 = lx_plx_reg_read(chip, ePLX_MBOX3); in lx_init_xilinx_reset()
560 dev_dbg(chip->card->dev, "xilinx reset done\n"); in lx_init_xilinx_reset()
561 dev_dbg(chip->card->dev, "xilinx took %d loops\n", i); in lx_init_xilinx_reset()
569 lx_dsp_reg_write(chip, eReg_CSM, 0); in lx_init_xilinx_reset()
577 static int lx_init_xilinx_test(struct lx6464es *chip) in lx_init_xilinx_test() argument
581 dev_dbg(chip->card->dev, "->lx_init_xilinx_test\n"); in lx_init_xilinx_test()
584 lx_dsp_reg_write(chip, eReg_CSM, 0); in lx_init_xilinx_test()
586 reg = lx_dsp_reg_read(chip, eReg_CSM); in lx_init_xilinx_test()
589 dev_err(chip->card->dev, "Problem: Reg_CSM %x.\n", reg); in lx_init_xilinx_test()
592 lx_plx_reg_write(chip, ePLX_PCICR, 1); in lx_init_xilinx_test()
594 reg = lx_dsp_reg_read(chip, eReg_CSM); in lx_init_xilinx_test()
596 dev_err(chip->card->dev, "Error: Reg_CSM %x.\n", reg); in lx_init_xilinx_test()
601 dev_dbg(chip->card->dev, "Xilinx/MicroBlaze access test successful\n"); in lx_init_xilinx_test()
607 static int lx_init_ethersound_config(struct lx6464es *chip) in lx_init_ethersound_config() argument
610 u32 orig_conf_es = lx_dsp_reg_read(chip, eReg_CONFES); in lx_init_ethersound_config()
618 dev_dbg(chip->card->dev, "->lx_init_ethersound\n"); in lx_init_ethersound_config()
620 chip->freq_ratio = FREQ_RATIO_SINGLE_MODE; in lx_init_ethersound_config()
628 lx_dsp_reg_write(chip, eReg_CONFES, conf_es); in lx_init_ethersound_config()
631 if (lx_dsp_reg_read(chip, eReg_CSES) & 4) { in lx_init_ethersound_config()
632 dev_dbg(chip->card->dev, "ethersound initialized after %dms\n", in lx_init_ethersound_config()
638 dev_warn(chip->card->dev, in lx_init_ethersound_config()
643 dev_dbg(chip->card->dev, "ethersound initialized\n"); in lx_init_ethersound_config()
647 static int lx_init_get_version_features(struct lx6464es *chip) in lx_init_get_version_features() argument
653 dev_dbg(chip->card->dev, "->lx_init_get_version_features\n"); in lx_init_get_version_features()
655 err = lx_dsp_get_version(chip, &dsp_version); in lx_init_get_version_features()
660 dev_info(chip->card->dev, "DSP version: V%02d.%02d #%d\n", in lx_init_get_version_features()
672 err = lx_dsp_get_clock_frequency(chip, &freq); in lx_init_get_version_features()
674 chip->board_sample_rate = freq; in lx_init_get_version_features()
675 dev_dbg(chip->card->dev, "actual clock frequency %d\n", freq); in lx_init_get_version_features()
677 dev_err(chip->card->dev, "DSP corrupted \n"); in lx_init_get_version_features()
684 static int lx_set_granularity(struct lx6464es *chip, u32 gran) in lx_set_granularity() argument
689 dev_dbg(chip->card->dev, "->lx_set_granularity\n"); in lx_set_granularity()
697 if (snapped_gran == chip->pcm_granularity) in lx_set_granularity()
700 err = lx_dsp_set_granularity(chip, snapped_gran); in lx_set_granularity()
702 dev_warn(chip->card->dev, "could not set granularity\n"); in lx_set_granularity()
707 dev_err(chip->card->dev, "snapped blocksize to %d\n", snapped_gran); in lx_set_granularity()
709 dev_dbg(chip->card->dev, "set blocksize on board %d\n", snapped_gran); in lx_set_granularity()
710 chip->pcm_granularity = snapped_gran; in lx_set_granularity()
715 /* initialize and test the xilinx dsp chip */
716 static int lx_init_dsp(struct lx6464es *chip) in lx_init_dsp() argument
721 dev_dbg(chip->card->dev, "->lx_init_dsp\n"); in lx_init_dsp()
723 dev_dbg(chip->card->dev, "initialize board\n"); in lx_init_dsp()
724 err = lx_init_xilinx_reset(chip); in lx_init_dsp()
728 dev_dbg(chip->card->dev, "testing board\n"); in lx_init_dsp()
729 err = lx_init_xilinx_test(chip); in lx_init_dsp()
733 dev_dbg(chip->card->dev, "initialize ethersound configuration\n"); in lx_init_dsp()
734 err = lx_init_ethersound_config(chip); in lx_init_dsp()
738 lx_irq_enable(chip); in lx_init_dsp()
743 err = lx_dsp_get_mac(chip); in lx_init_dsp()
746 if (chip->mac_address[0] || chip->mac_address[1] || chip->mac_address[2] || in lx_init_dsp()
747 chip->mac_address[3] || chip->mac_address[4] || chip->mac_address[5]) in lx_init_dsp()
754 dev_dbg(chip->card->dev, "mac address ready read after: %dms\n", i); in lx_init_dsp()
755 dev_info(chip->card->dev, in lx_init_dsp()
757 chip->mac_address[0], chip->mac_address[1], chip->mac_address[2], in lx_init_dsp()
758 chip->mac_address[3], chip->mac_address[4], chip->mac_address[5]); in lx_init_dsp()
760 err = lx_init_get_version_features(chip); in lx_init_dsp()
764 lx_set_granularity(chip, MICROBLAZE_IBL_DEFAULT); in lx_init_dsp()
766 chip->playback_mute = 0; in lx_init_dsp()
791 static int lx_pcm_create(struct lx6464es *chip) in lx_pcm_create() argument
805 err = snd_pcm_new(chip->card, (char *)card_name, 0, in lx_pcm_create()
810 pcm->private_data = chip; in lx_pcm_create()
820 &chip->pci->dev, size, size); in lx_pcm_create()
822 chip->pcm = pcm; in lx_pcm_create()
823 chip->capture_stream.is_capture = 1; in lx_pcm_create()
841 struct lx6464es *chip = snd_kcontrol_chip(kcontrol); in lx_control_playback_get() local
842 ucontrol->value.integer.value[0] = chip->playback_mute; in lx_control_playback_get()
849 struct lx6464es *chip = snd_kcontrol_chip(kcontrol); in lx_control_playback_put() local
851 int current_value = chip->playback_mute; in lx_control_playback_put()
854 lx_level_unmute(chip, 0, !current_value); in lx_control_playback_put()
855 chip->playback_mute = !current_value; in lx_control_playback_put()
880 struct lx6464es *chip = entry->private_data; in lx_proc_levels_read() local
883 err = lx_level_peaks(chip, 1, 64, levels); in lx_proc_levels_read()
895 err = lx_level_peaks(chip, 0, 64, levels); in lx_proc_levels_read()
908 static int lx_proc_create(struct snd_card *card, struct lx6464es *chip) in lx_proc_create() argument
910 return snd_card_ro_proc_new(card, "levels", chip, lx_proc_levels_read); in lx_proc_create()
917 struct lx6464es *chip = card->private_data; in snd_lx6464es_create() local
937 chip->card = card; in snd_lx6464es_create()
938 chip->pci = pci; in snd_lx6464es_create()
939 chip->irq = -1; in snd_lx6464es_create()
942 mutex_init(&chip->lock); in snd_lx6464es_create()
943 mutex_init(&chip->msg_lock); in snd_lx6464es_create()
944 mutex_init(&chip->setup_mutex); in snd_lx6464es_create()
952 chip->port_plx = pci_resource_start(pci, 1); in snd_lx6464es_create()
953 chip->port_plx_remapped = devm_ioport_map(&pci->dev, chip->port_plx, in snd_lx6464es_create()
955 if (!chip->port_plx_remapped) in snd_lx6464es_create()
959 chip->port_dsp_bar = pcim_iomap(pci, 2, 0); in snd_lx6464es_create()
960 if (!chip->port_dsp_bar) in snd_lx6464es_create()
965 KBUILD_MODNAME, chip); in snd_lx6464es_create()
970 chip->irq = pci->irq; in snd_lx6464es_create()
971 card->sync_irq = chip->irq; in snd_lx6464es_create()
974 err = lx_init_dsp(chip); in snd_lx6464es_create()
980 err = lx_pcm_create(chip); in snd_lx6464es_create()
984 err = lx_proc_create(card, chip); in snd_lx6464es_create()
989 chip)); in snd_lx6464es_create()
1001 struct lx6464es *chip; in snd_lx6464es_probe() local
1014 sizeof(*chip), &card); in snd_lx6464es_probe()
1017 chip = card->private_data; in snd_lx6464es_probe()
1027 chip->mac_address[3], chip->mac_address[4], chip->mac_address[5]); in snd_lx6464es_probe()
1030 chip->mac_address[0], chip->mac_address[1], chip->mac_address[2], in snd_lx6464es_probe()
1031 chip->mac_address[3], chip->mac_address[4], chip->mac_address[5]); in snd_lx6464es_probe()
1034 card->shortname, chip->port_plx, in snd_lx6464es_probe()
1035 chip->port_dsp_bar, chip->irq); in snd_lx6464es_probe()
1041 dev_dbg(chip->card->dev, "initialization successful\n"); in snd_lx6464es_probe()