lkml.org 
[lkml]   [2021]   [Jul]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.13 040/351] ASoC: Intel: sof_sdw: add mutual exclusion between PCH DMIC and RT715
    Date
    From: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>

    [ Upstream commit 35564e2bf94611c3eb51d35362addb3cb394ad54 ]

    When external RT714/715 devices are used for capture, we don't want
    the PCH DMICs to be used.

    Any information provided by the SOF platform driver or DMI quirks will
    be overridden.

    Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
    Reviewed-by: Kai Vehmanen <kai.vehmanen@linux.intel.com>
    Reviewed-by: Libin Yang <libin.yang@intel.com>
    Link: https://lore.kernel.org/r/20210505163705.305616-5-pierre-louis.bossart@linux.intel.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    sound/soc/intel/boards/sof_sdw.c | 19 +++++++++++++++++--
    sound/soc/intel/boards/sof_sdw_common.h | 1 +
    2 files changed, 18 insertions(+), 2 deletions(-)

    diff --git a/sound/soc/intel/boards/sof_sdw.c b/sound/soc/intel/boards/sof_sdw.c
    index dfad2ad129ab..5827a16773c9 100644
    --- a/sound/soc/intel/boards/sof_sdw.c
    +++ b/sound/soc/intel/boards/sof_sdw.c
    @@ -354,6 +354,7 @@ static struct sof_sdw_codec_info codec_info_list[] = {
    .part_id = 0x714,
    .version_id = 3,
    .direction = {false, true},
    + .ignore_pch_dmic = true,
    .dai_name = "rt715-aif2",
    .init = sof_sdw_rt715_sdca_init,
    },
    @@ -361,6 +362,7 @@ static struct sof_sdw_codec_info codec_info_list[] = {
    .part_id = 0x715,
    .version_id = 3,
    .direction = {false, true},
    + .ignore_pch_dmic = true,
    .dai_name = "rt715-aif2",
    .init = sof_sdw_rt715_sdca_init,
    },
    @@ -368,6 +370,7 @@ static struct sof_sdw_codec_info codec_info_list[] = {
    .part_id = 0x714,
    .version_id = 2,
    .direction = {false, true},
    + .ignore_pch_dmic = true,
    .dai_name = "rt715-aif2",
    .init = sof_sdw_rt715_init,
    },
    @@ -375,6 +378,7 @@ static struct sof_sdw_codec_info codec_info_list[] = {
    .part_id = 0x715,
    .version_id = 2,
    .direction = {false, true},
    + .ignore_pch_dmic = true,
    .dai_name = "rt715-aif2",
    .init = sof_sdw_rt715_init,
    },
    @@ -730,7 +734,8 @@ static int create_sdw_dailink(struct device *dev, int *be_index,
    int *cpu_id, bool *group_generated,
    struct snd_soc_codec_conf *codec_conf,
    int codec_count,
    - int *codec_conf_index)
    + int *codec_conf_index,
    + bool *ignore_pch_dmic)
    {
    const struct snd_soc_acpi_link_adr *link_next;
    struct snd_soc_dai_link_component *codecs;
    @@ -783,6 +788,9 @@ static int create_sdw_dailink(struct device *dev, int *be_index,
    if (codec_index < 0)
    return codec_index;

    + if (codec_info_list[codec_index].ignore_pch_dmic)
    + *ignore_pch_dmic = true;
    +
    cpu_dai_index = *cpu_id;
    for_each_pcm_streams(stream) {
    char *name, *cpu_name;
    @@ -914,6 +922,7 @@ static int sof_card_dai_links_create(struct device *dev,
    const struct snd_soc_acpi_link_adr *adr_link;
    struct snd_soc_dai_link_component *cpus;
    struct snd_soc_codec_conf *codec_conf;
    + bool ignore_pch_dmic = false;
    int codec_conf_count;
    int codec_conf_index = 0;
    bool group_generated[SDW_MAX_GROUPS];
    @@ -1020,7 +1029,8 @@ static int sof_card_dai_links_create(struct device *dev,
    sdw_cpu_dai_num, cpus, adr_link,
    &cpu_id, group_generated,
    codec_conf, codec_conf_count,
    - &codec_conf_index);
    + &codec_conf_index,
    + &ignore_pch_dmic);
    if (ret < 0) {
    dev_err(dev, "failed to create dai link %d", be_id);
    return -ENOMEM;
    @@ -1088,6 +1098,10 @@ SSP:
    DMIC:
    /* dmic */
    if (dmic_num > 0) {
    + if (ignore_pch_dmic) {
    + dev_warn(dev, "Ignoring PCH DMIC\n");
    + goto HDMI;
    + }
    cpus[cpu_id].dai_name = "DMIC01 Pin";
    init_dai_link(dev, links + link_id, be_id, "dmic01",
    0, 1, // DMIC only supports capture
    @@ -1106,6 +1120,7 @@ DMIC:
    INC_ID(be_id, cpu_id, link_id);
    }

    +HDMI:
    /* HDMI */
    if (hdmi_num > 0) {
    idisp_components = devm_kcalloc(dev, hdmi_num,
    diff --git a/sound/soc/intel/boards/sof_sdw_common.h b/sound/soc/intel/boards/sof_sdw_common.h
    index f3cb6796363e..ea60e8ed215c 100644
    --- a/sound/soc/intel/boards/sof_sdw_common.h
    +++ b/sound/soc/intel/boards/sof_sdw_common.h
    @@ -56,6 +56,7 @@ struct sof_sdw_codec_info {
    int amp_num;
    const u8 acpi_id[ACPI_ID_LEN];
    const bool direction[2]; // playback & capture support
    + const bool ignore_pch_dmic;
    const char *dai_name;
    const struct snd_soc_ops *ops;

    --
    2.30.2


    \
     
     \ /
      Last update: 2021-07-19 19:41    [W:4.045 / U:0.032 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site