static int atmel_asoc_wm8904_probe(struct platform_device *pdev) { struct snd_soc_card *card = &atmel_asoc_wm8904_card; struct snd_soc_dai_link *dailink = &atmel_asoc_wm8904_dailink; int id, ret; card->dev = &pdev->dev; ret = atmel_asoc_wm8904_dt_init(pdev); if (ret) { dev_err(&pdev->dev, "failed to init dt info\n"); return ret; } id = of_alias_get_id((struct device_node *)dailink->cpu_of_node, "ssc"); ret = atmel_ssc_set_audio(id); if (ret != 0) { dev_err(&pdev->dev, "failed to set SSC %d for audio\n", id); return ret; } ret = snd_soc_register_card(card); if (ret) { dev_err(&pdev->dev, "snd_soc_register_card failed\n"); goto err_set_audio; } return 0; err_set_audio: atmel_ssc_put_audio(id); return ret; }
static int atmel_asoc_wm8904_probe(struct platform_device *pdev) { struct snd_soc_card *card = &atmel_asoc_wm8904_card; struct snd_soc_dai_link *dailink = &atmel_asoc_wm8904_dailink; struct clk *clk_src; struct pinctrl *pinctrl; int id, ret; pinctrl = devm_pinctrl_get_select_default(&pdev->dev); if (IS_ERR(pinctrl)) { dev_err(&pdev->dev, "failed to request pinctrl\n"); return PTR_ERR(pinctrl); } card->dev = &pdev->dev; ret = atmel_asoc_wm8904_dt_init(pdev); if (ret) { dev_err(&pdev->dev, "failed to init dt info\n"); return ret; } id = of_alias_get_id((struct device_node *)dailink->cpu_of_node, "ssc"); ret = atmel_ssc_set_audio(id); if (ret != 0) { dev_err(&pdev->dev, "failed to set SSC %d for audio\n", id); return ret; } mclk = clk_get(NULL, "pck0"); if (IS_ERR(mclk)) { dev_err(&pdev->dev, "failed to get pck0\n"); ret = PTR_ERR(mclk); goto err_set_audio; } clk_src = clk_get(NULL, "clk32k"); if (IS_ERR(clk_src)) { dev_err(&pdev->dev, "failed to get clk32k\n"); ret = PTR_ERR(clk_src); goto err_set_audio; } ret = clk_set_parent(mclk, clk_src); clk_put(clk_src); if (ret != 0) { dev_err(&pdev->dev, "failed to set MCLK parent\n"); goto err_set_audio; } dev_info(&pdev->dev, "setting pck0 to %dHz\n", MCLK_RATE); clk_set_rate(mclk, MCLK_RATE); ret = snd_soc_register_card(card); if (ret) { dev_err(&pdev->dev, "snd_soc_register_card failed\n"); goto err_set_audio; } return 0; err_set_audio: atmel_ssc_put_audio(id); return ret; }