diff --git a/sound/soc/codecs/wm8915.c b/sound/soc/codecs/wm8915.c index 083609418bf4..4a3c5cc77e55 100644 --- a/sound/soc/codecs/wm8915.c +++ b/sound/soc/codecs/wm8915.c @@ -1831,6 +1831,7 @@ static int wm8915_set_sysclk(struct snd_soc_dai *dai, struct snd_soc_codec *codec = dai->codec; struct wm8915_priv *wm8915 = snd_soc_codec_get_drvdata(codec); int lfclk = 0; + int ratediv = 0; int src; int old; @@ -1862,6 +1863,8 @@ static int wm8915_set_sysclk(struct snd_soc_dai *dai, snd_soc_update_bits(codec, WM8915_AIF_RATE, WM8915_SYSCLK_RATE, 0); break; + case 24576000: + ratediv = WM8915_SYSCLK_DIV; case 12288000: snd_soc_update_bits(codec, WM8915_AIF_RATE, WM8915_SYSCLK_RATE, WM8915_SYSCLK_RATE); @@ -1877,8 +1880,8 @@ static int wm8915_set_sysclk(struct snd_soc_dai *dai, } snd_soc_update_bits(codec, WM8915_AIF_CLOCKING_1, - WM8915_SYSCLK_SRC_MASK, - src << WM8915_SYSCLK_SRC_SHIFT); + WM8915_SYSCLK_SRC_MASK | WM8915_SYSCLK_DIV_MASK, + src << WM8915_SYSCLK_SRC_SHIFT | ratediv); snd_soc_update_bits(codec, WM8915_CLOCKING_1, WM8915_LFCLK_ENA, lfclk); snd_soc_update_bits(codec, WM8915_AIF_CLOCKING_1, WM8915_SYSCLK_ENA, old);