diff mbox

[4/5] ASoC: Intel: bytcr_rt5651: Disable jack-detect over suspend/resume

Message ID 20180704225935.7902-4-hdegoede@redhat.com (mailing list archive)
State Accepted
Commit b91f432cbc3326f715b8c3f02ff4066ab398833f
Headers show

Commit Message

Hans de Goede July 4, 2018, 10:59 p.m. UTC
Disable jack-detection and thus the codec IRQ over suspend/resume.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
---
 sound/soc/intel/boards/bytcr_rt5651.c | 49 ++++++++++++++++++++++++---
 1 file changed, 44 insertions(+), 5 deletions(-)

Comments

Pierre-Louis Bossart July 9, 2018, 10:57 p.m. UTC | #1
On 07/04/2018 05:59 PM, Hans de Goede wrote:
> Disable jack-detection and thus the codec IRQ over suspend/resume.
>
> Signed-off-by: Hans de Goede <hdegoede@redhat.com>

Acked-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>

> ---
>   sound/soc/intel/boards/bytcr_rt5651.c | 49 ++++++++++++++++++++++++---
>   1 file changed, 44 insertions(+), 5 deletions(-)
>
> diff --git a/sound/soc/intel/boards/bytcr_rt5651.c b/sound/soc/intel/boards/bytcr_rt5651.c
> index 5301205496be..2a8f86dfe4cb 100644
> --- a/sound/soc/intel/boards/bytcr_rt5651.c
> +++ b/sound/soc/intel/boards/bytcr_rt5651.c
> @@ -676,6 +676,48 @@ static struct snd_soc_dai_link byt_rt5651_dais[] = {
>   };
>   
>   /* SoC card */
> +static char byt_rt5651_codec_name[SND_ACPI_I2C_ID_LEN];
> +static char byt_rt5651_codec_aif_name[12]; /*  = "rt5651-aif[1|2]" */
> +static char byt_rt5651_cpu_dai_name[10]; /*  = "ssp[0|2]-port" */
> +static char byt_rt5651_long_name[40]; /* = "bytcr-rt5651-*-mic[-swapped-hp]" */
> +
> +static int byt_rt5651_suspend(struct snd_soc_card *card)
> +{
> +	struct snd_soc_component *component;
> +
> +	if (!BYT_RT5651_JDSRC(byt_rt5651_quirk))
> +		return 0;
> +
> +	list_for_each_entry(component, &card->component_dev_list, card_list) {
> +		if (!strcmp(component->name, byt_rt5651_codec_name)) {
> +			dev_dbg(component->dev, "disabling jack detect before suspend\n");
> +			snd_soc_component_set_jack(component, NULL, NULL);
> +			break;
> +		}
> +	}
> +
> +	return 0;
> +}
> +
> +static int byt_rt5651_resume(struct snd_soc_card *card)
> +{
> +	struct byt_rt5651_private *priv = snd_soc_card_get_drvdata(card);
> +	struct snd_soc_component *component;
> +
> +	if (!BYT_RT5651_JDSRC(byt_rt5651_quirk))
> +		return 0;
> +
> +	list_for_each_entry(component, &card->component_dev_list, card_list) {
> +		if (!strcmp(component->name, byt_rt5651_codec_name)) {
> +			dev_dbg(component->dev, "re-enabling jack detect after resume\n");
> +			snd_soc_component_set_jack(component, &priv->jack, NULL);
> +			break;
> +		}
> +	}
> +
> +	return 0;
> +}
> +
>   static struct snd_soc_card byt_rt5651_card = {
>   	.name = "bytcr-rt5651",
>   	.owner = THIS_MODULE,
> @@ -686,13 +728,10 @@ static struct snd_soc_card byt_rt5651_card = {
>   	.dapm_routes = byt_rt5651_audio_map,
>   	.num_dapm_routes = ARRAY_SIZE(byt_rt5651_audio_map),
>   	.fully_routed = true,
> +	.suspend_pre = byt_rt5651_suspend,
> +	.resume_post = byt_rt5651_resume,
>   };
>   
> -static char byt_rt5651_codec_name[SND_ACPI_I2C_ID_LEN];
> -static char byt_rt5651_codec_aif_name[12]; /*  = "rt5651-aif[1|2]" */
> -static char byt_rt5651_cpu_dai_name[10]; /*  = "ssp[0|2]-port" */
> -static char byt_rt5651_long_name[40]; /* = "bytcr-rt5651-*-mic[-swapped-hp]" */
> -
>   static const struct x86_cpu_id baytrail_cpu_ids[] = {
>   	{ X86_VENDOR_INTEL, 6, INTEL_FAM6_ATOM_SILVERMONT1 }, /* Valleyview */
>   	{}
diff mbox

Patch

diff --git a/sound/soc/intel/boards/bytcr_rt5651.c b/sound/soc/intel/boards/bytcr_rt5651.c
index 5301205496be..2a8f86dfe4cb 100644
--- a/sound/soc/intel/boards/bytcr_rt5651.c
+++ b/sound/soc/intel/boards/bytcr_rt5651.c
@@ -676,6 +676,48 @@  static struct snd_soc_dai_link byt_rt5651_dais[] = {
 };
 
 /* SoC card */
+static char byt_rt5651_codec_name[SND_ACPI_I2C_ID_LEN];
+static char byt_rt5651_codec_aif_name[12]; /*  = "rt5651-aif[1|2]" */
+static char byt_rt5651_cpu_dai_name[10]; /*  = "ssp[0|2]-port" */
+static char byt_rt5651_long_name[40]; /* = "bytcr-rt5651-*-mic[-swapped-hp]" */
+
+static int byt_rt5651_suspend(struct snd_soc_card *card)
+{
+	struct snd_soc_component *component;
+
+	if (!BYT_RT5651_JDSRC(byt_rt5651_quirk))
+		return 0;
+
+	list_for_each_entry(component, &card->component_dev_list, card_list) {
+		if (!strcmp(component->name, byt_rt5651_codec_name)) {
+			dev_dbg(component->dev, "disabling jack detect before suspend\n");
+			snd_soc_component_set_jack(component, NULL, NULL);
+			break;
+		}
+	}
+
+	return 0;
+}
+
+static int byt_rt5651_resume(struct snd_soc_card *card)
+{
+	struct byt_rt5651_private *priv = snd_soc_card_get_drvdata(card);
+	struct snd_soc_component *component;
+
+	if (!BYT_RT5651_JDSRC(byt_rt5651_quirk))
+		return 0;
+
+	list_for_each_entry(component, &card->component_dev_list, card_list) {
+		if (!strcmp(component->name, byt_rt5651_codec_name)) {
+			dev_dbg(component->dev, "re-enabling jack detect after resume\n");
+			snd_soc_component_set_jack(component, &priv->jack, NULL);
+			break;
+		}
+	}
+
+	return 0;
+}
+
 static struct snd_soc_card byt_rt5651_card = {
 	.name = "bytcr-rt5651",
 	.owner = THIS_MODULE,
@@ -686,13 +728,10 @@  static struct snd_soc_card byt_rt5651_card = {
 	.dapm_routes = byt_rt5651_audio_map,
 	.num_dapm_routes = ARRAY_SIZE(byt_rt5651_audio_map),
 	.fully_routed = true,
+	.suspend_pre = byt_rt5651_suspend,
+	.resume_post = byt_rt5651_resume,
 };
 
-static char byt_rt5651_codec_name[SND_ACPI_I2C_ID_LEN];
-static char byt_rt5651_codec_aif_name[12]; /*  = "rt5651-aif[1|2]" */
-static char byt_rt5651_cpu_dai_name[10]; /*  = "ssp[0|2]-port" */
-static char byt_rt5651_long_name[40]; /* = "bytcr-rt5651-*-mic[-swapped-hp]" */
-
 static const struct x86_cpu_id baytrail_cpu_ids[] = {
 	{ X86_VENDOR_INTEL, 6, INTEL_FAM6_ATOM_SILVERMONT1 }, /* Valleyview */
 	{}