Lines Matching refs:chip
102 static int lx_set_granularity(struct lx6464es *chip, u32 gran);
105 static int lx_hardware_open(struct lx6464es *chip, in lx_hardware_open() argument
115 dev_dbg(chip->card->dev, "allocating pipe for %d channels\n", channels); in lx_hardware_open()
116 err = lx_pipe_allocate(chip, 0, is_capture, channels); in lx_hardware_open()
118 dev_err(chip->card->dev, LXP "allocating pipe failed\n"); in lx_hardware_open()
122 err = lx_set_granularity(chip, period_size); in lx_hardware_open()
124 dev_err(chip->card->dev, "setting granularity to %ld failed\n", in lx_hardware_open()
132 static int lx_hardware_start(struct lx6464es *chip, in lx_hardware_start() argument
139 dev_dbg(chip->card->dev, "setting stream format\n"); in lx_hardware_start()
140 err = lx_stream_set_format(chip, runtime, 0, is_capture); in lx_hardware_start()
142 dev_err(chip->card->dev, "setting stream format failed\n"); in lx_hardware_start()
146 dev_dbg(chip->card->dev, "starting pipe\n"); in lx_hardware_start()
147 err = lx_pipe_start(chip, 0, is_capture); in lx_hardware_start()
149 dev_err(chip->card->dev, "starting pipe failed\n"); in lx_hardware_start()
153 dev_dbg(chip->card->dev, "waiting for pipe to start\n"); in lx_hardware_start()
154 err = lx_pipe_wait_for_start(chip, 0, is_capture); in lx_hardware_start()
156 dev_err(chip->card->dev, "waiting for pipe failed\n"); in lx_hardware_start()
164 static int lx_hardware_stop(struct lx6464es *chip, in lx_hardware_stop() argument
170 dev_dbg(chip->card->dev, "pausing pipe\n"); in lx_hardware_stop()
171 err = lx_pipe_pause(chip, 0, is_capture); in lx_hardware_stop()
173 dev_err(chip->card->dev, "pausing pipe failed\n"); in lx_hardware_stop()
177 dev_dbg(chip->card->dev, "waiting for pipe to become idle\n"); in lx_hardware_stop()
178 err = lx_pipe_wait_for_idle(chip, 0, is_capture); in lx_hardware_stop()
180 dev_err(chip->card->dev, "waiting for pipe failed\n"); in lx_hardware_stop()
184 dev_dbg(chip->card->dev, "stopping pipe\n"); in lx_hardware_stop()
185 err = lx_pipe_stop(chip, 0, is_capture); in lx_hardware_stop()
187 dev_err(chip->card->dev, "stopping pipe failed\n"); in lx_hardware_stop()
195 static int lx_hardware_close(struct lx6464es *chip, in lx_hardware_close() argument
201 dev_dbg(chip->card->dev, "releasing pipe\n"); in lx_hardware_close()
202 err = lx_pipe_release(chip, 0, is_capture); in lx_hardware_close()
204 dev_err(chip->card->dev, "releasing pipe failed\n"); in lx_hardware_close()
214 struct lx6464es *chip = snd_pcm_substream_chip(substream); in lx_pcm_open() local
219 dev_dbg(chip->card->dev, "->lx_pcm_open\n"); in lx_pcm_open()
220 mutex_lock(&chip->setup_mutex); in lx_pcm_open()
230 dev_warn(chip->card->dev, "could not constrain periods\n"); in lx_pcm_open()
236 board_rate = chip->board_sample_rate; in lx_pcm_open()
241 dev_warn(chip->card->dev, "could not constrain periods\n"); in lx_pcm_open()
251 dev_warn(chip->card->dev, in lx_pcm_open()
263 runtime->private_data = chip; in lx_pcm_open()
265 mutex_unlock(&chip->setup_mutex); in lx_pcm_open()
266 dev_dbg(chip->card->dev, "<-lx_pcm_open, %d\n", err); in lx_pcm_open()
280 struct lx6464es *chip = snd_pcm_substream_chip(substream); in lx_pcm_stream_pointer() local
284 struct lx_stream *lx_stream = is_capture ? &chip->capture_stream : in lx_pcm_stream_pointer()
285 &chip->playback_stream; in lx_pcm_stream_pointer()
287 dev_dbg(chip->card->dev, "->lx_pcm_stream_pointer\n"); in lx_pcm_stream_pointer()
289 mutex_lock(&chip->lock); in lx_pcm_stream_pointer()
291 mutex_unlock(&chip->lock); in lx_pcm_stream_pointer()
293 dev_dbg(chip->card->dev, "stream_pointer at %ld\n", pos); in lx_pcm_stream_pointer()
299 struct lx6464es *chip = snd_pcm_substream_chip(substream); in lx_pcm_prepare() local
303 dev_dbg(chip->card->dev, "->lx_pcm_prepare\n"); in lx_pcm_prepare()
305 mutex_lock(&chip->setup_mutex); in lx_pcm_prepare()
307 if (chip->hardware_running[is_capture]) { in lx_pcm_prepare()
308 err = lx_hardware_stop(chip, substream); in lx_pcm_prepare()
310 dev_err(chip->card->dev, "failed to stop hardware. " in lx_pcm_prepare()
315 err = lx_hardware_close(chip, substream); in lx_pcm_prepare()
317 dev_err(chip->card->dev, "failed to close hardware. " in lx_pcm_prepare()
323 dev_dbg(chip->card->dev, "opening hardware\n"); in lx_pcm_prepare()
324 err = lx_hardware_open(chip, substream); in lx_pcm_prepare()
326 dev_err(chip->card->dev, "failed to open hardware. " in lx_pcm_prepare()
331 err = lx_hardware_start(chip, substream); in lx_pcm_prepare()
333 dev_err(chip->card->dev, "failed to start hardware. " in lx_pcm_prepare()
338 chip->hardware_running[is_capture] = 1; in lx_pcm_prepare()
340 if (chip->board_sample_rate != substream->runtime->rate) { in lx_pcm_prepare()
342 chip->board_sample_rate = substream->runtime->rate; in lx_pcm_prepare()
346 mutex_unlock(&chip->setup_mutex); in lx_pcm_prepare()
353 struct lx6464es *chip = snd_pcm_substream_chip(substream); in lx_pcm_hw_params() local
356 dev_dbg(chip->card->dev, "->lx_pcm_hw_params\n"); in lx_pcm_hw_params()
358 mutex_lock(&chip->setup_mutex); in lx_pcm_hw_params()
365 chip->capture_stream.stream = substream; in lx_pcm_hw_params()
367 chip->playback_stream.stream = substream; in lx_pcm_hw_params()
369 mutex_unlock(&chip->setup_mutex); in lx_pcm_hw_params()
387 struct lx6464es *chip = snd_pcm_substream_chip(substream); in lx_pcm_hw_free() local
391 dev_dbg(chip->card->dev, "->lx_pcm_hw_free\n"); in lx_pcm_hw_free()
392 mutex_lock(&chip->setup_mutex); in lx_pcm_hw_free()
394 if (chip->hardware_running[is_capture]) { in lx_pcm_hw_free()
395 err = lx_hardware_stop(chip, substream); in lx_pcm_hw_free()
397 dev_err(chip->card->dev, "failed to stop hardware. " in lx_pcm_hw_free()
402 err = lx_hardware_close(chip, substream); in lx_pcm_hw_free()
404 dev_err(chip->card->dev, "failed to close hardware. " in lx_pcm_hw_free()
409 chip->hardware_running[is_capture] = 0; in lx_pcm_hw_free()
415 chip->capture_stream.stream = 0; in lx_pcm_hw_free()
417 chip->playback_stream.stream = 0; in lx_pcm_hw_free()
420 mutex_unlock(&chip->setup_mutex); in lx_pcm_hw_free()
424 static void lx_trigger_start(struct lx6464es *chip, struct lx_stream *lx_stream) in lx_trigger_start() argument
446 err = lx_buffer_ask(chip, 0, is_capture, &needed, &freed, in lx_trigger_start()
448 dev_dbg(chip->card->dev, "starting: needed %d, freed %d\n", in lx_trigger_start()
451 err = lx_buffer_give(chip, 0, is_capture, period_bytes, in lx_trigger_start()
455 dev_dbg(chip->card->dev, "starting: buffer index %x on 0x%lx (%d bytes)\n", in lx_trigger_start()
460 err = lx_buffer_ask(chip, 0, is_capture, &needed, &freed, size_array); in lx_trigger_start()
461 dev_dbg(chip->card->dev, "starting: needed %d, freed %d\n", needed, freed); in lx_trigger_start()
463 dev_dbg(chip->card->dev, "starting: starting stream\n"); in lx_trigger_start()
464 err = lx_stream_start(chip, 0, is_capture); in lx_trigger_start()
466 dev_err(chip->card->dev, "couldn't start stream\n"); in lx_trigger_start()
473 static void lx_trigger_stop(struct lx6464es *chip, struct lx_stream *lx_stream) in lx_trigger_stop() argument
478 dev_dbg(chip->card->dev, "stopping: stopping stream\n"); in lx_trigger_stop()
479 err = lx_stream_stop(chip, 0, is_capture); in lx_trigger_stop()
481 dev_err(chip->card->dev, "couldn't stop stream\n"); in lx_trigger_stop()
487 static void lx_trigger_dispatch_stream(struct lx6464es *chip, in lx_trigger_dispatch_stream() argument
492 lx_trigger_start(chip, lx_stream); in lx_trigger_dispatch_stream()
496 lx_trigger_stop(chip, lx_stream); in lx_trigger_dispatch_stream()
504 static int lx_pcm_trigger_dispatch(struct lx6464es *chip, in lx_pcm_trigger_dispatch() argument
509 mutex_lock(&chip->lock); in lx_pcm_trigger_dispatch()
524 lx_trigger_dispatch_stream(chip, &chip->capture_stream); in lx_pcm_trigger_dispatch()
525 lx_trigger_dispatch_stream(chip, &chip->playback_stream); in lx_pcm_trigger_dispatch()
528 mutex_unlock(&chip->lock); in lx_pcm_trigger_dispatch()
535 struct lx6464es *chip = snd_pcm_substream_chip(substream); in lx_pcm_trigger() local
537 struct lx_stream *stream = is_capture ? &chip->capture_stream : in lx_pcm_trigger()
538 &chip->playback_stream; in lx_pcm_trigger()
540 dev_dbg(chip->card->dev, "->lx_pcm_trigger\n"); in lx_pcm_trigger()
542 return lx_pcm_trigger_dispatch(chip, stream, cmd); in lx_pcm_trigger()
545 static int snd_lx6464es_free(struct lx6464es *chip) in snd_lx6464es_free() argument
547 dev_dbg(chip->card->dev, "->snd_lx6464es_free\n"); in snd_lx6464es_free()
549 lx_irq_disable(chip); in snd_lx6464es_free()
551 if (chip->irq >= 0) in snd_lx6464es_free()
552 free_irq(chip->irq, chip); in snd_lx6464es_free()
554 iounmap(chip->port_dsp_bar); in snd_lx6464es_free()
555 ioport_unmap(chip->port_plx_remapped); in snd_lx6464es_free()
557 pci_release_regions(chip->pci); in snd_lx6464es_free()
558 pci_disable_device(chip->pci); in snd_lx6464es_free()
560 kfree(chip); in snd_lx6464es_free()
571 static int lx_init_xilinx_reset(struct lx6464es *chip) in lx_init_xilinx_reset() argument
574 u32 plx_reg = lx_plx_reg_read(chip, ePLX_CHIPSC); in lx_init_xilinx_reset()
576 dev_dbg(chip->card->dev, "->lx_init_xilinx_reset\n"); in lx_init_xilinx_reset()
581 lx_plx_reg_write(chip, ePLX_CHIPSC, plx_reg); in lx_init_xilinx_reset()
584 lx_plx_reg_write(chip, ePLX_MBOX3, 0); in lx_init_xilinx_reset()
588 lx_plx_reg_write(chip, ePLX_CHIPSC, plx_reg); in lx_init_xilinx_reset()
594 reg_mbox3 = lx_plx_reg_read(chip, ePLX_MBOX3); in lx_init_xilinx_reset()
596 dev_dbg(chip->card->dev, "xilinx reset done\n"); in lx_init_xilinx_reset()
597 dev_dbg(chip->card->dev, "xilinx took %d loops\n", i); in lx_init_xilinx_reset()
605 lx_dsp_reg_write(chip, eReg_CSM, 0); in lx_init_xilinx_reset()
613 static int lx_init_xilinx_test(struct lx6464es *chip) in lx_init_xilinx_test() argument
617 dev_dbg(chip->card->dev, "->lx_init_xilinx_test\n"); in lx_init_xilinx_test()
620 lx_dsp_reg_write(chip, eReg_CSM, 0); in lx_init_xilinx_test()
622 reg = lx_dsp_reg_read(chip, eReg_CSM); in lx_init_xilinx_test()
625 dev_err(chip->card->dev, "Problem: Reg_CSM %x.\n", reg); in lx_init_xilinx_test()
628 lx_plx_reg_write(chip, ePLX_PCICR, 1); in lx_init_xilinx_test()
630 reg = lx_dsp_reg_read(chip, eReg_CSM); in lx_init_xilinx_test()
632 dev_err(chip->card->dev, "Error: Reg_CSM %x.\n", reg); in lx_init_xilinx_test()
637 dev_dbg(chip->card->dev, "Xilinx/MicroBlaze access test successful\n"); in lx_init_xilinx_test()
643 static int lx_init_ethersound_config(struct lx6464es *chip) in lx_init_ethersound_config() argument
646 u32 orig_conf_es = lx_dsp_reg_read(chip, eReg_CONFES); in lx_init_ethersound_config()
654 dev_dbg(chip->card->dev, "->lx_init_ethersound\n"); in lx_init_ethersound_config()
656 chip->freq_ratio = FREQ_RATIO_SINGLE_MODE; in lx_init_ethersound_config()
664 lx_dsp_reg_write(chip, eReg_CONFES, conf_es); in lx_init_ethersound_config()
667 if (lx_dsp_reg_read(chip, eReg_CSES) & 4) { in lx_init_ethersound_config()
668 dev_dbg(chip->card->dev, "ethersound initialized after %dms\n", in lx_init_ethersound_config()
674 dev_warn(chip->card->dev, in lx_init_ethersound_config()
679 dev_dbg(chip->card->dev, "ethersound initialized\n"); in lx_init_ethersound_config()
683 static int lx_init_get_version_features(struct lx6464es *chip) in lx_init_get_version_features() argument
689 dev_dbg(chip->card->dev, "->lx_init_get_version_features\n"); in lx_init_get_version_features()
691 err = lx_dsp_get_version(chip, &dsp_version); in lx_init_get_version_features()
696 dev_info(chip->card->dev, "DSP version: V%02d.%02d #%d\n", in lx_init_get_version_features()
708 err = lx_dsp_get_clock_frequency(chip, &freq); in lx_init_get_version_features()
710 chip->board_sample_rate = freq; in lx_init_get_version_features()
711 dev_dbg(chip->card->dev, "actual clock frequency %d\n", freq); in lx_init_get_version_features()
713 dev_err(chip->card->dev, "DSP corrupted \n"); in lx_init_get_version_features()
720 static int lx_set_granularity(struct lx6464es *chip, u32 gran) in lx_set_granularity() argument
725 dev_dbg(chip->card->dev, "->lx_set_granularity\n"); in lx_set_granularity()
733 if (snapped_gran == chip->pcm_granularity) in lx_set_granularity()
736 err = lx_dsp_set_granularity(chip, snapped_gran); in lx_set_granularity()
738 dev_warn(chip->card->dev, "could not set granularity\n"); in lx_set_granularity()
743 dev_err(chip->card->dev, "snapped blocksize to %d\n", snapped_gran); in lx_set_granularity()
745 dev_dbg(chip->card->dev, "set blocksize on board %d\n", snapped_gran); in lx_set_granularity()
746 chip->pcm_granularity = snapped_gran; in lx_set_granularity()
752 static int lx_init_dsp(struct lx6464es *chip) in lx_init_dsp() argument
757 dev_dbg(chip->card->dev, "->lx_init_dsp\n"); in lx_init_dsp()
759 dev_dbg(chip->card->dev, "initialize board\n"); in lx_init_dsp()
760 err = lx_init_xilinx_reset(chip); in lx_init_dsp()
764 dev_dbg(chip->card->dev, "testing board\n"); in lx_init_dsp()
765 err = lx_init_xilinx_test(chip); in lx_init_dsp()
769 dev_dbg(chip->card->dev, "initialize ethersound configuration\n"); in lx_init_dsp()
770 err = lx_init_ethersound_config(chip); in lx_init_dsp()
774 lx_irq_enable(chip); in lx_init_dsp()
779 err = lx_dsp_get_mac(chip); in lx_init_dsp()
782 if (chip->mac_address[0] || chip->mac_address[1] || chip->mac_address[2] || in lx_init_dsp()
783 chip->mac_address[3] || chip->mac_address[4] || chip->mac_address[5]) in lx_init_dsp()
790 dev_dbg(chip->card->dev, "mac address ready read after: %dms\n", i); in lx_init_dsp()
791 dev_info(chip->card->dev, in lx_init_dsp()
793 chip->mac_address[0], chip->mac_address[1], chip->mac_address[2], in lx_init_dsp()
794 chip->mac_address[3], chip->mac_address[4], chip->mac_address[5]); in lx_init_dsp()
796 err = lx_init_get_version_features(chip); in lx_init_dsp()
800 lx_set_granularity(chip, MICROBLAZE_IBL_DEFAULT); in lx_init_dsp()
802 chip->playback_mute = 0; in lx_init_dsp()
829 static int lx_pcm_create(struct lx6464es *chip) in lx_pcm_create() argument
843 err = snd_pcm_new(chip->card, (char *)card_name, 0, in lx_pcm_create()
848 pcm->private_data = chip; in lx_pcm_create()
858 snd_dma_pci_data(chip->pci), in lx_pcm_create()
863 chip->pcm = pcm; in lx_pcm_create()
864 chip->capture_stream.is_capture = 1; in lx_pcm_create()
882 struct lx6464es *chip = snd_kcontrol_chip(kcontrol); in lx_control_playback_get() local
883 ucontrol->value.integer.value[0] = chip->playback_mute; in lx_control_playback_get()
890 struct lx6464es *chip = snd_kcontrol_chip(kcontrol); in lx_control_playback_put() local
892 int current_value = chip->playback_mute; in lx_control_playback_put()
895 lx_level_unmute(chip, 0, !current_value); in lx_control_playback_put()
896 chip->playback_mute = !current_value; in lx_control_playback_put()
921 struct lx6464es *chip = entry->private_data; in lx_proc_levels_read() local
924 err = lx_level_peaks(chip, 1, 64, levels); in lx_proc_levels_read()
936 err = lx_level_peaks(chip, 0, 64, levels); in lx_proc_levels_read()
949 static int lx_proc_create(struct snd_card *card, struct lx6464es *chip) in lx_proc_create() argument
956 snd_info_set_text_ops(entry, chip, lx_proc_levels_read); in lx_proc_create()
965 struct lx6464es *chip; in snd_lx6464es_create() local
992 chip = kzalloc(sizeof(*chip), GFP_KERNEL); in snd_lx6464es_create()
993 if (chip == NULL) { in snd_lx6464es_create()
998 chip->card = card; in snd_lx6464es_create()
999 chip->pci = pci; in snd_lx6464es_create()
1000 chip->irq = -1; in snd_lx6464es_create()
1003 mutex_init(&chip->lock); in snd_lx6464es_create()
1004 mutex_init(&chip->msg_lock); in snd_lx6464es_create()
1005 mutex_init(&chip->setup_mutex); in snd_lx6464es_create()
1013 chip->port_plx = pci_resource_start(pci, 1); in snd_lx6464es_create()
1014 chip->port_plx_remapped = ioport_map(chip->port_plx, in snd_lx6464es_create()
1018 chip->port_dsp_bar = pci_ioremap_bar(pci, 2); in snd_lx6464es_create()
1021 IRQF_SHARED, KBUILD_MODNAME, chip); in snd_lx6464es_create()
1026 chip->irq = pci->irq; in snd_lx6464es_create()
1028 err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops); in snd_lx6464es_create()
1032 err = lx_init_dsp(chip); in snd_lx6464es_create()
1038 err = lx_pcm_create(chip); in snd_lx6464es_create()
1042 err = lx_proc_create(card, chip); in snd_lx6464es_create()
1047 chip)); in snd_lx6464es_create()
1051 *rchip = chip; in snd_lx6464es_create()
1055 free_irq(pci->irq, chip); in snd_lx6464es_create()
1061 kfree(chip); in snd_lx6464es_create()
1074 struct lx6464es *chip; in snd_lx6464es_probe() local
1091 err = snd_lx6464es_create(card, pci, &chip); in snd_lx6464es_probe()
1099 chip->mac_address[3], chip->mac_address[4], chip->mac_address[5]); in snd_lx6464es_probe()
1102 chip->mac_address[0], chip->mac_address[1], chip->mac_address[2], in snd_lx6464es_probe()
1103 chip->mac_address[3], chip->mac_address[4], chip->mac_address[5]); in snd_lx6464es_probe()
1106 card->shortname, chip->port_plx, in snd_lx6464es_probe()
1107 chip->port_dsp_bar, chip->irq); in snd_lx6464es_probe()
1113 dev_dbg(chip->card->dev, "initialization successful\n"); in snd_lx6464es_probe()