static int adonisuniv_suspend_post(struct snd_soc_card *card) { struct snd_soc_codec *codec = card->rtd[0].codec; int ret; if (codec->active) { dev_info(codec->dev, "sound card is still active state"); return 0; } ret = snd_soc_codec_set_pll(codec, WM5102_FLL1, ARIZONA_CLK_SRC_MCLK1, ADONISUNIV_DEFAULT_MCLK1, 0); if (ret != 0) { dev_err(codec->dev, "Failed to stop FLL1: %d\n", ret); return ret; } ret = snd_soc_codec_set_pll(codec, WM5102_FLL2, 0, 0, 0); if (ret != 0) { dev_err(codec->dev, "Failed to stop FLL2: %d\n", ret); return ret; } ret = snd_soc_codec_set_sysclk(codec, ARIZONA_CLK_SYSCLK, 0, 0, 0); if (ret != 0) { dev_err(codec->dev, "Failed to stop SYSCLK: %d\n", ret); return ret; } exynos5_audio_set_mclk(0, 1); return 0; }
static int __devinit snd_adonisuniv_probe(struct platform_device *pdev) { int ret; struct wm5102_machine_priv *wm5102; wm5102 = kzalloc(sizeof *wm5102, GFP_KERNEL); if (!wm5102) { pr_err("Failed to allocate memory\n"); return -ENOMEM; } exynos5_audio_set_mclk(1, 0); ret = snd_soc_register_dais(&pdev->dev, adonisuniv_ext_dai, ARRAY_SIZE(adonisuniv_ext_dai)); if (ret != 0) pr_err("Failed to register external DAIs: %d\n", ret); snd_soc_card_set_drvdata(&adonisuniv, wm5102); adonisuniv.dev = &pdev->dev; ret = snd_soc_register_card(&adonisuniv); if (ret) { dev_err(&pdev->dev, "snd_soc_register_card failed %d\n", ret); kfree(wm5102); } adonisuniv_gpio_init(); return ret; }
static int pn547_clk_requset(struct pn547_dev *pn547_dev, bool enable) { #if defined(CONFIG_SOC_EXYNOS5422) if (pn547_dev->clk_use_check) { if (enable) { int ret; ret = clk_enable(pn547_dev->clk); if (ret) pr_err("%s, enable clk Error !!:%d\n", __func__, ret); } else { clk_disable(pn547_dev->clk); } } #elif defined(CONFIG_SOC_EXYNOS5430) if (pn547_dev->clk_use_check == CLK_USE_CAM1) { if (enable) { int ret; ret = pn547_enable_clk("sclk_isp_sensor1", true); if (ret) pr_err("%s, enable sclk_isp_sensor1 Error !!:%d\n", __func__, ret); } else { pn547_enable_clk("sclk_isp_sensor1", false); } } else if (pn547_dev->clk_use_check == CLK_USE_AUDIO) { exynos5_audio_set_mclk(enable, false); } #endif return 0; }
static int adonisuniv_resume_pre(struct snd_soc_card *card) { struct wm5102_machine_priv *wm5102_priv = snd_soc_card_get_drvdata(card); exynos5_audio_set_mclk(1, 0); adonisuniv_set_media_clocking(wm5102_priv); return 0; }
static int __devexit snd_adonisuniv_remove(struct platform_device *pdev) { struct snd_soc_card *card = &adonisuniv; struct wm5102_machine_priv *wm5102 = snd_soc_card_get_drvdata(card); snd_soc_unregister_card(&adonisuniv); kfree(wm5102); exynos5_audio_set_mclk(0, 0); #ifdef GPIO_MICBIAS_EN gpio_free(GPIO_MICBIAS_EN); #endif return 0; }
static int adonisuniv_start_sysclk(struct snd_soc_card *card) { struct wm5102_machine_priv *priv = snd_soc_card_get_drvdata(card); int ret; exynos5_audio_set_mclk(1, 0); ret = snd_soc_codec_set_pll(priv->codec, WM5102_FLL1, ARIZONA_CLK_SRC_MCLK1, ADONISUNIV_DEFAULT_MCLK1, priv->aif1rate * 512); if (ret != 0) { dev_err(priv->codec->dev, "Failed to start FLL1: %d\n", ret); return ret; } return ret; }
static int __devinit snd_adonisuniv_probe(struct platform_device *pdev) { int ret; struct ymu831_machine_priv *ymu831; ymu831 = kzalloc(sizeof(struct ymu831_machine_priv), GFP_KERNEL); if (!ymu831) { pr_err("Failed to allocate memory\n"); return -ENOMEM; } exynos5_audio_set_mclk(1, 0); snd_soc_card_set_drvdata(&ymu831_snd_card, ymu831); ymu831_snd_card.dev = &pdev->dev; ret = snd_soc_register_card(&ymu831_snd_card); if (ret) { dev_err(&pdev->dev, "snd_soc_register_card failed %d\n", ret); kfree(ymu831); } return ret; }
int es705_enable_ext_clk(struct device *dev, int enable) { static struct clk *es705_codec_clk = NULL; int rc = 0; dev_info(dev, "%s: clk enable=%d\n", __func__, enable); #ifdef CONFIG_ARCH_EXYNOS if (enable) { if (es705_codec_clk) { dev_info(dev, "%s: clk is already On", __func__); return 0; } es705_codec_clk = devm_clk_get(dev, "mclk"); if (IS_ERR(es705_codec_clk)) { dev_err(dev, "%s: Device tree node not found for mclk", __func__); es705_codec_clk = NULL; } if(es705_codec_clk) { rc = clk_prepare_enable(es705_codec_clk); if (rc) { dev_err(dev, "%s: Failed to prepare or enable clock, err=%d\n", __func__, rc); goto err; } } else exynos5_audio_set_mclk(true, 0); } else { if(es705_codec_clk) { clk_disable_unprepare(es705_codec_clk); devm_clk_put(dev, es705_codec_clk); es705_codec_clk = NULL; } else exynos5_audio_set_mclk(false, 0); } return 0; err: devm_clk_put(dev, es705_codec_clk); es705_codec_clk = NULL; #else es705_codec_clk = clk_get(dev, "osr_clk"); if (!es705_codec_clk) { dev_err(dev, "%s: clk_get osr_clk FAIL\n", __func__); return -ENODEV; } if (enable) { rc = clk_prepare_enable(es705_codec_clk); if (rc) { dev_err(dev, "Failed to prepare or enable clock, err=%d\n", rc); goto err; } } else { clk_disable_unprepare(es705_codec_clk); clk_put(es705_codec_clk); } return 0; err: clk_put(es705_codec_clk); #endif return rc; }