ASoC: Intel: Skylake: Ignore rate check for DMIC link
authorJeeja KP <jeeja.kp@intel.com>
Tue, 27 Oct 2015 00:22:58 +0000 (09:22 +0900)
committerMark Brown <broonie@kernel.org>
Mon, 16 Nov 2015 10:08:09 +0000 (10:08 +0000)
DMIC NHLT entry is sample rate agnostic, so ignore the rate
checks for DMIC type

Signed-off-by: Jeeja KP <jeeja.kp@intel.com>
Signed-off-by: Vinod Koul <vinod.koul@intel.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/intel/skylake/skl-nhlt.c

index 3ff22eba5875a8f8dd65e8531235fa4d0c73ce6d..6e4b21cdb1bd9bff4b6606103bd41629c0ab2b7f 100644 (file)
@@ -55,7 +55,7 @@ void skl_nhlt_free(void *addr)
 
 static struct nhlt_specific_cfg *skl_get_specific_cfg(
                struct device *dev, struct nhlt_fmt *fmt,
-               u8 no_ch, u32 rate, u16 bps)
+               u8 no_ch, u32 rate, u16 bps, u8 linktype)
 {
        struct nhlt_specific_cfg *sp_config;
        struct wav_fmt *wfmt;
@@ -68,11 +68,17 @@ static struct nhlt_specific_cfg *skl_get_specific_cfg(
                wfmt = &fmt_config->fmt_ext.fmt;
                dev_dbg(dev, "ch=%d fmt=%d s_rate=%d\n", wfmt->channels,
                         wfmt->bits_per_sample, wfmt->samples_per_sec);
-               if (wfmt->channels == no_ch && wfmt->samples_per_sec == rate &&
-                                       wfmt->bits_per_sample == bps) {
+               if (wfmt->channels == no_ch && wfmt->bits_per_sample == bps) {
+                       /*
+                        * if link type is dmic ignore rate check as the blob is
+                        * generic for all rates
+                        */
                        sp_config = &fmt_config->config;
+                       if (linktype == NHLT_LINK_DMIC)
+                               return sp_config;
 
-                       return sp_config;
+                       if (wfmt->samples_per_sec == rate)
+                               return sp_config;
                }
 
                fmt_config = (struct nhlt_fmt_cfg *)(fmt_config->config.caps +
@@ -128,7 +134,8 @@ struct nhlt_specific_cfg
                if (skl_check_ep_match(dev, epnt, instance, link_type, dirn)) {
                        fmt = (struct nhlt_fmt *)(epnt->config.caps +
                                                 epnt->config.size);
-                       sp_config = skl_get_specific_cfg(dev, fmt, num_ch, s_rate, bps);
+                       sp_config = skl_get_specific_cfg(dev, fmt, num_ch,
+                                                       s_rate, bps, link_type);
                        if (sp_config)
                                return sp_config;
                }