Merge branch 'for-linus' of master.kernel.org:/home/rmk/linux-2.6-arm
* 'for-linus' of master.kernel.org:/home/rmk/linux-2.6-arm: (241 commits) [ARM] 5171/1: ep93xx: fix compilation of modules using clocks [ARM] 5133/2: at91sam9g20 defconfig file [ARM] 5130/4: Support for the at91sam9g20 [ARM] 5160/1: IOP3XX: gpio/gpiolib support [ARM] at91: Fix NAND FLASH timings for at91sam9x evaluation kits. [ARM] 5084/1: zylonite: Register AC97 device [ARM] 5085/2: PXA: Move AC97 over to the new central device declaration model [ARM] 5120/1: pxa: correct platform driver names for PXA25x and PXA27x UDC drivers [ARM] 5147/1: pxaficp_ir: drop pxa_gpio_mode calls, as pin setting [ARM] 5145/1: PXA2xx: provide api to control IrDA pins state [ARM] 5144/1: pxaficp_ir: cleanup includes [ARM] pxa: remove pxa_set_cken() [ARM] pxa: allow clk aliases [ARM] Feroceon: don't disable BPU on boot [ARM] Orion: LED support for HP mv2120 [ARM] Orion: add RD88F5181L-FXO support [ARM] Orion: add RD88F5181L-GE support [ARM] Orion: add Netgear WNR854T support [ARM] s3c2410_defconfig: update for current build [ARM] Acer n30: Minor style and indentation fixes. ...
This commit is contained in:
@@ -15,6 +15,7 @@
|
||||
#include <linux/module.h>
|
||||
#include <linux/device.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/clk.h>
|
||||
#include <sound/core.h>
|
||||
#include <sound/pcm.h>
|
||||
#include <sound/initval.h>
|
||||
@@ -37,6 +38,7 @@ struct pxa_i2s_port {
|
||||
u32 fmt;
|
||||
};
|
||||
static struct pxa_i2s_port pxa_i2s;
|
||||
static struct clk *clk_i2s;
|
||||
|
||||
static struct pxa2xx_pcm_dma_params pxa2xx_i2s_pcm_stereo_out = {
|
||||
.name = "I2S PCM Stereo out",
|
||||
@@ -79,6 +81,10 @@ static int pxa2xx_i2s_startup(struct snd_pcm_substream *substream)
|
||||
struct snd_soc_pcm_runtime *rtd = substream->private_data;
|
||||
struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
|
||||
|
||||
clk_i2s = clk_get(NULL, "I2SCLK");
|
||||
if (IS_ERR(clk_i2s))
|
||||
return PTR_ERR(clk_i2s);
|
||||
|
||||
if (!cpu_dai->active) {
|
||||
SACR0 |= SACR0_RST;
|
||||
SACR0 = 0;
|
||||
@@ -146,7 +152,7 @@ static int pxa2xx_i2s_hw_params(struct snd_pcm_substream *substream,
|
||||
pxa_gpio_mode(gpio_bus[pxa_i2s.master].tx);
|
||||
pxa_gpio_mode(gpio_bus[pxa_i2s.master].frm);
|
||||
pxa_gpio_mode(gpio_bus[pxa_i2s.master].clk);
|
||||
pxa_set_cken(CKEN_I2S, 1);
|
||||
clk_enable(clk_i2s);
|
||||
pxa_i2s_wait();
|
||||
|
||||
if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
|
||||
@@ -231,8 +237,10 @@ static void pxa2xx_i2s_shutdown(struct snd_pcm_substream *substream)
|
||||
if (SACR1 & (SACR1_DREC | SACR1_DRPL)) {
|
||||
SACR0 &= ~SACR0_ENB;
|
||||
pxa_i2s_wait();
|
||||
pxa_set_cken(CKEN_I2S, 0);
|
||||
clk_disable(clk_i2s);
|
||||
}
|
||||
|
||||
clk_put(clk_i2s);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
|
Reference in New Issue
Block a user