ASoC: msm: qdsp6v2: Support to configure render window

Update compress driver to support configuration of DSP render
window. Render window is used by DSP to take rendering decision.
i.e whether input frame should be rendered, dropped or repeated.

CRs-Fixed: 1112258
Change-Id: Ib1b9100ab87878d2e2da93e2b86ca68fb9dd97a9
Signed-off-by: Manish Dewangan <manish@codeaurora.org>
This commit is contained in:
Manish Dewangan 2017-02-06 11:57:10 +05:30
parent bbbea003e7
commit 479baf1cf7
2 changed files with 48 additions and 0 deletions

View file

@ -147,6 +147,7 @@ struct snd_compr_audio_info {
* @SNDRV_COMPRESS_PATH_DELAY: dsp path delay in microseconds
* @SNDRV_COMPRESS_RENDER_MODE: dsp render mode (audio master or stc)
* @SNDRV_COMPRESS_CLK_REC_MODE: clock recovery mode ( none or auto)
* @SNDRV_COMPRESS_RENDER_WINDOW: render window
*/
enum sndrv_compress_encoder {
SNDRV_COMPRESS_ENCODER_PADDING = 1,
@ -156,11 +157,13 @@ enum sndrv_compress_encoder {
SNDRV_COMPRESS_PATH_DELAY = 5,
SNDRV_COMPRESS_RENDER_MODE = 6,
SNDRV_COMPRESS_CLK_REC_MODE = 7,
SNDRV_COMPRESS_RENDER_WINDOW = 8,
};
#define SNDRV_COMPRESS_PATH_DELAY SNDRV_COMPRESS_PATH_DELAY
#define SNDRV_COMPRESS_RENDER_MODE SNDRV_COMPRESS_RENDER_MODE
#define SNDRV_COMPRESS_CLK_REC_MODE SNDRV_COMPRESS_CLK_REC_MODE
#define SNDRV_COMPRESS_RENDER_WINDOW SNDRV_COMPRESS_RENDER_WINDOW
/**
* struct snd_compr_metadata - compressed stream metadata

View file

@ -272,6 +272,44 @@ exit:
return ret;
}
static int msm_compr_set_render_window(struct audio_client *ac,
uint32_t ws_lsw, uint32_t ws_msw,
uint32_t we_lsw, uint32_t we_msw)
{
int ret = -EINVAL;
struct asm_session_mtmx_strtr_param_window_v2_t asm_mtmx_strtr_window;
uint32_t param_id;
pr_debug("%s, ws_lsw 0x%x ws_msw 0x%x we_lsw 0x%x we_ms 0x%x\n",
__func__, ws_lsw, ws_msw, we_lsw, we_msw);
memset(&asm_mtmx_strtr_window, 0,
sizeof(struct asm_session_mtmx_strtr_param_window_v2_t));
asm_mtmx_strtr_window.window_lsw = ws_lsw;
asm_mtmx_strtr_window.window_msw = ws_msw;
param_id = ASM_SESSION_MTMX_STRTR_PARAM_RENDER_WINDOW_START_V2;
ret = q6asm_send_mtmx_strtr_window(ac, &asm_mtmx_strtr_window,
param_id);
if (ret) {
pr_err("%s, start window can't be set error %d\n", __func__,
ret);
goto exit;
}
asm_mtmx_strtr_window.window_lsw = we_lsw;
asm_mtmx_strtr_window.window_msw = we_msw;
param_id = ASM_SESSION_MTMX_STRTR_PARAM_RENDER_WINDOW_END_V2;
ret = q6asm_send_mtmx_strtr_window(ac, &asm_mtmx_strtr_window,
param_id);
if (ret) {
pr_err("%s, end window can't be set error %d\n", __func__,
ret);
}
exit:
return ret;
}
static int msm_compr_set_volume(struct snd_compr_stream *cstream,
uint32_t volume_l, uint32_t volume_r)
{
@ -2794,6 +2832,13 @@ static int msm_compr_set_metadata(struct snd_compr_stream *cstream,
return msm_compr_set_render_mode(prtd, metadata->value[0]);
} else if (metadata->key == SNDRV_COMPRESS_CLK_REC_MODE) {
return msm_compr_set_clk_rec_mode(ac, metadata->value[0]);
} else if (metadata->key == SNDRV_COMPRESS_RENDER_WINDOW) {
return msm_compr_set_render_window(
ac,
metadata->value[0],
metadata->value[1],
metadata->value[2],
metadata->value[3]);
}
return 0;