• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-WNDR4500-V1.0.1.40_1.0.68/src/linux/linux-2.6/sound/arm/

Lines Matching defs:aaci

2  *  linux/sound/arm/aaci.c - ARM PrimeCell AACI PL041 driver
33 #include "aaci.h"
36 #define DRIVER_NAME "aaci-pl041"
43 static void aaci_ac97_select_codec(struct aaci *aaci, struct snd_ac97 *ac97)
45 u32 v, maincr = aaci->maincr | MAINCR_SCRA(ac97->num);
50 v = readl(aaci->base + AACI_SLFR);
52 readl(aaci->base + AACI_SL2RX);
54 readl(aaci->base + AACI_SL1RX);
56 writel(maincr, aaci->base + AACI_MAINCR);
71 struct aaci *aaci = ac97->private_data;
78 mutex_lock(&aaci->ac97_sem);
80 aaci_ac97_select_codec(aaci, ac97);
86 writel(val << 4, aaci->base + AACI_SL2TX);
87 writel(reg << 12, aaci->base + AACI_SL1TX);
93 v = readl(aaci->base + AACI_SLFR);
97 dev_err(&aaci->dev->dev,
100 mutex_unlock(&aaci->ac97_sem);
108 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);
129 v = readl(aaci->base + AACI_SLFR);
133 dev_err(&aaci->dev->dev, "timeout on slot 1 TX busy\n");
150 v = readl(aaci->base + AACI_SLFR) & (SLFR_1RXV|SLFR_2RXV);
154 dev_err(&aaci->dev->dev, "timeout on RX valid\n");
160 v = readl(aaci->base + AACI_SL1RX) >> 12;
162 v = readl(aaci->base + AACI_SL2RX) >> 4;
165 dev_warn(&aaci->dev->dev,
169 dev_warn(&aaci->dev->dev,
176 mutex_unlock(&aaci->ac97_sem);
195 static void aaci_fifo_irq(struct aaci *aaci, int channel, u32 mask)
198 dev_warn(&aaci->dev->dev, "RX overrun on chan %d\n", channel);
199 writel(ICLR_RXOEC1 << channel, aaci->base + AACI_INTCLR);
203 dev_warn(&aaci->dev->dev, "RX timeout on chan %d\n", channel);
204 writel(ICLR_RXTOFEC1 << channel, aaci->base + AACI_INTCLR);
208 struct aaci_runtime *aacirun = &aaci->capture;
212 dev_warn(&aaci->dev->dev, "RX interrupt???");
225 spin_unlock(&aaci->lock);
227 spin_lock(&aaci->lock);
257 dev_dbg(&aaci->dev->dev, "TX underrun on chan %d\n", channel);
258 writel(ICLR_TXUEC1 << channel, aaci->base + AACI_INTCLR);
262 struct aaci_runtime *aacirun = &aaci->playback;
266 dev_warn(&aaci->dev->dev, "TX interrupt???");
279 spin_unlock(&aaci->lock);
281 spin_lock(&aaci->lock);
314 struct aaci *aaci = devid;
318 spin_lock(&aaci->lock);
319 mask = readl(aaci->base + AACI_ALLINTS);
324 aaci_fifo_irq(aaci, i, m);
328 spin_unlock(&aaci->lock);
359 static inline unsigned int aaci_rate_mask(struct aaci *aaci, int streamid)
362 return aaci->ac97_bus->codec[s->codec_idx]->rates[s->rate_idx];
377 struct aaci *aaci = rule->private;
383 rate_mask &= aaci_rate_mask(aaci, ACSTREAM_LFE);
385 rate_mask &= aaci_rate_mask(aaci, ACSTREAM_SURROUND);
387 rate_mask &= aaci_rate_mask(aaci, ACSTREAM_FRONT);
421 static int __aaci_pcm_open(struct aaci *aaci,
432 runtime->hw.fifo_size = aaci->fifosize * 2;
439 aaci_rule_rate_by_channels, aaci,
445 ret = request_irq(aaci->dev->irq[0], aaci_irq, IRQF_SHARED|IRQF_DISABLED,
446 DRIVER_NAME, aaci);
462 struct aaci *aaci = substream->private_data;
468 free_irq(aaci->dev->irq[0], aaci);
577 struct aaci *aaci = rule->private;
583 slots = aaci->ac97_bus->pcms[0].r[0].slots;
597 struct aaci *aaci = substream->private_data;
605 aaci_rule_channels, aaci,
611 ret = __aaci_pcm_open(aaci, substream, &aaci->playback);
613 ret = __aaci_pcm_open(aaci, substream, &aaci->capture);
621 struct aaci *aaci = substream->private_data;
635 aacirun->fifosz = aaci->fifosize * 4;
669 struct aaci *aaci = substream->private_data;
674 spin_lock_irqsave(&aaci->lock, flags);
701 spin_unlock_irqrestore(&aaci->lock, flags);
721 struct aaci *aaci = substream->private_data;
733 aacirun->fifosz = aaci->fifosize * 4;
777 struct aaci *aaci = substream->private_data;
782 spin_lock_irqsave(&aaci->lock, flags);
811 spin_unlock_irqrestore(&aaci->lock, flags);
819 struct aaci *aaci = substream->private_data;
824 aaci_ac97_write(aaci->ac97, AC97_EXTENDED_STATUS, 0x0001); /* VRA */
825 aaci_ac97_write(aaci->ac97, AC97_PCM_LR_ADC_RATE, runtime->rate);
826 aaci_ac97_write(aaci->ac97, AC97_PCM_MIC_ADC_RATE, runtime->rate);
829 aaci_ac97_write(aaci->ac97, AC97_REC_SEL, 0x0404);
852 struct aaci *aaci = card->private_data;
854 snd_pcm_suspend_all(aaci->pcm);
923 static int __devinit aaci_probe_ac97(struct aaci *aaci)
933 writel(0, aaci->base + AACI_RESET);
935 writel(RESET_NRST, aaci->base + AACI_RESET);
943 ret = snd_ac97_bus(aaci->card, 0, &aaci_bus_ops, aaci, &ac97_bus);
948 aaci->ac97_bus = ac97_bus;
951 ac97_template.private_data = aaci;
958 aaci->ac97 = ac97;
970 aaci->playback.pcm = &ac97_bus->pcms[0];
971 aaci->capture.pcm = &ac97_bus->pcms[1];
979 struct aaci *aaci = card->private_data;
980 if (aaci->base)
981 iounmap(aaci->base);
984 static struct aaci * __devinit aaci_init_card(struct amba_device *dev)
986 struct aaci *aaci;
990 THIS_MODULE, sizeof(struct aaci));
1003 aaci = card->private_data;
1004 mutex_init(&aaci->ac97_sem);
1005 spin_lock_init(&aaci->lock);
1006 aaci->card = card;
1007 aaci->dev = dev;
1010 aaci->maincr = MAINCR_IE | MAINCR_SL1RXEN | MAINCR_SL1TXEN |
1013 return aaci;
1016 static int __devinit aaci_init_pcm(struct aaci *aaci)
1021 ret = snd_pcm_new(aaci->card, "AACI AC'97", 0, 1, 1, &pcm);
1023 aaci->pcm = pcm;
1024 pcm->private_data = aaci;
1036 static unsigned int __devinit aaci_size_fifo(struct aaci *aaci)
1038 struct aaci_runtime *aacirun = &aaci->playback;
1053 writel(aaci->maincr & ~MAINCR_IE, aaci->base + AACI_MAINCR);
1054 writel(aaci->maincr, aaci->base + AACI_MAINCR);
1068 struct aaci *aaci;
1075 aaci = aaci_init_card(dev);
1076 if (IS_ERR(aaci)) {
1077 ret = PTR_ERR(aaci);
1081 aaci->base = ioremap(dev->res.start, SZ_4K);
1082 if (!aaci->base) {
1090 aaci->playback.base = aaci->base + AACI_CSCH1;
1091 aaci->playback.fifo = aaci->base + AACI_DR1;
1096 aaci->capture.base = aaci->base + AACI_CSCH1;
1097 aaci->capture.fifo = aaci->base + AACI_DR1;
1100 void __iomem *base = aaci->base + i * 0x14;
1107 writel(0x1fff, aaci->base + AACI_INTCLR);
1108 writel(aaci->maincr, aaci->base + AACI_MAINCR);
1110 ret = aaci_probe_ac97(aaci);
1117 aaci->fifosize = aaci_size_fifo(aaci);
1118 if (aaci->fifosize & 15) {
1120 aaci->fifosize);
1125 ret = aaci_init_pcm(aaci);
1129 snd_card_set_dev(aaci->card, &dev->dev);
1131 ret = snd_card_register(aaci->card);
1133 dev_info(&dev->dev, "%s, fifo %d\n", aaci->card->longname,
1134 aaci->fifosize);
1135 amba_set_drvdata(dev, aaci->card);
1140 if (aaci)
1141 snd_card_free(aaci->card);
1153 struct aaci *aaci = card->private_data;
1154 writel(0, aaci->base + AACI_MAINCR);