The pointer of the serial FIFO in the DSP seems to make an error

upon starting/stopping the DSP. Correct the pointer in addition
to clearing the FIFO.
This commit is contained in:
Seigo Tanimura 2000-01-23 07:04:02 +00:00
parent f8d951c30f
commit 8f7076b8ff

View File

@ -447,10 +447,18 @@ csa_stopplaydma(struct csa_info *csa)
csa->pctl = ul & 0xffff0000;
csa_writemem(resp, BA1_PCTL, ul & 0x0000ffff);
csa_writemem(resp, BA1_PVOL, 0xffffffff);
/* Clear the serial fifos. */
csa_clearserialfifos(resp);
csa->pch.dma = 0;
/*
* The bitwise pointer of the serial FIFO in the DSP
* seems to make an error upon starting or stopping the
* DSP. Clear the FIFO and correct the pointer if we
* are not capturing.
*/
if (!csa->rch.dma) {
csa_clearserialfifos(resp);
csa_writeio(resp, BA0_SERBSP, 0);
}
}
}
@ -467,6 +475,17 @@ csa_stopcapturedma(struct csa_info *csa)
csa_writemem(resp, BA1_CCTL, ul & 0xffff0000);
csa_writemem(resp, BA1_CVOL, 0xffffffff);
csa->rch.dma = 0;
/*
* The bitwise pointer of the serial FIFO in the DSP
* seems to make an error upon starting or stopping the
* DSP. Clear the FIFO and correct the pointer if we
* are not playing.
*/
if (!csa->pch.dma) {
csa_clearserialfifos(resp);
csa_writeio(resp, BA0_SERBSP, 0);
}
}
}