Merge "dsp: voice_mhi: reset vote count at modem restart"
diff --git a/asoc/codecs/Kbuild b/asoc/codecs/Kbuild
index a4cbc45..a40c75f 100644
--- a/asoc/codecs/Kbuild
+++ b/asoc/codecs/Kbuild
@@ -87,6 +87,7 @@
 endif
 
 ifdef CONFIG_WCD9XXX_CODEC_CORE_V2
+	CORE_OBJS += wcd9xxx-core-init.o
 	CORE_OBJS += msm-cdc-pinctrl.o
 	CORE_OBJS += msm-cdc-supply.o
 endif
diff --git a/asoc/codecs/bolero/bolero-cdc.c b/asoc/codecs/bolero/bolero-cdc.c
index 8092bb7..f1283f3 100644
--- a/asoc/codecs/bolero/bolero-cdc.c
+++ b/asoc/codecs/bolero/bolero-cdc.c
@@ -464,6 +464,46 @@
 }
 EXPORT_SYMBOL(bolero_unregister_macro);
 
+static void bolero_fs_gen_enable(struct bolero_priv *priv, bool enable)
+{
+	if (enable) {
+		if (++priv->clk_users == 1) {
+			mutex_unlock(&priv->clk_lock);
+			regmap_update_bits(priv->regmap,
+				BOLERO_CDC_VA_CLK_RST_CTRL_MCLK_CONTROL,
+				0x01, 0x01);
+			regmap_update_bits(priv->regmap,
+				BOLERO_CDC_VA_CLK_RST_CTRL_FS_CNT_CONTROL,
+				0x01, 0x01);
+			regmap_update_bits(priv->regmap,
+				BOLERO_CDC_VA_TOP_CSR_TOP_CFG0,
+				0x02, 0x02);
+			mutex_lock(&priv->clk_lock);
+		}
+	} else {
+		if (priv->clk_users <= 0) {
+			dev_err(priv->dev,
+				"%s:clock already disabled\n",
+				__func__);
+			priv->clk_users = 0;
+			return;
+		}
+		if (--priv->clk_users == 0) {
+			mutex_unlock(&priv->clk_lock);
+			regmap_update_bits(priv->regmap,
+				BOLERO_CDC_VA_TOP_CSR_TOP_CFG0,
+				0x02, 0x00);
+			regmap_update_bits(priv->regmap,
+				BOLERO_CDC_VA_CLK_RST_CTRL_FS_CNT_CONTROL,
+				0x01, 0x00);
+			regmap_update_bits(priv->regmap,
+				BOLERO_CDC_VA_CLK_RST_CTRL_MCLK_CONTROL,
+				0x01, 0x00);
+			mutex_lock(&priv->clk_lock);
+		}
+	}
+}
+
 /**
  * bolero_request_clock - request for clock enable/disable
  *
@@ -510,6 +550,7 @@
 				macro_id, mclk_mux0_macro);
 			goto err;
 		}
+		bolero_fs_gen_enable(priv, enable);
 		break;
 	case MCLK_MUX1:
 		mclk_mux1_macro =  bolero_mclk_mux_tbl[macro_id][MCLK_MUX1];
@@ -527,6 +568,7 @@
 			if (enable)
 				goto err;
 		}
+		bolero_fs_gen_enable(priv, enable);
 		/*
 		 * need different return value as ret variable
 		 * is used to track mclk_mux0 enable success or fail
@@ -825,7 +867,7 @@
 static void bolero_add_child_devices(struct work_struct *work)
 {
 	struct bolero_priv *priv;
-	bool wcd937x_node = false;
+	bool split_codec = false;
 	struct platform_device *pdev;
 	struct device_node *node;
 	int ret = 0, count = 0;
@@ -849,9 +891,12 @@
 	priv->child_count = 0;
 
 	for_each_available_child_of_node(priv->dev->of_node, node) {
-		wcd937x_node = false;
-		if (strnstr(node->name, "wcd937x", strlen("wcd937x")) != NULL)
-			wcd937x_node = true;
+		split_codec = false;
+		if (of_find_property(node, "qcom,split-codec", NULL)) {
+			split_codec = true;
+			dev_dbg(priv->dev, "%s: split codec slave exists\n",
+				__func__);
+		}
 
 		strlcpy(plat_dev_name, node->name,
 				(BOLERO_CDC_STRING_LEN - 1));
@@ -866,7 +911,7 @@
 		pdev->dev.parent = priv->dev;
 		pdev->dev.of_node = node;
 
-		if (wcd937x_node) {
+		if (split_codec) {
 			priv->dev->platform_data = platdata;
 			priv->wcd_dev = &pdev->dev;
 		}
diff --git a/asoc/codecs/bolero/internal.h b/asoc/codecs/bolero/internal.h
index 9093334..1e5651b 100644
--- a/asoc/codecs/bolero/internal.h
+++ b/asoc/codecs/bolero/internal.h
@@ -73,6 +73,7 @@
 	struct wcd_ctrl_platform_data plat_data;
 	struct device *wcd_dev;
 	struct blocking_notifier_head notifier;
+	int clk_users;
 };
 
 struct regmap *bolero_regmap_init(struct device *dev,
diff --git a/asoc/codecs/bolero/tx-macro.c b/asoc/codecs/bolero/tx-macro.c
index ec56166..b24721f 100644
--- a/asoc/codecs/bolero/tx-macro.c
+++ b/asoc/codecs/bolero/tx-macro.c
@@ -950,7 +950,7 @@
 			tx_macro_put_dec_enum);
 
 static const char * const smic_mux_text[] = {
-	"ZERO", "ADC0", "ADC1", "ADC2", "ADC3",
+	"ZERO", "ADC0", "ADC1", "ADC2", "ADC3", "ADC4",
 	"SWR_DMIC0", "SWR_DMIC1", "SWR_DMIC2", "SWR_DMIC3",
 	"SWR_DMIC4", "SWR_DMIC5", "SWR_DMIC6", "SWR_DMIC7"
 };
@@ -1096,6 +1096,7 @@
 	SND_SOC_DAPM_INPUT("TX SWR_ADC1"),
 	SND_SOC_DAPM_INPUT("TX SWR_ADC2"),
 	SND_SOC_DAPM_INPUT("TX SWR_ADC3"),
+	SND_SOC_DAPM_INPUT("TX SWR_ADC4"),
 	SND_SOC_DAPM_INPUT("TX SWR_DMIC0"),
 	SND_SOC_DAPM_INPUT("TX SWR_DMIC1"),
 	SND_SOC_DAPM_INPUT("TX SWR_DMIC2"),
@@ -1206,6 +1207,7 @@
 	{"TX SMIC MUX0", "ADC1", "TX SWR_ADC1"},
 	{"TX SMIC MUX0", "ADC2", "TX SWR_ADC2"},
 	{"TX SMIC MUX0", "ADC3", "TX SWR_ADC3"},
+	{"TX SMIC MUX0", "ADC4", "TX SWR_ADC4"},
 	{"TX SMIC MUX0", "SWR_DMIC0", "TX SWR_DMIC0"},
 	{"TX SMIC MUX0", "SWR_DMIC1", "TX SWR_DMIC1"},
 	{"TX SMIC MUX0", "SWR_DMIC2", "TX SWR_DMIC2"},
@@ -1230,6 +1232,7 @@
 	{"TX SMIC MUX1", "ADC1", "TX SWR_ADC1"},
 	{"TX SMIC MUX1", "ADC2", "TX SWR_ADC2"},
 	{"TX SMIC MUX1", "ADC3", "TX SWR_ADC3"},
+	{"TX SMIC MUX1", "ADC4", "TX SWR_ADC4"},
 	{"TX SMIC MUX1", "SWR_DMIC0", "TX SWR_DMIC0"},
 	{"TX SMIC MUX1", "SWR_DMIC1", "TX SWR_DMIC1"},
 	{"TX SMIC MUX1", "SWR_DMIC2", "TX SWR_DMIC2"},
@@ -1254,6 +1257,7 @@
 	{"TX SMIC MUX2", "ADC1", "TX SWR_ADC1"},
 	{"TX SMIC MUX2", "ADC2", "TX SWR_ADC2"},
 	{"TX SMIC MUX2", "ADC3", "TX SWR_ADC3"},
+	{"TX SMIC MUX2", "ADC4", "TX SWR_ADC4"},
 	{"TX SMIC MUX2", "SWR_DMIC0", "TX SWR_DMIC0"},
 	{"TX SMIC MUX2", "SWR_DMIC1", "TX SWR_DMIC1"},
 	{"TX SMIC MUX2", "SWR_DMIC2", "TX SWR_DMIC2"},
@@ -1278,6 +1282,7 @@
 	{"TX SMIC MUX3", "ADC1", "TX SWR_ADC1"},
 	{"TX SMIC MUX3", "ADC2", "TX SWR_ADC2"},
 	{"TX SMIC MUX3", "ADC3", "TX SWR_ADC3"},
+	{"TX SMIC MUX3", "ADC4", "TX SWR_ADC4"},
 	{"TX SMIC MUX3", "SWR_DMIC0", "TX SWR_DMIC0"},
 	{"TX SMIC MUX3", "SWR_DMIC1", "TX SWR_DMIC1"},
 	{"TX SMIC MUX3", "SWR_DMIC2", "TX SWR_DMIC2"},
@@ -1302,6 +1307,7 @@
 	{"TX SMIC MUX4", "ADC1", "TX SWR_ADC1"},
 	{"TX SMIC MUX4", "ADC2", "TX SWR_ADC2"},
 	{"TX SMIC MUX4", "ADC3", "TX SWR_ADC3"},
+	{"TX SMIC MUX4", "ADC4", "TX SWR_ADC4"},
 	{"TX SMIC MUX4", "SWR_DMIC0", "TX SWR_DMIC0"},
 	{"TX SMIC MUX4", "SWR_DMIC1", "TX SWR_DMIC1"},
 	{"TX SMIC MUX4", "SWR_DMIC2", "TX SWR_DMIC2"},
@@ -1326,6 +1332,7 @@
 	{"TX SMIC MUX5", "ADC1", "TX SWR_ADC1"},
 	{"TX SMIC MUX5", "ADC2", "TX SWR_ADC2"},
 	{"TX SMIC MUX5", "ADC3", "TX SWR_ADC3"},
+	{"TX SMIC MUX5", "ADC4", "TX SWR_ADC4"},
 	{"TX SMIC MUX5", "SWR_DMIC0", "TX SWR_DMIC0"},
 	{"TX SMIC MUX5", "SWR_DMIC1", "TX SWR_DMIC1"},
 	{"TX SMIC MUX5", "SWR_DMIC2", "TX SWR_DMIC2"},
@@ -1350,6 +1357,7 @@
 	{"TX SMIC MUX6", "ADC1", "TX SWR_ADC1"},
 	{"TX SMIC MUX6", "ADC2", "TX SWR_ADC2"},
 	{"TX SMIC MUX6", "ADC3", "TX SWR_ADC3"},
+	{"TX SMIC MUX6", "ADC4", "TX SWR_ADC4"},
 	{"TX SMIC MUX6", "SWR_DMIC0", "TX SWR_DMIC0"},
 	{"TX SMIC MUX6", "SWR_DMIC1", "TX SWR_DMIC1"},
 	{"TX SMIC MUX6", "SWR_DMIC2", "TX SWR_DMIC2"},
@@ -1374,6 +1382,7 @@
 	{"TX SMIC MUX7", "ADC1", "TX SWR_ADC1"},
 	{"TX SMIC MUX7", "ADC2", "TX SWR_ADC2"},
 	{"TX SMIC MUX7", "ADC3", "TX SWR_ADC3"},
+	{"TX SMIC MUX7", "ADC4", "TX SWR_ADC4"},
 	{"TX SMIC MUX7", "SWR_DMIC0", "TX SWR_DMIC0"},
 	{"TX SMIC MUX7", "SWR_DMIC1", "TX SWR_DMIC1"},
 	{"TX SMIC MUX7", "SWR_DMIC2", "TX SWR_DMIC2"},
@@ -1581,6 +1590,7 @@
 	snd_soc_dapm_ignore_suspend(dapm, "TX SWR_ADC1");
 	snd_soc_dapm_ignore_suspend(dapm, "TX SWR_ADC2");
 	snd_soc_dapm_ignore_suspend(dapm, "TX SWR_ADC3");
+	snd_soc_dapm_ignore_suspend(dapm, "TX SWR_ADC4");
 	snd_soc_dapm_ignore_suspend(dapm, "TX SWR_DMIC0");
 	snd_soc_dapm_ignore_suspend(dapm, "TX SWR_DMIC1");
 	snd_soc_dapm_ignore_suspend(dapm, "TX SWR_DMIC2");
diff --git a/asoc/codecs/bolero/va-macro.c b/asoc/codecs/bolero/va-macro.c
index e89042e..f8df0b7 100644
--- a/asoc/codecs/bolero/va-macro.c
+++ b/asoc/codecs/bolero/va-macro.c
@@ -166,15 +166,6 @@
 			regcache_sync_region(regmap,
 					VA_START_OFFSET,
 					VA_MAX_OFFSET);
-			regmap_update_bits(regmap,
-				BOLERO_CDC_VA_CLK_RST_CTRL_MCLK_CONTROL,
-				0x01, 0x01);
-			regmap_update_bits(regmap,
-				BOLERO_CDC_VA_CLK_RST_CTRL_FS_CNT_CONTROL,
-				0x01, 0x01);
-			regmap_update_bits(regmap,
-				BOLERO_CDC_VA_TOP_CSR_TOP_CFG0,
-				0x02, 0x02);
 		}
 		va_priv->va_mclk_users++;
 	} else {
@@ -186,15 +177,6 @@
 		}
 		va_priv->va_mclk_users--;
 		if (va_priv->va_mclk_users == 0) {
-			regmap_update_bits(regmap,
-				BOLERO_CDC_VA_TOP_CSR_TOP_CFG0,
-				0x02, 0x00);
-			regmap_update_bits(regmap,
-				BOLERO_CDC_VA_CLK_RST_CTRL_FS_CNT_CONTROL,
-				0x01, 0x00);
-			regmap_update_bits(regmap,
-				BOLERO_CDC_VA_CLK_RST_CTRL_MCLK_CONTROL,
-				0x01, 0x00);
 			bolero_request_clock(va_priv->dev,
 					VA_MACRO,
 					va_priv->mclk_mux_sel, false);
diff --git a/asoc/codecs/wcd938x/wcd938x.c b/asoc/codecs/wcd938x/wcd938x.c
index 10a085b..8ebef1f 100644
--- a/asoc/codecs/wcd938x/wcd938x.c
+++ b/asoc/codecs/wcd938x/wcd938x.c
@@ -37,20 +37,6 @@
 #define ADC_MODE_VAL_ULP1     0x09
 #define ADC_MODE_VAL_ULP2     0x0B
 
-#define STRING(name) #name
-#define WCD_DAPM_ENUM(name, reg, offset, text) \
-static SOC_ENUM_SINGLE_DECL(name##_enum, reg, offset, text); \
-static const struct snd_kcontrol_new name##_mux = \
-		SOC_DAPM_ENUM(STRING(name), name##_enum)
-
-#define WCD_DAPM_ENUM_EXT(name, reg, offset, text, getname, putname) \
-static SOC_ENUM_SINGLE_DECL(name##_enum, reg, offset, text); \
-static const struct snd_kcontrol_new name##_mux = \
-		SOC_DAPM_ENUM_EXT(STRING(name), name##_enum, getname, putname)
-
-#define WCD_DAPM_MUX(name, shift, kctl) \
-		SND_SOC_DAPM_MUX(name, SND_SOC_NOPM, shift, 0, &kctl##_mux)
-
 enum {
 	WCD9380 = 0,
 	WCD9385,
@@ -118,7 +104,7 @@
 	.type_base = WCD938X_DIGITAL_INTR_LEVEL_0,
 	.ack_base = WCD938X_DIGITAL_INTR_CLEAR_0,
 	.use_ack = 1,
-	.runtime_pm = true,
+	.runtime_pm = false,
 	.handle_post_irq = wcd938x_handle_post_irq,
 	.irq_drv_data = NULL,
 };
@@ -175,6 +161,8 @@
 				      0x1F, 0x15);
 	snd_soc_component_update_bits(component, WCD938X_HPH_REFBUFF_UHQA_CTL,
 				      0xC0, 0x80);
+	snd_soc_component_update_bits(component, WCD938X_DIGITAL_CDC_DMIC_CTL,
+				      0x02, 0x02);
 
 	return 0;
 }
@@ -1398,12 +1386,16 @@
 			snd_soc_component_update_bits(component,
 				WCD938X_DIGITAL_CDC_ANA_CLK_CTL, 0x10, 0x10);
 			snd_soc_component_update_bits(component,
+			       WCD938X_DIGITAL_CDC_ANA_TX_CLK_CTL, 0x01, 0x01);
+			snd_soc_component_update_bits(component,
 				WCD938X_MICB1_TEST_CTL_2, 0x01, 0x01);
 			snd_soc_component_update_bits(component,
 				WCD938X_MICB2_TEST_CTL_2, 0x01, 0x01);
 			snd_soc_component_update_bits(component,
 				WCD938X_MICB3_TEST_CTL_2, 0x01, 0x01);
 			snd_soc_component_update_bits(component,
+				WCD938X_MICB4_TEST_CTL_2, 0x01, 0x01);
+			snd_soc_component_update_bits(component,
 				micb_reg, 0xC0, 0x40);
 			if (post_on_event)
 				blocking_notifier_call_chain(
@@ -1582,6 +1574,46 @@
 	return __wcd938x_codec_enable_micbias(w, event);
 }
 
+static inline int wcd938x_tx_path_get(const char *wname)
+{
+	int ret = 0;
+	unsigned int path_num;
+	char *widget_name = NULL;
+	char *w_name = NULL;
+	char *path_num_char = NULL;
+	char *path_name = NULL;
+
+	widget_name = kstrndup(wname, 9, GFP_KERNEL);
+	if (!widget_name)
+		return -EINVAL;
+
+	w_name = widget_name;
+
+	path_name = strsep(&widget_name, " ");
+	if (!path_name) {
+		pr_err("%s: Invalid widget name = %s\n",
+			__func__, widget_name);
+		ret = -EINVAL;
+		goto err;
+	}
+	path_name = widget_name;
+	path_num_char = strpbrk(path_name, "0123");
+	if (!path_num_char) {
+		pr_err("%s: tx path index not found\n",
+			__func__);
+		ret = -EINVAL;
+		goto err;
+	}
+	ret = kstrtouint(path_num_char, 10, &path_num);
+	if (ret < 0)
+		pr_err("%s: Invalid tx path = %s\n",
+			__func__, w_name);
+
+err:
+	kfree(w_name);
+	return ret;
+}
+
 static int wcd938x_tx_mode_get(struct snd_kcontrol *kcontrol,
 				 struct snd_ctl_elem_value *ucontrol)
 {
@@ -1590,8 +1622,15 @@
 	struct snd_soc_component *component =
 			snd_soc_kcontrol_component(kcontrol);
 	struct wcd938x_priv *wcd938x = snd_soc_component_get_drvdata(component);
+	u32 path = 0;
 
-	ucontrol->value.integer.value[0] = wcd938x->tx_mode[widget->shift];
+	if (!widget || !widget->name || !wcd938x || !component)
+		return -EINVAL;
+
+	path = wcd938x_tx_path_get(widget->name);
+
+	ucontrol->value.integer.value[0] = wcd938x->tx_mode[path];
+
 	return 0;
 }
 
@@ -1604,12 +1643,18 @@
 			snd_soc_kcontrol_component(kcontrol);
 	struct wcd938x_priv *wcd938x = snd_soc_component_get_drvdata(component);
 	u32 mode_val;
+	u32 path = 0;
 
+	if (!widget || !widget->name || !wcd938x || !component)
+		return -EINVAL;
+
+	path = wcd938x_tx_path_get(widget->name);
 	mode_val = ucontrol->value.enumerated.item[0];
 
 	dev_dbg(component->dev, "%s: mode: %d\n", __func__, mode_val);
 
-	wcd938x->tx_mode[widget->shift] = mode_val;
+	wcd938x->tx_mode[path] = mode_val;
+
 	return 0;
 }
 
@@ -1682,60 +1727,6 @@
 	return 0;
 }
 
-static int wcd938x_codec_enable_vdd_buck(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 wcd938x_priv *wcd938x = snd_soc_component_get_drvdata(component);
-	struct wcd938x_pdata *pdata = NULL;
-	int ret = 0;
-
-	pdata = dev_get_platdata(wcd938x->dev);
-
-	if (!pdata) {
-		dev_err(component->dev, "%s: pdata is NULL\n", __func__);
-		return -EINVAL;
-	}
-
-	dev_dbg(component->dev, "%s wname: %s event: %d\n", __func__,
-		w->name, event);
-
-	switch (event) {
-	case SND_SOC_DAPM_PRE_PMU:
-		ret = msm_cdc_enable_ondemand_supply(wcd938x->dev,
-						wcd938x->supplies,
-						pdata->regulator,
-						pdata->num_supplies,
-						"cdc-vdd-buck");
-		if (ret == -EINVAL) {
-			dev_err(component->dev, "%s: vdd buck is not enabled\n",
-				__func__);
-			return ret;
-		}
-		/*
-		 * 200us sleep is required after LDO15 is enabled as per
-		 * HW requirement
-		 */
-		usleep_range(200, 250);
-		break;
-	case SND_SOC_DAPM_POST_PMD:
-		ret = msm_cdc_disable_ondemand_supply(wcd938x->dev,
-						wcd938x->supplies,
-						pdata->regulator,
-						pdata->num_supplies,
-						"cdc-vdd-buck");
-		if (ret == -EINVAL) {
-			dev_err(component->dev, "%s: vdd buck is not disabled\n",
-				__func__);
-			return 0;
-		}
-		break;
-	}
-	return 0;
-}
-
 static int wcd938x_tx_hdr_get(struct snd_kcontrol *kcontrol,
 				 struct snd_ctl_elem_value *ucontrol)
 {
@@ -1790,14 +1781,9 @@
 	"ADC_ULP1", "ADC_ULP2",
 };
 
