Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

ARM: Orion: Audio: Add clk/clkdev support

Signed-off-by: Andrew Lunn <andrew@lunn.ch>
Tested-by: Jamie Lentin <jm@lentin.co.uk>
Signed-off-by: Mike Turquette <mturquette@linaro.org>

authored by

Andrew Lunn and committed by
Mike Turquette
e919c716 27e53cfb

+17 -2
+3 -2
arch/arm/mach-kirkwood/common.c
··· 87 87 void __init kirkwood_clk_init(void) 88 88 { 89 89 struct clk *runit, *ge0, *ge1, *sata0, *sata1, *usb0, *sdio; 90 - struct clk *crypto, *xor0, *xor1, *pex0, *pex1; 90 + struct clk *crypto, *xor0, *xor1, *pex0, *pex1, *audio; 91 91 92 92 tclk = clk_register_fixed_rate(NULL, "tclk", NULL, 93 93 CLK_IS_ROOT, kirkwood_tclk); ··· 104 104 xor1 = kirkwood_register_gate("xor1", CGC_BIT_XOR1); 105 105 pex0 = kirkwood_register_gate("pex0", CGC_BIT_PEX0); 106 106 pex1 = kirkwood_register_gate("pex1", CGC_BIT_PEX1); 107 - kirkwood_register_gate("audio", CGC_BIT_AUDIO); 107 + audio = kirkwood_register_gate("audio", CGC_BIT_AUDIO); 108 108 kirkwood_register_gate("tdm", CGC_BIT_TDM); 109 109 kirkwood_register_gate("tsu", CGC_BIT_TSU); 110 110 ··· 124 124 orion_clkdev_add(NULL, MV_XOR_SHARED_NAME ".1", xor1); 125 125 orion_clkdev_add("0", "pcie", pex0); 126 126 orion_clkdev_add("1", "pcie", pex1); 127 + orion_clkdev_add(NULL, "kirkwood-i2s", audio); 127 128 } 128 129 129 130 /*****************************************************************************
+13
sound/soc/kirkwood/kirkwood-i2s.c
··· 17 17 #include <linux/slab.h> 18 18 #include <linux/mbus.h> 19 19 #include <linux/delay.h> 20 + #include <linux/clk.h> 20 21 #include <sound/pcm.h> 21 22 #include <sound/pcm_params.h> 22 23 #include <sound/soc.h> ··· 450 449 451 450 priv->burst = data->burst; 452 451 452 + priv->clk = clk_get(&pdev->dev, NULL); 453 + if (IS_ERR(priv->clk)) { 454 + dev_err(&pdev->dev, "no clock\n"); 455 + err = PTR_ERR(priv->clk); 456 + goto err_ioremap; 457 + } 458 + clk_prepare_enable(priv->clk); 459 + 453 460 return snd_soc_register_dai(&pdev->dev, &kirkwood_i2s_dai); 454 461 455 462 err_ioremap: ··· 475 466 struct kirkwood_dma_data *priv = dev_get_drvdata(&pdev->dev); 476 467 477 468 snd_soc_unregister_dai(&pdev->dev); 469 + 470 + clk_disable_unprepare(priv->clk); 471 + clk_put(priv->clk); 472 + 478 473 iounmap(priv->io); 479 474 release_mem_region(priv->mem->start, SZ_16K); 480 475 kfree(priv);
+1
sound/soc/kirkwood/kirkwood.h
··· 123 123 void __iomem *io; 124 124 int irq; 125 125 int burst; 126 + struct clk *clk; 126 127 }; 127 128 128 129 #endif