static void ad1889_interrupt(int irq, void *dev_id, struct pt_regs *regs) { u32 stat; ad1889_dev_t *dev = (ad1889_dev_t *)dev_id; stat = AD1889_READL(dev, AD_DMADISR); /* clear ISR */ AD1889_WRITEL(dev, AD_DMADISR, stat); if (stat & 0x8) { /* WAVI */ DBG("WAV interrupt\n"); dev->stats.wav_intrs++; if (dev->state[AD_WAV_STATE].dmabuf.ready) { ad1889_stop_wav(&dev->state[AD_WAV_STATE]); /* clean up */ ad1889_start_wav(&dev->state[AD_WAV_STATE]); /* start new */ } } if (stat & 0x2 && dev->state[AD_ADC_STATE].dmabuf.ready) { /* ADCI */ DBG("ADC interrupt\n"); dev->stats.adc_intrs++; } }
static irqreturn_t ad1889_interrupt(int irq, void *dev_id) { u32 stat; ad1889_dev_t *dev = (ad1889_dev_t *)dev_id; stat = AD1889_READL(dev, AD_DMA_DISR); /* clear ISR */ AD1889_WRITEL(dev, AD_DMA_DISR, stat); if (stat & 0x8) { /* WAVI */ DBG("WAV interrupt\n"); dev->stats.wav_intrs++; if (dev->state[AD_WAV_STATE].dmabuf.ready) { ad1889_stop_wav(&dev->state[AD_WAV_STATE]); /* clean up */ ad1889_start_wav(&dev->state[AD_WAV_STATE]); /* start new */ } } if ((stat & 0x2) && dev->state[AD_ADC_STATE].dmabuf.ready) { /* ADCI */ DBG("ADC interrupt\n"); dev->stats.adc_intrs++; } if(stat) return IRQ_HANDLED; return IRQ_NONE; }
static inline void ad1889_trigger_playback(ad1889_dev_t *dev) { #if 0 u32 val; struct dmabuf *dmabuf = &dev->state[AD_WAV_STATE].dmabuf; #endif ad1889_start_wav(&dev->state[AD_WAV_STATE]); }