ASoC: Intel: sof_sdw: add support for Bluetooth offload
This patch enables BT offload feature on TGL Volteer reference design. Reviewed-by: Kai Vehmanen <kai.vehmanen@linux.intel.com> Signed-off-by: Yong Zhi <yong.zhi@intel.com> Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> Link: https://lore.kernel.org/r/20210505163705.305616-8-pierre-louis.bossart@linux.intel.com Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
9c5046e4b3
commit
19f1eace04
@ -147,7 +147,9 @@ static const struct dmi_system_id sof_sdw_quirk_table[] = {
|
||||
},
|
||||
.driver_data = (void *)(SOF_SDW_TGL_HDMI |
|
||||
SOF_SDW_PCH_DMIC |
|
||||
SOF_SDW_FOUR_SPK),
|
||||
SOF_SDW_FOUR_SPK |
|
||||
SOF_BT_OFFLOAD_SSP(2) |
|
||||
SOF_SSP_BT_OFFLOAD_PRESENT),
|
||||
},
|
||||
{
|
||||
.callback = sof_sdw_quirk_cb,
|
||||
@ -977,6 +979,9 @@ static int sof_card_dai_links_create(struct device *dev,
|
||||
dmic_num = (sof_sdw_quirk & SOF_SDW_PCH_DMIC || mach_params->dmic_num) ? 2 : 0;
|
||||
comp_num += dmic_num;
|
||||
|
||||
if (sof_sdw_quirk & SOF_SSP_BT_OFFLOAD_PRESENT)
|
||||
comp_num++;
|
||||
|
||||
dev_dbg(dev, "sdw %d, ssp %d, dmic %d, hdmi %d", sdw_be_num, ssp_num,
|
||||
dmic_num, ctx->idisp_codec ? hdmi_num : 0);
|
||||
|
||||
@ -1162,6 +1167,31 @@ HDMI:
|
||||
INC_ID(be_id, cpu_id, link_id);
|
||||
}
|
||||
|
||||
if (sof_sdw_quirk & SOF_SSP_BT_OFFLOAD_PRESENT) {
|
||||
int port = (sof_sdw_quirk & SOF_BT_OFFLOAD_SSP_MASK) >>
|
||||
SOF_BT_OFFLOAD_SSP_SHIFT;
|
||||
|
||||
name = devm_kasprintf(dev, GFP_KERNEL, "SSP%d-BT", port);
|
||||
if (!name)
|
||||
return -ENOMEM;
|
||||
|
||||
ssp_components = devm_kzalloc(dev, sizeof(*ssp_components),
|
||||
GFP_KERNEL);
|
||||
if (!ssp_components)
|
||||
return -ENOMEM;
|
||||
|
||||
ssp_components->name = "snd-soc-dummy";
|
||||
ssp_components->dai_name = "snd-soc-dummy-dai";
|
||||
|
||||
cpu_name = devm_kasprintf(dev, GFP_KERNEL, "SSP%d Pin", port);
|
||||
if (!cpu_name)
|
||||
return -ENOMEM;
|
||||
|
||||
cpus[cpu_id].dai_name = cpu_name;
|
||||
init_dai_link(dev, links + link_id, be_id, name, 1, 1,
|
||||
cpus + cpu_id, 1, ssp_components, 1, NULL, NULL);
|
||||
}
|
||||
|
||||
card->dai_link = links;
|
||||
card->num_links = num_links;
|
||||
|
||||
|
@ -50,6 +50,13 @@ enum {
|
||||
#define SOF_RT715_DAI_ID_FIX BIT(11)
|
||||
#define SOF_SDW_NO_AGGREGATION BIT(12)
|
||||
|
||||
/* BT audio offload: reserve 3 bits for future */
|
||||
#define SOF_BT_OFFLOAD_SSP_SHIFT 13
|
||||
#define SOF_BT_OFFLOAD_SSP_MASK (GENMASK(15, 13))
|
||||
#define SOF_BT_OFFLOAD_SSP(quirk) \
|
||||
(((quirk) << SOF_BT_OFFLOAD_SSP_SHIFT) & SOF_BT_OFFLOAD_SSP_MASK)
|
||||
#define SOF_SSP_BT_OFFLOAD_PRESENT BIT(16)
|
||||
|
||||
struct sof_sdw_codec_info {
|
||||
const int part_id;
|
||||
const int version_id;
|
||||
|
Loading…
Reference in New Issue
Block a user