On 10/09/2012 11:08 AM, Mark Brown wrote:
What makes you believe that this is due to the code not being part of the core module?
the linker tells me. Without this patch with mainline kernel from today (I used tegra to see if it happens there as well):
make tegra_defconfig scripts/config -d CONFIG_MMC # MMC does not compile for tegra scripts/config -e CONFIG_SOUND -e CONFIG_SND -e CONFIG_SND_SOC
Fine
scripts/config -e CONFIG_SOUND -e CONFIG_SND -m CONFIG_SND_SOC
sound/built-in.o: In function `dmaengine_pcm_dma_complete': /home/ujfalusi/work/kernel/kernel.org-torvalds-linux-2.6/sound/soc/soc-dmaengine-pcm.c:134: undefined reference to `snd_pcm_period_elapsed' sound/built-in.o: In function `snd_dmaengine_pcm_open': /home/ujfalusi/work/kernel/kernel.org-torvalds-linux-2.6/sound/soc/soc-dmaengine-pcm.c:285: undefined reference to `snd_pcm_hw_constraint_integer' make: *** [vmlinux] Error 1
scripts/config -e CONFIG_SOUND -m CONFIG_SND -m CONFIG_SND_SOC scripts/config -m CONFIG_SOUND -m CONFIG_SND -m CONFIG_SND_SOC
ERROR: "snd_hwparams_to_dma_slave_config" [sound/soc/tegra/snd-soc-tegra-pcm.ko] undefined! ERROR: "snd_dmaengine_pcm_pointer" [sound/soc/tegra/snd-soc-tegra-pcm.ko] undefined! ERROR: "snd_dmaengine_pcm_open" [sound/soc/tegra/snd-soc-tegra-pcm.ko] undefined! ERROR: "snd_dmaengine_pcm_close" [sound/soc/tegra/snd-soc-tegra-pcm.ko] undefined! ERROR: "snd_dmaengine_pcm_get_chan" [sound/soc/tegra/snd-soc-tegra-pcm.ko] undefined! ERROR: "snd_dmaengine_pcm_trigger" [sound/soc/tegra/snd-soc-tegra-pcm.ko] undefined! make[1]: *** [__modpost] Error 1 make: *** [modules] Error 2 make: *** Waiting for unfinished jobs....
With the patch:
make tegra_defconfig scripts/config -d CONFIG_MMC # MMC does not compile for tegra scripts/config -e CONFIG_SOUND -e CONFIG_SND -e CONFIG_SND_SOC scripts/config -e CONFIG_SOUND -e CONFIG_SND -m CONFIG_SND_SOC scripts/config -e CONFIG_SOUND -m CONFIG_SND -m CONFIG_SND_SOC scripts/config -m CONFIG_SOUND -m CONFIG_SND -m CONFIG_SND_SOC
is fine.
I guess it was due to the Kconfig/Makefile related to soc-dmaengine:
config SND_SOC_DMAENGINE_PCM bool
snd-soc-dmaengine-pcm-objs := soc-dmaengine-pcm.o obj-$(CONFIG_SND_SOC_DMAENGINE_PCM) += snd-soc-dmaengine-pcm.o
My guess is that in this way the soc-dmaengine-pcm.o would want itself to be built in to the kernel but since the sound is in modules there is no place to link this part of the code. If I change the Kconfig from bool to tristate it will build snd-soc-dmaengine-pcm.ko but since the soc-dmaengine-pcm.c does not have module_init it is not really going to load. I might be wrong.