On Fri, Jan 09, 2015 at 12:24:12PM +0200, Jyri Sarha wrote:
I think that would still fail if DRM and TDA998x is built in and SND_SOC is built as modules. A request_module() call before tda9998x_codec_register() should help.
That doesn't fix the problem. If the DRM driver is built in, but the codec is not, and the DRM driver has a reference to tda9998x_codec_register(), then the vmlinux file will fail to link, and you'll never get the opportunity to call request_module().
Or could could write:
select SND_SOC_TDA998X if (SND_SOC=DRM_I2C_NXP_TDA998X || SND_SOC=y)
I'm not sure that's right either.
Let's go back and think about this: why should SND_SOC_TDA998X be *selected*. Let me put that a different way: why should this symbol be forced on just because we're building the DRM TDA998x driver?
Would it be more sensible to make SND_SOC_TDA998X depend on DRM_I2C_NXP_TDA998X instead, maybe with a 'default y' - which is a kinder way to have SND_SOC_TDA998X be enabled. If SND_SOC_TDA998X doesn't have a prompt, then it'll automatically enable itself too this way when all its dependencies are satisfied.
IMHO "select" is a very over-used, and in many cases an evil construct because its very hard to avoid breaking dependencies with it.