This patch supports some type of machine drivers that use fixed clock
rate. After applied this patch, sysclk == 0 means there is no
constraint of sound rate and other values will set constraints which
is derived by sysclk setting.

Signed-off-by: Katsuhiro Suzuki <[email protected]>

---

Changes from v2:
  - Newly added
---
 sound/soc/codecs/es8316.c | 24 ++++--------------------
 1 file changed, 4 insertions(+), 20 deletions(-)

diff --git a/sound/soc/codecs/es8316.c b/sound/soc/codecs/es8316.c
index ab41f2c056bd..bf390bc64177 100644
--- a/sound/soc/codecs/es8316.c
+++ b/sound/soc/codecs/es8316.c
@@ -432,20 +432,6 @@ static int es8316_set_dai_fmt(struct snd_soc_dai 
*codec_dai,
        return 0;
 }
 
-static int es8316_pcm_startup(struct snd_pcm_substream *substream,
-                             struct snd_soc_dai *dai)
-{
-       struct snd_soc_component *component = dai->component;
-       struct es8316_priv *es8316 = snd_soc_component_get_drvdata(component);
-
-       if (es8316->sysclk == 0) {
-               dev_err(component->dev, "No sysclk provided\n");
-               return -EINVAL;
-       }
-
-       return 0;
-}
-
 static int es8316_pcm_hw_params(struct snd_pcm_substream *substream,
                                struct snd_pcm_hw_params *params,
                                struct snd_soc_dai *dai)
@@ -455,17 +441,16 @@ static int es8316_pcm_hw_params(struct snd_pcm_substream 
*substream,
        u8 wordlen = 0;
        int i;
 
-       if (!es8316->sysclk) {
-               dev_err(component->dev, "No MCLK configured\n");
-               return -EINVAL;
-       }
-
        /* Limit supported sample rates to ones that can be autodetected
         * by the codec running in slave mode.
         */
        for (i = 0; i < NR_SUPPORTED_MCLK_LRCK_RATIOS; i++) {
                const unsigned int ratio = supported_mclk_lrck_ratios[i];
 
+               /* Accept any rates if sysclk is 0. */
+               if (es8316->sysclk == 0)
+                       break;
+
                if (es8316->sysclk % ratio != 0)
                        continue;
                if (es8316->sysclk / ratio == params_rate(params))
@@ -509,7 +494,6 @@ static int es8316_mute(struct snd_soc_dai *dai, int mute)
                        SNDRV_PCM_FMTBIT_S24_LE)
 
 static const struct snd_soc_dai_ops es8316_ops = {
-       .startup = es8316_pcm_startup,
        .hw_params = es8316_pcm_hw_params,
        .set_fmt = es8316_set_dai_fmt,
        .set_sysclk = es8316_set_dai_sysclk,
-- 
2.23.0.rc1

Reply via email to