summaryrefslogtreecommitdiff
path: root/sound
diff options
context:
space:
mode:
authorXinyu Chen <xinyu.chen@freescale.com>2012-11-08 10:24:56 +0800
committerXinyu Chen <xinyu.chen@freescale.com>2012-11-08 10:24:56 +0800
commitac758db7a1ff13fbde98f4f3d1d2ac2c77780ccf (patch)
tree47df51297eaaf05ed6abe31df318e799b3946eb7 /sound
parent249d44a6a33b134efd248e5a6ab759c4218de0de (diff)
parentfa610478f592b1a65fe170848b9d2226cd32a254 (diff)
Merge remote branch 'fsl-linux-sdk/imx_3.0.35' into imx_3.0.35_android
Conflicts: arch/arm/plat-mxc/dvfs_core.c drivers/input/keyboard/mpr121.c drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_driver.c include/linux/i2c/mpr.h sound/soc/imx/imx-wm8962.c
Diffstat (limited to 'sound')
-rw-r--r--sound/soc/codecs/cs42888.c6
-rw-r--r--sound/soc/codecs/mxc_spdif.c8
-rw-r--r--sound/soc/imx/Makefile6
-rw-r--r--sound/soc/imx/imx-esai.c2
-rw-r--r--sound/soc/imx/imx-hdmi-dma.c1
-rw-r--r--sound/soc/imx/imx-wm8962.c40
6 files changed, 39 insertions, 24 deletions
diff --git a/sound/soc/codecs/cs42888.c b/sound/soc/codecs/cs42888.c
index ce240834b2e1..698ff4b59826 100644
--- a/sound/soc/codecs/cs42888.c
+++ b/sound/soc/codecs/cs42888.c
@@ -793,7 +793,7 @@ struct snd_soc_dai_driver cs42888_dai[] = {
.name = "CS42888",
.playback = {
.stream_name = "Playback",
- .channels_min = 1,
+ .channels_min = 2,
.channels_max = 8,
.rates = (SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_96000 |
SNDRV_PCM_RATE_192000),
@@ -801,7 +801,7 @@ struct snd_soc_dai_driver cs42888_dai[] = {
},
.capture = {
.stream_name = "Capture",
- .channels_min = 1,
+ .channels_min = 2,
.channels_max = 4,
.rates = (SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_96000 |
SNDRV_PCM_RATE_192000),
@@ -813,7 +813,7 @@ struct snd_soc_dai_driver cs42888_dai[] = {
.name = "CS42888_ASRC",
.playback = {
.stream_name = "Playback",
- .channels_min = 1,
+ .channels_min = 2,
.channels_max = 8,
.rates = SNDRV_PCM_RATE_8000_192000,
.formats = CS42888_FORMATS,
diff --git a/sound/soc/codecs/mxc_spdif.c b/sound/soc/codecs/mxc_spdif.c
index c80eed6d80d3..33b23371ea58 100644
--- a/sound/soc/codecs/mxc_spdif.c
+++ b/sound/soc/codecs/mxc_spdif.c
@@ -849,13 +849,21 @@ static int mxc_pb_spdif_get(struct snd_kcontrol *kcontrol,
static int mxc_pb_spdif_put(struct snd_kcontrol *kcontrol,
struct snd_ctl_elem_value *uvalue)
{
+ struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
+ struct mxc_spdif_priv *spdif_priv = snd_soc_codec_get_drvdata(codec);
+ struct mxc_spdif_platform_data *plat_data = spdif_priv->plat_data;
+
mxc_spdif_control.ch_status[0] = uvalue->value.iec958.status[0];
mxc_spdif_control.ch_status[1] = uvalue->value.iec958.status[1];
mxc_spdif_control.ch_status[2] = uvalue->value.iec958.status[2];
mxc_spdif_control.ch_status[3] = uvalue->value.iec958.status[3];
+ clk_enable(plat_data->spdif_clk);
+
spdif_write_channel_status();
+ clk_disable(plat_data->spdif_clk);
+
return 0;
}
diff --git a/sound/soc/imx/Makefile b/sound/soc/imx/Makefile
index adeef06f3c7f..cc0a7d997609 100644
--- a/sound/soc/imx/Makefile
+++ b/sound/soc/imx/Makefile
@@ -1,7 +1,7 @@
# i.MX Platform Support
-snd-soc-imx-objs := imx-ssi.o imx-esai.o
+snd-soc-imx-objs := imx-ssi.o imx-esai.o imx-hdmi-dai.o hdmi_pcm.o
snd-soc-imx-fiq-objs := imx-pcm-fiq.o
-snd-soc-imx-mx2-objs := imx-pcm-dma-mx2.o
+snd-soc-imx-mx2-objs := imx-pcm-dma-mx2.o imx-hdmi-dma.o
snd-soc-imx-spdif-dai-objs := imx-spdif-dai.o
obj-$(CONFIG_SND_IMX_SOC) += snd-soc-imx.o
@@ -20,7 +20,7 @@ snd-soc-imx-sgtl5000-objs := imx-sgtl5000.o
snd-soc-imx-cs42888-objs := imx-cs42888.o
snd-soc-imx-spdif-objs := imx-spdif.o
snd-soc-imx-si4763-objs := imx-si4763.o
-snd-soc-imx-hdmi-objs := imx-hdmi.o imx-hdmi-dai.o imx-hdmi-dma.o hdmi_pcm.o
+snd-soc-imx-hdmi-objs := imx-hdmi.o
obj-$(CONFIG_SND_SOC_EUKREA_TLV320) += snd-soc-eukrea-tlv320.o
obj-$(CONFIG_SND_SOC_PHYCORE_AC97) += snd-soc-phycore-ac97.o
diff --git a/sound/soc/imx/imx-esai.c b/sound/soc/imx/imx-esai.c
index 359cb2a4aea0..8951a81f6824 100644
--- a/sound/soc/imx/imx-esai.c
+++ b/sound/soc/imx/imx-esai.c
@@ -579,7 +579,7 @@ static struct snd_soc_dai_driver imx_esai_dai = {
.suspend = imx_esai_suspend,
.resume = imx_esai_resume,
.playback = {
- .channels_min = 2,
+ .channels_min = 1,
.channels_max = 12,
.rates = IMX_ESAI_RATES,
.formats = IMX_ESAI_FORMATS,
diff --git a/sound/soc/imx/imx-hdmi-dma.c b/sound/soc/imx/imx-hdmi-dma.c
index d0c223645fc8..a359e4cdcfe2 100644
--- a/sound/soc/imx/imx-hdmi-dma.c
+++ b/sound/soc/imx/imx-hdmi-dma.c
@@ -119,6 +119,7 @@ void hdmi_dma_copy_24_neon_fast(unsigned int *src, unsigned int *dst,
int samples);
hdmi_audio_header_t iec_header;
+EXPORT_SYMBOL(iec_header);
/*
* Note that the period size for DMA != period size for ALSA because the
diff --git a/sound/soc/imx/imx-wm8962.c b/sound/soc/imx/imx-wm8962.c
index 87124802095a..2cc1c1b598e6 100644
--- a/sound/soc/imx/imx-wm8962.c
+++ b/sound/soc/imx/imx-wm8962.c
@@ -332,24 +332,24 @@ static int imx_wm8962_init(struct snd_soc_pcm_runtime *rtd)
snd_soc_dapm_sync(&codec->dapm);
if (plat->hp_gpio != -1) {
- priv->hp_irq = gpio_to_irq(plat->hp_gpio);
-
- ret = request_irq(priv->hp_irq,
- imx_headphone_detect_handler,
- IRQ_TYPE_EDGE_BOTH, pdev->name, priv);
-
- if (ret < 0) {
- ret = -EINVAL;
- return ret;
- }
-
- ret = driver_create_file(pdev->dev.driver,
- &driver_attr_headphone);
- if (ret < 0) {
- ret = -EINVAL;
- return ret;
- }
+ priv->hp_irq = gpio_to_irq(plat->hp_gpio);
+
+ ret = request_irq(priv->hp_irq,
+ imx_headphone_detect_handler,
+ IRQ_TYPE_EDGE_BOTH, pdev->name, priv);
+
+ if (ret < 0) {
+ ret = -EINVAL;
+ return ret;
+ }
+
+ ret = driver_create_file(pdev->dev.driver,
+ &driver_attr_headphone);
+ if (ret < 0) {
+ ret = -EINVAL;
+ return ret;
}
+ }
if (plat->mic_gpio != -1) {
priv->amic_irq = gpio_to_irq(plat->mic_gpio);
@@ -477,6 +477,12 @@ static int __devexit imx_wm8962_remove(struct platform_device *pdev)
plat->finit();
switch_dev_unregister(&priv->sdev);
+
+ if (priv->hp_irq)
+ free_irq(priv->hp_irq, priv);
+ if (priv->amic_irq)
+ free_irq(priv->amic_irq, priv);
+
return 0;
}