[alsa-devel] generic i2s driver problems on an Exynos 5250 A15 board

Matt Flax flatmax at flatmax.org
Tue Aug 12 10:17:15 CEST 2014


hi there,

I am writing a very generic alsa soc i2s driver for a very generic i2s 
device.
The platform is an Exynos 5250 SoC board.

Having trouble was looking for some help ...

I have tried to start this driver in two ways. 1] Using the 
module_init/module_exit method and 2] Using the module_platform_driver 
approach.

I have implemented the following :
soc/codecs/implant.c
soc/samsung/implant.c

In both cases I have :
static struct snd_soc_ops implant_ops = {
     .hw_params = implant_hw_params,
};

static struct snd_soc_dai_link implant_dai = {
     .name        = "implant",
     .stream_name    = "IMPLANT",
     .cpu_dai_name = "samsung-i2s.0",
     .codec_dai_name = "implant-pcm",
     .platform_name = "samsung-i2s.0",
     .codec_name    = "implant.0-001a",
     .ignore_suspend = 1,
     .ops = &implant_ops,
};

I have setup the device tree as expected for sound at 3830000
     sound at 3830000 {
         samsung,codec-type = "implant";
     };

1]    Approach using module_init/module_exit
static struct snd_soc_card snd_soc_machine_implant = {
     .name        = "Implant",
     .owner        = THIS_MODULE,
     .dai_link    = &implant_dai,
     .num_links    = 1,

     .dapm_widgets    = widgets,
     .num_dapm_widgets = ARRAY_SIZE(widgets),
     .dapm_routes    = audio_paths,
     .num_dapm_routes = ARRAY_SIZE(audio_paths),
};

Here is the output of the kernel :

[    1.802645] soc-audio soc-audio: ASoC: machine Implant should use 
snd_soc_register_card()
[    1.802656] soc-audio soc-audio: ASoC: CPU DAI samsung-i2s.0 not 
registered
[    1.802679] platform soc-audio: Driver soc-audio requests probe deferral
[    2.271140] soc-audio: probe of soc-audio failed with error -22

Not sure why it fails.

The only thing I know is that my driver exits the init function 
returning 0 (module_init(implant_init)).
This appears to be correct.

2]     Approach using module_platform_driver
When I switch to using snd_soc_register_card with :
module_platform_driver(implant_driver);

static struct platform_driver implant_driver = {
     .driver = {
         .name = "implant",
         .owner = THIS_MODULE,
     },
     .probe = implant_probe,
     .remove = implant_remove,
};

I get the following from dmesg :
[    1.802430] Error: Driver 'implant' is already registered, aborting...

However I don't see any of my printk statements from dmesg ...


Matt


More information about the Alsa-devel mailing list