ASoC: rt5514: work around link error
authorArnd Bergmann <arnd@arndb.de>
Fri, 10 Nov 2017 14:54:43 +0000 (15:54 +0100)
committerMark Brown <broonie@kernel.org>
Fri, 10 Nov 2017 21:15:14 +0000 (21:15 +0000)
The main rt5514 driver optionally calls into the SPI back-end to load
the firmware. This causes a link error when one driver selects rt5514
as built-in and another driver selects rt5514-spi as a loadable module:

sound/soc/codecs/rt5514.o: In function `rt5514_dsp_voice_wake_up_put':
rt5514.c:(.text+0xac8): undefined reference to `rt5514_spi_burst_write'

As a workaround, this adds another silent symbol, to force rt5514-spi
to be built-in for that configuration. I'm not overly happy with
that solution, but couldn't come up with anything better. Using
'IS_REACHABLE()' would break the case that relies on the loadable
module, and all other ideas would result in more complexity.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/codecs/Kconfig
sound/soc/codecs/Makefile

index c367d11079bc90feec2ad0fa748d7ffc3035faba..01f436cc14c668f081a8e742099263d802b2d59e 100644 (file)
@@ -749,6 +749,10 @@ config SND_SOC_RT5514
 config SND_SOC_RT5514_SPI
        tristate
 
+config SND_SOC_RT5514_SPI_BUILTIN
+       bool # force RT5514_SPI to be built-in to avoid link errors
+       default SND_SOC_RT5514=y && SND_SOC_RT5514_SPI=m
+
 config SND_SOC_RT5616
        tristate "Realtek RT5616 CODEC"
        depends on I2C
index 77c18189c9adb72244b91a5e657fb0393afc9117..2dc42b2969736bc7300ed45de3a4f7c75c7e8208 100644 (file)
@@ -359,6 +359,7 @@ obj-$(CONFIG_SND_SOC_RT286) += snd-soc-rt286.o
 obj-$(CONFIG_SND_SOC_RT298)    += snd-soc-rt298.o
 obj-$(CONFIG_SND_SOC_RT5514)   += snd-soc-rt5514.o
 obj-$(CONFIG_SND_SOC_RT5514_SPI)       += snd-soc-rt5514-spi.o
+obj-$(CONFIG_SND_SOC_RT5514_SPI_BUILTIN)       += snd-soc-rt5514-spi.o
 obj-$(CONFIG_SND_SOC_RT5616)   += snd-soc-rt5616.o
 obj-$(CONFIG_SND_SOC_RT5631)   += snd-soc-rt5631.o
 obj-$(CONFIG_SND_SOC_RT5640)   += snd-soc-rt5640.o