[Sound-open-firmware] [PATCH] SSP: refine ssp stop function
Rander Wang
rander.wang at linux.intel.com
Tue Jun 5 07:32:01 CEST 2018
merge commit 72e63a467fb8f743 ("apl-ssp: change and wrap status
transition into ssp_stop")
Signed-off-by: Keyon Jie <yang.jie at linux.intel.com>
Signed-off-by: Rander Wang <rander.wang at linux.intel.com>
---
test it on Broadwell, no need to test other platforms
SOF: master 131a1887631621
kernel: v4.14 d09db67c5a9d6d
SOF-tools: master 13b56fa6047c566a
---
src/drivers/hsw-ssp.c | 17 ++++++++++-------
1 file changed, 10 insertions(+), 7 deletions(-)
diff --git a/src/drivers/hsw-ssp.c b/src/drivers/hsw-ssp.c
index 8e30900..0d74e7d 100644
--- a/src/drivers/hsw-ssp.c
+++ b/src/drivers/hsw-ssp.c
@@ -437,23 +437,27 @@ static void ssp_start(struct dai *dai, int direction)
}
/* stop the SSP for either playback or capture */
-static void ssp_stop(struct dai *dai)
+static void ssp_stop(struct dai *dai, int direction)
{
struct ssp_pdata *ssp = dai_get_drvdata(dai);
spin_lock(&ssp->lock);
- /* stop Rx if we are not capturing */
- if (ssp->state[SOF_IPC_STREAM_CAPTURE] != COMP_STATE_ACTIVE) {
+ /* stop Rx if neeed */
+ if (direction == DAI_DIR_CAPTURE &&
+ ssp->state[SOF_IPC_STREAM_CAPTURE] == COMP_STATE_ACTIVE) {
ssp_update_bits(dai, SSCR1, SSCR1_RSRE, 0);
ssp_update_bits(dai, SSCR0, SSCR0_RIM, SSCR0_RIM);
+ ssp->state[SOF_IPC_STREAM_CAPTURE] = COMP_STATE_PAUSED;
trace_ssp("Ss0");
}
- /* stop Tx if we are not playing */
- if (ssp->state[SOF_IPC_STREAM_PLAYBACK] != COMP_STATE_ACTIVE) {
+ /* stop Tx if needed */
+ if (direction == DAI_DIR_PLAYBACK &&
+ ssp->state[SOF_IPC_STREAM_PLAYBACK] == COMP_STATE_ACTIVE) {
ssp_update_bits(dai, SSCR1, SSCR1_TSRE, 0);
ssp_update_bits(dai, SSCR0, SSCR0_TIM, SSCR0_TIM);
+ ssp->state[SOF_IPC_STREAM_PLAYBACK] = COMP_STATE_PAUSED;
trace_ssp("Ss1");
}
@@ -488,8 +492,7 @@ static int ssp_trigger(struct dai *dai, int cmd, int direction)
break;
case COMP_TRIGGER_STOP:
case COMP_TRIGGER_PAUSE:
- ssp->state[direction] = COMP_STATE_PAUSED;
- ssp_stop(dai);
+ ssp_stop(dai, direction);
break;
case COMP_TRIGGER_RESUME:
ssp_context_restore(dai);
--
2.14.1
More information about the Sound-open-firmware
mailing list