Merge "ASoC: enable dynamic FFECNS effect control"
diff --git a/Makefile.am b/Makefile.am
index b705366..55f7787 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -14,7 +14,7 @@
ifeq ($(TARGET_SUPPORT),qcs40x)
KBUILD_OPTIONS += CONFIG_ARCH_QCS405=y
endif
-ifeq ($(TARGET_SUPPORT), sdmsteppe))
+ifeq ($(TARGET_SUPPORT), sdmsteppe)
KBUILD_OPTIONS += CONFIG_ARCH_SM6150=y
endif
@@ -32,7 +32,7 @@
obj-m += asoc/codecs/csra66x0/
obj-m += asoc/codecs/ep92/
endif
-ifeq ($(TARGET_SUPPORT), sdmsteppe))
+ifeq ($(TARGET_SUPPORT), sdmsteppe)
obj-m += asoc/codecs/bolero/
obj-m += asoc/codecs/wcd937x/
endif
diff --git a/asoc/codecs/wcd937x/internal.h b/asoc/codecs/wcd937x/internal.h
index b7bdfa2..cd11c85 100644
--- a/asoc/codecs/wcd937x/internal.h
+++ b/asoc/codecs/wcd937x/internal.h
@@ -82,6 +82,8 @@
/* Entry for version info */
struct snd_info_entry *entry;
struct snd_info_entry *version_entry;
+ /*Entry for Variant info*/
+ struct snd_info_entry *variant_entry;
int ear_rx_path;
int ana_clk_count;
struct mutex ana_tx_clk_lock;
diff --git a/asoc/codecs/wcd937x/wcd937x-mbhc.c b/asoc/codecs/wcd937x/wcd937x-mbhc.c
index 4ad8683..5ac7245 100644
--- a/asoc/codecs/wcd937x/wcd937x-mbhc.c
+++ b/asoc/codecs/wcd937x/wcd937x-mbhc.c
@@ -1051,6 +1051,7 @@
{
struct wcd937x_mbhc *wcd937x_mbhc = NULL;
struct wcd_mbhc *wcd_mbhc = NULL;
+ struct wcd937x_pdata *pdata;
int ret = 0;
if (!component) {
@@ -1076,6 +1077,15 @@
/* Setting default mbhc detection logic to ADC */
wcd_mbhc->mbhc_detection_logic = WCD_DETECTION_ADC;
+ pdata = dev_get_platdata(component->dev);
+ if (!pdata) {
+ dev_err(component->dev, "%s: pdata pointer is NULL\n",
+ __func__);
+ ret = -EINVAL;
+ goto err;
+ }
+ wcd_mbhc->micb_mv = pdata->micbias.micb2_mv;
+
ret = wcd_mbhc_init(wcd_mbhc, component, &mbhc_cb,
&intr_ids, wcd_mbhc_registers,
WCD937X_ZDET_SUPPORTED);
diff --git a/asoc/codecs/wcd937x/wcd937x.c b/asoc/codecs/wcd937x/wcd937x.c
index e89d9a9..d4f3d1f 100644
--- a/asoc/codecs/wcd937x/wcd937x.c
+++ b/asoc/codecs/wcd937x/wcd937x.c
@@ -29,6 +29,7 @@
#define WCD9370_VARIANT 0
#define WCD9375_VARIANT 5
+#define WCD937X_VARIANT_ENTRY_SIZE 32
#define NUM_SWRS_DT_PARAMS 5
@@ -2200,12 +2201,46 @@
.read = wcd937x_version_read,
};
+static ssize_t wcd937x_variant_read(struct snd_info_entry *entry,
+ void *file_private_data,
+ struct file *file,
+ char __user *buf, size_t count,
+ loff_t pos)
+{
+ struct wcd937x_priv *priv;
+ char buffer[WCD937X_VARIANT_ENTRY_SIZE];
+ int len = 0;
+
+ priv = (struct wcd937x_priv *) entry->private_data;
+ if (!priv) {
+ pr_err("%s: wcd937x priv is null\n", __func__);
+ return -EINVAL;
+ }
+
+ switch (priv->variant) {
+ case WCD9370_VARIANT:
+ len = snprintf(buffer, sizeof(buffer), "WCD9370\n");
+ break;
+ case WCD9375_VARIANT:
+ len = snprintf(buffer, sizeof(buffer), "WCD9375\n");
+ break;
+ default:
+ len = snprintf(buffer, sizeof(buffer), "VER_UNDEFINED\n");
+ }
+
+ return simple_read_from_buffer(buf, count, &pos, buffer, len);
+}
+
+static struct snd_info_entry_ops wcd937x_variant_ops = {
+ .read = wcd937x_variant_read,
+};
+
/*
* wcd937x_info_create_codec_entry - creates wcd937x module
* @codec_root: The parent directory
* @component: component instance
*
- * Creates wcd937x module and version entry under the given
+ * Creates wcd937x module, variant and version entry under the given
* parent directory.
*
* Return: 0 on success or negative error code on failure.
@@ -2214,6 +2249,7 @@
struct snd_soc_component *component)
{
struct snd_info_entry *version_entry;
+ struct snd_info_entry *variant_entry;
struct wcd937x_priv *priv;
struct snd_soc_card *card;
@@ -2254,6 +2290,25 @@
}
priv->version_entry = version_entry;
+ variant_entry = snd_info_create_card_entry(card->snd_card,
+ "variant",
+ priv->entry);
+ if (!variant_entry) {
+ dev_dbg(codec->dev, "%s: failed to create wcd937x variant entry\n",
+ __func__);
+ return -ENOMEM;
+ }
+
+ variant_entry->private_data = priv;
+ variant_entry->size = WCD937X_VARIANT_ENTRY_SIZE;
+ variant_entry->content = SNDRV_INFO_CONTENT_DATA;
+ variant_entry->c.ops = &wcd937x_variant_ops;
+
+ if (snd_info_register(variant_entry) < 0) {
+ snd_info_free_entry(variant_entry);
+ return -ENOMEM;
+ }
+ priv->variant_entry = variant_entry;
return 0;
}
EXPORT_SYMBOL(wcd937x_info_create_codec_entry);
diff --git a/asoc/codecs/wcd938x/internal.h b/asoc/codecs/wcd938x/internal.h
index a543944..2a47405 100644
--- a/asoc/codecs/wcd938x/internal.h
+++ b/asoc/codecs/wcd938x/internal.h
@@ -94,6 +94,7 @@
/* Entry for version info */
struct snd_info_entry *entry;
struct snd_info_entry *version_entry;
+ struct snd_info_entry *variant_entry;
int flyback_cur_det_disable;
int ear_rx_path;
};
diff --git a/asoc/codecs/wcd938x/wcd938x-mbhc.c b/asoc/codecs/wcd938x/wcd938x-mbhc.c
index 08a2b22..47ebb07 100644
--- a/asoc/codecs/wcd938x/wcd938x-mbhc.c
+++ b/asoc/codecs/wcd938x/wcd938x-mbhc.c
@@ -1009,6 +1009,9 @@
return -EINVAL;
}
+ /* Reset detection type to insertion after SSR recovery */
+ snd_soc_component_update_bits(component, WCD938X_ANA_MBHC_MECH,
+ 0x20, 0x20);
ret = wcd_mbhc_init(wcd_mbhc, component, &mbhc_cb, &intr_ids,
wcd_mbhc_registers, WCD938X_ZDET_SUPPORTED);
if (ret) {
diff --git a/asoc/codecs/wcd938x/wcd938x.c b/asoc/codecs/wcd938x/wcd938x.c
index 8113ab4..0d05c0d 100644
--- a/asoc/codecs/wcd938x/wcd938x.c
+++ b/asoc/codecs/wcd938x/wcd938x.c
@@ -26,6 +26,7 @@
#define WCD938X_DRV_NAME "wcd938x_codec"
#define NUM_SWRS_DT_PARAMS 5
+#define WCD938X_VARIANT_ENTRY_SIZE 32
#define WCD938X_VERSION_1_0 1
#define WCD938X_VERSION_ENTRY_SIZE 32
@@ -1779,6 +1780,52 @@
return __wcd938x_codec_enable_micbias(w, event);
}
+static int __wcd938x_codec_enable_micbias_pullup(struct snd_soc_dapm_widget *w,
+ int event)
+{
+ struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
+ int micb_num;
+
+ dev_dbg(component->dev, "%s: wname: %s, event: %d\n",
+ __func__, w->name, event);
+
+ if (strnstr(w->name, "VA MIC BIAS1", sizeof("VA MIC BIAS1")))
+ micb_num = MIC_BIAS_1;
+ else if (strnstr(w->name, "VA MIC BIAS2", sizeof("VA MIC BIAS2")))
+ micb_num = MIC_BIAS_2;
+ else if (strnstr(w->name, "VA MIC BIAS3", sizeof("VA MIC BIAS3")))
+ micb_num = MIC_BIAS_3;
+ else if (strnstr(w->name, "VA MIC BIAS4", sizeof("VA MIC BIAS4")))
+ micb_num = MIC_BIAS_4;
+ else
+ return -EINVAL;
+
+ switch (event) {
+ case SND_SOC_DAPM_PRE_PMU:
+ wcd938x_micbias_control(component, micb_num,
+ MICB_PULLUP_ENABLE, true);
+ break;
+ case SND_SOC_DAPM_POST_PMU:
+ /* 1 msec delay as per HW requirement */
+ usleep_range(1000, 1100);
+ break;
+ case SND_SOC_DAPM_POST_PMD:
+ wcd938x_micbias_control(component, micb_num,
+ MICB_PULLUP_DISABLE, true);
+ break;
+ };
+
+ return 0;
+
+}
+
+static int wcd938x_codec_enable_micbias_pullup(struct snd_soc_dapm_widget *w,
+ struct snd_kcontrol *kcontrol,
+ int event)
+{
+ return __wcd938x_codec_enable_micbias_pullup(w, event);
+}
+
static inline int wcd938x_tx_path_get(const char *wname,
unsigned int *path_num)
{
@@ -2364,6 +2411,24 @@
SND_SOC_DAPM_OUTPUT("AUX"),
SND_SOC_DAPM_OUTPUT("HPHL"),
SND_SOC_DAPM_OUTPUT("HPHR"),
+
+ /* micbias pull up widgets*/
+ SND_SOC_DAPM_MICBIAS_E("VA MIC BIAS1", SND_SOC_NOPM, 0, 0,
+ wcd938x_codec_enable_micbias_pullup,
+ SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU |
+ SND_SOC_DAPM_POST_PMD),
+ SND_SOC_DAPM_MICBIAS_E("VA MIC BIAS2", SND_SOC_NOPM, 0, 0,
+ wcd938x_codec_enable_micbias_pullup,
+ SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU |
+ SND_SOC_DAPM_POST_PMD),
+ SND_SOC_DAPM_MICBIAS_E("VA MIC BIAS3", SND_SOC_NOPM, 0, 0,
+ wcd938x_codec_enable_micbias_pullup,
+ SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU |
+ SND_SOC_DAPM_POST_PMD),
+ SND_SOC_DAPM_MICBIAS_E("VA MIC BIAS4", SND_SOC_NOPM, 0, 0,
+ wcd938x_codec_enable_micbias_pullup,
+ SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU |
+ SND_SOC_DAPM_POST_PMD),
};
static const struct snd_soc_dapm_route wcd938x_audio_map[] = {
@@ -2482,12 +2547,46 @@
.read = wcd938x_version_read,
};
+static ssize_t wcd938x_variant_read(struct snd_info_entry *entry,
+ void *file_private_data,
+ struct file *file,
+ char __user *buf, size_t count,
+ loff_t pos)
+{
+ struct wcd938x_priv *priv;
+ char buffer[WCD938X_VARIANT_ENTRY_SIZE];
+ int len = 0;
+
+ priv = (struct wcd938x_priv *) entry->private_data;
+ if (!priv) {
+ pr_err("%s: wcd938x priv is null\n", __func__);
+ return -EINVAL;
+ }
+
+ switch (priv->variant) {
+ case WCD9380:
+ len = snprintf(buffer, sizeof(buffer), "WCD9380\n");
+ break;
+ case WCD9385:
+ len = snprintf(buffer, sizeof(buffer), "WCD9385\n");
+ break;
+ default:
+ len = snprintf(buffer, sizeof(buffer), "VER_UNDEFINED\n");
+ }
+
+ return simple_read_from_buffer(buf, count, &pos, buffer, len);
+}
+
+static struct snd_info_entry_ops wcd938x_variant_ops = {
+ .read = wcd938x_variant_read,
+};
+
/*
* wcd938x_info_create_codec_entry - creates wcd938x module
* @codec_root: The parent directory
* @component: component instance
*
- * Creates wcd938x module and version entry under the given
+ * Creates wcd938x module, variant and version entry under the given
* parent directory.
*
* Return: 0 on success or negative error code on failure.
@@ -2496,6 +2595,7 @@
struct snd_soc_component *component)
{
struct snd_info_entry *version_entry;
+ struct snd_info_entry *variant_entry;
struct wcd938x_priv *priv;
struct snd_soc_card *card;
@@ -2536,6 +2636,26 @@
}
priv->version_entry = version_entry;
+ variant_entry = snd_info_create_card_entry(card->snd_card,
+ "variant",
+ priv->entry);
+ if (!variant_entry) {
+ dev_dbg(component->dev, "%s: failed to create wcd938x variant entry\n",
+ __func__);
+ return -ENOMEM;
+ }
+
+ variant_entry->private_data = priv;
+ variant_entry->size = WCD938X_VARIANT_ENTRY_SIZE;
+ variant_entry->content = SNDRV_INFO_CONTENT_DATA;
+ variant_entry->c.ops = &wcd938x_variant_ops;
+
+ if (snd_info_register(variant_entry) < 0) {
+ snd_info_free_entry(variant_entry);
+ return -ENOMEM;
+ }
+ priv->variant_entry = variant_entry;
+
return 0;
}
EXPORT_SYMBOL(wcd938x_info_create_codec_entry);
diff --git a/asoc/kona.c b/asoc/kona.c
index ee239e4..a8a64b2 100644
--- a/asoc/kona.c
+++ b/asoc/kona.c
@@ -699,10 +699,11 @@
.key_code[6] = 0,
.key_code[7] = 0,
.linein_th = 5000,
- .moisture_en = true,
+ .moisture_en = false,
.mbhc_micbias = MIC_BIAS_2,
.anc_micbias = MIC_BIAS_2,
.enable_anc_mic_detect = false,
+ .moisture_duty_cycle_en = true,
};
static inline int param_is_mask(int p)
diff --git a/asoc/msm-dai-q6-v2.c b/asoc/msm-dai-q6-v2.c
index f09d9e1..7cb2c0b 100644
--- a/asoc/msm-dai-q6-v2.c
+++ b/asoc/msm-dai-q6-v2.c
@@ -301,12 +301,19 @@
* 1: non-linear PCM
* 2: PCM data in IEC 60968 container
* 3: compressed data in IEC 60958 container
+ * 9: DSD over PCM (DoP) with marker byte
*/
static const char *const mi2s_format[] = {
"LPCM",
"Compr",
"LPCM-60958",
- "Compr-60958"
+ "Compr-60958",
+ "NA4",
+ "NA5",
+ "NA6",
+ "NA7",
+ "NA8",
+ "DSD_DOP_W_MARKER"
};
static const char *const mi2s_vi_feed_mono[] = {
@@ -315,7 +322,7 @@
};
static const struct soc_enum mi2s_config_enum[] = {
- SOC_ENUM_SINGLE_EXT(4, mi2s_format),
+ SOC_ENUM_SINGLE_EXT(10, mi2s_format),
SOC_ENUM_SINGLE_EXT(2, mi2s_vi_feed_mono),
};
diff --git a/asoc/msm-pcm-q6-noirq.c b/asoc/msm-pcm-q6-noirq.c
index b33eba3..5b97831 100644
--- a/asoc/msm-pcm-q6-noirq.c
+++ b/asoc/msm-pcm-q6-noirq.c
@@ -445,6 +445,8 @@
struct audio_port_data *apd;
struct audio_buffer *ab;
int dir = -1;
+ struct dma_buf *buf = NULL;
+ int rc = 0;
if (!substream->runtime) {
pr_err("%s substream runtime not found\n", __func__);
@@ -471,12 +473,25 @@
* used to call dma_buf_fd internally.
*/
mmap_fd->fd = dma_buf_fd(ab->dma_buf, O_CLOEXEC);
- if (mmap_fd->fd >= 0) {
- mmap_fd->dir = dir;
- mmap_fd->actual_size = ab->actual_size;
- mmap_fd->size = ab->size;
+ if (mmap_fd->fd < 0) {
+ pr_err("%s: dma_buf_fd failed, fd:%d\n",
+ __func__, mmap_fd->fd);
+ rc = -EFAULT;
+ goto buf_fd_fail;
}
- return mmap_fd->fd < 0 ? -EFAULT : 0;
+ mmap_fd->dir = dir;
+ mmap_fd->actual_size = ab->actual_size;
+ mmap_fd->size = ab->size;
+
+ buf = dma_buf_get(mmap_fd->fd);
+ if (IS_ERR_OR_NULL(buf)) {
+ pr_err("%s: dma_buf_get failed, fd:%d\n",
+ __func__, mmap_fd->fd);
+ rc = -EINVAL;
+ }
+
+buf_fd_fail:
+ return rc;
}
static int msm_pcm_ioctl(struct snd_pcm_substream *substream,
diff --git a/asoc/msm-pcm-routing-v2.c b/asoc/msm-pcm-routing-v2.c
index 1afa9ef..4ec63e3 100644
--- a/asoc/msm-pcm-routing-v2.c
+++ b/asoc/msm-pcm-routing-v2.c
@@ -3760,7 +3760,7 @@
msm_pcm_put_channel_rule_index),
SOC_SINGLE_EXT("MultiMedia1 Channels", SND_SOC_NOPM,
- MSM_FRONTEND_DAI_MULTIMEDIA1, 10, 0,
+ MSM_FRONTEND_DAI_MULTIMEDIA1, 14, 0,
msm_pcm_get_out_chs,
msm_pcm_put_out_chs),
SOC_SINGLE_EXT("MultiMedia2 Channels", SND_SOC_NOPM,
@@ -3922,6 +3922,46 @@
{
.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
.access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
+ .name = "MultiMedia1 Output Channel11",
+ .info = msm_pcm_channel_weight_info,
+ .get = msm_pcm_channel_weight_get,
+ .put = msm_pcm_channel_weight_put,
+ .private_value = (unsigned long)&(struct soc_multi_mixer_control)
+ { .shift = MSM_FRONTEND_DAI_MULTIMEDIA1, .rshift = 10,}
+ },
+ {
+ .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
+ .access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
+ .name = "MultiMedia1 Output Channel12",
+ .info = msm_pcm_channel_weight_info,
+ .get = msm_pcm_channel_weight_get,
+ .put = msm_pcm_channel_weight_put,
+ .private_value = (unsigned long)&(struct soc_multi_mixer_control)
+ { .shift = MSM_FRONTEND_DAI_MULTIMEDIA1, .rshift = 11,}
+ },
+ {
+ .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
+ .access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
+ .name = "MultiMedia1 Output Channel13",
+ .info = msm_pcm_channel_weight_info,
+ .get = msm_pcm_channel_weight_get,
+ .put = msm_pcm_channel_weight_put,
+ .private_value = (unsigned long)&(struct soc_multi_mixer_control)
+ { .shift = MSM_FRONTEND_DAI_MULTIMEDIA1, .rshift = 12,}
+ },
+ {
+ .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
+ .access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
+ .name = "MultiMedia1 Output Channel14",
+ .info = msm_pcm_channel_weight_info,
+ .get = msm_pcm_channel_weight_get,
+ .put = msm_pcm_channel_weight_put,
+ .private_value = (unsigned long)&(struct soc_multi_mixer_control)
+ { .shift = MSM_FRONTEND_DAI_MULTIMEDIA1, .rshift = 13,}
+ },
+ {
+ .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
+ .access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
.name = "MultiMedia2 Output Channel1",
.info = msm_pcm_channel_weight_info,
.get = msm_pcm_channel_weight_get,
diff --git a/asoc/qcs405.c b/asoc/qcs405.c
index 15fff2a..089930e 100644
--- a/asoc/qcs405.c
+++ b/asoc/qcs405.c
@@ -480,7 +480,8 @@
static const char *const auxpcm_rate_text[] = {"KHZ_8", "KHZ_16"};
static char const *mi2s_rate_text[] = {"KHZ_8", "KHZ_11P025", "KHZ_16",
"KHZ_22P05", "KHZ_32", "KHZ_44P1",
- "KHZ_48", "KHZ_96", "KHZ_192", "KHZ_384"};
+ "KHZ_48", "KHZ_88P2", "KHZ_96", "KHZ_176P4",
+ "KHZ_192", "KHZ_352P8", "KHZ_384"};
static const char *const mi2s_ch_text[] = {
"One", "Two", "Three", "Four", "Five", "Six", "Seven",
"Eight", "Nine", "Ten", "Eleven", "Twelve", "Thirteen",
@@ -2724,15 +2725,24 @@
case SAMPLING_RATE_48KHZ:
sample_rate_val = 6;
break;
- case SAMPLING_RATE_96KHZ:
+ case SAMPLING_RATE_88P2KHZ:
sample_rate_val = 7;
break;
- case SAMPLING_RATE_192KHZ:
+ case SAMPLING_RATE_96KHZ:
sample_rate_val = 8;
break;
- case SAMPLING_RATE_384KHZ:
+ case SAMPLING_RATE_176P4KHZ:
sample_rate_val = 9;
break;
+ case SAMPLING_RATE_192KHZ:
+ sample_rate_val = 10;
+ break;
+ case SAMPLING_RATE_352P8KHZ:
+ sample_rate_val = 11;
+ break;
+ case SAMPLING_RATE_384KHZ:
+ sample_rate_val = 12;
+ break;
default:
sample_rate_val = 6;
break;
@@ -2767,12 +2777,21 @@
sample_rate = SAMPLING_RATE_48KHZ;
break;
case 7:
- sample_rate = SAMPLING_RATE_96KHZ;
+ sample_rate = SAMPLING_RATE_88P2KHZ;
break;
case 8:
- sample_rate = SAMPLING_RATE_192KHZ;
+ sample_rate = SAMPLING_RATE_96KHZ;
break;
case 9:
+ sample_rate = SAMPLING_RATE_176P4KHZ;
+ break;
+ case 10:
+ sample_rate = SAMPLING_RATE_192KHZ;
+ break;
+ case 11:
+ sample_rate = SAMPLING_RATE_352P8KHZ;
+ break;
+ case 12:
sample_rate = SAMPLING_RATE_384KHZ;
break;
default:
diff --git a/dsp/q6afe.c b/dsp/q6afe.c
index e65fabe..6f4aece 100644
--- a/dsp/q6afe.c
+++ b/dsp/q6afe.c
@@ -1292,7 +1292,7 @@
afe_get_param.apr_hdr.hdr_field =
APR_HDR_FIELD(APR_MSG_TYPE_SEQ_CMD, APR_HDR_LEN(APR_HDR_SIZE),
APR_PKT_VER);
- afe_get_param.apr_hdr.pkt_size = sizeof(afe_get_param) + param_size;
+ afe_get_param.apr_hdr.pkt_size = sizeof(afe_get_param);
afe_get_param.apr_hdr.src_port = 0;
afe_get_param.apr_hdr.dest_port = 0;
afe_get_param.apr_hdr.token = index;
diff --git a/include/dsp/apr_audio-v2.h b/include/dsp/apr_audio-v2.h
index 68c491f..99b9a45 100644
--- a/include/dsp/apr_audio-v2.h
+++ b/include/dsp/apr_audio-v2.h
@@ -2539,6 +2539,7 @@
#define AFE_NON_LINEAR_DATA_PACKED_60958 0x3
#define AFE_GENERIC_COMPRESSED 0x8
#define AFE_LINEAR_PCM_DATA_PACKED_16BIT 0X6
+#define AFE_DSD_DOP_W_MARKER_DATA 0x9
/* This param id is used to configure I2S interface */
#define AFE_PARAM_ID_I2S_CONFIG 0x0001020D
@@ -2643,6 +2644,7 @@
* - #NON_LINEAR_DATA
* - #LINEAR_PCM_DATA_PACKED_IN_60958
* - #NON_LINEAR_DATA_PACKED_IN_60958
+ * - #AFE_DSD_DOP_W_MARKER_DATA
*/
u16 reserved;
/* This field must be set to zero. */