Commit 5015920a authored by Mengdong Lin's avatar Mengdong Lin Committed by Mark Brown

ASoC: Vendor drivers get a link's runtime by snd_soc_get_pcm_runtime()

Vendor drivers no longer access a DAI link's runtime by the link index
but by matching the link name via snd_soc_get_pcm_runtime(). We assume
each DAI link has a unique name.

This is preparation for changing runtimes from an array to a list later.

Vendor drivers changed:
sound/soc/fsl/fsl-asoc-card.c
sound/soc/fsl/imx-wm8962.c
sound/soc/pxa/mioa701_wm9713.c
sound/soc/samsung/bells.c
sound/soc/samsung/littlemill.c
sound/soc/samsung/odroidx2_max98090.c
sound/soc/samsung/snow.c
sound/soc/samsung/speyside.c
sound/soc/samsung/tobermory.c
sound/soc/tegra/tegra_wm8903
Signed-off-by: default avatarMengdong Lin <mengdong.lin@linux.intel.com>
Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent 8005c49d
...@@ -222,12 +222,15 @@ static int fsl_asoc_card_set_bias_level(struct snd_soc_card *card, ...@@ -222,12 +222,15 @@ static int fsl_asoc_card_set_bias_level(struct snd_soc_card *card,
enum snd_soc_bias_level level) enum snd_soc_bias_level level)
{ {
struct fsl_asoc_card_priv *priv = snd_soc_card_get_drvdata(card); struct fsl_asoc_card_priv *priv = snd_soc_card_get_drvdata(card);
struct snd_soc_dai *codec_dai = card->rtd[0].codec_dai; struct snd_soc_pcm_runtime *rtd;
struct snd_soc_dai *codec_dai;
struct codec_priv *codec_priv = &priv->codec_priv; struct codec_priv *codec_priv = &priv->codec_priv;
struct device *dev = card->dev; struct device *dev = card->dev;
unsigned int pll_out; unsigned int pll_out;
int ret; int ret;
rtd = snd_soc_get_pcm_runtime(card, card->dai_link[0].name);
codec_dai = rtd->codec_dai;
if (dapm->dev != codec_dai->dev) if (dapm->dev != codec_dai->dev)
return 0; return 0;
......
...@@ -69,13 +69,16 @@ static int imx_wm8962_set_bias_level(struct snd_soc_card *card, ...@@ -69,13 +69,16 @@ static int imx_wm8962_set_bias_level(struct snd_soc_card *card,
struct snd_soc_dapm_context *dapm, struct snd_soc_dapm_context *dapm,
enum snd_soc_bias_level level) enum snd_soc_bias_level level)
{ {
struct snd_soc_dai *codec_dai = card->rtd[0].codec_dai; struct snd_soc_pcm_runtime *rtd;
struct snd_soc_dai *codec_dai;
struct imx_priv *priv = &card_priv; struct imx_priv *priv = &card_priv;
struct imx_wm8962_data *data = snd_soc_card_get_drvdata(card); struct imx_wm8962_data *data = snd_soc_card_get_drvdata(card);
struct device *dev = &priv->pdev->dev; struct device *dev = &priv->pdev->dev;
unsigned int pll_out; unsigned int pll_out;
int ret; int ret;
rtd = snd_soc_get_pcm_runtime(card, card->dai_link[0].name);
codec_dai = rtd->codec_dai;
if (dapm->dev != codec_dai->dev) if (dapm->dev != codec_dai->dev)
return 0; return 0;
...@@ -135,12 +138,15 @@ static int imx_wm8962_set_bias_level(struct snd_soc_card *card, ...@@ -135,12 +138,15 @@ static int imx_wm8962_set_bias_level(struct snd_soc_card *card,
static int imx_wm8962_late_probe(struct snd_soc_card *card) static int imx_wm8962_late_probe(struct snd_soc_card *card)
{ {
struct snd_soc_dai *codec_dai = card->rtd[0].codec_dai; struct snd_soc_pcm_runtime *rtd;
struct snd_soc_dai *codec_dai;
struct imx_priv *priv = &card_priv; struct imx_priv *priv = &card_priv;
struct imx_wm8962_data *data = snd_soc_card_get_drvdata(card); struct imx_wm8962_data *data = snd_soc_card_get_drvdata(card);
struct device *dev = &priv->pdev->dev; struct device *dev = &priv->pdev->dev;
int ret; int ret;
rtd = snd_soc_get_pcm_runtime(card, card->dai_link[0].name);
codec_dai = rtd->codec_dai;
ret = snd_soc_dai_set_sysclk(codec_dai, WM8962_SYSCLK_MCLK, ret = snd_soc_dai_set_sysclk(codec_dai, WM8962_SYSCLK_MCLK,
data->clk_frequency, SND_SOC_CLOCK_IN); data->clk_frequency, SND_SOC_CLOCK_IN);
if (ret < 0) if (ret < 0)
......
...@@ -81,8 +81,12 @@ static int rear_amp_power(struct snd_soc_codec *codec, int power) ...@@ -81,8 +81,12 @@ static int rear_amp_power(struct snd_soc_codec *codec, int power)
static int rear_amp_event(struct snd_soc_dapm_widget *widget, static int rear_amp_event(struct snd_soc_dapm_widget *widget,
struct snd_kcontrol *kctl, int event) struct snd_kcontrol *kctl, int event)
{ {
struct snd_soc_codec *codec = widget->dapm->card->rtd[0].codec; struct snd_soc_card *card = widget->dapm->card;
struct snd_soc_pcm_runtime *rtd;
struct snd_soc_codec *codec;
rtd = snd_soc_get_pcm_runtime(card, card->dai_link[0].name);
codec = rtd->codec;
return rear_amp_power(codec, SND_SOC_DAPM_EVENT_ON(event)); return rear_amp_power(codec, SND_SOC_DAPM_EVENT_ON(event));
} }
......
...@@ -58,11 +58,16 @@ static int bells_set_bias_level(struct snd_soc_card *card, ...@@ -58,11 +58,16 @@ static int bells_set_bias_level(struct snd_soc_card *card,
struct snd_soc_dapm_context *dapm, struct snd_soc_dapm_context *dapm,
enum snd_soc_bias_level level) enum snd_soc_bias_level level)
{ {
struct snd_soc_dai *codec_dai = card->rtd[DAI_DSP_CODEC].codec_dai; struct snd_soc_pcm_runtime *rtd;
struct snd_soc_codec *codec = codec_dai->codec; struct snd_soc_dai *codec_dai;
struct snd_soc_codec *codec;
struct bells_drvdata *bells = card->drvdata; struct bells_drvdata *bells = card->drvdata;
int ret; int ret;
rtd = snd_soc_get_pcm_runtime(card, card->dai_link[DAI_DSP_CODEC].name);
codec_dai = rtd->codec_dai;
codec = codec_dai->codec;
if (dapm->dev != codec_dai->dev) if (dapm->dev != codec_dai->dev)
return 0; return 0;
...@@ -99,11 +104,16 @@ static int bells_set_bias_level_post(struct snd_soc_card *card, ...@@ -99,11 +104,16 @@ static int bells_set_bias_level_post(struct snd_soc_card *card,
struct snd_soc_dapm_context *dapm, struct snd_soc_dapm_context *dapm,
enum snd_soc_bias_level level) enum snd_soc_bias_level level)
{ {
struct snd_soc_dai *codec_dai = card->rtd[DAI_DSP_CODEC].codec_dai; struct snd_soc_pcm_runtime *rtd;
struct snd_soc_codec *codec = codec_dai->codec; struct snd_soc_dai *codec_dai;
struct snd_soc_codec *codec;
struct bells_drvdata *bells = card->drvdata; struct bells_drvdata *bells = card->drvdata;
int ret; int ret;
rtd = snd_soc_get_pcm_runtime(card, card->dai_link[DAI_DSP_CODEC].name);
codec_dai = rtd->codec_dai;
codec = codec_dai->codec;
if (dapm->dev != codec_dai->dev) if (dapm->dev != codec_dai->dev)
return 0; return 0;
...@@ -137,14 +147,22 @@ static int bells_set_bias_level_post(struct snd_soc_card *card, ...@@ -137,14 +147,22 @@ static int bells_set_bias_level_post(struct snd_soc_card *card,
static int bells_late_probe(struct snd_soc_card *card) static int bells_late_probe(struct snd_soc_card *card)
{ {
struct bells_drvdata *bells = card->drvdata; struct bells_drvdata *bells = card->drvdata;
struct snd_soc_codec *wm0010 = card->rtd[DAI_AP_DSP].codec; struct snd_soc_pcm_runtime *rtd;
struct snd_soc_codec *codec = card->rtd[DAI_DSP_CODEC].codec; struct snd_soc_codec *wm0010;
struct snd_soc_dai *aif1_dai = card->rtd[DAI_DSP_CODEC].codec_dai; struct snd_soc_codec *codec;
struct snd_soc_dai *aif1_dai;
struct snd_soc_dai *aif2_dai; struct snd_soc_dai *aif2_dai;
struct snd_soc_dai *aif3_dai; struct snd_soc_dai *aif3_dai;
struct snd_soc_dai *wm9081_dai; struct snd_soc_dai *wm9081_dai;
int ret; int ret;
rtd = snd_soc_get_pcm_runtime(card, card->dai_link[DAI_AP_DSP].name);
wm0010 = rtd->codec;
rtd = snd_soc_get_pcm_runtime(card, card->dai_link[DAI_DSP_CODEC].name);
codec = rtd->codec;
aif1_dai = rtd->codec_dai;
ret = snd_soc_codec_set_sysclk(codec, ARIZONA_CLK_SYSCLK, ret = snd_soc_codec_set_sysclk(codec, ARIZONA_CLK_SYSCLK,
ARIZONA_CLK_SRC_FLL1, ARIZONA_CLK_SRC_FLL1,
bells->sysclk_rate, bells->sysclk_rate,
...@@ -181,7 +199,8 @@ static int bells_late_probe(struct snd_soc_card *card) ...@@ -181,7 +199,8 @@ static int bells_late_probe(struct snd_soc_card *card)
return ret; return ret;
} }
aif2_dai = card->rtd[DAI_CODEC_CP].cpu_dai; rtd = snd_soc_get_pcm_runtime(card, card->dai_link[DAI_CODEC_CP].name);
aif2_dai = rtd->cpu_dai;
ret = snd_soc_dai_set_sysclk(aif2_dai, ARIZONA_CLK_ASYNCCLK, 0, 0); ret = snd_soc_dai_set_sysclk(aif2_dai, ARIZONA_CLK_ASYNCCLK, 0, 0);
if (ret != 0) { if (ret != 0) {
...@@ -192,8 +211,9 @@ static int bells_late_probe(struct snd_soc_card *card) ...@@ -192,8 +211,9 @@ static int bells_late_probe(struct snd_soc_card *card)
if (card->num_rtd == DAI_CODEC_SUB) if (card->num_rtd == DAI_CODEC_SUB)
return 0; return 0;
aif3_dai = card->rtd[DAI_CODEC_SUB].cpu_dai; rtd = snd_soc_get_pcm_runtime(card, card->dai_link[DAI_CODEC_SUB].name);
wm9081_dai = card->rtd[DAI_CODEC_SUB].codec_dai; aif3_dai = rtd->cpu_dai;
wm9081_dai = rtd->codec_dai;
ret = snd_soc_dai_set_sysclk(aif3_dai, ARIZONA_CLK_SYSCLK, 0, 0); ret = snd_soc_dai_set_sysclk(aif3_dai, ARIZONA_CLK_SYSCLK, 0, 0);
if (ret != 0) { if (ret != 0) {
......
...@@ -23,9 +23,13 @@ static int littlemill_set_bias_level(struct snd_soc_card *card, ...@@ -23,9 +23,13 @@ static int littlemill_set_bias_level(struct snd_soc_card *card,
struct snd_soc_dapm_context *dapm, struct snd_soc_dapm_context *dapm,
enum snd_soc_bias_level level) enum snd_soc_bias_level level)
{ {
struct snd_soc_dai *aif1_dai = card->rtd[0].codec_dai; struct snd_soc_pcm_runtime *rtd;
struct snd_soc_dai *aif1_dai;
int ret; int ret;
rtd = snd_soc_get_pcm_runtime(card, card->dai_link[0].name);
aif1_dai = rtd->codec_dai;
if (dapm->dev != aif1_dai->dev) if (dapm->dev != aif1_dai->dev)
return 0; return 0;
...@@ -66,9 +70,13 @@ static int littlemill_set_bias_level_post(struct snd_soc_card *card, ...@@ -66,9 +70,13 @@ static int littlemill_set_bias_level_post(struct snd_soc_card *card,
struct snd_soc_dapm_context *dapm, struct snd_soc_dapm_context *dapm,
enum snd_soc_bias_level level) enum snd_soc_bias_level level)
{ {
struct snd_soc_dai *aif1_dai = card->rtd[0].codec_dai; struct snd_soc_pcm_runtime *rtd;
struct snd_soc_dai *aif1_dai;
int ret; int ret;
rtd = snd_soc_get_pcm_runtime(card, card->dai_link[0].name);
aif1_dai = rtd->codec_dai;
if (dapm->dev != aif1_dai->dev) if (dapm->dev != aif1_dai->dev)
return 0; return 0;
...@@ -168,9 +176,13 @@ static int bbclk_ev(struct snd_soc_dapm_widget *w, ...@@ -168,9 +176,13 @@ static int bbclk_ev(struct snd_soc_dapm_widget *w,
struct snd_kcontrol *kcontrol, int event) struct snd_kcontrol *kcontrol, int event)
{ {
struct snd_soc_card *card = w->dapm->card; struct snd_soc_card *card = w->dapm->card;
struct snd_soc_dai *aif2_dai = card->rtd[1].cpu_dai; struct snd_soc_pcm_runtime *rtd;
struct snd_soc_dai *aif2_dai;
int ret; int ret;
rtd = snd_soc_get_pcm_runtime(card, card->dai_link[1].name);
aif2_dai = rtd->cpu_dai;
switch (event) { switch (event) {
case SND_SOC_DAPM_PRE_PMU: case SND_SOC_DAPM_PRE_PMU:
ret = snd_soc_dai_set_pll(aif2_dai, WM8994_FLL2, ret = snd_soc_dai_set_pll(aif2_dai, WM8994_FLL2,
...@@ -245,11 +257,19 @@ static struct snd_soc_jack littlemill_headset; ...@@ -245,11 +257,19 @@ static struct snd_soc_jack littlemill_headset;
static int littlemill_late_probe(struct snd_soc_card *card) static int littlemill_late_probe(struct snd_soc_card *card)
{ {
struct snd_soc_codec *codec = card->rtd[0].codec; struct snd_soc_pcm_runtime *rtd;
struct snd_soc_dai *aif1_dai = card->rtd[0].codec_dai; struct snd_soc_codec *codec;
struct snd_soc_dai *aif2_dai = card->rtd[1].cpu_dai; struct snd_soc_dai *aif1_dai;
struct snd_soc_dai *aif2_dai;
int ret; int ret;
rtd = snd_soc_get_pcm_runtime(card, card->dai_link[0].name);
codec = rtd->codec;
aif1_dai = rtd->codec_dai;
rtd = snd_soc_get_pcm_runtime(card, card->dai_link[1].name);
aif2_dai = rtd->cpu_dai;
ret = snd_soc_dai_set_sysclk(aif1_dai, WM8994_SYSCLK_MCLK2, ret = snd_soc_dai_set_sysclk(aif1_dai, WM8994_SYSCLK_MCLK2,
32768, SND_SOC_CLOCK_IN); 32768, SND_SOC_CLOCK_IN);
if (ret < 0) if (ret < 0)
......
...@@ -25,10 +25,15 @@ static struct snd_soc_dai_link odroidx2_dai[]; ...@@ -25,10 +25,15 @@ static struct snd_soc_dai_link odroidx2_dai[];
static int odroidx2_late_probe(struct snd_soc_card *card) static int odroidx2_late_probe(struct snd_soc_card *card)
{ {
struct snd_soc_dai *codec_dai = card->rtd[0].codec_dai; struct snd_soc_pcm_runtime *rtd;
struct snd_soc_dai *cpu_dai = card->rtd[0].cpu_dai; struct snd_soc_dai *codec_dai;
struct snd_soc_dai *cpu_dai;
int ret; int ret;
rtd = snd_soc_get_pcm_runtime(card, card->dai_link[0].name);
codec_dai = rtd->codec_dai;
cpu_dai = rtd->cpu_dai;
ret = snd_soc_dai_set_sysclk(codec_dai, 0, MAX98090_MCLK, ret = snd_soc_dai_set_sysclk(codec_dai, 0, MAX98090_MCLK,
SND_SOC_CLOCK_IN); SND_SOC_CLOCK_IN);
......
...@@ -35,10 +35,15 @@ static struct snd_soc_dai_link snow_dai[] = { ...@@ -35,10 +35,15 @@ static struct snd_soc_dai_link snow_dai[] = {
static int snow_late_probe(struct snd_soc_card *card) static int snow_late_probe(struct snd_soc_card *card)
{ {
struct snd_soc_dai *codec_dai = card->rtd[0].codec_dai; struct snd_soc_pcm_runtime *rtd;
struct snd_soc_dai *cpu_dai = card->rtd[0].cpu_dai; struct snd_soc_dai *codec_dai;
struct snd_soc_dai *cpu_dai;
int ret; int ret;
rtd = snd_soc_get_pcm_runtime(card, card->dai_link[0].name);
codec_dai = rtd->codec_dai;
cpu_dai = rtd->cpu_dai;
/* Set the MCLK rate for the codec */ /* Set the MCLK rate for the codec */
ret = snd_soc_dai_set_sysclk(codec_dai, 0, ret = snd_soc_dai_set_sysclk(codec_dai, 0,
FIN_PLL_RATE, SND_SOC_CLOCK_IN); FIN_PLL_RATE, SND_SOC_CLOCK_IN);
......
...@@ -25,9 +25,13 @@ static int speyside_set_bias_level(struct snd_soc_card *card, ...@@ -25,9 +25,13 @@ static int speyside_set_bias_level(struct snd_soc_card *card,
struct snd_soc_dapm_context *dapm, struct snd_soc_dapm_context *dapm,
enum snd_soc_bias_level level) enum snd_soc_bias_level level)
{ {
struct snd_soc_dai *codec_dai = card->rtd[1].codec_dai; struct snd_soc_pcm_runtime *rtd;
struct snd_soc_dai *codec_dai;
int ret; int ret;
rtd = snd_soc_get_pcm_runtime(card, card->dai_link[1].name);
codec_dai = rtd->codec_dai;
if (dapm->dev != codec_dai->dev) if (dapm->dev != codec_dai->dev)
return 0; return 0;
...@@ -57,9 +61,13 @@ static int speyside_set_bias_level_post(struct snd_soc_card *card, ...@@ -57,9 +61,13 @@ static int speyside_set_bias_level_post(struct snd_soc_card *card,
struct snd_soc_dapm_context *dapm, struct snd_soc_dapm_context *dapm,
enum snd_soc_bias_level level) enum snd_soc_bias_level level)
{ {
struct snd_soc_dai *codec_dai = card->rtd[1].codec_dai; struct snd_soc_pcm_runtime *rtd;
struct snd_soc_dai *codec_dai;
int ret; int ret;
rtd = snd_soc_get_pcm_runtime(card, card->dai_link[1].name);
codec_dai = rtd->codec_dai;
if (dapm->dev != codec_dai->dev) if (dapm->dev != codec_dai->dev)
return 0; return 0;
......
...@@ -23,9 +23,13 @@ static int tobermory_set_bias_level(struct snd_soc_card *card, ...@@ -23,9 +23,13 @@ static int tobermory_set_bias_level(struct snd_soc_card *card,
struct snd_soc_dapm_context *dapm, struct snd_soc_dapm_context *dapm,
enum snd_soc_bias_level level) enum snd_soc_bias_level level)
{ {
struct snd_soc_dai *codec_dai = card->rtd[0].codec_dai; struct snd_soc_pcm_runtime *rtd;
struct snd_soc_dai *codec_dai;
int ret; int ret;
rtd = snd_soc_get_pcm_runtime(card, card->dai_link[0].name);
codec_dai = rtd->codec_dai;
if (dapm->dev != codec_dai->dev) if (dapm->dev != codec_dai->dev)
return 0; return 0;
...@@ -62,9 +66,13 @@ static int tobermory_set_bias_level_post(struct snd_soc_card *card, ...@@ -62,9 +66,13 @@ static int tobermory_set_bias_level_post(struct snd_soc_card *card,
struct snd_soc_dapm_context *dapm, struct snd_soc_dapm_context *dapm,
enum snd_soc_bias_level level) enum snd_soc_bias_level level)
{ {
struct snd_soc_dai *codec_dai = card->rtd[0].codec_dai; struct snd_soc_pcm_runtime *rtd;
struct snd_soc_dai *codec_dai;
int ret; int ret;
rtd = snd_soc_get_pcm_runtime(card, card->dai_link[0].name);
codec_dai = rtd->codec_dai;
if (dapm->dev != codec_dai->dev) if (dapm->dev != codec_dai->dev)
return 0; return 0;
...@@ -170,10 +178,15 @@ static struct snd_soc_jack_pin tobermory_headset_pins[] = { ...@@ -170,10 +178,15 @@ static struct snd_soc_jack_pin tobermory_headset_pins[] = {
static int tobermory_late_probe(struct snd_soc_card *card) static int tobermory_late_probe(struct snd_soc_card *card)
{ {
struct snd_soc_codec *codec = card->rtd[0].codec; struct snd_soc_pcm_runtime *rtd;
struct snd_soc_dai *codec_dai = card->rtd[0].codec_dai; struct snd_soc_codec *codec;
struct snd_soc_dai *codec_dai;
int ret; int ret;
rtd = snd_soc_get_pcm_runtime(card, card->dai_link[0].name);
codec = rtd->codec;
codec_dai = rtd->codec_dai;
ret = snd_soc_dai_set_sysclk(codec_dai, WM8962_SYSCLK_MCLK, ret = snd_soc_dai_set_sysclk(codec_dai, WM8962_SYSCLK_MCLK,
32768, SND_SOC_CLOCK_IN); 32768, SND_SOC_CLOCK_IN);
if (ret < 0) if (ret < 0)
......
...@@ -199,7 +199,8 @@ static int tegra_wm8903_init(struct snd_soc_pcm_runtime *rtd) ...@@ -199,7 +199,8 @@ static int tegra_wm8903_init(struct snd_soc_pcm_runtime *rtd)
static int tegra_wm8903_remove(struct snd_soc_card *card) static int tegra_wm8903_remove(struct snd_soc_card *card)
{ {
struct snd_soc_pcm_runtime *rtd = &(card->rtd[0]); struct snd_soc_pcm_runtime *rtd =
snd_soc_get_pcm_runtime(card, card->dai_link[0].name);
struct snd_soc_dai *codec_dai = rtd->codec_dai; struct snd_soc_dai *codec_dai = rtd->codec_dai;
struct snd_soc_codec *codec = codec_dai->codec; struct snd_soc_codec *codec = codec_dai->codec;
struct tegra_wm8903 *machine = snd_soc_card_get_drvdata(card); struct tegra_wm8903 *machine = snd_soc_card_get_drvdata(card);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment