diff options
Diffstat (limited to 'sound/soc/samsung/tobermory.c')
| -rw-r--r-- | sound/soc/samsung/tobermory.c | 71 |
1 files changed, 32 insertions, 39 deletions
diff --git a/sound/soc/samsung/tobermory.c b/sound/soc/samsung/tobermory.c index 3310eda7cf53..5448c16199bd 100644 --- a/sound/soc/samsung/tobermory.c +++ b/sound/soc/samsung/tobermory.c @@ -1,18 +1,12 @@ -/* - * Tobermory audio support - * - * Copyright 2011 Wolfson Microelectronics - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation; either version 2 of the License, or (at your - * option) any later version. - */ +// SPDX-License-Identifier: GPL-2.0+ +// +// Tobermory audio support +// +// Copyright 2011 Wolfson Microelectronics #include <sound/soc.h> #include <sound/soc-dapm.h> #include <sound/jack.h> -#include <linux/gpio.h> #include <linux/module.h> #include "../codecs/wm8962.h" @@ -27,15 +21,15 @@ static int tobermory_set_bias_level(struct snd_soc_card *card, struct snd_soc_dai *codec_dai; int ret; - rtd = snd_soc_get_pcm_runtime(card, card->dai_link[0].name); - codec_dai = rtd->codec_dai; + rtd = snd_soc_get_pcm_runtime(card, &card->dai_link[0]); + codec_dai = snd_soc_rtd_to_codec(rtd, 0); - if (dapm->dev != codec_dai->dev) + if (snd_soc_dapm_to_dev(dapm) != codec_dai->dev) return 0; switch (level) { case SND_SOC_BIAS_PREPARE: - if (dapm->bias_level == SND_SOC_BIAS_STANDBY) { + if (snd_soc_dapm_get_bias_level(dapm) == SND_SOC_BIAS_STANDBY) { ret = snd_soc_dai_set_pll(codec_dai, WM8962_FLL, WM8962_FLL_MCLK, 32768, sample_rate * 512); @@ -70,10 +64,10 @@ static int tobermory_set_bias_level_post(struct snd_soc_card *card, struct snd_soc_dai *codec_dai; int ret; - rtd = snd_soc_get_pcm_runtime(card, card->dai_link[0].name); - codec_dai = rtd->codec_dai; + rtd = snd_soc_get_pcm_runtime(card, &card->dai_link[0]); + codec_dai = snd_soc_rtd_to_codec(rtd, 0); - if (dapm->dev != codec_dai->dev) + if (snd_soc_dapm_to_dev(dapm) != codec_dai->dev) return 0; switch (level) { @@ -97,8 +91,6 @@ static int tobermory_set_bias_level_post(struct snd_soc_card *card, break; } - dapm->bias_level = level; - return 0; } @@ -110,21 +102,23 @@ static int tobermory_hw_params(struct snd_pcm_substream *substream, return 0; } -static struct snd_soc_ops tobermory_ops = { +static const struct snd_soc_ops tobermory_ops = { .hw_params = tobermory_hw_params, }; +SND_SOC_DAILINK_DEFS(cpu, + DAILINK_COMP_ARRAY(COMP_CPU("samsung-i2s.0")), + DAILINK_COMP_ARRAY(COMP_CODEC("wm8962.1-001a", "wm8962")), + DAILINK_COMP_ARRAY(COMP_PLATFORM("samsung-i2s.0"))); + static struct snd_soc_dai_link tobermory_dai[] = { { .name = "CPU", .stream_name = "CPU", - .cpu_dai_name = "samsung-i2s.0", - .codec_dai_name = "wm8962", - .platform_name = "samsung-i2s.0", - .codec_name = "wm8962.1-001a", .dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF - | SND_SOC_DAIFMT_CBM_CFM, + | SND_SOC_DAIFMT_CBP_CFP, .ops = &tobermory_ops, + SND_SOC_DAILINK_REG(cpu), }, }; @@ -133,7 +127,7 @@ static const struct snd_kcontrol_new controls[] = { SOC_DAPM_PIN_SWITCH("DMIC"), }; -static struct snd_soc_dapm_widget widgets[] = { +static const struct snd_soc_dapm_widget widgets[] = { SND_SOC_DAPM_HP("Headphone", NULL), SND_SOC_DAPM_MIC("Headset Mic", NULL), @@ -143,7 +137,7 @@ static struct snd_soc_dapm_widget widgets[] = { SND_SOC_DAPM_SPK("Main Speaker", NULL), }; -static struct snd_soc_dapm_route audio_paths[] = { +static const struct snd_soc_dapm_route audio_paths[] = { { "Headphone", NULL, "HPOUTL" }, { "Headphone", NULL, "HPOUTR" }, @@ -179,27 +173,27 @@ static struct snd_soc_jack_pin tobermory_headset_pins[] = { static int tobermory_late_probe(struct snd_soc_card *card) { struct snd_soc_pcm_runtime *rtd; - struct snd_soc_codec *codec; + struct snd_soc_component *component; struct snd_soc_dai *codec_dai; int ret; - rtd = snd_soc_get_pcm_runtime(card, card->dai_link[0].name); - codec = rtd->codec; - codec_dai = rtd->codec_dai; + rtd = snd_soc_get_pcm_runtime(card, &card->dai_link[0]); + component = snd_soc_rtd_to_codec(rtd, 0)->component; + codec_dai = snd_soc_rtd_to_codec(rtd, 0); ret = snd_soc_dai_set_sysclk(codec_dai, WM8962_SYSCLK_MCLK, 32768, SND_SOC_CLOCK_IN); if (ret < 0) return ret; - ret = snd_soc_card_jack_new(card, "Headset", SND_JACK_HEADSET | - SND_JACK_BTN_0, &tobermory_headset, - tobermory_headset_pins, - ARRAY_SIZE(tobermory_headset_pins)); + ret = snd_soc_card_jack_new_pins(card, "Headset", SND_JACK_HEADSET | + SND_JACK_BTN_0, &tobermory_headset, + tobermory_headset_pins, + ARRAY_SIZE(tobermory_headset_pins)); if (ret) return ret; - wm8962_mic_detect(codec, &tobermory_headset); + wm8962_mic_detect(component, &tobermory_headset); return 0; } @@ -233,8 +227,7 @@ static int tobermory_probe(struct platform_device *pdev) ret = devm_snd_soc_register_card(&pdev->dev, card); if (ret) - dev_err(&pdev->dev, "snd_soc_register_card() failed: %d\n", - ret); + dev_err_probe(&pdev->dev, ret, "snd_soc_register_card() failed\n"); return ret; } |
