38
38
.rates = SNDRV_PCM_RATE_8000,
39
39
.formats = SNDRV_PCM_FMTBIT_S16_LE, },
41
EXPORT_SYMBOL_GPL(ad73311_dai);
43
static int ad73311_soc_probe(struct platform_device *pdev)
42
static struct snd_soc_codec_driver soc_codec_dev_ad73311;
44
static int ad73311_probe(struct platform_device *pdev)
45
struct snd_soc_device *socdev = platform_get_drvdata(pdev);
46
struct snd_soc_codec *codec;
49
codec = kzalloc(sizeof(struct snd_soc_codec), GFP_KERNEL);
52
mutex_init(&codec->mutex);
53
codec->name = "AD73311";
54
codec->owner = THIS_MODULE;
55
codec->dai = &ad73311_dai;
57
socdev->card->codec = codec;
58
INIT_LIST_HEAD(&codec->dapm_widgets);
59
INIT_LIST_HEAD(&codec->dapm_paths);
62
ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1);
64
printk(KERN_ERR "ad73311: failed to create pcms\n");
71
kfree(socdev->card->codec);
72
socdev->card->codec = NULL;
46
return snd_soc_register_codec(&pdev->dev,
47
&soc_codec_dev_ad73311, &ad73311_dai, 1);
76
static int ad73311_soc_remove(struct platform_device *pdev)
50
static int __devexit ad73311_remove(struct platform_device *pdev)
78
struct snd_soc_device *socdev = platform_get_drvdata(pdev);
79
struct snd_soc_codec *codec = socdev->card->codec;
83
snd_soc_free_pcms(socdev);
52
snd_soc_unregister_codec(&pdev->dev);
88
struct snd_soc_codec_device soc_codec_dev_ad73311 = {
89
.probe = ad73311_soc_probe,
90
.remove = ad73311_soc_remove,
56
static struct platform_driver ad73311_codec_driver = {
58
.name = "ad73311-codec",
62
.probe = ad73311_probe,
63
.remove = __devexit_p(ad73311_remove),
92
EXPORT_SYMBOL_GPL(soc_codec_dev_ad73311);
94
66
static int __init ad73311_init(void)
96
return snd_soc_register_dai(&ad73311_dai);
68
return platform_driver_register(&ad73311_codec_driver);
98
70
module_init(ad73311_init);
100
72
static void __exit ad73311_exit(void)
102
snd_soc_unregister_dai(&ad73311_dai);
74
platform_driver_unregister(&ad73311_codec_driver);
104
76
module_exit(ad73311_exit);