ASoC: Intel: bdw_rt286: Refactor jack handling
authorCezary Rojewski <cezary.rojewski@intel.com>
Fri, 25 Nov 2022 18:40:22 +0000 (19:40 +0100)
committerMark Brown <broonie@kernel.org>
Tue, 29 Nov 2022 12:13:13 +0000 (12:13 +0000)
Use link->exit() rather than pdev->remove() to unassign jack during card
unbind procedure so codec link initialization and exit procedures are
symmetrical.

Also, there is no need to perform search for codec dai in suspend_pre()
and resume_post() ourselves. Use snd_soc_card_get_codec_dai() instead.

Signed-off-by: Cezary Rojewski <cezary.rojewski@intel.com>
Link: https://lore.kernel.org/r/20221125184032.2565979-2-cezary.rojewski@intel.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/intel/boards/bdw_rt286.c

index 6b76df0e7c9b9a52802935e514ed21c934da3561..b7687a93a923470a788a70b6e0e37555d794e46c 100644 (file)
@@ -73,6 +73,13 @@ static int codec_link_init(struct snd_soc_pcm_runtime *rtd)
        return snd_soc_component_set_jack(codec, &card_headset, NULL);
 }
 
+static void codec_link_exit(struct snd_soc_pcm_runtime *rtd)
+{
+       struct snd_soc_component *codec = asoc_rtd_to_codec(rtd, 0)->component;
+
+       snd_soc_component_set_jack(codec, NULL, NULL);
+}
+
 static int codec_link_hw_params_fixup(struct snd_soc_pcm_runtime *rtd,
                                      struct snd_pcm_hw_params *params)
 {
@@ -165,6 +172,7 @@ static struct snd_soc_dai_link card_dai_links[] = {
                .nonatomic = 1,
                .no_pcm = 1,
                .init = codec_link_init,
+               .exit = codec_link_exit,
                .dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_CBC_CFC,
                .ignore_pmdown_time = 1,
                .be_hw_params_fixup = codec_link_hw_params_fixup,
@@ -175,43 +183,24 @@ static struct snd_soc_dai_link card_dai_links[] = {
        },
 };
 
-static void bdw_rt286_disable_jack(struct snd_soc_card *card)
-{
-       struct snd_soc_component *component;
-
-       for_each_card_components(card, component) {
-               if (!strcmp(component->name, "i2c-INT343A:00")) {
-                       dev_dbg(component->dev, "disabling jack detect before going to suspend.\n");
-                       snd_soc_component_set_jack(component, NULL, NULL);
-                       break;
-               }
-       }
-}
-
-static int bdw_rt286_suspend(struct snd_soc_card *card)
+static int card_suspend_pre(struct snd_soc_card *card)
 {
-       bdw_rt286_disable_jack(card);
+       struct snd_soc_dai *codec_dai = snd_soc_card_get_codec_dai(card, "rt286-aif1");
 
-       return 0;
+       return snd_soc_component_set_jack(codec_dai->component, NULL, NULL);
 }
 
-static int bdw_rt286_resume(struct snd_soc_card *card)
+static int card_resume_post(struct snd_soc_card *card)
 {
-       struct snd_soc_component *component;
-
-       for_each_card_components(card, component) {
-               if (!strcmp(component->name, "i2c-INT343A:00")) {
-                       dev_dbg(component->dev, "enabling jack detect for resume.\n");
-                       snd_soc_component_set_jack(component, &card_headset, NULL);
-                       break;
-               }
-       }
+       struct snd_soc_dai *codec_dai = snd_soc_card_get_codec_dai(card, "rt286-aif1");
 
-       return 0;
+       return snd_soc_component_set_jack(codec_dai->component, &card_headset, NULL);
 }
 
 static struct snd_soc_card bdw_rt286_card = {
        .owner = THIS_MODULE,
+       .suspend_pre = card_suspend_pre,
+       .resume_post = card_resume_post,
        .dai_link = card_dai_links,
        .num_links = ARRAY_SIZE(card_dai_links),
        .controls = card_controls,
@@ -221,8 +210,6 @@ static struct snd_soc_card bdw_rt286_card = {
        .dapm_routes = card_routes,
        .num_dapm_routes = ARRAY_SIZE(card_routes),
        .fully_routed = true,
-       .suspend_pre = bdw_rt286_suspend,
-       .resume_post = bdw_rt286_resume,
 };
 
 /* Use space before codec name to simplify card ID, and simplify driver name. */
@@ -254,18 +241,8 @@ static int bdw_rt286_probe(struct platform_device *pdev)
        return devm_snd_soc_register_card(dev, &bdw_rt286_card);
 }
 
-static int bdw_rt286_remove(struct platform_device *pdev)
-{
-       struct snd_soc_card *card = platform_get_drvdata(pdev);
-
-       bdw_rt286_disable_jack(card);
-
-       return 0;
-}
-
 static struct platform_driver bdw_rt286_driver = {
        .probe = bdw_rt286_probe,
-       .remove = bdw_rt286_remove,
        .driver = {
                .name = "bdw_rt286",
                .pm = &snd_soc_pm_ops