Lines Matching refs:chip
87 snd_at73c213_write_reg(struct snd_at73c213 *chip, u8 reg, u8 val) in snd_at73c213_write_reg() argument
98 chip->spi_wbuffer[0] = reg; in snd_at73c213_write_reg()
99 chip->spi_wbuffer[1] = val; in snd_at73c213_write_reg()
101 msg_xfer.tx_buf = chip->spi_wbuffer; in snd_at73c213_write_reg()
102 msg_xfer.rx_buf = chip->spi_rbuffer; in snd_at73c213_write_reg()
105 retval = spi_sync(chip->spi, &msg); in snd_at73c213_write_reg()
108 chip->reg_image[reg] = val; in snd_at73c213_write_reg()
132 static int snd_at73c213_set_bitrate(struct snd_at73c213 *chip) in snd_at73c213_set_bitrate() argument
134 unsigned long ssc_rate = clk_get_rate(chip->ssc->clk); in snd_at73c213_set_bitrate()
176 status = clk_round_rate(chip->board->dac_clk, dac_rate_new); in snd_at73c213_set_bitrate()
191 status = clk_set_rate(chip->board->dac_clk, status); in snd_at73c213_set_bitrate()
196 ssc_writel(chip->ssc->regs, CMR, ssc_div/2); in snd_at73c213_set_bitrate()
199 chip->bitrate = ssc_rate / (ssc_div * 16 * 2); in snd_at73c213_set_bitrate()
201 dev_info(&chip->spi->dev, in snd_at73c213_set_bitrate()
203 chip->bitrate, ssc_div); in snd_at73c213_set_bitrate()
210 struct snd_at73c213 *chip = snd_pcm_substream_chip(substream); in snd_at73c213_pcm_open() local
219 snd_at73c213_playback_hw.rate_min = chip->bitrate; in snd_at73c213_pcm_open()
220 snd_at73c213_playback_hw.rate_max = chip->bitrate; in snd_at73c213_pcm_open()
222 chip->substream = substream; in snd_at73c213_pcm_open()
229 struct snd_at73c213 *chip = snd_pcm_substream_chip(substream); in snd_at73c213_pcm_close() local
230 chip->substream = NULL; in snd_at73c213_pcm_close()
237 struct snd_at73c213 *chip = snd_pcm_substream_chip(substream); in snd_at73c213_pcm_hw_params() local
241 val = ssc_readl(chip->ssc->regs, TFMR); in snd_at73c213_pcm_hw_params()
243 ssc_writel(chip->ssc->regs, TFMR, val); in snd_at73c213_pcm_hw_params()
256 struct snd_at73c213 *chip = snd_pcm_substream_chip(substream); in snd_at73c213_pcm_prepare() local
262 chip->period = 0; in snd_at73c213_pcm_prepare()
264 ssc_writel(chip->ssc->regs, PDC_TPR, in snd_at73c213_pcm_prepare()
266 ssc_writel(chip->ssc->regs, PDC_TCR, in snd_at73c213_pcm_prepare()
268 ssc_writel(chip->ssc->regs, PDC_TNPR, in snd_at73c213_pcm_prepare()
270 ssc_writel(chip->ssc->regs, PDC_TNCR, in snd_at73c213_pcm_prepare()
279 struct snd_at73c213 *chip = snd_pcm_substream_chip(substream); in snd_at73c213_pcm_trigger() local
282 spin_lock(&chip->lock); in snd_at73c213_pcm_trigger()
286 ssc_writel(chip->ssc->regs, IER, SSC_BIT(IER_ENDTX)); in snd_at73c213_pcm_trigger()
287 ssc_writel(chip->ssc->regs, PDC_PTCR, SSC_BIT(PDC_PTCR_TXTEN)); in snd_at73c213_pcm_trigger()
290 ssc_writel(chip->ssc->regs, PDC_PTCR, SSC_BIT(PDC_PTCR_TXTDIS)); in snd_at73c213_pcm_trigger()
291 ssc_writel(chip->ssc->regs, IDR, SSC_BIT(IDR_ENDTX)); in snd_at73c213_pcm_trigger()
294 dev_dbg(&chip->spi->dev, "spurious command %x\n", cmd); in snd_at73c213_pcm_trigger()
299 spin_unlock(&chip->lock); in snd_at73c213_pcm_trigger()
307 struct snd_at73c213 *chip = snd_pcm_substream_chip(substream); in snd_at73c213_pcm_pointer() local
312 bytes = ssc_readl(chip->ssc->regs, PDC_TPR) in snd_at73c213_pcm_pointer()
333 static int snd_at73c213_pcm_new(struct snd_at73c213 *chip, int device) in snd_at73c213_pcm_new() argument
338 retval = snd_pcm_new(chip->card, chip->card->shortname, in snd_at73c213_pcm_new()
343 pcm->private_data = chip; in snd_at73c213_pcm_new()
346 chip->pcm = pcm; in snd_at73c213_pcm_new()
350 retval = snd_pcm_lib_preallocate_pages_for_all(chip->pcm, in snd_at73c213_pcm_new()
351 SNDRV_DMA_TYPE_DEV, &chip->ssc->pdev->dev, in snd_at73c213_pcm_new()
359 struct snd_at73c213 *chip = dev_id; in snd_at73c213_interrupt() local
360 struct snd_pcm_runtime *runtime = chip->substream->runtime; in snd_at73c213_interrupt()
367 spin_lock(&chip->lock); in snd_at73c213_interrupt()
370 status = ssc_readl(chip->ssc->regs, IMR); in snd_at73c213_interrupt()
373 chip->period++; in snd_at73c213_interrupt()
374 if (chip->period == runtime->periods) in snd_at73c213_interrupt()
375 chip->period = 0; in snd_at73c213_interrupt()
376 next_period = chip->period + 1; in snd_at73c213_interrupt()
382 ssc_writel(chip->ssc->regs, PDC_TNPR, in snd_at73c213_interrupt()
384 ssc_writel(chip->ssc->regs, PDC_TNCR, in snd_at73c213_interrupt()
389 ssc_readl(chip->ssc->regs, IMR); in snd_at73c213_interrupt()
390 spin_unlock(&chip->lock); in snd_at73c213_interrupt()
393 snd_pcm_period_elapsed(chip->substream); in snd_at73c213_interrupt()
404 struct snd_at73c213 *chip = snd_kcontrol_chip(kcontrol); in snd_at73c213_mono_get() local
410 mutex_lock(&chip->mixer_lock); in snd_at73c213_mono_get()
413 (chip->reg_image[reg] >> shift) & mask; in snd_at73c213_mono_get()
419 mutex_unlock(&chip->mixer_lock); in snd_at73c213_mono_get()
427 struct snd_at73c213 *chip = snd_kcontrol_chip(kcontrol); in snd_at73c213_mono_put() local
440 mutex_lock(&chip->mixer_lock); in snd_at73c213_mono_put()
442 val = (chip->reg_image[reg] & ~(mask << shift)) | val; in snd_at73c213_mono_put()
443 change = val != chip->reg_image[reg]; in snd_at73c213_mono_put()
444 retval = snd_at73c213_write_reg(chip, reg, val); in snd_at73c213_mono_put()
446 mutex_unlock(&chip->mixer_lock); in snd_at73c213_mono_put()
474 struct snd_at73c213 *chip = snd_kcontrol_chip(kcontrol); in snd_at73c213_stereo_get() local
482 mutex_lock(&chip->mixer_lock); in snd_at73c213_stereo_get()
485 (chip->reg_image[left_reg] >> shift_left) & mask; in snd_at73c213_stereo_get()
487 (chip->reg_image[right_reg] >> shift_right) & mask; in snd_at73c213_stereo_get()
496 mutex_unlock(&chip->mixer_lock); in snd_at73c213_stereo_get()
504 struct snd_at73c213 *chip = snd_kcontrol_chip(kcontrol); in snd_at73c213_stereo_put() local
523 mutex_lock(&chip->mixer_lock); in snd_at73c213_stereo_put()
525 val1 = (chip->reg_image[left_reg] & ~(mask << shift_left)) | val1; in snd_at73c213_stereo_put()
526 val2 = (chip->reg_image[right_reg] & ~(mask << shift_right)) | val2; in snd_at73c213_stereo_put()
527 change = val1 != chip->reg_image[left_reg] in snd_at73c213_stereo_put()
528 || val2 != chip->reg_image[right_reg]; in snd_at73c213_stereo_put()
529 retval = snd_at73c213_write_reg(chip, left_reg, val1); in snd_at73c213_stereo_put()
531 mutex_unlock(&chip->mixer_lock); in snd_at73c213_stereo_put()
534 retval = snd_at73c213_write_reg(chip, right_reg, val2); in snd_at73c213_stereo_put()
536 mutex_unlock(&chip->mixer_lock); in snd_at73c213_stereo_put()
540 mutex_unlock(&chip->mixer_lock); in snd_at73c213_stereo_put()
553 struct snd_at73c213 *chip = snd_kcontrol_chip(kcontrol); in snd_at73c213_mono_switch_get() local
558 mutex_lock(&chip->mixer_lock); in snd_at73c213_mono_switch_get()
561 (chip->reg_image[reg] >> shift) & 0x01; in snd_at73c213_mono_switch_get()
567 mutex_unlock(&chip->mixer_lock); in snd_at73c213_mono_switch_get()
575 struct snd_at73c213 *chip = snd_kcontrol_chip(kcontrol); in snd_at73c213_mono_switch_put() local
592 mutex_lock(&chip->mixer_lock); in snd_at73c213_mono_switch_put()
594 val |= (chip->reg_image[reg] & ~(mask << shift)); in snd_at73c213_mono_switch_put()
595 change = val != chip->reg_image[reg]; in snd_at73c213_mono_switch_put()
597 retval = snd_at73c213_write_reg(chip, reg, val); in snd_at73c213_mono_switch_put()
599 mutex_unlock(&chip->mixer_lock); in snd_at73c213_mono_switch_put()
712 static int snd_at73c213_mixer(struct snd_at73c213 *chip) in snd_at73c213_mixer() argument
717 if (chip == NULL || chip->pcm == NULL) in snd_at73c213_mixer()
720 card = chip->card; in snd_at73c213_mixer()
722 strcpy(card->mixername, chip->pcm->name); in snd_at73c213_mixer()
727 chip)); in snd_at73c213_mixer()
747 static int snd_at73c213_ssc_init(struct snd_at73c213 *chip) in snd_at73c213_ssc_init() argument
755 ssc_writel(chip->ssc->regs, TCMR, in snd_at73c213_ssc_init()
767 ssc_writel(chip->ssc->regs, TFMR, in snd_at73c213_ssc_init()
777 static int snd_at73c213_chip_init(struct snd_at73c213 *chip) in snd_at73c213_chip_init() argument
782 retval = snd_at73c213_set_bitrate(chip); in snd_at73c213_chip_init()
787 clk_enable(chip->board->dac_clk); in snd_at73c213_chip_init()
790 retval = snd_at73c213_write_reg(chip, DAC_RST, 0x04); in snd_at73c213_chip_init()
794 retval = snd_at73c213_write_reg(chip, DAC_RST, 0x03); in snd_at73c213_chip_init()
799 retval = snd_at73c213_write_reg(chip, DAC_PRECH, 0xff); in snd_at73c213_chip_init()
802 retval = snd_at73c213_write_reg(chip, PA_CTRL, (1<<PA_CTRL_APAPRECH)); in snd_at73c213_chip_init()
805 retval = snd_at73c213_write_reg(chip, DAC_CTRL, in snd_at73c213_chip_init()
813 retval = snd_at73c213_write_reg(chip, PA_CTRL, in snd_at73c213_chip_init()
821 retval = snd_at73c213_write_reg(chip, DAC_PRECH, (1<<DAC_PRECH_ONMSTR)); in snd_at73c213_chip_init()
831 retval = snd_at73c213_write_reg(chip, DAC_CTRL, dac_ctrl); in snd_at73c213_chip_init()
836 retval = snd_at73c213_write_reg(chip, DAC_LMPG, 0x3f); in snd_at73c213_chip_init()
839 retval = snd_at73c213_write_reg(chip, DAC_RMPG, 0x3f); in snd_at73c213_chip_init()
842 retval = snd_at73c213_write_reg(chip, DAC_LLOG, 0x3f); in snd_at73c213_chip_init()
845 retval = snd_at73c213_write_reg(chip, DAC_RLOG, 0x3f); in snd_at73c213_chip_init()
848 retval = snd_at73c213_write_reg(chip, DAC_LLIG, 0x11); in snd_at73c213_chip_init()
851 retval = snd_at73c213_write_reg(chip, DAC_RLIG, 0x11); in snd_at73c213_chip_init()
854 retval = snd_at73c213_write_reg(chip, DAC_AUXG, 0x11); in snd_at73c213_chip_init()
859 ssc_writel(chip->ssc->regs, CR, SSC_BIT(CR_TXEN)); in snd_at73c213_chip_init()
864 clk_disable(chip->board->dac_clk); in snd_at73c213_chip_init()
871 struct snd_at73c213 *chip = device->device_data; in snd_at73c213_dev_free() local
873 ssc_writel(chip->ssc->regs, CR, SSC_BIT(CR_TXDIS)); in snd_at73c213_dev_free()
874 if (chip->irq >= 0) { in snd_at73c213_dev_free()
875 free_irq(chip->irq, chip); in snd_at73c213_dev_free()
876 chip->irq = -1; in snd_at73c213_dev_free()
888 struct snd_at73c213 *chip = get_chip(card); in snd_at73c213_dev_init() local
891 irq = chip->ssc->irq; in snd_at73c213_dev_init()
895 spin_lock_init(&chip->lock); in snd_at73c213_dev_init()
896 mutex_init(&chip->mixer_lock); in snd_at73c213_dev_init()
897 chip->card = card; in snd_at73c213_dev_init()
898 chip->irq = -1; in snd_at73c213_dev_init()
900 retval = request_irq(irq, snd_at73c213_interrupt, 0, "at73c213", chip); in snd_at73c213_dev_init()
902 dev_dbg(&chip->spi->dev, "unable to request irq %d\n", irq); in snd_at73c213_dev_init()
905 chip->irq = irq; in snd_at73c213_dev_init()
907 memcpy(&chip->reg_image, &snd_at73c213_original_image, in snd_at73c213_dev_init()
910 retval = snd_at73c213_ssc_init(chip); in snd_at73c213_dev_init()
914 retval = snd_at73c213_chip_init(chip); in snd_at73c213_dev_init()
918 retval = snd_at73c213_pcm_new(chip, 0); in snd_at73c213_dev_init()
922 retval = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops); in snd_at73c213_dev_init()
926 retval = snd_at73c213_mixer(chip); in snd_at73c213_dev_init()
933 snd_device_free(card, chip); in snd_at73c213_dev_init()
935 free_irq(chip->irq, chip); in snd_at73c213_dev_init()
936 chip->irq = -1; in snd_at73c213_dev_init()
944 struct snd_at73c213 *chip; in snd_at73c213_probe() local
972 chip = card->private_data; in snd_at73c213_probe()
973 chip->spi = spi; in snd_at73c213_probe()
974 chip->board = board; in snd_at73c213_probe()
976 chip->ssc = ssc_request(board->ssc_id); in snd_at73c213_probe()
977 if (IS_ERR(chip->ssc)) { in snd_at73c213_probe()
980 retval = PTR_ERR(chip->ssc); in snd_at73c213_probe()
990 sprintf(card->longname, "%s on irq %d", card->shortname, chip->irq); in snd_at73c213_probe()
1001 ssc_free(chip->ssc); in snd_at73c213_probe()
1011 struct snd_at73c213 *chip = card->private_data; in snd_at73c213_remove() local
1015 ssc_writel(chip->ssc->regs, CR, SSC_BIT(CR_TXDIS)); in snd_at73c213_remove()
1018 retval = snd_at73c213_write_reg(chip, DAC_LMPG, 0x3f); in snd_at73c213_remove()
1021 retval = snd_at73c213_write_reg(chip, DAC_RMPG, 0x3f); in snd_at73c213_remove()
1024 retval = snd_at73c213_write_reg(chip, DAC_LLOG, 0x3f); in snd_at73c213_remove()
1027 retval = snd_at73c213_write_reg(chip, DAC_RLOG, 0x3f); in snd_at73c213_remove()
1030 retval = snd_at73c213_write_reg(chip, DAC_LLIG, 0x11); in snd_at73c213_remove()
1033 retval = snd_at73c213_write_reg(chip, DAC_RLIG, 0x11); in snd_at73c213_remove()
1036 retval = snd_at73c213_write_reg(chip, DAC_AUXG, 0x11); in snd_at73c213_remove()
1041 retval = snd_at73c213_write_reg(chip, PA_CTRL, in snd_at73c213_remove()
1042 chip->reg_image[PA_CTRL] | 0x0f); in snd_at73c213_remove()
1046 retval = snd_at73c213_write_reg(chip, PA_CTRL, in snd_at73c213_remove()
1052 retval = snd_at73c213_write_reg(chip, DAC_CTRL, 0x0c); in snd_at73c213_remove()
1056 retval = snd_at73c213_write_reg(chip, DAC_CTRL, 0x00); in snd_at73c213_remove()
1061 retval = snd_at73c213_write_reg(chip, DAC_PRECH, 0x00); in snd_at73c213_remove()
1067 clk_disable(chip->board->dac_clk); in snd_at73c213_remove()
1069 ssc_free(chip->ssc); in snd_at73c213_remove()
1080 struct snd_at73c213 *chip = card->private_data; in snd_at73c213_suspend() local
1082 ssc_writel(chip->ssc->regs, CR, SSC_BIT(CR_TXDIS)); in snd_at73c213_suspend()
1083 clk_disable(chip->board->dac_clk); in snd_at73c213_suspend()
1091 struct snd_at73c213 *chip = card->private_data; in snd_at73c213_resume() local
1093 clk_enable(chip->board->dac_clk); in snd_at73c213_resume()
1094 ssc_writel(chip->ssc->regs, CR, SSC_BIT(CR_TXEN)); in snd_at73c213_resume()