asoc: add render mode support in transcode loopback
Add new TTP render mode in compress driver and render mode support in transcode loopback driver. Change-Id: I636ecd5fd3fa5ccafb6086b4fca41c240b758391 Signed-off-by: Surendar Karka <skarka@codeaurora.org>
This commit is contained in:
1 parent
6c5a358b13
commit
681a9ea695
3 files changed
+72
-6
No files matched your search
@@ -231,12 +231,19 @@ static int msm_compr_set_render_mode(struct msm_compr_audio *prtd,
|
||||
|
||||
pr_debug("%s, got render mode %u\n", __func__, render_mode);
|
||||
|
||||
if (render_mode == SNDRV_COMPRESS_RENDER_MODE_AUDIO_MASTER) {
|
||||
switch (render_mode) {
|
||||
case SNDRV_COMPRESS_RENDER_MODE_AUDIO_MASTER:
|
||||
render_mode = ASM_SESSION_MTMX_STRTR_PARAM_RENDER_DEFAULT;
|
||||
} else if (render_mode == SNDRV_COMPRESS_RENDER_MODE_STC_MASTER) {
|
||||
break;
|
||||
case SNDRV_COMPRESS_RENDER_MODE_STC_MASTER:
|
||||
render_mode = ASM_SESSION_MTMX_STRTR_PARAM_RENDER_LOCAL_STC;
|
||||
prtd->run_mode = ASM_SESSION_CMD_RUN_STARTIME_RUN_WITH_DELAY;
|
||||
} else {
|
||||
break;
|
||||
case SNDRV_COMPRESS_RENDER_MODE_TTP:
|
||||
render_mode = ASM_SESSION_MTMX_STRTR_PARAM_RENDER_LOCAL_STC;
|
||||
prtd->run_mode = ASM_SESSION_CMD_RUN_STARTIME_RUN_WITH_TTP;
|
||||
break;
|
||||
default:
|
||||
pr_err("%s, Invalid render mode %u\n", __func__,
|
||||
render_mode);
|
||||
ret = -EINVAL;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
/* Copyright (c) 2017-2019, The Linux Foundation. All rights reserved.
|
||||
/* Copyright (c) 2017-2020, The Linux Foundation. All rights reserved.
|
||||
*/
|
||||
|
||||
#include <linux/init.h>
|
||||
@@ -95,6 +95,9 @@ struct msm_transcode_loopback {
|
||||
|
||||
int session_id;
|
||||
struct audio_client *audio_client;
|
||||
uint32_t run_mode;
|
||||
uint32_t start_delay_lsw;
|
||||
uint32_t start_delay_msw;
|
||||
};
|
||||
|
||||
/* Transcode loopback global info struct */
|
||||
@@ -342,6 +345,7 @@ static int msm_transcode_loopback_free(struct snd_compr_stream *cstream)
|
||||
}
|
||||
|
||||
trans->session_state = LOOPBACK_SESSION_CLOSE;
|
||||
trans->run_mode = ASM_SESSION_CMD_RUN_STARTIME_RUN_IMMEDIATE;
|
||||
mutex_unlock(&trans->lock);
|
||||
return ret;
|
||||
}
|
||||
@@ -360,7 +364,9 @@ static int msm_transcode_loopback_trigger(struct snd_compr_stream *cstream,
|
||||
if (trans->session_state == LOOPBACK_SESSION_START) {
|
||||
pr_debug("%s: Issue Loopback session %d RUN\n",
|
||||
__func__, trans->instance);
|
||||
q6asm_run_nowait(trans->audio_client, 0, 0, 0);
|
||||
q6asm_run_nowait(trans->audio_client, trans->run_mode,
|
||||
trans->start_delay_msw,
|
||||
trans->start_delay_lsw);
|
||||
trans->session_state = LOOPBACK_SESSION_RUN;
|
||||
}
|
||||
break;
|
||||
@@ -606,6 +612,42 @@ static int msm_transcode_loopback_get_caps(struct snd_compr_stream *cstream,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int msm_transcode_set_render_mode(struct msm_transcode_loopback *prtd,
|
||||
uint32_t render_mode)
|
||||
{
|
||||
int ret = -EINVAL;
|
||||
struct audio_client *ac = prtd->audio_client;
|
||||
|
||||
pr_debug("%s: got render mode %u\n", __func__, render_mode);
|
||||
|
||||
switch (render_mode) {
|
||||
case SNDRV_COMPRESS_RENDER_MODE_AUDIO_MASTER:
|
||||
render_mode = ASM_SESSION_MTMX_STRTR_PARAM_RENDER_DEFAULT;
|
||||
break;
|
||||
case SNDRV_COMPRESS_RENDER_MODE_STC_MASTER:
|
||||
render_mode = ASM_SESSION_MTMX_STRTR_PARAM_RENDER_LOCAL_STC;
|
||||
prtd->run_mode = ASM_SESSION_CMD_RUN_STARTIME_RUN_WITH_DELAY;
|
||||
break;
|
||||
case SNDRV_COMPRESS_RENDER_MODE_TTP:
|
||||
render_mode = ASM_SESSION_MTMX_STRTR_PARAM_RENDER_LOCAL_STC;
|
||||
prtd->run_mode = ASM_SESSION_CMD_RUN_STARTIME_RUN_WITH_TTP;
|
||||
break;
|
||||
default:
|
||||
pr_err("%s: Invalid render mode %u\n", __func__,
|
||||
render_mode);
|
||||
ret = -EINVAL;
|
||||
goto exit;
|
||||
}
|
||||
|
||||
ret = q6asm_send_mtmx_strtr_render_mode(ac, render_mode);
|
||||
if (ret) {
|
||||
pr_err("%s: Render mode can't be set error %d\n", __func__,
|
||||
ret);
|
||||
}
|
||||
exit:
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int msm_transcode_loopback_set_metadata(struct snd_compr_stream *cstream,
|
||||
struct snd_compr_metadata *metadata)
|
||||
{
|
||||
@@ -614,6 +656,7 @@ static int msm_transcode_loopback_set_metadata(struct snd_compr_stream *cstream,
|
||||
struct msm_transcode_loopback *prtd = NULL;
|
||||
struct snd_soc_component *component;
|
||||
struct audio_client *ac = NULL;
|
||||
int rc = 0;
|
||||
|
||||
if (!metadata || !cstream) {
|
||||
pr_err("%s: Invalid arguments\n", __func__);
|
||||
@@ -660,6 +703,20 @@ static int msm_transcode_loopback_set_metadata(struct snd_compr_stream *cstream,
|
||||
}
|
||||
break;
|
||||
}
|
||||
case SNDRV_COMPRESS_RENDER_MODE:
|
||||
{
|
||||
rc = msm_transcode_set_render_mode(prtd, metadata->value[0]);
|
||||
if (rc)
|
||||
pr_err("%s: error setting render mode %d\n", __func__,
|
||||
rc);
|
||||
break;
|
||||
}
|
||||
case SNDRV_COMPRESS_START_DELAY:
|
||||
{
|
||||
prtd->start_delay_lsw = metadata->value[0];
|
||||
prtd->start_delay_msw = metadata->value[1];
|
||||
break;
|
||||
}
|
||||
case SNDRV_COMPRESS_RENDER_WINDOW:
|
||||
{
|
||||
return msm_transcode_set_render_window(
|
||||
@@ -674,7 +731,7 @@ static int msm_transcode_loopback_set_metadata(struct snd_compr_stream *cstream,
|
||||
__func__, metadata->key);
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
return rc;
|
||||
}
|
||||
|
||||
static int msm_transcode_stream_cmd_put(struct snd_kcontrol *kcontrol,
|
||||
|
||||
@@ -7550,6 +7550,7 @@ struct asm_data_cmd_iec_60958_frame_rate {
|
||||
#define ASM_SESSION_CMD_RUN_STARTIME_RUN_AT_ABSOLUTEIME 1
|
||||
#define ASM_SESSION_CMD_RUN_STARTIME_RUN_AT_RELATIVEIME 2
|
||||
#define ASM_SESSION_CMD_RUN_STARTIME_RUN_WITH_DELAY 3
|
||||
#define ASM_SESSION_CMD_RUN_STARTIME_RUN_WITH_TTP 4
|
||||
|
||||
#define ASM_BIT_MASK_RUN_STARTIME (0x00000003UL)
|
||||
|
||||
@@ -7573,6 +7574,7 @@ struct asm_session_cmd_run_v2 {
|
||||
*- #ASM_SESSION_CMD_RUN_STARTIME_RUN_AT_ABSOLUTEIME
|
||||
*- #ASM_SESSION_CMD_RUN_STARTIME_RUN_AT_RELATIVEIME
|
||||
*- #ASM_SESSION_CMD_RUN_STARTIME_RUN_WITH_DELAY
|
||||
*- #ASM_SESSION_CMD_RUN_STARTIME_RUN_WITH_TTP
|
||||
*
|
||||
*All other bits are reserved; clients must set them to zero.
|
||||
*/
|
||||
|
||||
Reference in new issue
Block a user