From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Pardha Saradhi K Date: Mon, 21 Aug 2017 22:03:10 +0530 Subject: [PATCH] ASoC: Intel: Skylake: Add a separate module type for ASRC algo ASRC algorithm has the same interfaces like the SRC algorithm. This patch distinguishes both of them with similar names so as to enable using them in the same topology One parameter called mode has been added to ASRC init structure whose value is dependent on stream direction. Recommendation from the FW team is to set asrc mode = 2 for capture and asrc mode = 1 for playback for better signal quality Change-Id: I26961f8601bbaba71ebd3944438ebfa294774037 Signed-off-by: Sameer Sharma Signed-off-by: Pardha Saradhi K Reviewed-on: Reviewed-by: Sinha, Mohit Reviewed-by: Singh, Guneshwor O Reviewed-by: Koul, Vinod Tested-by: Sm, Bhadur A --- include/uapi/sound/skl-tplg-interface.h | 3 ++- sound/soc/intel/skylake/skl-messages.c | 13 +++++++++++++ sound/soc/intel/skylake/skl-topology.h | 1 + 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/include/uapi/sound/skl-tplg-interface.h b/include/uapi/sound/skl-tplg-interface.h index 89844fb10aa5..a3f0890c75bd 100644 --- a/include/uapi/sound/skl-tplg-interface.h +++ b/include/uapi/sound/skl-tplg-interface.h @@ -81,7 +81,8 @@ enum skl_module_type { SKL_MODULE_TYPE_BASE_OUTFMT, SKL_MODULE_TYPE_KPB, SKL_MODULE_TYPE_MIC_SELECT, - SKL_MODULE_TYPE_PROBE + SKL_MODULE_TYPE_PROBE, + SKL_MODULE_TYPE_ASRC }; enum skl_core_affinity { diff --git a/sound/soc/intel/skylake/skl-messages.c b/sound/soc/intel/skylake/skl-messages.c index 6cf06fa8293a..d0d60d740441 100644 --- a/sound/soc/intel/skylake/skl-messages.c +++ b/sound/soc/intel/skylake/skl-messages.c @@ -34,6 +34,9 @@ #include #include +#define ASRC_MODE_UPLINK 2 +#define ASRC_MODE_DOWNLINK 1 + static int skl_alloc_dma_buf(struct device *dev, struct snd_dma_buffer *dmab, size_t size) { @@ -1736,6 +1739,14 @@ static void skl_set_src_format(struct skl_sst *ctx, (struct skl_base_cfg *)src_mconfig); src_mconfig->src_cfg = fmt->s_freq; + + if (mconfig->m_type == SKL_MODULE_TYPE_ASRC) { + if (mconfig->pipe->p_params->stream == + SNDRV_PCM_STREAM_PLAYBACK) + src_mconfig->mode = ASRC_MODE_DOWNLINK; + else + src_mconfig->mode = ASRC_MODE_UPLINK; + } } /* @@ -1862,6 +1873,7 @@ static u16 skl_get_module_param_size(struct skl_sst *ctx, return sizeof(struct skl_probe_cfg); case SKL_MODULE_TYPE_SRCINT: + case SKL_MODULE_TYPE_ASRC: return sizeof(struct skl_src_module_cfg); case SKL_MODULE_TYPE_UPDWMIX: @@ -1920,6 +1932,7 @@ static int skl_set_module_format(struct skl_sst *ctx, break; case SKL_MODULE_TYPE_SRCINT: + case SKL_MODULE_TYPE_ASRC: skl_set_src_format(ctx, module_config, *param_data); break; diff --git a/sound/soc/intel/skylake/skl-topology.h b/sound/soc/intel/skylake/skl-topology.h index 12639e4bba76..f9ac42cdc64d 100644 --- a/sound/soc/intel/skylake/skl-topology.h +++ b/sound/soc/intel/skylake/skl-topology.h @@ -167,6 +167,7 @@ struct skl_cpr_pin_fmt { struct skl_src_module_cfg { struct skl_base_cfg base_cfg; enum skl_s_freq src_cfg; + u32 mode; } __packed; struct notification_mask { -- https://clearlinux.org