#include "davinci-pcm.h"
 #include "davinci-i2s.h"
 
-#define EVM_CODEC_CLOCK 22579200
 
 #define AUDIO_FORMAT (SND_SOC_DAIFMT_DSP_B | \
                SND_SOC_DAIFMT_CBM_CFM | SND_SOC_DAIFMT_IB_NF)
        struct snd_soc_dai *codec_dai = rtd->dai->codec_dai;
        struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
        int ret = 0;
+       unsigned sysclk;
+
+       /* ASP1 on DM355 EVM is clocked by an external oscillator */
+       if (machine_is_davinci_dm355_evm())
+               sysclk = 27000000;
+
+       /* ASP0 in DM6446 EVM is clocked by U55, as configured by
+        * board-dm644x-evm.c using GPIOs from U18.  There are six
+        * options; here we "know" we use a 48 KHz sample rate.
+        */
+       else if (machine_is_davinci_evm())
+               sysclk = 12288000;
+
+       else
+               return -EINVAL;
 
        /* set codec DAI configuration */
        ret = snd_soc_dai_set_fmt(codec_dai, AUDIO_FORMAT);
                return ret;
 
        /* set the codec system clock */
-       ret = snd_soc_dai_set_sysclk(codec_dai, 0, EVM_CODEC_CLOCK,
-                                           SND_SOC_CLOCK_OUT);
+       ret = snd_soc_dai_set_sysclk(codec_dai, 0, sysclk, SND_SOC_CLOCK_OUT);
        if (ret < 0)
                return ret;