cs35l41: separate ASPRX1 and ASPRX2 event function

mute amp when ASPRX1 and ASPRX2 both power down.

Bug: 216235756
Test: amp is not muted after run below commands
adb shell "tinymix 'DSP RX1 Source' ASPRX2"
adb shell "tinymix 'DSP RX1 Source' ASPRX1"

Change-Id: Ib519a45f83eb675988eb908088932301dd617f68
Signed-off-by: Robert Lee <lerobert@google.com>
diff --git a/cs35l41/cs35l41.c b/cs35l41/cs35l41.c
index 46805cc..72c6aed 100644
--- a/cs35l41/cs35l41.c
+++ b/cs35l41/cs35l41.c
@@ -2132,7 +2132,20 @@
 	return ret;
 }
 
-static int cs35l41_asprx_event(struct snd_soc_dapm_widget *w,
+static void cs35l41_mute_amp(struct cs35l41_private *cs35l41)
+{
+	bool mute = !(cs35l41->asprx1_enabled || cs35l41->asprx2_enabled);
+
+	if (mute) {
+		regmap_update_bits(cs35l41->regmap, CS35L41_AMP_OUT_MUTE,
+				CS35L41_AMP_MUTE_MASK, CS35L41_AMP_MUTE_MASK);
+	} else {
+		regmap_update_bits(cs35l41->regmap, CS35L41_AMP_OUT_MUTE,
+				CS35L41_AMP_MUTE_MASK, 0);
+	}
+}
+
+static int cs35l41_asprx1_event(struct snd_soc_dapm_widget *w,
 		struct snd_kcontrol *kcontrol, int event)
 {
 	struct snd_soc_component *component =
@@ -2143,18 +2156,44 @@
 
 	switch (event) {
 	case SND_SOC_DAPM_POST_PMU:
-		regmap_update_bits(cs35l41->regmap, CS35L41_AMP_OUT_MUTE,
-				CS35L41_AMP_MUTE_MASK, 0);
+		cs35l41->asprx1_enabled = true;
 		break;
 	case SND_SOC_DAPM_PRE_PMD:
-		regmap_update_bits(cs35l41->regmap, CS35L41_AMP_OUT_MUTE,
-				CS35L41_AMP_MUTE_MASK, CS35L41_AMP_MUTE_MASK);
+		cs35l41->asprx1_enabled = false;
 		break;
 	default:
 		dev_err(cs35l41->dev, "Invalid event = 0x%x\n", event);
 		ret = -EINVAL;
 		break;
 	}
+	if (ret == 0)
+		cs35l41_mute_amp(cs35l41);
+	return ret;
+}
+
+static int cs35l41_asprx2_event(struct snd_soc_dapm_widget *w,
+		struct snd_kcontrol *kcontrol, int event)
+{
+	struct snd_soc_component *component =
+		snd_soc_dapm_to_component(w->dapm);
+	struct cs35l41_private *cs35l41 =
+		snd_soc_component_get_drvdata(component);
+	int ret = 0;
+
+	switch (event) {
+	case SND_SOC_DAPM_POST_PMU:
+		cs35l41->asprx2_enabled = true;
+		break;
+	case SND_SOC_DAPM_PRE_PMD:
+		cs35l41->asprx2_enabled = false;
+		break;
+	default:
+		dev_err(cs35l41->dev, "Invalid event = 0x%x\n", event);
+		ret = -EINVAL;
+		break;
+	}
+	if (ret == 0)
+		cs35l41_mute_amp(cs35l41);
 	return ret;
 }
 
@@ -2168,10 +2207,10 @@
 				cs35l41_dsp_load_ev, SND_SOC_DAPM_POST_PMU),
 	SND_SOC_DAPM_OUTPUT("SPK"),
 	SND_SOC_DAPM_AIF_IN_E("ASPRX1", NULL, 0, CS35L41_SP_ENABLES, 16, 0,
-				cs35l41_asprx_event,
+				cs35l41_asprx1_event,
 				SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_PRE_PMD),
 	SND_SOC_DAPM_AIF_IN_E("ASPRX2", NULL, 0, CS35L41_SP_ENABLES, 17, 0,
-				cs35l41_asprx_event,
+				cs35l41_asprx2_event,
 				SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_PRE_PMD),
 	SND_SOC_DAPM_AIF_OUT("ASPTX1", NULL, 0, CS35L41_SP_ENABLES, 0, 0),
 	SND_SOC_DAPM_AIF_OUT("ASPTX2", NULL, 0, CS35L41_SP_ENABLES, 1, 0),
diff --git a/cs35l41/include/sound/cs35l41.h b/cs35l41/include/sound/cs35l41.h
index 12ddfa5..1c1dd89 100644
--- a/cs35l41/include/sound/cs35l41.h
+++ b/cs35l41/include/sound/cs35l41.h
@@ -113,6 +113,8 @@
 	bool fast_switch_en;
 	bool force_int;
 	bool hibernate_force_wake;
+	bool asprx1_enabled;
+	bool asprx2_enabled;
 	/* GPIO for /RST */
 	struct gpio_desc *reset_gpio;
 	/* Run-time mixer */