From: Petr Cvek petrcvekcz@gmail.com
The switch of PXA to dmaengine caused a regression for devices which are using SSP/I2S and probably AC97. The problem is in multiple allocation of DMA by function pxa2xx_soc_pcm_new() called by pxa-pcm-audio and (SSP/I2S/AC97). The regression was found on HTC Magician and after playback kernel generates an oops:
WARNING: CPU: 0 PID: 892 at drivers/dma/dmaengine.c:788 dma_release_channel+0x44/0xa0 chan reference count 0 != 1 Modules linked in: ... snd_soc_magician snd_soc_uda1380 snd_soc_pxa2xx_i2s spi_pxa2xx_platform snd_soc_pxa2xx snd_soc_pxa_ssp snd_pxa2xx_lib snd_pcm_dmaengine i2c_pxa snd_soc_core snd_pcm snd_timer i2c_core snd ssp soundcore [last unloaded: pwm_bl] CPU: 0 PID: 892 Comm: aplay Tainted: G C 4.18.0-rc6-next-20180726-magician+ #16 Hardware name: HTC Magician [<c0107d90>] (unwind_backtrace) from [<c010594c>] (show_stack+0x10/0x14) [<c010594c>] (show_stack) from [<c0111680>] (__warn+0xd4/0xec) [<c0111680>] (__warn) from [<c01112d0>] (warn_slowpath_fmt+0x44/0x6c) [<c01112d0>] (warn_slowpath_fmt) from [<c034908c>] (dma_release_channel+0x44/0xa0) [<c034908c>] (dma_release_channel) from [<bf330528>] (snd_dmaengine_pcm_close_release_chan+0x44/0xb1c [snd_pcm_dmaengine]) [<bf330528>] (snd_dmaengine_pcm_close_release_chan [snd_pcm_dmaengine]) from [<bf26c29c>] (soc_pcm_components_close+0x8c/0xac [snd_soc_core]) [<bf26c29c>] (soc_pcm_components_close [snd_soc_core]) from [<bf26c3a0>] (soc_pcm_close+0xe4/0xd44 [snd_soc_core]) [<bf26c3a0>] (soc_pcm_close [snd_soc_core]) from [<bf167254>] (snd_pcm_release_substream+0x88/0x108 [snd_pcm]) [<bf167254>] (snd_pcm_release_substream [snd_pcm]) from [<bf167330>] (snd_pcm_release+0x5c/0xd2c [snd_pcm]) [<bf167330>] (snd_pcm_release [snd_pcm]) from [<c01c39e4>] (__fput+0xdc/0x1e8) [<c01c39e4>] (__fput) from [<c0129e7c>] (task_work_run+0xc4/0xd4) [<c0129e7c>] (task_work_run) from [<c01053ac>] (do_work_pending+0xc0/0xc8) [<c01053ac>] (do_work_pending) from [<c0101068>] (slow_work_pending+0xc/0x20) Exception stack(0xc2fdffb0 to 0xc2fdfff8) ffa0: 00000000 0154d1a0 01542a3c 00000000 ffc0: 0154d150 00000000 0009283c 00000006 000003f0 0154d4c8 00000000 0154d4c8 ffe0: b6ee7d70 bef13960 b6e547b8 b6cfe018 60000010 00000004
Removing bindings for snd_soc_magician fixes the problem (tested). Other machines should have the same problem if they use at least one of pxa-ssp-dai or pxa2xx-i2s. Considering pxa2xx-ac97 uses the function pxa2xx_soc_pcm_new() too it should produce the same problem (untested).
After removal from I2S/SSP/AC97 machines there seems to be no user of pxa2xx-pcm, so remove the driver completely, change platform device in arch/arm/mach-pxa/devices.c to snd-soc-dummy and an example in the documentation.
Signed-off-by: Petr Cvek petrcvekcz@gmail.com --- Documentation/sound/soc/machine.rst | 2 +- arch/arm/mach-pxa/devices.c | 2 +- sound/soc/pxa/Kconfig | 43 ++++++++++---------------- sound/soc/pxa/Makefile | 2 -- sound/soc/pxa/corgi.c | 1 - sound/soc/pxa/e740_wm9705.c | 2 -- sound/soc/pxa/e750_wm9705.c | 2 -- sound/soc/pxa/e800_wm9712.c | 2 -- sound/soc/pxa/em-x270.c | 2 -- sound/soc/pxa/hx4700.c | 1 - sound/soc/pxa/imote2.c | 1 - sound/soc/pxa/magician.c | 2 -- sound/soc/pxa/mioa701_wm9713.c | 2 -- sound/soc/pxa/palm27x.c | 2 -- sound/soc/pxa/poodle.c | 1 - sound/soc/pxa/pxa2xx-pcm.c | 48 ----------------------------- sound/soc/pxa/raumfeld.c | 2 -- sound/soc/pxa/spitz.c | 1 - sound/soc/pxa/tosa.c | 2 -- sound/soc/pxa/z2.c | 1 - sound/soc/pxa/zylonite.c | 3 -- 21 files changed, 18 insertions(+), 106 deletions(-) delete mode 100644 sound/soc/pxa/pxa2xx-pcm.c
diff --git a/Documentation/sound/soc/machine.rst b/Documentation/sound/soc/machine.rst index 515c9444deaf..a65f41ade2ca 100644 --- a/Documentation/sound/soc/machine.rst +++ b/Documentation/sound/soc/machine.rst @@ -65,7 +65,7 @@ struct snd_soc_dai_link is used to set up each DAI in your machine. e.g. .stream_name = "WM8731", .cpu_dai_name = "pxa-is2-dai", .codec_dai_name = "wm8731-hifi", - .platform_name = "pxa-pcm-audio", + .platform_name = "snd-soc-dummy", .codec_name = "wm8713-codec.0-001a", .init = corgi_wm8731_init, .ops = &corgi_ops, diff --git a/arch/arm/mach-pxa/devices.c b/arch/arm/mach-pxa/devices.c index a24783a03827..82ee7f6c1dcf 100644 --- a/arch/arm/mach-pxa/devices.c +++ b/arch/arm/mach-pxa/devices.c @@ -371,7 +371,7 @@ struct platform_device pxa_device_asoc_ssp4 = { };
struct platform_device pxa_device_asoc_platform = { - .name = "pxa-pcm-audio", + .name = "snd-soc-dummy", .id = -1, };
diff --git a/sound/soc/pxa/Kconfig b/sound/soc/pxa/Kconfig index 776e148b0aa2..d865c1041c6b 100644 --- a/sound/soc/pxa/Kconfig +++ b/sound/soc/pxa/Kconfig @@ -1,12 +1,3 @@ -config SND_PXA2XX_SOC - tristate "SoC Audio for the Intel PXA2xx chip" - depends on ARCH_PXA || COMPILE_TEST - select SND_PXA2XX_LIB - help - Say Y or M if you want to add support for codecs attached to - the PXA2xx AC97, I2S or SSP interface. You will also need - to select the audio interfaces to support below. - config SND_MMP_SOC bool "Soc Audio for Marvell MMP chips" depends on ARCH_MMP @@ -43,7 +34,7 @@ config SND_MMP_SOC_SSPA
config SND_PXA2XX_SOC_CORGI tristate "SoC Audio support for Sharp Zaurus SL-C7x0" - depends on SND_PXA2XX_SOC && PXA_SHARP_C7xx && I2C + depends on PXA_SHARP_C7xx && I2C select SND_PXA2XX_SOC_I2S select SND_SOC_WM8731 help @@ -52,7 +43,7 @@ config SND_PXA2XX_SOC_CORGI
config SND_PXA2XX_SOC_SPITZ tristate "SoC Audio support for Sharp Zaurus SL-Cxx00" - depends on SND_PXA2XX_SOC && PXA_SHARP_Cxx00 && I2C + depends on PXA_SHARP_Cxx00 && I2C select SND_PXA2XX_SOC_I2S select SND_SOC_WM8750 help @@ -61,7 +52,7 @@ config SND_PXA2XX_SOC_SPITZ
config SND_PXA2XX_SOC_Z2 tristate "SoC Audio support for Zipit Z2" - depends on SND_PXA2XX_SOC && MACH_ZIPIT2 && I2C + depends on MACH_ZIPIT2 && I2C select SND_PXA2XX_SOC_I2S select SND_SOC_WM8750 help @@ -69,7 +60,7 @@ config SND_PXA2XX_SOC_Z2
config SND_PXA2XX_SOC_POODLE tristate "SoC Audio support for Poodle" - depends on SND_PXA2XX_SOC && MACH_POODLE && I2C + depends on MACH_POODLE && I2C select SND_PXA2XX_SOC_I2S select SND_SOC_WM8731 help @@ -78,7 +69,7 @@ config SND_PXA2XX_SOC_POODLE
config SND_PXA2XX_SOC_TOSA tristate "SoC AC97 Audio support for Tosa" - depends on SND_PXA2XX_SOC && MACH_TOSA + depends on MACH_TOSA depends on MFD_TC6393XB select SND_PXA2XX_SOC_AC97 select SND_SOC_WM9712 @@ -88,7 +79,7 @@ config SND_PXA2XX_SOC_TOSA
config SND_PXA2XX_SOC_E740 tristate "SoC AC97 Audio support for e740" - depends on SND_PXA2XX_SOC && MACH_E740 + depends on MACH_E740 select SND_SOC_WM9705 select SND_PXA2XX_SOC_AC97 help @@ -97,7 +88,7 @@ config SND_PXA2XX_SOC_E740
config SND_PXA2XX_SOC_E750 tristate "SoC AC97 Audio support for e750" - depends on SND_PXA2XX_SOC && MACH_E750 + depends on MACH_E750 select SND_SOC_WM9705 select SND_PXA2XX_SOC_AC97 help @@ -106,7 +97,7 @@ config SND_PXA2XX_SOC_E750
config SND_PXA2XX_SOC_E800 tristate "SoC AC97 Audio support for e800" - depends on SND_PXA2XX_SOC && MACH_E800 + depends on MACH_E800 select SND_SOC_WM9712 select SND_PXA2XX_SOC_AC97 help @@ -115,8 +106,7 @@ config SND_PXA2XX_SOC_E800
config SND_PXA2XX_SOC_EM_X270 tristate "SoC Audio support for CompuLab EM-x270, eXeda and CM-X300" - depends on SND_PXA2XX_SOC && (MACH_EM_X270 || MACH_EXEDA || \ - MACH_CM_X300) + depends on MACH_EM_X270 || MACH_EXEDA || MACH_CM_X300 select SND_PXA2XX_SOC_AC97 select SND_SOC_WM9712 help @@ -125,8 +115,7 @@ config SND_PXA2XX_SOC_EM_X270
config SND_PXA2XX_SOC_PALM27X bool "SoC Audio support for Palm T|X, T5, E2 and LifeDrive" - depends on SND_PXA2XX_SOC && (MACH_PALMLD || MACH_PALMTX || \ - MACH_PALMT5 || MACH_PALMTE2) + depends on MACH_PALMLD || MACH_PALMTX || MACH_PALMT5 || MACH_PALMTE2 select SND_PXA2XX_SOC_AC97 select SND_SOC_WM9712 help @@ -155,7 +144,7 @@ config SND_SOC_TTC_DKB
config SND_SOC_ZYLONITE tristate "SoC Audio support for Marvell Zylonite" - depends on SND_PXA2XX_SOC && MACH_ZYLONITE + depends on MACH_ZYLONITE select SND_PXA2XX_SOC_AC97 select SND_PXA_SOC_SSP select SND_SOC_WM9713 @@ -165,7 +154,7 @@ config SND_SOC_ZYLONITE
config SND_SOC_RAUMFELD tristate "SoC Audio support Raumfeld audio adapter" - depends on SND_PXA2XX_SOC && (MACH_RAUMFELD_SPEAKER || MACH_RAUMFELD_CONNECTOR) + depends on MACH_RAUMFELD_SPEAKER || MACH_RAUMFELD_CONNECTOR depends on I2C && SPI_MASTER select SND_PXA_SOC_SSP select SND_SOC_CS4270 @@ -175,7 +164,7 @@ config SND_SOC_RAUMFELD
config SND_PXA2XX_SOC_HX4700 tristate "SoC Audio support for HP iPAQ hx4700" - depends on SND_PXA2XX_SOC && MACH_H4700 && I2C + depends on MACH_H4700 && I2C select SND_PXA2XX_SOC_I2S select SND_SOC_AK4641 help @@ -184,7 +173,7 @@ config SND_PXA2XX_SOC_HX4700
config SND_PXA2XX_SOC_MAGICIAN tristate "SoC Audio support for HTC Magician" - depends on SND_PXA2XX_SOC && MACH_MAGICIAN && I2C + depends on MACH_MAGICIAN && I2C select SND_PXA2XX_SOC_I2S select SND_PXA_SOC_SSP select SND_SOC_UDA1380 @@ -194,7 +183,7 @@ config SND_PXA2XX_SOC_MAGICIAN
config SND_PXA2XX_SOC_MIOA701 tristate "SoC Audio support for MIO A701" - depends on SND_PXA2XX_SOC && MACH_MIOA701 + depends on MACH_MIOA701 select SND_PXA2XX_SOC_AC97 select SND_SOC_WM9713 help @@ -203,7 +192,7 @@ config SND_PXA2XX_SOC_MIOA701
config SND_PXA2XX_SOC_IMOTE2 tristate "SoC Audio support for IMote 2" - depends on SND_PXA2XX_SOC && MACH_INTELMOTE2 && I2C + depends on MACH_INTELMOTE2 && I2C select SND_PXA2XX_SOC_I2S select SND_SOC_WM8940 help diff --git a/sound/soc/pxa/Makefile b/sound/soc/pxa/Makefile index 5b265662f04f..93c0fdd041ed 100644 --- a/sound/soc/pxa/Makefile +++ b/sound/soc/pxa/Makefile @@ -1,13 +1,11 @@ # SPDX-License-Identifier: GPL-2.0 # PXA Platform Support -snd-soc-pxa2xx-objs := pxa2xx-pcm.o snd-soc-pxa2xx-ac97-objs := pxa2xx-ac97.o snd-soc-pxa2xx-i2s-objs := pxa2xx-i2s.o snd-soc-pxa-ssp-objs := pxa-ssp.o snd-soc-mmp-objs := mmp-pcm.o snd-soc-mmp-sspa-objs := mmp-sspa.o
-obj-$(CONFIG_SND_PXA2XX_SOC) += snd-soc-pxa2xx.o obj-$(CONFIG_SND_PXA2XX_SOC_AC97) += snd-soc-pxa2xx-ac97.o obj-$(CONFIG_SND_PXA2XX_SOC_I2S) += snd-soc-pxa2xx-i2s.o obj-$(CONFIG_SND_PXA_SOC_SSP) += snd-soc-pxa-ssp.o diff --git a/sound/soc/pxa/corgi.c b/sound/soc/pxa/corgi.c index 054e0d65db9d..d36193e45be9 100644 --- a/sound/soc/pxa/corgi.c +++ b/sound/soc/pxa/corgi.c @@ -265,7 +265,6 @@ static struct snd_soc_dai_link corgi_dai = { .stream_name = "WM8731", .cpu_dai_name = "pxa2xx-i2s", .codec_dai_name = "wm8731-hifi", - .platform_name = "pxa-pcm-audio", .codec_name = "wm8731.0-001b", .dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_CBS_CFS, diff --git a/sound/soc/pxa/e740_wm9705.c b/sound/soc/pxa/e740_wm9705.c index 8ab7032631b7..cfae28571ec7 100644 --- a/sound/soc/pxa/e740_wm9705.c +++ b/sound/soc/pxa/e740_wm9705.c @@ -90,7 +90,6 @@ static struct snd_soc_dai_link e740_dai[] = { .stream_name = "AC97 HiFi", .cpu_dai_name = "pxa2xx-ac97", .codec_dai_name = "wm9705-hifi", - .platform_name = "pxa-pcm-audio", .codec_name = "wm9705-codec", }, { @@ -98,7 +97,6 @@ static struct snd_soc_dai_link e740_dai[] = { .stream_name = "AC97 Aux", .cpu_dai_name = "pxa2xx-ac97-aux", .codec_dai_name = "wm9705-aux", - .platform_name = "pxa-pcm-audio", .codec_name = "wm9705-codec", }, }; diff --git a/sound/soc/pxa/e750_wm9705.c b/sound/soc/pxa/e750_wm9705.c index 82bcbbb1841b..21c1f504a141 100644 --- a/sound/soc/pxa/e750_wm9705.c +++ b/sound/soc/pxa/e750_wm9705.c @@ -73,7 +73,6 @@ static struct snd_soc_dai_link e750_dai[] = { .stream_name = "AC97 HiFi", .cpu_dai_name = "pxa2xx-ac97", .codec_dai_name = "wm9705-hifi", - .platform_name = "pxa-pcm-audio", .codec_name = "wm9705-codec", /* use ops to check startup state */ }, @@ -82,7 +81,6 @@ static struct snd_soc_dai_link e750_dai[] = { .stream_name = "AC97 Aux", .cpu_dai_name = "pxa2xx-ac97-aux", .codec_dai_name = "wm9705-aux", - .platform_name = "pxa-pcm-audio", .codec_name = "wm9705-codec", }, }; diff --git a/sound/soc/pxa/e800_wm9712.c b/sound/soc/pxa/e800_wm9712.c index 1ed8aa2348f1..2475366f0e0b 100644 --- a/sound/soc/pxa/e800_wm9712.c +++ b/sound/soc/pxa/e800_wm9712.c @@ -74,7 +74,6 @@ static struct snd_soc_dai_link e800_dai[] = { .stream_name = "AC97 HiFi", .cpu_dai_name = "pxa2xx-ac97", .codec_dai_name = "wm9712-hifi", - .platform_name = "pxa-pcm-audio", .codec_name = "wm9712-codec", }, { @@ -82,7 +81,6 @@ static struct snd_soc_dai_link e800_dai[] = { .stream_name = "AC97 Aux", .cpu_dai_name = "pxa2xx-ac97-aux", .codec_dai_name = "wm9712-aux", - .platform_name = "pxa-pcm-audio", .codec_name = "wm9712-codec", }, }; diff --git a/sound/soc/pxa/em-x270.c b/sound/soc/pxa/em-x270.c index e046770ce70e..76b466b3eaee 100644 --- a/sound/soc/pxa/em-x270.c +++ b/sound/soc/pxa/em-x270.c @@ -36,7 +36,6 @@ static struct snd_soc_dai_link em_x270_dai[] = { .stream_name = "AC97 HiFi", .cpu_dai_name = "pxa2xx-ac97", .codec_dai_name = "wm9712-hifi", - .platform_name = "pxa-pcm-audio", .codec_name = "wm9712-codec", }, { @@ -44,7 +43,6 @@ static struct snd_soc_dai_link em_x270_dai[] = { .stream_name = "AC97 Aux", .cpu_dai_name = "pxa2xx-ac97-aux", .codec_dai_name = "wm9712-aux", - .platform_name = "pxa-pcm-audio", .codec_name = "wm9712-codec", }, }; diff --git a/sound/soc/pxa/hx4700.c b/sound/soc/pxa/hx4700.c index 6cdef5d4954e..79ffeab616f7 100644 --- a/sound/soc/pxa/hx4700.c +++ b/sound/soc/pxa/hx4700.c @@ -144,7 +144,6 @@ static struct snd_soc_dai_link hx4700_dai = { .stream_name = "AK4641", .cpu_dai_name = "pxa2xx-i2s", .codec_dai_name = "ak4641-hifi", - .platform_name = "pxa-pcm-audio", .codec_name = "ak4641.0-0012", .init = hx4700_ak4641_init, .dai_fmt = SND_SOC_DAIFMT_MSB | SND_SOC_DAIFMT_NB_NF | diff --git a/sound/soc/pxa/imote2.c b/sound/soc/pxa/imote2.c index 78475376f971..84dff8d34472 100644 --- a/sound/soc/pxa/imote2.c +++ b/sound/soc/pxa/imote2.c @@ -51,7 +51,6 @@ static struct snd_soc_dai_link imote2_dai = { .stream_name = "WM8940", .cpu_dai_name = "pxa2xx-i2s", .codec_dai_name = "wm8940-hifi", - .platform_name = "pxa-pcm-audio", .codec_name = "wm8940-codec.0-0034", .dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_CBS_CFS, diff --git a/sound/soc/pxa/magician.c b/sound/soc/pxa/magician.c index 935a248e5bf6..a7e7fa08e0a4 100644 --- a/sound/soc/pxa/magician.c +++ b/sound/soc/pxa/magician.c @@ -296,7 +296,6 @@ static struct snd_soc_dai_link magician_dai[] = { .stream_name = "UDA1380 Playback", .cpu_dai_name = "pxa-ssp-dai.0", .codec_dai_name = "uda1380-hifi-playback", - .platform_name = "pxa-pcm-audio", .codec_name = "uda1380-codec.0-0018", .ops = &magician_playback_ops, }, @@ -305,7 +304,6 @@ static struct snd_soc_dai_link magician_dai[] = { .stream_name = "UDA1380 Capture", .cpu_dai_name = "pxa2xx-i2s", .codec_dai_name = "uda1380-hifi-capture", - .platform_name = "pxa-pcm-audio", .codec_name = "uda1380-codec.0-0018", .ops = &magician_capture_ops, } diff --git a/sound/soc/pxa/mioa701_wm9713.c b/sound/soc/pxa/mioa701_wm9713.c index 47052fe3f5f4..121dcb1def3c 100644 --- a/sound/soc/pxa/mioa701_wm9713.c +++ b/sound/soc/pxa/mioa701_wm9713.c @@ -150,7 +150,6 @@ static struct snd_soc_dai_link mioa701_dai[] = { .codec_dai_name = "wm9713-hifi", .codec_name = "wm9713-codec", .init = mioa701_wm9713_init, - .platform_name = "pxa-pcm-audio", .ops = &mioa701_ops, }, { @@ -159,7 +158,6 @@ static struct snd_soc_dai_link mioa701_dai[] = { .cpu_dai_name = "pxa2xx-ac97-aux", .codec_dai_name = "wm9713-aux", .codec_name = "wm9713-codec", - .platform_name = "pxa-pcm-audio", .ops = &mioa701_ops, }, }; diff --git a/sound/soc/pxa/palm27x.c b/sound/soc/pxa/palm27x.c index 97167048572d..490717c7a5ce 100644 --- a/sound/soc/pxa/palm27x.c +++ b/sound/soc/pxa/palm27x.c @@ -94,7 +94,6 @@ static struct snd_soc_dai_link palm27x_dai[] = { .cpu_dai_name = "pxa2xx-ac97", .codec_dai_name = "wm9712-hifi", .codec_name = "wm9712-codec", - .platform_name = "pxa-pcm-audio", .init = palm27x_ac97_init, }, { @@ -103,7 +102,6 @@ static struct snd_soc_dai_link palm27x_dai[] = { .cpu_dai_name = "pxa2xx-ac97-aux", .codec_dai_name = "wm9712-aux", .codec_name = "wm9712-codec", - .platform_name = "pxa-pcm-audio", }, };
diff --git a/sound/soc/pxa/poodle.c b/sound/soc/pxa/poodle.c index b6693f32fc02..728904266930 100644 --- a/sound/soc/pxa/poodle.c +++ b/sound/soc/pxa/poodle.c @@ -229,7 +229,6 @@ static struct snd_soc_dai_link poodle_dai = { .stream_name = "WM8731", .cpu_dai_name = "pxa2xx-i2s", .codec_dai_name = "wm8731-hifi", - .platform_name = "pxa-pcm-audio", .codec_name = "wm8731.0-001b", .dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_CBS_CFS, diff --git a/sound/soc/pxa/pxa2xx-pcm.c b/sound/soc/pxa/pxa2xx-pcm.c deleted file mode 100644 index 72eaaef1b426..000000000000 --- a/sound/soc/pxa/pxa2xx-pcm.c +++ /dev/null @@ -1,48 +0,0 @@ -/* - * linux/sound/arm/pxa2xx-pcm.c -- ALSA PCM interface for the Intel PXA2xx chip - * - * Author: Nicolas Pitre - * Created: Nov 30, 2004 - * Copyright: (C) 2004 MontaVista Software, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ - -#include <linux/dma-mapping.h> -#include <linux/module.h> -#include <linux/dmaengine.h> -#include <linux/of.h> - -#include <sound/core.h> -#include <sound/soc.h> -#include <sound/pxa2xx-lib.h> -#include <sound/dmaengine_pcm.h> - -static const struct snd_soc_component_driver pxa2xx_soc_platform = { - .ops = &pxa2xx_pcm_ops, - .pcm_new = pxa2xx_soc_pcm_new, - .pcm_free = pxa2xx_pcm_free_dma_buffers, -}; - -static int pxa2xx_soc_platform_probe(struct platform_device *pdev) -{ - return devm_snd_soc_register_component(&pdev->dev, &pxa2xx_soc_platform, - NULL, 0); -} - -static struct platform_driver pxa_pcm_driver = { - .driver = { - .name = "pxa-pcm-audio", - }, - - .probe = pxa2xx_soc_platform_probe, -}; - -module_platform_driver(pxa_pcm_driver); - -MODULE_AUTHOR("Nicolas Pitre"); -MODULE_DESCRIPTION("Intel PXA2xx PCM DMA module"); -MODULE_LICENSE("GPL"); -MODULE_ALIAS("platform:pxa-pcm-audio"); diff --git a/sound/soc/pxa/raumfeld.c b/sound/soc/pxa/raumfeld.c index 111a907c4eb9..b2ae5aec0b83 100644 --- a/sound/soc/pxa/raumfeld.c +++ b/sound/soc/pxa/raumfeld.c @@ -205,7 +205,6 @@ static struct snd_soc_ops raumfeld_ak4104_ops = { .name = "CS4270", \ .stream_name = "CS4270", \ .cpu_dai_name = "pxa-ssp-dai.0", \ - .platform_name = "pxa-pcm-audio", \ .codec_dai_name = "cs4270-hifi", \ .codec_name = "cs4270.0-0048", \ .dai_fmt = SND_SOC_DAIFMT_I2S | \ @@ -220,7 +219,6 @@ static struct snd_soc_ops raumfeld_ak4104_ops = { .stream_name = "Playback", \ .cpu_dai_name = "pxa-ssp-dai.1", \ .codec_dai_name = "ak4104-hifi", \ - .platform_name = "pxa-pcm-audio", \ .dai_fmt = SND_SOC_DAIFMT_I2S | \ SND_SOC_DAIFMT_NB_NF | \ SND_SOC_DAIFMT_CBS_CFS, \ diff --git a/sound/soc/pxa/spitz.c b/sound/soc/pxa/spitz.c index 1671da648e95..57e4ecb9cbe2 100644 --- a/sound/soc/pxa/spitz.c +++ b/sound/soc/pxa/spitz.c @@ -262,7 +262,6 @@ static struct snd_soc_dai_link spitz_dai = { .stream_name = "WM8750", .cpu_dai_name = "pxa2xx-i2s", .codec_dai_name = "wm8750-hifi", - .platform_name = "pxa-pcm-audio", .codec_name = "wm8750.0-001b", .dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_CBS_CFS, diff --git a/sound/soc/pxa/tosa.c b/sound/soc/pxa/tosa.c index ae9c12e1ea2a..b2ddfeea6b85 100644 --- a/sound/soc/pxa/tosa.c +++ b/sound/soc/pxa/tosa.c @@ -188,7 +188,6 @@ static struct snd_soc_dai_link tosa_dai[] = { .stream_name = "AC97 HiFi", .cpu_dai_name = "pxa2xx-ac97", .codec_dai_name = "wm9712-hifi", - .platform_name = "pxa-pcm-audio", .codec_name = "wm9712-codec", .ops = &tosa_ops, }, @@ -197,7 +196,6 @@ static struct snd_soc_dai_link tosa_dai[] = { .stream_name = "AC97 Aux", .cpu_dai_name = "pxa2xx-ac97-aux", .codec_dai_name = "wm9712-aux", - .platform_name = "pxa-pcm-audio", .codec_name = "wm9712-codec", .ops = &tosa_ops, }, diff --git a/sound/soc/pxa/z2.c b/sound/soc/pxa/z2.c index 5b0eccd2b4dd..5e2307959b7b 100644 --- a/sound/soc/pxa/z2.c +++ b/sound/soc/pxa/z2.c @@ -162,7 +162,6 @@ static struct snd_soc_dai_link z2_dai = { .stream_name = "WM8750", .cpu_dai_name = "pxa2xx-i2s", .codec_dai_name = "wm8750-hifi", - .platform_name = "pxa-pcm-audio", .codec_name = "wm8750.0-001b", .init = z2_wm8750_init, .dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF | diff --git a/sound/soc/pxa/zylonite.c b/sound/soc/pxa/zylonite.c index 230eee450f45..753c828ade37 100644 --- a/sound/soc/pxa/zylonite.c +++ b/sound/soc/pxa/zylonite.c @@ -132,7 +132,6 @@ static struct snd_soc_dai_link zylonite_dai[] = { .name = "AC97", .stream_name = "AC97 HiFi", .codec_name = "wm9713-codec", - .platform_name = "pxa-pcm-audio", .cpu_dai_name = "pxa2xx-ac97", .codec_dai_name = "wm9713-hifi", .init = zylonite_wm9713_init, @@ -141,7 +140,6 @@ static struct snd_soc_dai_link zylonite_dai[] = { .name = "AC97 Aux", .stream_name = "AC97 Aux", .codec_name = "wm9713-codec", - .platform_name = "pxa-pcm-audio", .cpu_dai_name = "pxa2xx-ac97-aux", .codec_dai_name = "wm9713-aux", }, @@ -149,7 +147,6 @@ static struct snd_soc_dai_link zylonite_dai[] = { .name = "WM9713 Voice", .stream_name = "WM9713 Voice", .codec_name = "wm9713-codec", - .platform_name = "pxa-pcm-audio", .cpu_dai_name = "pxa-ssp-dai.2", .codec_dai_name = "wm9713-voice", .dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF |