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@3830000 sound@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