Commit 93d519a1 authored by Mark Brown's avatar Mark Brown

ASoC: Intel: avs: rt5682: Refactor jack handling

Merge series from Cezary Rojewski <cezary.rojewski@intel.com>:

Leftover from recent series [1].
Following changes are proposed for the rt5682 sound card driver:

1) Move jack unassignment from platform_device->remove() to
   dai_link->exit(). This is done to make jack init and deinit flows
   symmetric
2) Remove platform_device->remove() function
3) Simplify card->suspend_pre() and card->resume_post() by making use of
   snd_soc_card_get_codec_dai() helper
parents 97b801be a9d8723c
...@@ -26,6 +26,7 @@ ...@@ -26,6 +26,7 @@
#define AVS_RT5682_SSP_CODEC_MASK (GENMASK(2, 0)) #define AVS_RT5682_SSP_CODEC_MASK (GENMASK(2, 0))
#define AVS_RT5682_MCLK_EN BIT(3) #define AVS_RT5682_MCLK_EN BIT(3)
#define AVS_RT5682_MCLK_24MHZ BIT(4) #define AVS_RT5682_MCLK_24MHZ BIT(4)
#define AVS_RT5682_CODEC_DAI_NAME "rt5682-aif1"
/* Default: MCLK on, MCLK 19.2M, SSP0 */ /* Default: MCLK on, MCLK 19.2M, SSP0 */
static unsigned long avs_rt5682_quirk = AVS_RT5682_MCLK_EN | AVS_RT5682_SSP_CODEC(0); static unsigned long avs_rt5682_quirk = AVS_RT5682_MCLK_EN | AVS_RT5682_SSP_CODEC(0);
...@@ -119,6 +120,11 @@ static int avs_rt5682_codec_init(struct snd_soc_pcm_runtime *runtime) ...@@ -119,6 +120,11 @@ static int avs_rt5682_codec_init(struct snd_soc_pcm_runtime *runtime)
return 0; return 0;
}; };
static void avs_rt5682_codec_exit(struct snd_soc_pcm_runtime *rtd)
{
snd_soc_component_set_jack(asoc_rtd_to_codec(rtd, 0)->component, NULL, NULL);
}
static int static int
avs_rt5682_hw_params(struct snd_pcm_substream *substream, struct snd_pcm_hw_params *params) avs_rt5682_hw_params(struct snd_pcm_substream *substream, struct snd_pcm_hw_params *params)
{ {
...@@ -184,7 +190,7 @@ static int avs_create_dai_link(struct device *dev, const char *platform_name, in ...@@ -184,7 +190,7 @@ static int avs_create_dai_link(struct device *dev, const char *platform_name, in
dl->cpus->dai_name = devm_kasprintf(dev, GFP_KERNEL, "SSP%d Pin", ssp_port); dl->cpus->dai_name = devm_kasprintf(dev, GFP_KERNEL, "SSP%d Pin", ssp_port);
dl->codecs->name = devm_kasprintf(dev, GFP_KERNEL, "i2c-10EC5682:00"); dl->codecs->name = devm_kasprintf(dev, GFP_KERNEL, "i2c-10EC5682:00");
dl->codecs->dai_name = devm_kasprintf(dev, GFP_KERNEL, "rt5682-aif1"); dl->codecs->dai_name = devm_kasprintf(dev, GFP_KERNEL, AVS_RT5682_CODEC_DAI_NAME);
if (!dl->cpus->dai_name || !dl->codecs->name || !dl->codecs->dai_name) if (!dl->cpus->dai_name || !dl->codecs->name || !dl->codecs->dai_name)
return -ENOMEM; return -ENOMEM;
...@@ -194,6 +200,7 @@ static int avs_create_dai_link(struct device *dev, const char *platform_name, in ...@@ -194,6 +200,7 @@ static int avs_create_dai_link(struct device *dev, const char *platform_name, in
dl->num_platforms = 1; dl->num_platforms = 1;
dl->id = 0; dl->id = 0;
dl->init = avs_rt5682_codec_init; dl->init = avs_rt5682_codec_init;
dl->exit = avs_rt5682_codec_exit;
dl->ops = &avs_rt5682_ops; dl->ops = &avs_rt5682_ops;
dl->nonatomic = 1; dl->nonatomic = 1;
dl->no_pcm = 1; dl->no_pcm = 1;
...@@ -237,30 +244,19 @@ static int avs_create_dapm_routes(struct device *dev, int ssp_port, ...@@ -237,30 +244,19 @@ static int avs_create_dapm_routes(struct device *dev, int ssp_port,
return 0; return 0;
} }
static int avs_card_set_jack(struct snd_soc_card *card, struct snd_soc_jack *jack)
{
struct snd_soc_component *component;
for_each_card_components(card, component)
snd_soc_component_set_jack(component, jack, NULL);
return 0;
}
static int avs_card_remove(struct snd_soc_card *card)
{
return avs_card_set_jack(card, NULL);
}
static int avs_card_suspend_pre(struct snd_soc_card *card) static int avs_card_suspend_pre(struct snd_soc_card *card)
{ {
return avs_card_set_jack(card, NULL); struct snd_soc_dai *codec_dai = snd_soc_card_get_codec_dai(card, AVS_RT5682_CODEC_DAI_NAME);
return snd_soc_component_set_jack(codec_dai->component, NULL, NULL);
} }
static int avs_card_resume_post(struct snd_soc_card *card) static int avs_card_resume_post(struct snd_soc_card *card)
{ {
struct snd_soc_dai *codec_dai = snd_soc_card_get_codec_dai(card, AVS_RT5682_CODEC_DAI_NAME);
struct snd_soc_jack *jack = snd_soc_card_get_drvdata(card); struct snd_soc_jack *jack = snd_soc_card_get_drvdata(card);
return avs_card_set_jack(card, jack); return snd_soc_component_set_jack(codec_dai->component, jack, NULL);
} }
static int avs_rt5682_probe(struct platform_device *pdev) static int avs_rt5682_probe(struct platform_device *pdev)
...@@ -304,7 +300,6 @@ static int avs_rt5682_probe(struct platform_device *pdev) ...@@ -304,7 +300,6 @@ static int avs_rt5682_probe(struct platform_device *pdev)
card->name = "avs_rt5682"; card->name = "avs_rt5682";
card->dev = dev; card->dev = dev;
card->owner = THIS_MODULE; card->owner = THIS_MODULE;
card->remove = avs_card_remove;
card->suspend_pre = avs_card_suspend_pre; card->suspend_pre = avs_card_suspend_pre;
card->resume_post = avs_card_resume_post; card->resume_post = avs_card_resume_post;
card->dai_link = dai_link; card->dai_link = dai_link;
......
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