i2s: add gate clk control
authoryj <yangjie@rock-chips.com>
Tue, 1 Apr 2014 07:25:54 +0000 (15:25 +0800)
committeryj <yangjie@rock-chips.com>
Tue, 1 Apr 2014 07:25:54 +0000 (15:25 +0800)
arch/arm/boot/dts/rk3288.dtsi
sound/soc/rockchip/rk30_i2s.c

index 749b814e18f3f24dd2027cb788c8930f45afec0f..1ed423e75ce658a4dca1f973cbef9de93a12c454 100755 (executable)
                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 = <GIC_SPI 85 IRQ_TYPE_LEVEL_HIGH>;
                dmas = <&pdma0 0>,
                        <&pdma0 1>;
index f2d466cd2231e6e1d076645ff4f47677d42b95c4..2092964de5320780329083d5e69262a2a82e2e4c 100755 (executable)
@@ -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");