From c0515f8bfdefa8c9a6e8ce9158112bd73ce5a1af Mon Sep 17 00:00:00 2001 From: =?utf8?q?=E5=AE=8B=E7=A7=80=E6=9D=B0?= Date: Tue, 31 Jul 2012 19:41:32 +0800 Subject: [PATCH] phonepad: add mclk2 for rt5623. --- arch/arm/configs/rk30_phonepad_defconfig | 1 + sound/soc/codecs/rt3261.c | 16 ++++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/arch/arm/configs/rk30_phonepad_defconfig b/arch/arm/configs/rk30_phonepad_defconfig index a69c34ac4f2f..a2f09e0c56db 100644 --- a/arch/arm/configs/rk30_phonepad_defconfig +++ b/arch/arm/configs/rk30_phonepad_defconfig @@ -299,6 +299,7 @@ CONFIG_SND=y # CONFIG_SND_ARM is not set CONFIG_SND_SOC=y CONFIG_SND_RK29_SOC=y +CONFIG_SND_RK_SOC_I2S2_2CH=y CONFIG_SND_I2S_DMA_EVENT_STATIC=y CONFIG_SND_RK29_SOC_RT5623=y CONFIG_SND_RK29_SOC_RT3261=y diff --git a/sound/soc/codecs/rt3261.c b/sound/soc/codecs/rt3261.c index c1c32acbb51a..dc3a678e0372 100644 --- a/sound/soc/codecs/rt3261.c +++ b/sound/soc/codecs/rt3261.c @@ -25,6 +25,8 @@ #include #include #include +#include +#include #define RT3261_PROC #ifdef RT3261_PROC @@ -2733,6 +2735,7 @@ static int rt3261_probe(struct snd_soc_codec *codec) { struct rt3261_priv *rt3261 = snd_soc_codec_get_drvdata(codec); int ret; + struct clk *iis_clk; pr_info("Codec driver version %s\n", VERSION); @@ -2745,6 +2748,19 @@ static int rt3261_probe(struct snd_soc_codec *codec) #ifdef RT3261_PROC rt3261_proc_init(); #endif + + //for rt5623 MCLK use + iis_clk = clk_get_sys("rk29_i2s.2", "i2s"); + if (IS_ERR(iis_clk)) { + printk("failed to get i2s clk\n"); + ret = PTR_ERR(iis_clk); + }else{ + printk("I2S2 got i2s clk ok!\n"); + clk_enable(iis_clk); + clk_set_rate(iis_clk, 11289600); + rk30_mux_api_set(GPIO0D0_I2S22CHCLK_SMCCSN0_NAME, GPIO0D_I2S2_2CH_CLK); + clk_put(iis_clk); + } rt3261_reset(codec); snd_soc_update_bits(codec, RT3261_PWR_ANLG1, -- 2.34.1