Subject: [alsa-devel] [PATCH] ASoC: omap: convert per-board modules to platform drivers

From: [email-masked] (Lars-Peter Clausen)
Date: Thu, 08 Sep 2011 17:15:03 +0200

On 09/08/2011 05:05 PM, Mans Rullgard wrote:
> This converts the per-board modules to platform drivers for a
> device created by in main platform setup.  These drivers call
> snd_soc_register_card() directly instead of going via a "soc-audio"
> device and the corresponding driver in soc-core.
>
> diff --git a/arch/arm/mach-omap2/devices.c b/arch/arm/mach-omap2/devices.c
> index 5b8ca68..7cb93d9 100644
> --- a/arch/arm/mach-omap2/devices.c
> +++ b/arch/arm/mach-omap2/devices.c
> @@ -299,6 +299,11 @@ static struct platform_device omap_pcm = {
>  	.id	= -1,
>  };
>  
> +static struct platform_device omap_soc_audio = {
> +	.name	= "omap-soc-audio",
> +	.id	= -1,
> +};
> +
>  /*
>   * OMAP2420 has 2 McBSP ports
>   * OMAP2430 has 5 McBSP ports
> @@ -323,6 +328,7 @@ static void omap_init_audio(void)
>  		platform_device_register(&omap_mcbsp5);
>  
>  	platform_device_register(&omap_pcm);
> +	platform_device_register(&omap_soc_audio);
>  }
>  
>  #else
> diff --git a/sound/soc/omap/am3517evm.c b/sound/soc/omap/am3517evm.c
> index 73dde4a..fcd18af 100644
> --- a/sound/soc/omap/am3517evm.c
> +++ b/sound/soc/omap/am3517evm.c
> @@ -151,45 +151,60 @@ static struct snd_soc_card snd_soc_am3517evm = {
>  	.num_links = 1,
>  };
>  
> [...]
> +static struct platform_driver am3517evm_driver = {
> +	.driver = {
> +		.name = "omap-soc-audio",
> +		.owner = THIS_MODULE,
> +	},
>  
> -	return ret;
> +	.probe = am3517evm_soc_probe,
> +	.remove = __devexit_p(am3517evm_soc_remove),
> +};
> +[...]
> +
> +static struct platform_driver igep2_driver = {
> +	.driver = {
> +		.name = "omap-soc-audio",
> +		.owner = THIS_MODULE,
> +	},
> +
> +	.probe = igep2_soc_probe,
> +	.remove = __devexit_p(igep2_soc_remove),
> +};
> [...]
>  
> +static struct platform_driver n810_driver = {
> +	.driver = {
> +		.name = "omap-soc-audio",
> +		.owner = THIS_MODULE,
> +	},
> +
> +	.probe = n810_soc_probe,
> +	.remove = __devexit_p(n810_soc_remove),
> +};
> [...]

This isn't really any better then using the soc-core device, since all your
drivers are still named the same. udev still wouldn't know which one to load.
Use different device driver names for different drivers.