From 3414f130791bbd0c51a91934f68bbbc37956b805 Mon Sep 17 00:00:00 2001 From: yj Date: Tue, 1 Apr 2014 15:25:54 +0800 Subject: [PATCH] i2s: add gate clk control --- arch/arm/boot/dts/rk3288.dtsi | 4 ++-- sound/soc/rockchip/rk30_i2s.c | 18 +++++++++++++++++- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/arch/arm/boot/dts/rk3288.dtsi b/arch/arm/boot/dts/rk3288.dtsi index 749b814e18f3..1ed423e75ce6 100755 --- a/arch/arm/boot/dts/rk3288.dtsi +++ b/arch/arm/boot/dts/rk3288.dtsi @@ -755,8 +755,8 @@ compatible = "rockchip-i2s"; reg = <0xff890000 0x10000>; i2s-id = <0>; - clocks = <&clk_i2s>, <&clk_i2s_out>; - clock-names = "i2s_clk","i2s_mclk"; + clocks = <&clk_i2s>, <&clk_i2s_out>, <&clk_gates10 8>, <&clk_gates4 3>; + clock-names = "i2s_clk", "i2s_mclk", "i2s_hclk", "i2s_gclk"; interrupts = ; dmas = <&pdma0 0>, <&pdma0 1>; diff --git a/sound/soc/rockchip/rk30_i2s.c b/sound/soc/rockchip/rk30_i2s.c index f2d466cd2231..2092964de532 100755 --- a/sound/soc/rockchip/rk30_i2s.c +++ b/sound/soc/rockchip/rk30_i2s.c @@ -59,7 +59,8 @@ struct rk30_i2s_info { struct clk *i2s_clk;// i2s clk ,is bclk lrck struct clk *i2s_mclk;//i2s mclk,rk32xx can different i2s clk. - + struct clk *i2s_hclk; + struct clk *i2s_gclk; struct snd_dmaengine_dai_dma_data capture_dma_data; struct snd_dmaengine_dai_dma_data playback_dma_data; @@ -549,6 +550,21 @@ static int rockchip_i2s_probe(struct platform_device *pdev) } rk30_i2s = i2s; + + i2s->i2s_hclk = clk_get(&pdev->dev, "i2s_hclk"); + if(IS_ERR(i2s->i2s_hclk) ) { + dev_err(&pdev->dev, "get i2s_hclk failed.\n"); + } else{ + clk_prepare_enable(i2s->i2s_hclk); + } + + i2s->i2s_gclk = clk_get(&pdev->dev, "i2s_gclk"); + if(IS_ERR(i2s->i2s_gclk)) { + dev_err(&pdev->dev, "get i2s_gclk failed.\n"); + } else { + clk_prepare_enable(i2s->i2s_gclk); + } + i2s->i2s_clk= clk_get(&pdev->dev, "i2s_clk"); if (IS_ERR(i2s->i2s_clk)) { dev_err(&pdev->dev, "Can't retrieve i2s clock\n"); -- 2.34.1