Lines Matching defs:aaci

3  *  linux/sound/arm/aaci.c - ARM PrimeCell AACI PL041 driver
26 #include "aaci.h"
28 #define DRIVER_NAME "aaci-pl041"
37 static void aaci_ac97_select_codec(struct aaci *aaci, struct snd_ac97 *ac97)
39 u32 v, maincr = aaci->maincr | MAINCR_SCRA(ac97->num);
44 v = readl(aaci->base + AACI_SLFR);
46 readl(aaci->base + AACI_SL2RX);
48 readl(aaci->base + AACI_SL1RX);
50 if (maincr != readl(aaci->base + AACI_MAINCR)) {
51 writel(maincr, aaci->base + AACI_MAINCR);
52 readl(aaci->base + AACI_MAINCR);
69 struct aaci *aaci = ac97->private_data;
76 mutex_lock(&aaci->ac97_sem);
78 aaci_ac97_select_codec(aaci, ac97);
84 writel(val << 4, aaci->base + AACI_SL2TX);
85 writel(reg << 12, aaci->base + AACI_SL1TX);
94 v = readl(aaci->base + AACI_SLFR);
98 dev_err(&aaci->dev->dev,
101 mutex_unlock(&aaci->ac97_sem);
109 struct aaci *aaci = ac97->private_data;
116 mutex_lock(&aaci->ac97_sem);
118 aaci_ac97_select_codec(aaci, ac97);
123 writel((reg << 12) | (1 << 19), aaci->base + AACI_SL1TX);
132 v = readl(aaci->base + AACI_SLFR);
136 dev_err(&aaci->dev->dev, "timeout on slot 1 TX busy\n");
149 v = readl(aaci->base + AACI_SLFR) & (SLFR_1RXV|SLFR_2RXV);
153 dev_err(&aaci->dev->dev, "timeout on RX valid\n");
159 v = readl(aaci->base + AACI_SL1RX) >> 12;
161 v = readl(aaci->base + AACI_SL2RX) >> 4;
164 dev_warn(&aaci->dev->dev,
168 dev_warn(&aaci->dev->dev,
175 mutex_unlock(&aaci->ac97_sem);
196 static void aaci_fifo_irq(struct aaci *aaci, int channel, u32 mask)
199 dev_warn(&aaci->dev->dev, "RX overrun on chan %d\n", channel);
200 writel(ICLR_RXOEC1 << channel, aaci->base + AACI_INTCLR);
204 dev_warn(&aaci->dev->dev, "RX timeout on chan %d\n", channel);
205 writel(ICLR_RXTOFEC1 << channel, aaci->base + AACI_INTCLR);
209 struct aaci_runtime *aacirun = &aaci->capture;
214 dev_warn(&aaci->dev->dev, "RX interrupt???\n");
264 dev_dbg(&aaci->dev->dev, "TX underrun on chan %d\n", channel);
265 writel(ICLR_TXUEC1 << channel, aaci->base + AACI_INTCLR);
269 struct aaci_runtime *aacirun = &aaci->playback;
274 dev_warn(&aaci->dev->dev, "TX interrupt???\n");
326 struct aaci *aaci = devid;
330 mask = readl(aaci->base + AACI_ALLINTS);
335 aaci_fifo_irq(aaci, i, m);
384 struct aaci *aaci = rule->private;
388 slots = aaci->ac97_bus->pcms[0].r[0].slots;
402 struct aaci *aaci = substream->private_data;
407 aacirun = &aaci->playback;
409 aacirun = &aaci->capture;
424 aaci_rule_channels, aaci,
438 runtime->hw.fifo_size = aaci->fifo_depth * 2;
440 mutex_lock(&aaci->irq_lock);
441 if (!aaci->users++) {
442 ret = request_irq(aaci->dev->irq[0], aaci_irq,
443 IRQF_SHARED, DRIVER_NAME, aaci);
445 aaci->users--;
447 mutex_unlock(&aaci->irq_lock);
458 struct aaci *aaci = substream->private_data;
465 mutex_lock(&aaci->irq_lock);
466 if (!--aaci->users)
467 free_irq(aaci->dev->irq[0], aaci);
468 mutex_unlock(&aaci->irq_lock);
500 struct aaci *aaci = substream->private_data;
528 aacirun->fifo_bytes = aaci->fifo_depth * 4 / 2;
712 struct aaci *aaci = substream->private_data;
717 aaci_ac97_write(aaci->ac97, AC97_EXTENDED_STATUS, 0x0001); /* VRA */
718 aaci_ac97_write(aaci->ac97, AC97_PCM_LR_ADC_RATE, runtime->rate);
719 aaci_ac97_write(aaci->ac97, AC97_PCM_MIC_ADC_RATE, runtime->rate);
722 aaci_ac97_write(aaci->ac97, AC97_REC_SEL, 0x0404);
743 struct aaci *aaci = card->private_data;
819 static int aaci_probe_ac97(struct aaci *aaci)
829 writel(0, aaci->base + AACI_RESET);
831 writel(RESET_NRST, aaci->base + AACI_RESET);
839 ret = snd_ac97_bus(aaci->card, 0, &aaci_bus_ops, aaci, &ac97_bus);
844 aaci->ac97_bus = ac97_bus;
847 ac97_template.private_data = aaci;
854 aaci->ac97 = ac97;
866 aaci->playback.pcm = &ac97_bus->pcms[0];
867 aaci->capture.pcm = &ac97_bus->pcms[1];
875 struct aaci *aaci = card->private_data;
877 iounmap(aaci->base);
880 static struct aaci *aaci_init_card(struct amba_device *dev)
882 struct aaci *aaci;
887 THIS_MODULE, sizeof(struct aaci), &card);
900 aaci = card->private_data;
901 mutex_init(&aaci->ac97_sem);
902 mutex_init(&aaci->irq_lock);
903 aaci->card = card;
904 aaci->dev = dev;
907 aaci->maincr = MAINCR_IE | MAINCR_SL1RXEN | MAINCR_SL1TXEN |
910 return aaci;
913 static int aaci_init_pcm(struct aaci *aaci)
918 ret = snd_pcm_new(aaci->card, "AACI AC'97", 0, 1, 1, &pcm);
920 aaci->pcm = pcm;
921 pcm->private_data = aaci;
929 aaci->card->dev,
936 static unsigned int aaci_size_fifo(struct aaci *aaci)
938 struct aaci_runtime *aacirun = &aaci->playback;
957 writel(aaci->maincr & ~MAINCR_IE, aaci->base + AACI_MAINCR);
958 readl(aaci->base + AACI_MAINCR);
960 writel(aaci->maincr, aaci->base + AACI_MAINCR);
975 struct aaci *aaci;
982 aaci = aaci_init_card(dev);
983 if (!aaci) {
988 aaci->base = ioremap(dev->res.start, resource_size(&dev->res));
989 if (!aaci->base) {
997 spin_lock_init(&aaci->playback.lock);
998 aaci->playback.base = aaci->base + AACI_CSCH1;
999 aaci->playback.fifo = aaci->base + AACI_DR1;
1004 spin_lock_init(&aaci->capture.lock);
1005 aaci->capture.base = aaci->base + AACI_CSCH1;
1006 aaci->capture.fifo = aaci->base + AACI_DR1;
1009 void __iomem *base = aaci->base + i * 0x14;
1016 writel(0x1fff, aaci->base + AACI_INTCLR);
1017 writel(aaci->maincr, aaci->base + AACI_MAINCR);
1020 * from any arbitrary aaci register.
1022 readl(aaci->base + AACI_CSCH1);
1023 ret = aaci_probe_ac97(aaci);
1031 aaci->fifo_depth = aaci_size_fifo(aaci);
1032 if (aaci->fifo_depth & 15) {
1034 aaci->fifo_depth);
1039 ret = aaci_init_pcm(aaci);
1043 ret = snd_card_register(aaci->card);
1045 dev_info(&dev->dev, "%s\n", aaci->card->longname);
1046 dev_info(&dev->dev, "FIFO %u entries\n", aaci->fifo_depth);
1047 amba_set_drvdata(dev, aaci->card);
1052 if (aaci)
1053 snd_card_free(aaci->card);
1063 struct aaci *aaci = card->private_data;
1064 writel(0, aaci->base + AACI_MAINCR);