lkml.org 
[lkml]   [2022]   [Dec]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 6.0 07/73] ASoC: Intel: avs: Add quirk for KBL-R RVP platform
    Date
    From: Amadeusz Sławiński <amadeuszx.slawinski@linux.intel.com>

    [ Upstream commit 9d0737fa0e7530313634c0ecd75f09a95ba8d44a ]

    KBL-R RVPs contain built-in rt298 codec which requires different PLL
    clock and .dai_fmt configuration than seen on other boards.

    Signed-off-by: Amadeusz Sławiński <amadeuszx.slawinski@linux.intel.com>
    Signed-off-by: Cezary Rojewski <cezary.rojewski@intel.com>
    Link: https://lore.kernel.org/r/20221010121955.718168-5-cezary.rojewski@intel.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    sound/soc/intel/avs/boards/rt298.c | 24 ++++++++++++++++++++++--
    1 file changed, 22 insertions(+), 2 deletions(-)

    diff --git a/sound/soc/intel/avs/boards/rt298.c b/sound/soc/intel/avs/boards/rt298.c
    index b28d36872dcb..58c9d9edecf0 100644
    --- a/sound/soc/intel/avs/boards/rt298.c
    +++ b/sound/soc/intel/avs/boards/rt298.c
    @@ -6,6 +6,7 @@
    // Amadeusz Slawinski <amadeuszx.slawinski@linux.intel.com>
    //

    +#include <linux/dmi.h>
    #include <linux/module.h>
    #include <sound/jack.h>
    #include <sound/pcm.h>
    @@ -14,6 +15,16 @@
    #include <sound/soc-acpi.h>
    #include "../../../codecs/rt298.h"

    +static const struct dmi_system_id kblr_dmi_table[] = {
    + {
    + .matches = {
    + DMI_MATCH(DMI_SYS_VENDOR, "Intel Corporation"),
    + DMI_MATCH(DMI_BOARD_NAME, "Kabylake R DDR4 RVP"),
    + },
    + },
    + {}
    +};
    +
    static const struct snd_kcontrol_new card_controls[] = {
    SOC_DAPM_PIN_SWITCH("Headphone Jack"),
    SOC_DAPM_PIN_SWITCH("Mic Jack"),
    @@ -96,9 +107,15 @@ avs_rt298_hw_params(struct snd_pcm_substream *substream, struct snd_pcm_hw_param
    {
    struct snd_soc_pcm_runtime *rtd = substream->private_data;
    struct snd_soc_dai *codec_dai = asoc_rtd_to_codec(rtd, 0);
    + unsigned int clk_freq;
    int ret;

    - ret = snd_soc_dai_set_sysclk(codec_dai, RT298_SCLK_S_PLL, 19200000, SND_SOC_CLOCK_IN);
    + if (dmi_first_match(kblr_dmi_table))
    + clk_freq = 24000000;
    + else
    + clk_freq = 19200000;
    +
    + ret = snd_soc_dai_set_sysclk(codec_dai, RT298_SCLK_S_PLL, clk_freq, SND_SOC_CLOCK_IN);
    if (ret < 0)
    dev_err(rtd->dev, "Set codec sysclk failed: %d\n", ret);

    @@ -139,7 +156,10 @@ static int avs_create_dai_link(struct device *dev, const char *platform_name, in
    dl->platforms = platform;
    dl->num_platforms = 1;
    dl->id = 0;
    - dl->dai_fmt = SND_SOC_DAIFMT_DSP_A | SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_CBS_CFS;
    + if (dmi_first_match(kblr_dmi_table))
    + dl->dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_CBS_CFS;
    + else
    + dl->dai_fmt = SND_SOC_DAIFMT_DSP_A | SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_CBS_CFS;
    dl->init = avs_rt298_codec_init;
    dl->be_hw_params_fixup = avs_rt298_be_fixup;
    dl->ops = &avs_rt298_ops;
    --
    2.35.1
    \
     
     \ /
      Last update: 2022-12-18 17:23    [W:3.047 / U:0.732 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site