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