if (h->csubs) { 
if (h->csubs && h->st.capturing) { 
snd_harmony_interrupt(int irq, void *dev, struct pt_regs *regs){	u32 dstatus;	harmony_t *h = dev;	spin_lock(&h->lock);	harmony_disable_interrupts(h);	harmony_wait_for_control(h);	dstatus = harmony_read(h, HARMONY_DSTATUS);	spin_unlock(&h->lock);	if (dstatus & HARMONY_DSTATUS_PN) {		if (h->psubs) {			spin_lock(&h->lock);			h->pbuf.buf += h->pbuf.count; /* PAGE_SIZE */			h->pbuf.buf %= h->pbuf.size; /* MAX_BUFS*PAGE_SIZE */			harmony_write(h, HARMONY_PNXTADD, 				      h->pbuf.addr + h->pbuf.buf);			h->stats.play_intr++;			spin_unlock(&h->lock);                        snd_pcm_period_elapsed(h->psubs);		} else {			spin_lock(&h->lock);			harmony_write(h, HARMONY_PNXTADD, h->sdma.addr);			h->stats.silence_intr++;			spin_unlock(&h->lock);		}	}	if (dstatus & HARMONY_DSTATUS_RN) {		if (h->csubs) {			spin_lock(&h->lock);			h->cbuf.buf += h->cbuf.count;			h->cbuf.buf %= h->cbuf.size;			harmony_write(h, HARMONY_RNXTADD,				      h->cbuf.addr + h->cbuf.buf);			h->stats.rec_intr++;			spin_unlock(&h->lock);                        snd_pcm_period_elapsed(h->csubs);		} else {			spin_lock(&h->lock);			harmony_write(h, HARMONY_RNXTADD, h->gdma.addr);			h->stats.graveyard_intr++;			spin_unlock(&h->lock);		}	}	spin_lock(&h->lock);	harmony_enable_interrupts(h);	spin_unlock(&h->lock);	return IRQ_HANDLED;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/3a165680168758733b7a9f7fb835954fbe6b91a8/harmony.c/clean/sound/parisc/harmony.c