diff options
Diffstat (limited to 'sound/soc/omap/ams-delta.c')
| -rw-r--r-- | sound/soc/omap/ams-delta.c | 63 | 
1 files changed, 30 insertions, 33 deletions
diff --git a/sound/soc/omap/ams-delta.c b/sound/soc/omap/ams-delta.c index dc0ee762662..d8e96b2cd03 100644 --- a/sound/soc/omap/ams-delta.c +++ b/sound/soc/omap/ams-delta.c @@ -575,56 +575,53 @@ static struct snd_soc_card ams_delta_audio_card = {  };  /* Module init/exit */ -static struct platform_device *ams_delta_audio_platform_device; -static struct platform_device *cx20442_platform_device; - -static int __init ams_delta_module_init(void) +static __devinit int ams_delta_probe(struct platform_device *pdev)  { +	struct snd_soc_card *card = &ams_delta_audio_card;  	int ret; -	if (!(machine_is_ams_delta())) -		return -ENODEV; - -	ams_delta_audio_platform_device = -			platform_device_alloc("soc-audio", -1); -	if (!ams_delta_audio_platform_device) -		return -ENOMEM; +	card->dev = &pdev->dev; -	platform_set_drvdata(ams_delta_audio_platform_device, -				&ams_delta_audio_card); - -	ret = platform_device_add(ams_delta_audio_platform_device); -	if (ret) -		goto err; - -	/* -	 * Codec platform device could be registered from elsewhere (board?), -	 * but I do it here as it makes sense only if used with the card. -	 */ -	cx20442_platform_device = -		platform_device_register_simple("cx20442-codec", -1, NULL, 0); +	ret = snd_soc_register_card(card); +	if (ret) { +		dev_err(&pdev->dev, "snd_soc_register_card failed (%d)\n", ret); +		card->dev = NULL; +		return ret; +	}  	return 0; -err: -	platform_device_put(ams_delta_audio_platform_device); -	return ret;  } -late_initcall(ams_delta_module_init); -static void __exit ams_delta_module_exit(void) +static int __devexit ams_delta_remove(struct platform_device *pdev)  { +	struct snd_soc_card *card = platform_get_drvdata(pdev); +  	if (tty_unregister_ldisc(N_V253) != 0) -		dev_warn(&ams_delta_audio_platform_device->dev, +		dev_warn(&pdev->dev,  			"failed to unregister V253 line discipline\n");  	snd_soc_jack_free_gpios(&ams_delta_hook_switch,  			ARRAY_SIZE(ams_delta_hook_switch_gpios),  			ams_delta_hook_switch_gpios); -	platform_device_unregister(cx20442_platform_device); -	platform_device_unregister(ams_delta_audio_platform_device); +	snd_soc_unregister_card(card); +	card->dev = NULL; +	return 0;  } -module_exit(ams_delta_module_exit); + +#define DRV_NAME "ams-delta-audio" + +static struct platform_driver ams_delta_driver = { +	.driver = { +		.name = DRV_NAME, +		.owner = THIS_MODULE, +	}, +	.probe = ams_delta_probe, +	.remove = __devexit_p(ams_delta_remove), +}; + +module_platform_driver(ams_delta_driver);  MODULE_AUTHOR("Janusz Krzysztofik <jkrzyszt@tis.icnet.pl>");  MODULE_DESCRIPTION("ALSA SoC driver for Amstrad E3 (Delta) videophone");  MODULE_LICENSE("GPL"); +MODULE_ALIAS("platform:" DRV_NAME);  |