diff options
author | Sigrid Solveig Haflínudóttir <sigrid@ftrv.se> | 2022-08-19 00:46:34 +0000 |
---|---|---|
committer | Sigrid Solveig Haflínudóttir <sigrid@ftrv.se> | 2022-08-19 00:46:34 +0000 |
commit | bdc9a81b2fba73ecfeb1a35954aef9f0cef69897 (patch) | |
tree | dee9de17513162db264f1b92bbd9482d7869b947 /sys/src/9/imx8 | |
parent | e0e2e9d81b4dbdabb7521dcc68e9f980f26cc3a9 (diff) |
imx8/sai: flush the ring on close to avoid garbage leftovers on restarts
Diffstat (limited to 'sys/src/9/imx8')
-rw-r--r-- | sys/src/9/imx8/sai.c | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/sys/src/9/imx8/sai.c b/sys/src/9/imx8/sai.c index 96412c357..0e5a35d15 100644 --- a/sys/src/9/imx8/sai.c +++ b/sys/src/9/imx8/sai.c @@ -156,6 +156,15 @@ saikick(Ctlr *ctlr) } static void +setempty(Ctlr *ctlr) +{ + ilock(ctlr); + ctlr->w.ri = 0; + ctlr->w.wi = 0; + iunlock(ctlr); +} + +static void saistop(Ctlr *ctlr) { if(!ctlr->wactive) @@ -164,6 +173,13 @@ saistop(Ctlr *ctlr) wr(TCSR, TCSR_FR | TCSR_SR); } +static int +inactive(void *arg) +{ + Ctlr *ctlr = arg; + return !ctlr->wactive; +} + static long saiwrite(Audio *adev, void *a, long n, vlong) { @@ -193,8 +209,10 @@ saiclose(Audio *adev, int mode) { Ctlr *ctlr = adev->ctlr; - if(mode == OWRITE || mode == ORDWR) - saistop(ctlr); + if(mode == OWRITE || mode == ORDWR){ + sleep(&ctlr->w.r, inactive, ctlr); + setempty(ctlr); + } } static void |