-WCD_DAPM_ENUM_EXT(tx0_mode, SND_SOC_NOPM, 0, tx_mode_mux_text,
-		wcd938x_tx_mode_get, wcd938x_tx_mode_put);
-WCD_DAPM_ENUM_EXT(tx1_mode, SND_SOC_NOPM, 1, tx_mode_mux_text,
-		wcd938x_tx_mode_get, wcd938x_tx_mode_put);
-WCD_DAPM_ENUM_EXT(tx2_mode, SND_SOC_NOPM, 2, tx_mode_mux_text,
-		wcd938x_tx_mode_get, wcd938x_tx_mode_put);
-WCD_DAPM_ENUM_EXT(tx3_mode, SND_SOC_NOPM, 3, tx_mode_mux_text,
-		wcd938x_tx_mode_get, wcd938x_tx_mode_put);
+static const struct soc_enum tx_mode_mux_enum =
+	SOC_ENUM_SINGLE_EXT(ARRAY_SIZE(tx_mode_mux_text),
+			    tx_mode_mux_text);
 
 static const char * const rx_hph_mode_mux_text[] = {
 	"CLS_H_INVALID", "CLS_H_HIFI", "CLS_H_LP", "CLS_AB", "CLS_H_LOHIFI",
@@ -1812,6 +1798,15 @@
 	SOC_ENUM_EXT("RX HPH Mode", rx_hph_mode_mux_enum,
 		wcd938x_rx_hph_mode_get, wcd938x_rx_hph_mode_put),
 
+	SOC_ENUM_EXT("TX0 MODE", tx_mode_mux_enum,
+			wcd938x_tx_mode_get, wcd938x_tx_mode_put),
+	SOC_ENUM_EXT("TX1 MODE", tx_mode_mux_enum,
+			wcd938x_tx_mode_get, wcd938x_tx_mode_put),
+	SOC_ENUM_EXT("TX2 MODE", tx_mode_mux_enum,
+			wcd938x_tx_mode_get, wcd938x_tx_mode_put),
+	SOC_ENUM_EXT("TX3 MODE", tx_mode_mux_enum,
+			wcd938x_tx_mode_get, wcd938x_tx_mode_put),
+
 	SOC_SINGLE_EXT("HPHL_COMP Switch", SND_SOC_NOPM, 0, 1, 0,
 		wcd938x_get_compander, wcd938x_set_compander),
 	SOC_SINGLE_EXT("HPHR_COMP Switch", SND_SOC_NOPM, 1, 1, 0,
@@ -1961,37 +1956,37 @@
 	SND_SOC_DAPM_ADC_E("ADC1", NULL, SND_SOC_NOPM, 0, 0,
 				wcd938x_codec_enable_adc,
 				SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
-	SND_SOC_DAPM_ADC_E("ADC2", NULL, SND_SOC_NOPM, 0, 1,
+	SND_SOC_DAPM_ADC_E("ADC2", NULL, SND_SOC_NOPM, 1, 0,
 				wcd938x_codec_enable_adc,
 				SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
-	SND_SOC_DAPM_ADC_E("ADC3", NULL, SND_SOC_NOPM, 0, 2,
+	SND_SOC_DAPM_ADC_E("ADC3", NULL, SND_SOC_NOPM, 2, 0,
 				wcd938x_codec_enable_adc,
 				SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
-	SND_SOC_DAPM_ADC_E("ADC4", NULL, SND_SOC_NOPM, 0, 3,
+	SND_SOC_DAPM_ADC_E("ADC4", NULL, SND_SOC_NOPM, 3, 0,
 				wcd938x_codec_enable_adc,
 				SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
 	SND_SOC_DAPM_ADC_E("DMIC1", NULL, SND_SOC_NOPM, 0, 0,
 				wcd938x_codec_enable_dmic,
 				SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
-	SND_SOC_DAPM_ADC_E("DMIC2", NULL, SND_SOC_NOPM, 0, 1,
+	SND_SOC_DAPM_ADC_E("DMIC2", NULL, SND_SOC_NOPM, 1, 0,
 				wcd938x_codec_enable_dmic,
 				SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
-	SND_SOC_DAPM_ADC_E("DMIC3", NULL, SND_SOC_NOPM, 0, 2,
+	SND_SOC_DAPM_ADC_E("DMIC3", NULL, SND_SOC_NOPM, 2, 0,
 				wcd938x_codec_enable_dmic,
 				SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
-	SND_SOC_DAPM_ADC_E("DMIC4", NULL, SND_SOC_NOPM, 0, 3,
+	SND_SOC_DAPM_ADC_E("DMIC4", NULL, SND_SOC_NOPM, 3, 0,
 				wcd938x_codec_enable_dmic,
 				SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
-	SND_SOC_DAPM_ADC_E("DMIC5", NULL, SND_SOC_NOPM, 0, 4,
+	SND_SOC_DAPM_ADC_E("DMIC5", NULL, SND_SOC_NOPM, 4, 0,
 				wcd938x_codec_enable_dmic,
 				SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
-	SND_SOC_DAPM_ADC_E("DMIC6", NULL, SND_SOC_NOPM, 0, 5,
+	SND_SOC_DAPM_ADC_E("DMIC6", NULL, SND_SOC_NOPM, 5, 0,
 				wcd938x_codec_enable_dmic,
 				SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
-	SND_SOC_DAPM_ADC_E("DMIC7", NULL, SND_SOC_NOPM, 0, 6,
+	SND_SOC_DAPM_ADC_E("DMIC7", NULL, SND_SOC_NOPM, 6, 0,
 				wcd938x_codec_enable_dmic,
 				SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
-	SND_SOC_DAPM_ADC_E("DMIC8", NULL, SND_SOC_NOPM, 0, 7,
+	SND_SOC_DAPM_ADC_E("DMIC8", NULL, SND_SOC_NOPM, 7, 0,
 				wcd938x_codec_enable_dmic,
 				SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
 
@@ -2014,12 +2009,6 @@
 				&tx_adc3_mux),
 	SND_SOC_DAPM_MUX("ADC4 MUX", SND_SOC_NOPM, 0, 0,
 				&tx_adc4_mux),
-
-	WCD_DAPM_MUX("TX0 MODE", 0, tx0_mode),
-	WCD_DAPM_MUX("TX1 MODE", 1, tx1_mode),
-	WCD_DAPM_MUX("TX2 MODE", 2, tx2_mode),
-	WCD_DAPM_MUX("TX3 MODE", 3, tx3_mode),
-
 	/*tx mixers*/
 	SND_SOC_DAPM_MIXER_E("ADC1_MIXER", SND_SOC_NOPM, 0, 0,
 				adc1_switch, ARRAY_SIZE(adc1_switch),
@@ -2085,10 +2074,6 @@
 				SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU |
 				SND_SOC_DAPM_POST_PMD),
 
-	SND_SOC_DAPM_SUPPLY("VDD_BUCK", SND_SOC_NOPM, 0, 0,
-			     wcd938x_codec_enable_vdd_buck,
-			     SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
-
 	SND_SOC_DAPM_SUPPLY_S("CLS_H_PORT", 1, SND_SOC_NOPM, 0, 0,
 			     wcd938x_enable_clsh,
 			     SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
@@ -2224,7 +2209,6 @@
 	{"DMIC8_OUTPUT", NULL, "DMIC8_MIXER"},
 	{"DMIC8_MIXER", "Switch", "DMIC8"},
 
-	{"IN1_HPHL", NULL, "VDD_BUCK"},
 	{"IN1_HPHL", NULL, "CLS_H_PORT"},
 	{"RX1", NULL, "IN1_HPHL"},
 	{"RDAC1", NULL, "RX1"},
@@ -2232,7 +2216,6 @@
 	{"HPHL PGA", NULL, "HPHL_RDAC"},
 	{"HPHL", NULL, "HPHL PGA"},
 
-	{"IN2_HPHR", NULL, "VDD_BUCK"},
 	{"IN2_HPHR", NULL, "CLS_H_PORT"},
 	{"RX2", NULL, "IN2_HPHR"},
 	{"RDAC2", NULL, "RX2"},
@@ -2240,7 +2223,6 @@
 	{"HPHR PGA", NULL, "HPHR_RDAC"},
 	{"HPHR", NULL, "HPHR PGA"},
 
-	{"IN3_AUX", NULL, "VDD_BUCK"},
 	{"IN3_AUX", NULL, "CLS_H_PORT"},
 	{"RX3", NULL, "IN3_AUX"},
 	{"RDAC4", NULL, "RX3"},
@@ -2632,8 +2614,8 @@
 		return NULL;
 	}
 
-	pdata->rx_slave = of_parse_phandle(dev->of_node, "qcom,rx-swr-slave", 0);
-	pdata->tx_slave = of_parse_phandle(dev->of_node, "qcom,tx-swr-slave", 0);
+	pdata->rx_slave = of_parse_phandle(dev->of_node, "qcom,rx-slave", 0);
+	pdata->tx_slave = of_parse_phandle(dev->of_node, "qcom,tx-slave", 0);
 
 	wcd938x_dt_parse_micbias_info(dev, &pdata->micbias);
 
@@ -2755,7 +2737,7 @@
 
 	np = dev->of_node;
 
-	rx_node = of_parse_phandle(np, "qcom,rx-swr-slave", 0);
+	rx_node = of_parse_phandle(np, "qcom,rx-slave", 0);
 	if (!rx_node) {
 		dev_err(dev, "%s: Rx-slave node not defined\n", __func__);
 		return -ENODEV;
@@ -2766,7 +2748,7 @@
 			wcd938x_compare_of,
 			rx_node);
 
-	tx_node = of_parse_phandle(np, "qcom,tx-swr-slave", 0);
+	tx_node = of_parse_phandle(np, "qcom,tx-slave", 0);
 	if (!tx_node) {
 		dev_err(dev, "%s: Tx-slave node not defined\n", __func__);
 			return -ENODEV;
diff --git a/asoc/kona.c b/asoc/kona.c
index 1c68a98..b34b80a 100644
--- a/asoc/kona.c
+++ b/asoc/kona.c
@@ -3798,6 +3798,7 @@
 	SND_SOC_DAPM_MIC("Analog Mic2", NULL),
 	SND_SOC_DAPM_MIC("Analog Mic3", NULL),
 	SND_SOC_DAPM_MIC("Analog Mic4", NULL),
+	SND_SOC_DAPM_MIC("Analog Mic5", NULL),
 	SND_SOC_DAPM_MIC("Digital Mic0", msm_dmic_event),
 	SND_SOC_DAPM_MIC("Digital Mic1", msm_dmic_event),
 	SND_SOC_DAPM_MIC("Digital Mic2", msm_dmic_event),
@@ -3863,6 +3864,7 @@
 	snd_soc_dapm_ignore_suspend(dapm, "Analog Mic2");
 	snd_soc_dapm_ignore_suspend(dapm, "Analog Mic3");
 	snd_soc_dapm_ignore_suspend(dapm, "Analog Mic4");
+	snd_soc_dapm_ignore_suspend(dapm, "Analog Mic5");
 
 	snd_soc_dapm_ignore_suspend(dapm, "WSA_SPK1 OUT");
 	snd_soc_dapm_ignore_suspend(dapm, "WSA_SPK2 OUT");
@@ -5650,7 +5652,6 @@
 	u32 wsa_max_devs;
 	u32 wsa_dev_cnt;
 	u32 codec_aux_dev_cnt = 0;
-	u32 bolero_codec = 0;
 	int i;
 	struct msm_wsa881x_dev_info *wsa881x_dev_info;
 	struct aux_codec_dev_info *aux_cdc_dev_info;
@@ -5765,77 +5766,70 @@
 		__func__, found);
 
 codec_aux_dev:
-	ret = of_property_read_u32(pdev->dev.of_node, "qcom,bolero-codec", &bolero_codec);
-	if (ret)
-		dev_dbg(&pdev->dev, "%s: No DT match for bolero codec\n", __func__);
+	/* Get count of aux codec device phandles for this platform */
+	codec_aux_dev_cnt = of_count_phandle_with_args(
+				pdev->dev.of_node,
+				"qcom,codec-aux-devs", NULL);
+	if (codec_aux_dev_cnt == -ENOENT) {
+		dev_warn(&pdev->dev, "%s: No aux codec defined in DT.\n",
+			 __func__);
+		goto err;
+	} else if (codec_aux_dev_cnt <= 0) {
+		dev_err(&pdev->dev,
+			"%s: Error reading aux codec device from DT, dev_cnt=%d\n",
+			__func__, codec_aux_dev_cnt);
+		ret = -EINVAL;
+		goto err;
+	}
 
-	if (bolero_codec) {
-		/* Get count of aux codec device phandles for this platform */
-		codec_aux_dev_cnt = of_count_phandle_with_args(
-					pdev->dev.of_node,
-					"qcom,codec-aux-devs", NULL);
-		if (codec_aux_dev_cnt == -ENOENT) {
-			dev_warn(&pdev->dev, "%s: No aux codec defined in DT.\n",
-				 __func__);
-			goto err;
-		} else if (codec_aux_dev_cnt <= 0) {
+	/*
+	 * Alloc mem to store phandle and index info of aux codec
+	 * if already registered with ALSA core
+	 */
+	aux_cdc_dev_info = devm_kcalloc(&pdev->dev, codec_aux_dev_cnt,
+				sizeof(struct aux_codec_dev_info),
+				GFP_KERNEL);
+	if (!aux_cdc_dev_info) {
+		ret = -ENOMEM;
+		goto err;
+	}
+
+	/*
+	 * search and check whether all aux codecs are already
+	 * registered with ALSA core or not. If found a node, store
+	 * the node and the index in a local array of struct for later
+	 * use.
+	 */
+	for (i = 0; i < codec_aux_dev_cnt; i++) {
+		aux_codec_of_node = of_parse_phandle(pdev->dev.of_node,
+					    "qcom,codec-aux-devs", i);
+		if (unlikely(!aux_codec_of_node)) {
+			/* we should not be here */
 			dev_err(&pdev->dev,
-				"%s: Error reading aux codec device from DT, dev_cnt=%d\n",
-				__func__, codec_aux_dev_cnt);
+				"%s: aux codec dev node is not present\n",
+				__func__);
 			ret = -EINVAL;
 			goto err;
 		}
-
-		/*
-		 * Alloc mem to store phandle and index info of aux codec
-		 * if already registered with ALSA core
-		 */
-		aux_cdc_dev_info = devm_kcalloc(&pdev->dev, codec_aux_dev_cnt,
-					sizeof(struct aux_codec_dev_info),
-					GFP_KERNEL);
-		if (!aux_cdc_dev_info) {
-			ret = -ENOMEM;
-			goto err;
+		if (soc_find_component(aux_codec_of_node, NULL)) {
+			/* AUX codec registered with ALSA core */
+			aux_cdc_dev_info[codecs_found].of_node =
+						aux_codec_of_node;
+			aux_cdc_dev_info[codecs_found].index = i;
+			codecs_found++;
 		}
-
-		/*
-		 * search and check whether all aux codecs are already
-		 * registered with ALSA core or not. If found a node, store
-		 * the node and the index in a local array of struct for later
-		 * use.
-		 */
-		for (i = 0; i < codec_aux_dev_cnt; i++) {
-			aux_codec_of_node = of_parse_phandle(pdev->dev.of_node,
-						    "qcom,codec-aux-devs", i);
-			if (unlikely(!aux_codec_of_node)) {
-				/* we should not be here */
-				dev_err(&pdev->dev,
-					"%s: aux codec dev node is not present\n",
-					__func__);
-				ret = -EINVAL;
-				goto err;
-			}
-			if (soc_find_component(aux_codec_of_node, NULL)) {
-				/* AUX codec registered with ALSA core */
-				aux_cdc_dev_info[codecs_found].of_node =
-							aux_codec_of_node;
-				aux_cdc_dev_info[codecs_found].index = i;
-				codecs_found++;
-			}
-		}
-
-		if (codecs_found < codec_aux_dev_cnt) {
-			dev_dbg(&pdev->dev,
-				"%s: failed to find %d components. Found only %d\n",
-				__func__, codec_aux_dev_cnt, codecs_found);
-			return -EPROBE_DEFER;
-		}
-		dev_info(&pdev->dev,
-			"%s: found %d AUX codecs registered with ALSA core\n",
-			__func__, codecs_found);
-
 	}
 
+	if (codecs_found < codec_aux_dev_cnt) {
+		dev_dbg(&pdev->dev,
+			"%s: failed to find %d components. Found only %d\n",
+			__func__, codec_aux_dev_cnt, codecs_found);
+		return -EPROBE_DEFER;
+	}
+	dev_info(&pdev->dev,
+		"%s: found %d AUX codecs registered with ALSA core\n",
+		__func__, codecs_found);
+
 	card->num_aux_devs = wsa_max_devs + codec_aux_dev_cnt;
 	card->num_configs = wsa_max_devs + codec_aux_dev_cnt;
 
@@ -6145,17 +6139,15 @@
 	}
 
 	msm_i2s_auxpcm_init(pdev);
-	if (strcmp(card->name, "kona-mtp-snd-card")) {
-		pdata->dmic01_gpio_p = of_parse_phandle(pdev->dev.of_node,
-						      "qcom,cdc-dmic01-gpios",
-						       0);
-		pdata->dmic23_gpio_p = of_parse_phandle(pdev->dev.of_node,
-						      "qcom,cdc-dmic23-gpios",
-						       0);
-		pdata->dmic45_gpio_p = of_parse_phandle(pdev->dev.of_node,
-						      "qcom,cdc-dmic45-gpios",
-						       0);
-	}
+	pdata->dmic01_gpio_p = of_parse_phandle(pdev->dev.of_node,
+					      "qcom,cdc-dmic01-gpios",
+					       0);
+	pdata->dmic23_gpio_p = of_parse_phandle(pdev->dev.of_node,
+					      "qcom,cdc-dmic23-gpios",
+					       0);
+	pdata->dmic45_gpio_p = of_parse_phandle(pdev->dev.of_node,
+					      "qcom,cdc-dmic45-gpios",
+					       0);
 
 	ret = msm_audio_ssr_register(&pdev->dev);
 	if (ret)
diff --git a/asoc/sm8250-port-config.h b/asoc/sm8250-port-config.h
index 0f8c3c1..a29f106 100644
--- a/asoc/sm8250-port-config.h
+++ b/asoc/sm8250-port-config.h
@@ -43,9 +43,11 @@
 
 /* TX UC1: TX1: 1ch, TX2: 2chs, TX3: 1ch(MBHC) */
 static struct port_params tx_frame_params_default[SWR_MSTR_PORT_LEN] = {
+	{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},/* PCM OUT */
 	{1,  1,  0,  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0},  /* TX1 */
 	{1,  0,  0,  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 1},  /* TX2 */
 	{3,  2,  0,  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0},  /* TX3 */
+	{3,  0,  0,  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 1},  /* TX4 */
 };
 
 static struct swr_mstr_port_map sm_port_map[] = {
diff --git a/config/konaauto.conf b/config/konaauto.conf
index 34e5dd9..7b03dea 100644
--- a/config/konaauto.conf
+++ b/config/konaauto.conf
@@ -1,3 +1,4 @@
+CONFIG_PINCTRL_LPI=m
 CONFIG_PINCTRL_WCD=m
 CONFIG_AUDIO_EXT_CLK=m
 CONFIG_SND_SOC_WCD9XXX_V2=m
diff --git a/config/konaautoconf.h b/config/konaautoconf.h
index 49eb428..f932236 100644
--- a/config/konaautoconf.h
+++ b/config/konaautoconf.h
@@ -2,6 +2,7 @@
 /* Copyright (c) 2018-2019, The Linux Foundation. All rights reserved.
  */
 
+#define CONFIG_PINCTRL_LPI 1
 #define CONFIG_PINCTRL_WCD 1
 #define CONFIG_AUDIO_EXT_CLK 1
 #define CONFIG_SND_SOC_WCD9XXX_V2 1
diff --git a/include/asoc/core.h b/include/asoc/core.h
index 8acfa26..e4f0413 100644
--- a/include/asoc/core.h
+++ b/include/asoc/core.h
@@ -1,5 +1,5 @@
 /* SPDX-License-Identifier: GPL-2.0-only */
-/* Copyright (c) 2011-2018, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2011-2019, The Linux Foundation. All rights reserved.
  */
 
 #ifndef __MFD_TABLA_CORE_H__
@@ -374,6 +374,7 @@
 	int bytes;          /* number of bytes to be written */
 };
 
+#ifdef CONFIG_WCD9XXX_CODEC_CORE
 int wcd9xxx_interface_reg_read(struct wcd9xxx *wcd9xxx, unsigned short reg);
 int wcd9xxx_interface_reg_write(struct wcd9xxx *wcd9xxx, unsigned short reg,
 		u8 val);
@@ -429,4 +430,118 @@
 
 int wcd9xxx_init(void);
 void wcd9xxx_exit(void);
+#else
+int wcd9xxx_interface_reg_read(struct wcd9xxx *wcd9xxx, unsigned short reg)
+{
+	return 0;
+}
+int wcd9xxx_interface_reg_write(struct wcd9xxx *wcd9xxx, unsigned short reg,
+		u8 val)
+{
+	return 0;
+}
+int wcd9xxx_get_logical_addresses(u8 *pgd_la, u8 *inf_la)
+{
+	return 0;
+}
+int wcd9xxx_slim_write_repeat(struct wcd9xxx *wcd9xxx, unsigned short reg,
+			     int bytes, void *src)
+{
+	return 0;
+}
+int wcd9xxx_slim_reserve_bw(struct wcd9xxx *wcd9xxx,
+			    u32 bw_ops, bool commit)
+{
+	return 0;
+}
+int wcd9xxx_set_power_state(struct wcd9xxx *wcd9xxx, enum codec_power_states
+			    cdc_power_state, enum wcd_power_regions pwr_region)
+{
+	return 0;
+}
+int wcd9xxx_get_current_power_state(struct wcd9xxx *wcd9xxx,
+				    enum wcd_power_regions pwr_region)
+{
+	return 0;
+}
+
+int wcd9xxx_page_write(struct wcd9xxx *wcd9xxx, unsigned short *reg)
+{
+	return 0;
+}
+
+int wcd9xxx_slim_bulk_write(struct wcd9xxx *wcd9xxx,
+			    struct wcd9xxx_reg_val *bulk_reg,
+			    unsigned int size, bool interface)
+{
+	return 0;
+}
+
+extern int wcd9xxx_core_res_init(
+	struct wcd9xxx_core_resource *wcd9xxx_core_res,
+	int num_irqs, int num_irq_regs, struct regmap *wcd_regmap)
+{
+	return 0;
+}
+
+extern void wcd9xxx_core_res_deinit(
+	struct wcd9xxx_core_resource *wcd9xxx_core_res)
+{
+}
+
+extern int wcd9xxx_core_res_suspend(
+	struct wcd9xxx_core_resource *wcd9xxx_core_res,
+	pm_message_t pmesg)
+{
+	return 0;
+}
+
+extern int wcd9xxx_core_res_resume(
+	struct wcd9xxx_core_resource *wcd9xxx_core_res)
+{
+	return 0;
+}
+
+extern int wcd9xxx_core_irq_init(
+	struct wcd9xxx_core_resource *wcd9xxx_core_res)
+{
+	return 0;
+}
+extern int wcd9xxx_assign_irq(struct wcd9xxx_core_resource *wcd9xxx_core_res,
+			      unsigned int irq,
+			      unsigned int irq_base)
+{
+	return 0;
+}
+
+extern enum wcd9xxx_intf_status wcd9xxx_get_intf_type(void)
+{
+	return 0;
+}
+extern void wcd9xxx_set_intf_type(enum wcd9xxx_intf_status int_state)
+{
+}
+
+extern enum wcd9xxx_pm_state wcd9xxx_pm_cmpxchg(
+			struct wcd9xxx_core_resource *wcd9xxx_core_res,
+			enum wcd9xxx_pm_state o,
+			enum wcd9xxx_pm_state n)
+{
+	return 0;
+}
+static inline int __init wcd9xxx_irq_of_init(struct device_node *node,
+			       struct device_node *parent)
+{
+	return 0;
+}
+
+int wcd9xxx_init(void)
+{
+	return 0;
+}
+void wcd9xxx_exit(void)
+{
+}
+
+#endif
 #endif
diff --git a/include/asoc/wcd9xxx-irq.h b/include/asoc/wcd9xxx-irq.h
index 2c7e7ec..ff286c4 100644
--- a/include/asoc/wcd9xxx-irq.h
+++ b/include/asoc/wcd9xxx-irq.h
@@ -1,5 +1,5 @@
 /* SPDX-License-Identifier: GPL-2.0-only */
-/* Copyright (c) 2016-2017, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2016-2017, 2019, The Linux Foundation. All rights reserved.
  */
 
 #include <linux/types.h>
@@ -7,6 +7,7 @@
 
 #ifndef __MFD_WCD9XXX_IRQ_H
 #define __MFD_WCD9XXX_IRQ_H
+#ifdef CONFIG_WCD9XXX_CODEC_CORE
 bool wcd9xxx_lock_sleep(struct wcd9xxx_core_resource *wcd9xxx_res);
 void wcd9xxx_unlock_sleep(struct wcd9xxx_core_resource *wcd9xxx_res);
 void wcd9xxx_nested_irq_lock(struct wcd9xxx_core_resource *wcd9xxx_res);
@@ -26,4 +27,56 @@
 void wcd9xxx_irq_exit(struct wcd9xxx_core_resource *wcd9xxx_res);
 int wcd9xxx_irq_drv_init(void);
 void wcd9xxx_irq_drv_exit(void);
+#else
+bool wcd9xxx_lock_sleep(struct wcd9xxx_core_resource *wcd9xxx_res)
+{
+	return false;
+}
+void wcd9xxx_unlock_sleep(struct wcd9xxx_core_resource *wcd9xxx_res)
+{
+}
+void wcd9xxx_nested_irq_lock(struct wcd9xxx_core_resource *wcd9xxx_res)
+{
+}
+void wcd9xxx_nested_irq_unlock(struct wcd9xxx_core_resource *wcd9xxx_res)
+{
+}
+int wcd9xxx_request_irq(struct wcd9xxx_core_resource *wcd9xxx_res, int irq,
+			irq_handler_t handler, const char *name, void *data)
+{
+	return 0;
+}
+
+void wcd9xxx_free_irq(struct wcd9xxx_core_resource *wcd9xxx_res,
+			int irq, void *data)
+{
+}
+void wcd9xxx_enable_irq(struct wcd9xxx_core_resource *wcd9xxx_res, int irq)
+{
+}
+void wcd9xxx_disable_irq(struct wcd9xxx_core_resource *wcd9xxx_res,
+			int irq)
+{
+}
+void wcd9xxx_disable_irq_sync(struct wcd9xxx_core_resource *wcd9xxx_res,
+			int irq)
+{
+}
+
+int wcd9xxx_irq_init(struct wcd9xxx_core_resource *wcd9xxx_res)
+{
+	return 0;
+}
+void wcd9xxx_irq_exit(struct wcd9xxx_core_resource *wcd9xxx_res)
+{
+}
+int wcd9xxx_irq_drv_init(void)
+{
+	return 0;
+}
+
+void wcd9xxx_irq_drv_exit(void)
+{
+}
+#endif
 #endif
diff --git a/soc/Android.mk b/soc/Android.mk
index 8ce2c75..26f18e6 100644
--- a/soc/Android.mk
+++ b/soc/Android.mk
@@ -44,7 +44,7 @@
 KBUILD_OPTIONS += $(AUDIO_SELECT)
 
 ###########################################################
-ifeq ($(call is-board-platform-in-list,$(MSMSTEPPE) $(TRINKET)),true)
+ifeq ($(call is-board-platform-in-list,$(MSMSTEPPE) $(TRINKET) kona),true)
 include $(CLEAR_VARS)
 LOCAL_MODULE              := $(AUDIO_CHIPSET)_pinctrl_lpi.ko
 LOCAL_MODULE_KBUILD_NAME  := pinctrl_lpi_dlkm.ko