From: Lars-Peter Clausen Date: Sun, 28 Jun 2009 21:00:22 +0000 (+0000) Subject: [s3c24xx] Cleanup sound patch. X-Git-Url: http://git.openwrt.org/?p=openwrt%2Fsvn-archive%2Farchive.git;a=commitdiff_plain;h=25dbc7831067874741ede731eeb9e9317870aa69 [s3c24xx] Cleanup sound patch. SVN-Revision: 16611 --- diff --git a/target/linux/s3c24xx/patches-2.6.30/010-s3c-dma.patch b/target/linux/s3c24xx/patches-2.6.30/010-s3c-dma.patch index 3d31f27118..871514a6e6 100644 --- a/target/linux/s3c24xx/patches-2.6.30/010-s3c-dma.patch +++ b/target/linux/s3c24xx/patches-2.6.30/010-s3c-dma.patch @@ -1288,3 +1288,36 @@ #include #include #include +--- a/sound/soc/s3c24xx/s3c24xx-pcm.c 2009-06-10 05:05:27.000000000 +0200 ++++ b/sound/soc/s3c24xx/s3c24xx-pcm.c 2009-05-16 13:25:48.000000000 +0200 +@@ -218,23 +231,16 @@ + * sync to pclk, half-word transfers to the IIS-FIFO. */ + if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) { + s3c2410_dma_devconfig(prtd->params->channel, +- S3C2410_DMASRC_MEM, S3C2410_DISRCC_INC | +- S3C2410_DISRCC_APB, prtd->params->dma_addr); +- +- s3c2410_dma_config(prtd->params->channel, +- prtd->params->dma_size, +- S3C2410_DCON_SYNC_PCLK | +- S3C2410_DCON_HANDSHAKE); ++ S3C2410_DMASRC_MEM, ++ prtd->params->dma_addr); + } else { +- s3c2410_dma_config(prtd->params->channel, +- prtd->params->dma_size, +- S3C2410_DCON_HANDSHAKE | +- S3C2410_DCON_SYNC_PCLK); +- + s3c2410_dma_devconfig(prtd->params->channel, +- S3C2410_DMASRC_HW, 0x3, +- prtd->params->dma_addr); ++ S3C2410_DMASRC_HW, ++ prtd->params->dma_addr); + } ++ ++ s3c2410_dma_config(prtd->params->channel, ++ prtd->params->dma_size); + + /* flush the DMA channel */ + s3c2410_dma_ctrl(prtd->params->channel, S3C2410_DMAOP_FLUSH); diff --git a/target/linux/s3c24xx/patches-2.6.30/058-gta02-wm8752.patch b/target/linux/s3c24xx/patches-2.6.30/058-gta02-wm8752.patch new file mode 100644 index 0000000000..d72f3874ff --- /dev/null +++ b/target/linux/s3c24xx/patches-2.6.30/058-gta02-wm8752.patch @@ -0,0 +1,37 @@ +--- a/sound/soc/s3c24xx/Kconfig ++++ b/sound/soc/s3c24xx/Kconfig +@@ -42,10 +42,20 @@ config SND_S3C24XX_SOC_JIVE_WM8750 + tristate "SoC I2S Audio support for Jive" + depends on SND_S3C24XX_SOC && MACH_JIVE + select SND_SOC_WM8750 ++ select SND_SOC_WM8750_SPI + select SND_S3C2412_SOC_I2S + help + Sat Y if you want to add support for SoC audio on the Jive. + ++config SND_S3C24XX_SOC_NEO1973_GTA02_WM8753 ++ tristate "SoC I2S Audio support for Openmoko Freerunner - WM8753" ++ depends on SND_S3C24XX_SOC && MACH_NEO1973_GTA02 ++ select SND_S3C24XX_SOC_I2S ++ select SND_SOC_WM8753 ++ help ++ Say Y if you want to add support for SoC audio on Openmoko Freerunner ++ with the WM8753 codec ++ + config SND_S3C24XX_SOC_SMDK2443_WM9710 + tristate "SoC AC97 Audio support for SMDK2443 - WM9710" + depends on SND_S3C24XX_SOC && MACH_SMDK2443 +--- a/sound/soc/s3c24xx/Makefile ++++ b/sound/soc/s3c24xx/Makefile +@@ -19,9 +19,11 @@ snd-soc-neo1973-wm8753-objs := neo1973_w + snd-soc-smdk2443-wm9710-objs := smdk2443_wm9710.o + snd-soc-ln2440sbc-alc650-objs := ln2440sbc_alc650.o + snd-soc-s3c24xx-uda134x-objs := s3c24xx_uda134x.o ++snd-soc-neo1973-gta02-wm8753-objs := gta02_wm8753.o + + obj-$(CONFIG_SND_S3C24XX_SOC_JIVE_WM8750) += snd-soc-jive-wm8750.o + obj-$(CONFIG_SND_S3C24XX_SOC_NEO1973_WM8753) += snd-soc-neo1973-wm8753.o + obj-$(CONFIG_SND_S3C24XX_SOC_SMDK2443_WM9710) += snd-soc-smdk2443-wm9710.o + obj-$(CONFIG_SND_S3C24XX_SOC_LN2440SBC_ALC650) += snd-soc-ln2440sbc-alc650.o + obj-$(CONFIG_SND_S3C24XX_SOC_S3C24XX_UDA134X) += snd-soc-s3c24xx-uda134x.o ++obj-$(CONFIG_SND_S3C24XX_SOC_NEO1973_GTA02_WM8753) += snd-soc-neo1973-gta02-wm8753.o diff --git a/target/linux/s3c24xx/patches-2.6.30/090-sound.patch b/target/linux/s3c24xx/patches-2.6.30/090-sound.patch deleted file mode 100644 index 2bfef447ba..0000000000 --- a/target/linux/s3c24xx/patches-2.6.30/090-sound.patch +++ /dev/null @@ -1,142 +0,0 @@ ---- a/sound/soc/s3c24xx/Kconfig -+++ b/sound/soc/s3c24xx/Kconfig -@@ -42,10 +42,20 @@ config SND_S3C24XX_SOC_JIVE_WM8750 - tristate "SoC I2S Audio support for Jive" - depends on SND_S3C24XX_SOC && MACH_JIVE - select SND_SOC_WM8750 -+ select SND_SOC_WM8750_SPI - select SND_S3C2412_SOC_I2S - help - Sat Y if you want to add support for SoC audio on the Jive. - -+config SND_S3C24XX_SOC_NEO1973_GTA02_WM8753 -+ tristate "SoC I2S Audio support for Openmoko Freerunner - WM8753" -+ depends on SND_S3C24XX_SOC && MACH_NEO1973_GTA02 -+ select SND_S3C24XX_SOC_I2S -+ select SND_SOC_WM8753 -+ help -+ Say Y if you want to add support for SoC audio on Openmoko Freerunner -+ with the WM8753 codec -+ - config SND_S3C24XX_SOC_SMDK2443_WM9710 - tristate "SoC AC97 Audio support for SMDK2443 - WM9710" - depends on SND_S3C24XX_SOC && MACH_SMDK2443 ---- a/sound/soc/s3c24xx/Makefile -+++ b/sound/soc/s3c24xx/Makefile -@@ -19,9 +19,11 @@ snd-soc-neo1973-wm8753-objs := neo1973_w - snd-soc-smdk2443-wm9710-objs := smdk2443_wm9710.o - snd-soc-ln2440sbc-alc650-objs := ln2440sbc_alc650.o - snd-soc-s3c24xx-uda134x-objs := s3c24xx_uda134x.o -+snd-soc-neo1973-gta02-wm8753-objs := gta02_wm8753.o - - obj-$(CONFIG_SND_S3C24XX_SOC_JIVE_WM8750) += snd-soc-jive-wm8750.o - obj-$(CONFIG_SND_S3C24XX_SOC_NEO1973_WM8753) += snd-soc-neo1973-wm8753.o - obj-$(CONFIG_SND_S3C24XX_SOC_SMDK2443_WM9710) += snd-soc-smdk2443-wm9710.o - obj-$(CONFIG_SND_S3C24XX_SOC_LN2440SBC_ALC650) += snd-soc-ln2440sbc-alc650.o - obj-$(CONFIG_SND_S3C24XX_SOC_S3C24XX_UDA134X) += snd-soc-s3c24xx-uda134x.o -+obj-$(CONFIG_SND_S3C24XX_SOC_NEO1973_GTA02_WM8753) += snd-soc-neo1973-gta02-wm8753.o ---- a/sound/soc/s3c24xx/s3c24xx-i2s.c -+++ b/sound/soc/s3c24xx/s3c24xx-i2s.c -@@ -284,11 +284,14 @@ static int s3c24xx_i2s_trigger(struct sn - case SNDRV_PCM_TRIGGER_START: - case SNDRV_PCM_TRIGGER_RESUME: - case SNDRV_PCM_TRIGGER_PAUSE_RELEASE: -- if (!s3c24xx_snd_is_clkmaster()) { -- ret = s3c24xx_snd_lrsync(); -- if (ret) -- goto exit_err; -- } -+ if (!s3c24xx_snd_is_clkmaster()) -+ /* we ignore the return code, if it sync'd then fine, -+ * if it didn't sync, which happens after resume the -+ * first time when there was a live stream at suspend, -+ * just let it timeout, the stream picks up OK after -+ * that and LRCK is evidently working again. -+ */ -+ s3c24xx_snd_lrsync(); - - if (substream->stream == SNDRV_PCM_STREAM_CAPTURE) - s3c24xx_snd_rxctrl(1); -@@ -308,7 +311,6 @@ static int s3c24xx_i2s_trigger(struct sn - break; - } - --exit_err: - return ret; - } - ---- a/sound/soc/s3c24xx/s3c24xx-pcm.c -+++ b/sound/soc/s3c24xx/s3c24xx-pcm.c -@@ -75,11 +75,18 @@ static void s3c24xx_pcm_enqueue(struct s - { - struct s3c24xx_runtime_data *prtd = substream->runtime->private_data; - dma_addr_t pos = prtd->dma_pos; -+ unsigned int limit; - int ret; - - pr_debug("Entered %s\n", __func__); - -- while (prtd->dma_loaded < prtd->dma_limit) { -+ if (s3c_dma_has_circular()) { -+ limit = (prtd->dma_end - prtd->dma_start) / prtd->dma_period; -+ } else -+ limit = prtd->dma_limit; -+ -+ -+ while (prtd->dma_loaded < limit) { - unsigned long len = prtd->dma_period; - - pr_debug("dma_loaded: %d\n", prtd->dma_loaded); -@@ -123,7 +130,7 @@ static void s3c24xx_audio_buffdone(struc - snd_pcm_period_elapsed(substream); - - spin_lock(&prtd->lock); -- if (prtd->state & ST_RUNNING) { -+ if (prtd->state & ST_RUNNING && !s3c_dma_has_circular()) { - prtd->dma_loaded--; - s3c24xx_pcm_enqueue(substream); - } -@@ -164,6 +171,11 @@ static int s3c24xx_pcm_hw_params(struct - printk(KERN_ERR "failed to get dma channel\n"); - return ret; - } -+ -+ /* use the circular buffering if we have it available. */ -+ if (s3c_dma_has_circular()) -+ s3c2410_dma_setflags(prtd->params->channel, -+ S3C2410_DMAF_CIRCULAR); - } - - s3c2410_dma_set_buffdone_fn(prtd->params->channel, -@@ -218,24 +230,17 @@ static int s3c24xx_pcm_prepare(struct sn - * sync to pclk, half-word transfers to the IIS-FIFO. */ - if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) { - s3c2410_dma_devconfig(prtd->params->channel, -- S3C2410_DMASRC_MEM, S3C2410_DISRCC_INC | -- S3C2410_DISRCC_APB, prtd->params->dma_addr); -- -- s3c2410_dma_config(prtd->params->channel, -- prtd->params->dma_size, -- S3C2410_DCON_SYNC_PCLK | -- S3C2410_DCON_HANDSHAKE); -+ S3C2410_DMASRC_MEM, -+ prtd->params->dma_addr); - } else { -- s3c2410_dma_config(prtd->params->channel, -- prtd->params->dma_size, -- S3C2410_DCON_HANDSHAKE | -- S3C2410_DCON_SYNC_PCLK); -- - s3c2410_dma_devconfig(prtd->params->channel, -- S3C2410_DMASRC_HW, 0x3, -- prtd->params->dma_addr); -+ S3C2410_DMASRC_HW, -+ prtd->params->dma_addr); - } - -+ s3c2410_dma_config(prtd->params->channel, -+ prtd->params->dma_size); -+ - /* flush the DMA channel */ - s3c2410_dma_ctrl(prtd->params->channel, S3C2410_DMAOP_FLUSH); - prtd->dma_loaded = 0;