diff options
Diffstat (limited to 'sound/soc/samsung/smdk_wm8994.c')
| -rw-r--r-- | sound/soc/samsung/smdk_wm8994.c | 30 | 
1 files changed, 28 insertions, 2 deletions
diff --git a/sound/soc/samsung/smdk_wm8994.c b/sound/soc/samsung/smdk_wm8994.c index b0d0ab8bff5a..581ea4a06fc6 100644 --- a/sound/soc/samsung/smdk_wm8994.c +++ b/sound/soc/samsung/smdk_wm8994.c @@ -10,6 +10,7 @@  #include "../codecs/wm8994.h"  #include <sound/pcm_params.h>  #include <linux/module.h> +#include <linux/of.h>   /*    * Default CFG switch settings to use this driver: @@ -134,9 +135,9 @@ static struct snd_soc_dai_link smdk_dai[] = {  	}, { /* Sec_Fifo Playback i/f */  		.name = "Sec_FIFO TX",  		.stream_name = "Sec_Dai", -		.cpu_dai_name = "samsung-i2s.4", +		.cpu_dai_name = "samsung-i2s-sec",  		.codec_dai_name = "wm8994-aif1", -		.platform_name = "samsung-i2s.4", +		.platform_name = "samsung-i2s-sec",  		.codec_name = "wm8994-codec",  		.ops = &smdk_ops,  	}, @@ -153,9 +154,25 @@ static struct snd_soc_card smdk = {  static int smdk_audio_probe(struct platform_device *pdev)  {  	int ret; +	struct device_node *np = pdev->dev.of_node;  	struct snd_soc_card *card = &smdk;  	card->dev = &pdev->dev; + +	if (np) { +		smdk_dai[0].cpu_dai_name = NULL; +		smdk_dai[0].cpu_of_node = of_parse_phandle(np, +				"samsung,i2s-controller", 0); +		if (!smdk_dai[0].cpu_of_node) { +			dev_err(&pdev->dev, +			   "Property 'samsung,i2s-controller' missing or invalid\n"); +			ret = -EINVAL; +		} + +		smdk_dai[0].platform_name = NULL; +		smdk_dai[0].platform_of_node = smdk_dai[0].cpu_of_node; +	} +  	ret = snd_soc_register_card(card);  	if (ret) @@ -173,10 +190,19 @@ static int smdk_audio_remove(struct platform_device *pdev)  	return 0;  } +#ifdef CONFIG_OF +static const struct of_device_id samsung_wm8994_of_match[] = { +	{ .compatible = "samsung,smdk-wm8994", }, +	{}, +}; +MODULE_DEVICE_TABLE(of, samsung_wm8994_of_match); +#endif /* CONFIG_OF */ +  static struct platform_driver smdk_audio_driver = {  	.driver		= {  		.name	= "smdk-audio",  		.owner	= THIS_MODULE, +		.of_match_table = of_match_ptr(samsung_wm8994_of_match),  	},  	.probe		= smdk_audio_probe,  	.remove		= smdk_audio_remove,  |