From f2b64bd0b2c1fcfb549a10054a538a7fb2f595c5 Mon Sep 17 00:00:00 2001 From: Nagarjuna Paladugu Date: Sat, 8 Jul 2023 15:37:02 -0400 Subject: [PATCH] asoc: Bringup audio kernel for Auto AR GVM makena and lemans audio kernel bringup changes for auto makena and lemans LAGVM Change-Id: If26f743a31ec68d51678d3fd2b409578bc98d2e1 Signed-off-by: Nagarjuna Paladugu --- Android.mk | 35 +- asoc/Kbuild | 14 + asoc/codecs/Kbuild | 5 + asoc/gvm_auto_spf_dummy.c | 803 ++++++++++++++++++++++++++++++++++ asoc/msm_dailink.h | 131 ++++++ audio_kernel_modules.mk | 7 + audio_kernel_product_board.mk | 7 + config/gvmauto.conf | 16 +- config/gvmautoconf.h | 16 +- 9 files changed, 1000 insertions(+), 34 deletions(-) create mode 100644 asoc/gvm_auto_spf_dummy.c diff --git a/Android.mk b/Android.mk index beb0f6afee..051de408a9 100644 --- a/Android.mk +++ b/Android.mk @@ -24,12 +24,11 @@ endif ifeq ($(ENABLE_AUDIO_LEGACY_TECHPACK),true) include $(call all-subdir-makefiles) +LOCAL_PATH := vendor/qcom/opensource/audio-kernel endif # Build/Package only in case of supported target -ifeq ($(call is-board-platform-in-list,taro kalama bengal pineapple holi blair), true) - -LOCAL_PATH := $(call my-dir) +ifeq ($(call is-board-platform-in-list,taro kalama bengal pineapple holi blair gen4 msmnile), true) # This makefile is only for DLKM ifneq ($(findstring vendor,$(LOCAL_PATH)),) @@ -54,16 +53,43 @@ KBUILD_OPTIONS += MODNAME=audio_dlkm KBUILD_OPTIONS += BOARD_PLATFORM=$(TARGET_BOARD_PLATFORM) KBUILD_OPTIONS += $(AUDIO_SELECT) -ifneq ($(call is-board-platform-in-list, bengal holi blair),true) +ifneq ($(call is-board-platform-in-list, bengal holi blair msmnile gen4),true) KBUILD_OPTIONS += KBUILD_EXTRA_SYMBOLS=$(PWD)/$(call intermediates-dir-for,DLKM,msm-ext-disp-module-symvers)/Module.symvers endif +ifeq ($(call is-board-platform-in-list, gen4 msmnile),true) +KBUILD_OPTIONS += CONFIG_SND_SOC_AUTO=y +ifneq (,$(filter $(TARGET_BOARD_PLATFORM)$(TARGET_BOARD_SUFFIX), gen4_gvm msmnile_gvmq)) +KBUILD_OPTIONS +=CONFIG_SND_SOC_GVM=y +endif +endif + AUDIO_SRC_FILES := \ $(wildcard $(LOCAL_PATH)/*) \ $(wildcard $(LOCAL_PATH)/*/*) \ $(wildcard $(LOCAL_PATH)/*/*/*) \ $(wildcard $(LOCAL_PATH)/*/*/*/*) +ifneq (,$(filter $(TARGET_BOARD_PLATFORM)$(TARGET_BOARD_SUFFIX), gen4_gvm msmnile_gvmq)) +include $(CLEAR_VARS) +LOCAL_SRC_FILES := $(AUDIO_SRC_FILES) +LOCAL_MODULE := stub_dlkm.ko +LOCAL_MODULE_KBUILD_NAME := asoc/codecs/stub_dlkm.ko +LOCAL_MODULE_TAGS := optional +LOCAL_MODULE_DEBUG_ENABLE := true +LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT) +include $(DLKM_DIR)/Build_external_kernelmodule.mk +########################### ASOC MACHINE ################################ +include $(CLEAR_VARS) +LOCAL_SRC_FILES := $(AUDIO_SRC_FILES) +LOCAL_MODULE := machine_dlkm.ko +LOCAL_MODULE_KBUILD_NAME := asoc/spf_machine_dlkm.ko +LOCAL_MODULE_TAGS := optional +LOCAL_MODULE_DEBUG_ENABLE := true +LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT) +include $(DLKM_DIR)/Build_external_kernelmodule.mk +########################### LPASS-CDC CODEC ########################### +else ########################### dsp ################################ include $(CLEAR_VARS) @@ -466,3 +492,4 @@ endif ########################################################## endif # DLKM check endif # supported target check +endif diff --git a/asoc/Kbuild b/asoc/Kbuild index 9811faea25..fe6677bcbc 100644 --- a/asoc/Kbuild +++ b/asoc/Kbuild @@ -24,6 +24,12 @@ ifeq ($(CONFIG_SND_SOC_AUTO), y) export INCS += -include $(AUDIO_ROOT)/config/sa6155autoconf.h endif + ifdef CONFIG_SND_SOC_GVM + include $(AUDIO_ROOT)/config/gvmauto.conf + export + INCS += -include $(AUDIO_ROOT)/config/gvmautoconf.h + endif + else ifeq ($(KERNEL_BUILD), 0) ifeq ($(CONFIG_ARCH_SM8150), y) @@ -218,6 +224,10 @@ ifdef CONFIG_SND_SOC_SDX MACHINE_OBJS += sdx-target.o endif +ifdef CONFIG_SND_SOC_GVM_AUTO_SPF + SPF_MACHINE_OBJS += gvm_auto_spf_dummy.o +endif + LINUX_INC += -Iinclude/linux INCS += $(COMMON_INC) \ @@ -299,5 +309,9 @@ machine_dlkm-y := $(MACHINE_OBJS) obj-$(CONFIG_SND_SOC_SDX) += machine_dlkm.o machine_dlkm-y := $(MACHINE_OBJS) +obj-$(CONFIG_SND_SOC_GVM_AUTO_SPF) += spf_machine_dlkm.o +spf_machine_dlkm-y := $(SPF_MACHINE_OBJS) + + # inject some build related information DEFINES += -DBUILD_TIMESTAMP=\"$(shell date -u +'%Y-%m-%dT%H:%M:%SZ')\" diff --git a/asoc/codecs/Kbuild b/asoc/codecs/Kbuild index a422acc1fd..246af4c0c4 100644 --- a/asoc/codecs/Kbuild +++ b/asoc/codecs/Kbuild @@ -24,6 +24,11 @@ ifeq ($(CONFIG_SND_SOC_AUTO), y) export INCS += -include $(AUDIO_ROOT)/config/sa6155autoconf.h endif + ifdef CONFIG_SND_SOC_GVM + include $(AUDIO_ROOT)/config/gvmauto.conf + export + INCS += -include $(AUDIO_ROOT)/config/gvmautoconf.h + endif else ifeq ($(KERNEL_BUILD), 0) ifeq ($(CONFIG_ARCH_SM8150), y) diff --git a/asoc/gvm_auto_spf_dummy.c b/asoc/gvm_auto_spf_dummy.c new file mode 100644 index 0000000000..d01222d0c0 --- /dev/null +++ b/asoc/gvm_auto_spf_dummy.c @@ -0,0 +1,803 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* Copyright (c) 2014-2021, The Linux Foundation. All rights reserved. + * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "msm_dailink.h" +#include +#include "msm_common.h" + + +#define DRV_NAME "spf-asoc-snd" + +#define __CHIPSET__ "SA8xx5 " +#define MSM_DAILINK_NAME(name) (__CHIPSET__#name) + +#define DEV_NAME_STR_LEN 32 + +#define SAMPLING_RATE_8KHZ 8000 +#define SAMPLING_RATE_11P025KHZ 11025 +#define SAMPLING_RATE_16KHZ 16000 +#define SAMPLING_RATE_22P05KHZ 22050 +#define SAMPLING_RATE_32KHZ 32000 +#define SAMPLING_RATE_44P1KHZ 44100 +#define SAMPLING_RATE_48KHZ 48000 +#define SAMPLING_RATE_88P2KHZ 88200 +#define SAMPLING_RATE_96KHZ 96000 +#define SAMPLING_RATE_176P4KHZ 176400 +#define SAMPLING_RATE_192KHZ 192000 +#define SAMPLING_RATE_352P8KHZ 352800 +#define SAMPLING_RATE_384KHZ 384000 + +#define WCD9XXX_MBHC_DEF_RLOADS 5 + +#define WSA8810_NAME_1 "wsa881x.20170211" +#define WSA8810_NAME_2 "wsa881x.20170212" +#define WCN_CDC_SLIM_RX_CH_MAX 2 +#define WCN_CDC_SLIM_TX_CH_MAX 3 +#define TDM_CHANNEL_MAX 8 + +#define ADSP_STATE_READY_TIMEOUT_MS 3000 +#define MSM_LL_QOS_VALUE 300 /* time in us to ensure LPM doesn't go in C3/C4 */ +#define MSM_HIFI_ON 1 +#define DIR_SZ 10 + +struct snd_card_pdata { + struct kobject snd_card_kobj; + int card_status; + } *snd_card_pdata; + +static struct attribute card_state_attr = { + .name = "card_state", + .mode = 0666, +}; + +enum { + SLIM_RX_0 = 0, + SLIM_RX_1, + SLIM_RX_2, + SLIM_RX_3, + SLIM_RX_4, + SLIM_RX_5, + SLIM_RX_6, + SLIM_RX_7, + SLIM_RX_MAX, +}; +enum { + SLIM_TX_0 = 0, + SLIM_TX_1, + SLIM_TX_2, + SLIM_TX_3, + SLIM_TX_4, + SLIM_TX_5, + SLIM_TX_6, + SLIM_TX_7, + SLIM_TX_8, + SLIM_TX_MAX, +}; + +enum { + PRIM_MI2S = 0, + SEC_MI2S, + TERT_MI2S, + QUAT_MI2S, + QUIN_MI2S, + MI2S_MAX, +}; + +enum { + PRIM_AUX_PCM = 0, + SEC_AUX_PCM, + TERT_AUX_PCM, + QUAT_AUX_PCM, + QUIN_AUX_PCM, + AUX_PCM_MAX, +}; + +struct mi2s_conf { + struct mutex lock; + u32 ref_cnt; + u32 msm_is_mi2s_master; +}; + +struct dev_config { + u32 sample_rate; + u32 bit_format; + u32 channels; +}; + +enum { + DP_RX_IDX = 0, + EXT_DISP_RX_IDX_MAX, +}; + +struct msm_wsa881x_dev_info { + struct device_node *of_node; + u32 index; +}; + +enum pinctrl_pin_state { + STATE_DISABLE = 0, /* All pins are in sleep state */ + STATE_MI2S_ACTIVE, /* IS2 = active, TDM = sleep */ + STATE_TDM_ACTIVE, /* IS2 = sleep, TDM = active */ +}; + +struct msm_pinctrl_info { + struct pinctrl *pinctrl; + struct pinctrl_state *mi2s_disable; + struct pinctrl_state *tdm_disable; + struct pinctrl_state *mi2s_active; + struct pinctrl_state *tdm_active; + enum pinctrl_pin_state curr_state; +}; + +enum { + TDM_0 = 0, + TDM_1, + TDM_2, + TDM_3, + TDM_4, + TDM_5, + TDM_6, + TDM_7, + TDM_PORT_MAX, +}; + +enum { + TDM_PRI = 0, + TDM_SEC, + TDM_TERT, + TDM_QUAT, + TDM_QUIN, + TDM_INTERFACE_MAX, +}; + +struct tdm_port { + u32 mode; + u32 channel; +}; + +struct tdm_conf { + struct mutex lock; + u32 ref_cnt; +}; + +struct msm_asoc_mach_data { + struct snd_info_entry *codec_root; + struct msm_common_pdata *common_pdata; + struct msm_pinctrl_info pinctrl_info; + struct device_node *us_euro_gpio_p; /* used by pinctrl API */ + struct device_node *hph_en1_gpio_p; /* used by pinctrl API */ + struct device_node *hph_en0_gpio_p; /* used by pinctrl API */ + struct device_node *fsa_handle; + struct snd_soc_codec *codec; + struct work_struct adsp_power_up_work; + struct tdm_conf tdm_intf_conf[TDM_INTERFACE_MAX]; +}; + +static const char *const pin_states[] = {"sleep", "i2s-active", + "tdm-active"}; + +static struct platform_device *spdev; + +static bool codec_reg_done; + +/* + * Need to report LINEIN + * if R/L channel impedance is larger than 5K ohm + */ + +static const struct snd_soc_dapm_widget msm_dapm_widgets[] = { + + SND_SOC_DAPM_MIC("Handset Mic", NULL), + SND_SOC_DAPM_MIC("Analog Mic3", NULL), + SND_SOC_DAPM_MIC("Analog Mic4", NULL), + + SND_SOC_DAPM_MIC("Digital Mic0", NULL), + SND_SOC_DAPM_MIC("Digital Mic1", NULL), + SND_SOC_DAPM_MIC("Digital Mic2", NULL), + SND_SOC_DAPM_MIC("Digital Mic3", NULL), + SND_SOC_DAPM_MIC("Digital Mic4", NULL), + SND_SOC_DAPM_MIC("Digital Mic5", NULL), + SND_SOC_DAPM_MIC("Digital Mic6", NULL), + SND_SOC_DAPM_MIC("Digital Mic7", NULL), +}; + +static struct snd_soc_dai_link msm_gvm_auto_dai_links[] = { + /* BackEnd DAI Links */ + { + .name = "PRI_TDM_RX_0_DUMMY", + .stream_name = "TDM-LPAIF-RX-PRIMARY", + .dpcm_playback = 1, + .trigger = {SND_SOC_DPCM_TRIGGER_POST, + SND_SOC_DPCM_TRIGGER_POST}, + .ignore_suspend = 1, + .ignore_pmdown_time = 1, + SND_SOC_DAILINK_REG(primary_tdm_rx_0_dummy), + }, + { + .name = "PRI_TDM_TX_0_DUMMY", + .stream_name = "TDM-LPAIF-TX-PRIMARY", + .dpcm_capture = 1, + .trigger = {SND_SOC_DPCM_TRIGGER_POST, + SND_SOC_DPCM_TRIGGER_POST}, + .ignore_suspend = 1, + .ignore_pmdown_time = 1, + SND_SOC_DAILINK_REG(primary_tdm_tx_0_dummy), + }, + { + .name = "SEC_TDM_RX_0_DUMMY", + .stream_name = "TDM-LPAIF-RX-SECONDARY", + .dpcm_playback = 1, + .trigger = {SND_SOC_DPCM_TRIGGER_POST, + SND_SOC_DPCM_TRIGGER_POST}, + .ignore_suspend = 1, + .ignore_pmdown_time = 1, + SND_SOC_DAILINK_REG(secondary_tdm_rx_0_dummy), + }, + { + .name = "SEC_TDM_TX_0_DUMMY", + .stream_name = "TDM-LPAIF-TX-SECONDARY", + .dpcm_capture = 1, + .trigger = {SND_SOC_DPCM_TRIGGER_POST, + SND_SOC_DPCM_TRIGGER_POST}, + .ignore_suspend = 1, + .ignore_pmdown_time = 1, + SND_SOC_DAILINK_REG(secondary_tdm_tx_0_dummy), + }, + { + .name = "TERT_TDM_RX_0_DUMMY", + .stream_name = "TDM-LPAIF-RX-TERTIARY", + .dpcm_playback = 1, + .trigger = {SND_SOC_DPCM_TRIGGER_POST, + SND_SOC_DPCM_TRIGGER_POST}, + .ignore_suspend = 1, + .ignore_pmdown_time = 1, + SND_SOC_DAILINK_REG(tert_tdm_rx_0_dummy), + }, + { + .name = "TERT_TDM_TX_0_DUMMY", + .stream_name = "TDM-LPAIF-TX-TERTIARY", + .dpcm_capture = 1, + .trigger = {SND_SOC_DPCM_TRIGGER_POST, + SND_SOC_DPCM_TRIGGER_POST}, + .ignore_suspend = 1, + .ignore_pmdown_time = 1, + SND_SOC_DAILINK_REG(tert_tdm_tx_0_dummy), + }, + { + .name = "QUAT_TDM_RX_0_DUMMY", + .stream_name = "TDM-LPAIF_RXTX-RX-PRIMARY", + .dpcm_playback = 1, + .trigger = {SND_SOC_DPCM_TRIGGER_POST, + SND_SOC_DPCM_TRIGGER_POST}, + .ignore_suspend = 1, + .ignore_pmdown_time = 1, + SND_SOC_DAILINK_REG(quat_tdm_rx_0_dummy), + }, + { + .name = "QUAT_TDM_TX_0_DUMMY", + .stream_name = "TDM-LPAIF_RXTX-TX-PRIMARY", + .dpcm_capture = 1, + .trigger = {SND_SOC_DPCM_TRIGGER_POST, + SND_SOC_DPCM_TRIGGER_POST}, + .ignore_suspend = 1, + .ignore_pmdown_time = 1, + SND_SOC_DAILINK_REG(quat_tdm_tx_0_dummy), + }, + { + .name = "QUIN_TDM_RX_0_DUMMY", + .stream_name = "TDM-LPAIF_VA-RX-PRIMARY", + .dpcm_playback = 1, + .trigger = {SND_SOC_DPCM_TRIGGER_POST, + SND_SOC_DPCM_TRIGGER_POST}, + .ignore_suspend = 1, + .ignore_pmdown_time = 1, + SND_SOC_DAILINK_REG(quin_tdm_rx_0_dummy), + }, + { + .name = "QUIN_TDM_TX_0_DUMMY", + .stream_name = "TDM-LPAIF_VA-TX-PRIMARY", + .dpcm_capture = 1, + .trigger = {SND_SOC_DPCM_TRIGGER_POST, + SND_SOC_DPCM_TRIGGER_POST}, + .ignore_suspend = 1, + .ignore_pmdown_time = 1, + SND_SOC_DAILINK_REG(quin_tdm_tx_0_dummy), + }, + { + .name = "SEN_TDM_RX_0_DUMMY", + .stream_name = "TDM-LPAIF_WSA-RX-PRIMARY", + .dpcm_playback = 1, + .trigger = {SND_SOC_DPCM_TRIGGER_POST, + SND_SOC_DPCM_TRIGGER_POST}, + .ignore_suspend = 1, + .ignore_pmdown_time = 1, + SND_SOC_DAILINK_REG(sen_tdm_rx_0_dummy), + }, + { + .name = "SEN_TDM_TX_0_DUMMY", + .stream_name = "TDM-LPAIF_WSA-TX-PRIMARY", + .dpcm_capture = 1, + .trigger = {SND_SOC_DPCM_TRIGGER_POST, + SND_SOC_DPCM_TRIGGER_POST}, + .ignore_suspend = 1, + .ignore_pmdown_time = 1, + SND_SOC_DAILINK_REG(sen_tdm_tx_0_dummy), + }, + { + .name = "SEP_TDM_RX_0_DUMMY", + .stream_name = "TDM-LPAIF_AUD-RX-PRIMARY", + .dpcm_playback = 1, + .trigger = {SND_SOC_DPCM_TRIGGER_POST, + SND_SOC_DPCM_TRIGGER_POST}, + .ignore_suspend = 1, + .ignore_pmdown_time = 1, + SND_SOC_DAILINK_REG(sep_tdm_rx_0_dummy), + }, + { + .name = "SEP_TDM_TX_0_DUMMY", + .stream_name = "TDM-LPAIF_AUD-TX-PRIMARY", + .dpcm_capture = 1, + .trigger = {SND_SOC_DPCM_TRIGGER_POST, + SND_SOC_DPCM_TRIGGER_POST}, + .ignore_suspend = 1, + .ignore_pmdown_time = 1, + SND_SOC_DAILINK_REG(sep_tdm_tx_0_dummy), + }, + { + .name = "OCT_TDM_RX_0_DUMMY", + .stream_name = "TDM-LPAIF_WSA2-RX-PRIMARY", + .dpcm_playback = 1, + .trigger = {SND_SOC_DPCM_TRIGGER_POST, + SND_SOC_DPCM_TRIGGER_POST}, + .ignore_suspend = 1, + .ignore_pmdown_time = 1, + SND_SOC_DAILINK_REG(oct_tdm_rx_0_dummy), + }, + { + .name = "OCT_TDM_TX_0_DUMMY", + .stream_name = "TDM-LPAIF_WSA2-TX-PRIMARY", + .dpcm_capture = 1, + .trigger = {SND_SOC_DPCM_TRIGGER_POST, + SND_SOC_DPCM_TRIGGER_POST}, + .ignore_suspend = 1, + .ignore_pmdown_time = 1, + SND_SOC_DAILINK_REG(oct_tdm_tx_0_dummy), + }, + { + .name = "HS_IF0_TDM_RX_0_DUMMY", + .stream_name = "TDM-LPAIF_SDR-RX-PRIMARY", + .dpcm_playback = 1, + .trigger = {SND_SOC_DPCM_TRIGGER_POST, + SND_SOC_DPCM_TRIGGER_POST}, + .ignore_suspend = 1, + .ignore_pmdown_time = 1, + SND_SOC_DAILINK_REG(hs_if0_tdm_rx_0_dummy), + }, + { + .name = "HS_IF0_TDM_TX_0_DUMMY", + .stream_name = "TDM-LPAIF_SDR-TX-PRIMARY", + .dpcm_capture = 1, + .trigger = {SND_SOC_DPCM_TRIGGER_POST, + SND_SOC_DPCM_TRIGGER_POST}, + .ignore_suspend = 1, + .ignore_pmdown_time = 1, + SND_SOC_DAILINK_REG(hs_if0_tdm_tx_0_dummy), + }, + { + .name = "HS_IF1_TDM_RX_0_DUMMY", + .stream_name = "TDM-LPAIF_SDR-RX-SECONDARY", + .dpcm_playback = 1, + .trigger = {SND_SOC_DPCM_TRIGGER_POST, + SND_SOC_DPCM_TRIGGER_POST}, + .ignore_suspend = 1, + .ignore_pmdown_time = 1, + SND_SOC_DAILINK_REG(hs_if1_tdm_rx_0_dummy), + }, + { + .name = "HS_IF1_TDM_TX_0_DUMMY", + .stream_name = "TDM-LPAIF_SDR-TX-SECONDARY", + .dpcm_capture = 1, + .trigger = {SND_SOC_DPCM_TRIGGER_POST, + SND_SOC_DPCM_TRIGGER_POST}, + .ignore_suspend = 1, + .ignore_pmdown_time = 1, + SND_SOC_DAILINK_REG(hs_if1_tdm_tx_0_dummy), + }, + { + .name = "HS_IF2_TDM_RX_0_DUMMY", + .stream_name = "TDM-LPAIF_SDR-RX-TERTIARY", + .dpcm_playback = 1, + .trigger = {SND_SOC_DPCM_TRIGGER_POST, + SND_SOC_DPCM_TRIGGER_POST}, + .ignore_suspend = 1, + .ignore_pmdown_time = 1, + SND_SOC_DAILINK_REG(hs_if2_tdm_rx_0_dummy), + }, + { + .name = "HS_IF2_TDM_TX_0_DUMMY", + .stream_name = "TDM-LPAIF_SDR-TX-TERTIARY", + .dpcm_capture = 1, + .trigger = {SND_SOC_DPCM_TRIGGER_POST, + SND_SOC_DPCM_TRIGGER_POST}, + .ignore_suspend = 1, + .ignore_pmdown_time = 1, + SND_SOC_DAILINK_REG(hs_if2_tdm_tx_0_dummy), + }, + { + .name = "HS_IF3_TDM_RX_0", + .stream_name = "TDM-LPAIF_SDR-RX-QUATERNARY", + .dpcm_playback = 1, + .trigger = {SND_SOC_DPCM_TRIGGER_POST, + SND_SOC_DPCM_TRIGGER_POST}, + .ignore_suspend = 1, + .ignore_pmdown_time = 1, + SND_SOC_DAILINK_REG(hs_if3_tdm_rx_0_dummy), + }, + { + .name = "HS_IF3_TDM_TX_0", + .stream_name = "TDM-LPAIF_SDR-TX-QUATERNARY", + .dpcm_capture = 1, + .trigger = {SND_SOC_DPCM_TRIGGER_POST, + SND_SOC_DPCM_TRIGGER_POST}, + .ignore_suspend = 1, + .ignore_pmdown_time = 1, + SND_SOC_DAILINK_REG(hs_if3_tdm_tx_0_dummy), + }, + { + .name = "HS_IF4_TDM_RX_0", + .stream_name = "TDM-LPAIF_SDR-RX-QUINARY", + .dpcm_playback = 1, + .trigger = {SND_SOC_DPCM_TRIGGER_POST, + SND_SOC_DPCM_TRIGGER_POST}, + .ignore_suspend = 1, + .ignore_pmdown_time = 1, + SND_SOC_DAILINK_REG(hs_if4_tdm_rx_0_dummy), + }, + { + .name = "HS_IF4_TDM_TX_0", + .stream_name = "TDM-LPAIF_SDR-TX-QUINARY", + .dpcm_capture = 1, + .trigger = {SND_SOC_DPCM_TRIGGER_POST, + SND_SOC_DPCM_TRIGGER_POST}, + .ignore_suspend = 1, + .ignore_pmdown_time = 1, + SND_SOC_DAILINK_REG(hs_if4_tdm_tx_0_dummy), + }, +}; + +int snd_card_notify_user(snd_card_status_t card_status) +{ + snd_card_pdata->card_status = card_status; + sysfs_notify(&snd_card_pdata->snd_card_kobj, NULL, "card_state"); + return 0; +} + +int snd_card_set_card_status(snd_card_status_t card_status) +{ + snd_card_pdata->card_status = card_status; + return 0; +} + +static ssize_t snd_card_sysfs_show(struct kobject *kobj, + struct attribute *attr, char *buf) +{ + /* Max length of buf is PAGE_SIZE */ + return sysfs_emit(buf, "%d\n", snd_card_pdata->card_status); +} + +static ssize_t snd_card_sysfs_store(struct kobject *kobj, + struct attribute *attr, const char *buf, size_t count) +{ + int result; + + result = kstrtoint (buf, 0, &snd_card_pdata->card_status); + if (result) + pr_err("%s: Failed to read buf result=%d\n", __func__, result); + + sysfs_notify(kobj, NULL, "card_state"); + return 0; +} + +static const struct sysfs_ops snd_card_sysfs_ops = { + .show = snd_card_sysfs_show, + .store = snd_card_sysfs_store, +}; + +static void snd_card_sysfs_release(struct kobject *kobj) +{ + kfree(snd_card_pdata); /* Free the memory */ +} + +static struct kobj_type snd_card_ktype = { + .release = snd_card_sysfs_release, + .sysfs_ops = &snd_card_sysfs_ops, +}; + +int snd_card_sysfs_init(void) +{ + int ret = 0; + char dir[DIR_SZ] = "snd_card"; + + snd_card_pdata = kcalloc(1, sizeof(struct snd_card_pdata), GFP_KERNEL); + if (!snd_card_pdata) + return -ENOMEM; + + /* kernel_kobj is the kobject of /sys/kernel/ */ + ret = kobject_init_and_add(&snd_card_pdata->snd_card_kobj, &snd_card_ktype, + kernel_kobj, dir); + + if (ret < 0) { + pr_err("%s: Failed to init and add kobject %s, err = %d\n", + __func__, dir, ret); + goto fail; + } + + ret = sysfs_create_file(&snd_card_pdata->snd_card_kobj, &card_state_attr); + if (ret < 0) { + pr_err("%s: Failed to add snd_card sysfs entry to %s\n", + __func__, dir); + goto fail; + } + + return ret; + +fail: + kobject_put(&snd_card_pdata->snd_card_kobj); + return ret; +} + +struct snd_soc_card snd_soc_card_gvm_auto_dummy_msm; + +static int msm_populate_dai_link_component_of_node( + struct snd_soc_card *card) +{ + int i, j, index, ret = 0; + struct device *cdev = card->dev; + struct snd_soc_dai_link *dai_link = card->dai_link; + struct device_node *np; + + if (!cdev) { + pr_err("%s: Sound card device memory NULL\n", __func__); + return -ENODEV; + } + + for (i = 0; i < card->num_links; i++) { + if (dai_link[i].platforms->of_node && dai_link[i].cpus->of_node) + continue; + + /* populate cpu_of_node for snd card dai links */ + if (dai_link[i].cpus->dai_name && !dai_link[i].cpus->of_node) { + index = of_property_match_string(cdev->of_node, + "asoc-cpu-names", + dai_link[i].cpus->dai_name); + pr_err("%s: retrieving cpu_of_node for %s\n", + __func__, + dai_link[i].cpus->dai_name); + if (index >= 0) { + np = of_parse_phandle(cdev->of_node, "asoc-cpu", + index); + if (!np) { + pr_err("%s: retrieving phandle for cpu dai %s failed\n", + __func__, + dai_link[i].cpus->dai_name); + ret = -ENODEV; + goto err; + } + dai_link[i].cpus->of_node = np; + dai_link[i].cpus->dai_name = NULL; + } + } + + /* populate codec_of_node for snd card dai links */ + if (dai_link[i].num_codecs > 0) { + for (j = 0; j < dai_link[i].num_codecs; j++) { + if (dai_link[i].codecs[j].of_node || + !dai_link[i].codecs[j].name) + continue; + + index = of_property_match_string(cdev->of_node, + "asoc-codec-names", + dai_link[i].codecs[j].name); + if (index < 0) + continue; + np = of_parse_phandle(cdev->of_node, + "asoc-codec", + index); + if (!np) { + pr_err("%s: retrieving phandle for codec %s failed\n", + __func__, dai_link[i].codecs[j].name); + ret = -ENODEV; + goto err; + } + dai_link[i].codecs[j].of_node = np; + dai_link[i].codecs[j].name = NULL; + } + } + } + +err: + return ret; +} + +static const struct of_device_id gvm_asoc_machine_of_match[] = { + { .compatible = "qcom,8155-spf-asoc-snd-adp-star", + .data = "adp_star_codec"}, + { .compatible = "qcom,6155-spf-asoc-snd-adp-star", + .data = "adp_star_codec"}, + { .compatible = "qcom,gvm-auto-spf-asoc-snd-adp-star", + .data = "adp_star_codec"}, + {}, +}; + +static struct snd_soc_card *populate_snd_card_dailinks(struct device *dev) +{ + struct snd_soc_card *card = NULL; + const struct of_device_id *match = NULL; + + match = of_match_node(gvm_asoc_machine_of_match, dev->of_node); + if (!match) { + dev_err(dev, "%s: No DT match found for sound card\n", + __func__); + return NULL; + } + + card = &snd_soc_card_gvm_auto_dummy_msm; + + if (!strcmp(match->compatible, "qcom,gvm-auto-spf-asoc-snd-adp-star")) { + card->dai_link = msm_gvm_auto_dai_links; + card->num_links = ARRAY_SIZE(msm_gvm_auto_dai_links); + } + + return card; +} + +struct msm_common_pdata *msm_common_get_pdata(struct snd_soc_card *card) +{ + struct msm_asoc_mach_data *pdata = snd_soc_card_get_drvdata(card); + + if (!pdata) + return NULL; + + return pdata->common_pdata; +} + +void msm_common_set_pdata(struct snd_soc_card *card, + struct msm_common_pdata *common_pdata) +{ + struct msm_asoc_mach_data *pdata = snd_soc_card_get_drvdata(card); + + if (!pdata) + return; + + pdata->common_pdata = common_pdata; +} + +static int msm_asoc_machine_probe(struct platform_device *pdev) +{ + struct snd_soc_card *card; + struct msm_asoc_mach_data *pdata; + int ret; + + pr_debug("%s: DRIVER Audio Init\n", __func__); + + if (!pdev->dev.of_node) { + dev_err(&pdev->dev, "No platform supplied from device tree\n"); + return -EINVAL; + } + + pdata = devm_kzalloc(&pdev->dev, + sizeof(struct msm_asoc_mach_data), GFP_KERNEL); + if (!pdata) + return -ENOMEM; + + card = populate_snd_card_dailinks(&pdev->dev); + if (!card) { + dev_err(&pdev->dev, "%s: Card uninitialized\n", __func__); + ret = -EINVAL; + return ret; + } + card->dev = &pdev->dev; + platform_set_drvdata(pdev, card); + snd_soc_card_set_drvdata(card, pdata); + + ret = snd_soc_of_parse_card_name(card, "qcom,model"); + if (ret) { + dev_err(&pdev->dev, "parse card name failed, err:%d\n", + ret); + return ret; + } + + ret = msm_populate_dai_link_component_of_node(card); + if (ret) { + ret = -EPROBE_DEFER; + return ret; + } + + ret = devm_snd_soc_register_card(&pdev->dev, card); + + if (ret == -EPROBE_DEFER) { + if (codec_reg_done) + ret = -EINVAL; + return ret; + } else if (ret) { + dev_err(&pdev->dev, "snd_soc_register_card failed (%d)\n", + ret); + pr_err("snd_soc_register_card failed (%d)\n", + ret); + return ret; + } + dev_info(&pdev->dev, "Sound card %s registered\n", card->name); + pr_err("Sound card %s registered\n", card->name); + + pr_debug("%s: DRIVER Audio Ready\n", __func__); + + spdev = pdev; + + ret = snd_card_sysfs_init(); + if (ret) + pr_err("snd_card_sysfs_init fail, ret=%d\n", ret); + + ret = snd_card_set_card_status(SND_CARD_STATUS_ONLINE); + if (ret) + pr_err("snd_card_set_card_status fail, ret=%d\n", ret); + + return 0; +} + +static int msm_asoc_machine_remove(struct platform_device *pdev) +{ + /* kobject_put decrease the kref count, once the count reaches 0. + * Kobject core will automatically clean up the memory allocated by kobject. + * The snd_card_sysfs_release release will help clean up memory allocated by us + */ + kobject_put(&snd_card_pdata->snd_card_kobj); + return 0; +} + +static struct platform_driver gvm_asoc_machine_driver = { + .driver = { + .name = DRV_NAME, + .pm = &snd_soc_pm_ops, + .of_match_table = gvm_asoc_machine_of_match, + }, + .probe = msm_asoc_machine_probe, + .remove = msm_asoc_machine_remove, +}; + +int __init gvm_auto_spf_init(void) +{ + return platform_driver_register(&gvm_asoc_machine_driver); +} + +void gvm_auto_spf_exit(void) +{ + platform_driver_unregister(&gvm_asoc_machine_driver); +} + +module_init(gvm_auto_spf_init); +module_exit(gvm_auto_spf_exit); + +MODULE_DESCRIPTION("ALSA SoC Machine Driver for SPF"); +MODULE_LICENSE("GPL"); +MODULE_ALIAS("platform:" DRV_NAME); +MODULE_DEVICE_TABLE(of, gvm_asoc_machine_of_match); diff --git a/asoc/msm_dailink.h b/asoc/msm_dailink.h index f25d53fe90..6fd2eb861a 100644 --- a/asoc/msm_dailink.h +++ b/asoc/msm_dailink.h @@ -409,3 +409,134 @@ SND_SOC_DAILINK_DEFS(pcm_dummy_tx1, DAILINK_COMP_ARRAY(COMP_CPU("snd-soc-dummy-dai")), DAILINK_COMP_ARRAY(COMP_DUMMY()), DAILINK_COMP_ARRAY(COMP_PLATFORM("snd-soc-dummy"))); + +SND_SOC_DAILINK_DEFS(primary_tdm_rx_0_dummy, + DAILINK_COMP_ARRAY(COMP_CPU("snd-soc-dummy-dai")), + DAILINK_COMP_ARRAY(COMP_CODEC("msm-stub-codec.1", "msm-stub-rx")), + DAILINK_COMP_ARRAY(COMP_PLATFORM("snd-soc-dummy"))); + +SND_SOC_DAILINK_DEFS(primary_tdm_tx_0_dummy, + DAILINK_COMP_ARRAY(COMP_CPU("snd-soc-dummy-dai")), + DAILINK_COMP_ARRAY(COMP_CODEC("msm-stub-codec.1", "msm-stub-tx")), + DAILINK_COMP_ARRAY(COMP_PLATFORM("snd-soc-dummy"))); + +SND_SOC_DAILINK_DEFS(secondary_tdm_rx_0_dummy, + DAILINK_COMP_ARRAY(COMP_CPU("snd-soc-dummy-dai")), + DAILINK_COMP_ARRAY(COMP_CODEC("msm-stub-codec.1", "msm-stub-rx")), + DAILINK_COMP_ARRAY(COMP_PLATFORM("snd-soc-dummy"))); + +SND_SOC_DAILINK_DEFS(secondary_tdm_tx_0_dummy, + DAILINK_COMP_ARRAY(COMP_CPU("snd-soc-dummy-dai")), + DAILINK_COMP_ARRAY(COMP_CODEC("msm-stub-codec.1", "msm-stub-tx")), + DAILINK_COMP_ARRAY(COMP_PLATFORM("snd-soc-dummy"))); + +SND_SOC_DAILINK_DEFS(tert_tdm_rx_0_dummy, + DAILINK_COMP_ARRAY(COMP_CPU("snd-soc-dummy-dai")), + DAILINK_COMP_ARRAY(COMP_CODEC("msm-stub-codec.1", "msm-stub-rx")), + DAILINK_COMP_ARRAY(COMP_PLATFORM("snd-soc-dummy"))); + +SND_SOC_DAILINK_DEFS(tert_tdm_tx_0_dummy, + DAILINK_COMP_ARRAY(COMP_CPU("snd-soc-dummy-dai")), + DAILINK_COMP_ARRAY(COMP_CODEC("msm-stub-codec.1", "msm-stub-tx")), + DAILINK_COMP_ARRAY(COMP_PLATFORM("snd-soc-dummy"))); + +SND_SOC_DAILINK_DEFS(quat_tdm_rx_0_dummy, + DAILINK_COMP_ARRAY(COMP_CPU("snd-soc-dummy-dai")), + DAILINK_COMP_ARRAY(COMP_CODEC("msm-stub-codec.1", "msm-stub-rx")), + DAILINK_COMP_ARRAY(COMP_PLATFORM("snd-soc-dummy"))); + +SND_SOC_DAILINK_DEFS(quat_tdm_tx_0_dummy, + DAILINK_COMP_ARRAY(COMP_CPU("snd-soc-dummy-dai")), + DAILINK_COMP_ARRAY(COMP_CODEC("msm-stub-codec.1", "msm-stub-tx")), + DAILINK_COMP_ARRAY(COMP_PLATFORM("snd-soc-dummy"))); + +SND_SOC_DAILINK_DEFS(quin_tdm_rx_0_dummy, + DAILINK_COMP_ARRAY(COMP_CPU("snd-soc-dummy-dai")), + DAILINK_COMP_ARRAY(COMP_CODEC("msm-stub-codec.1", "msm-stub-rx")), + DAILINK_COMP_ARRAY(COMP_PLATFORM("snd-soc-dummy"))); + +SND_SOC_DAILINK_DEFS(quin_tdm_tx_0_dummy, + DAILINK_COMP_ARRAY(COMP_CPU("snd-soc-dummy-dai")), + DAILINK_COMP_ARRAY(COMP_CODEC("msm-stub-codec.1", "msm-stub-tx")), + DAILINK_COMP_ARRAY(COMP_PLATFORM("snd-soc-dummy"))); + +SND_SOC_DAILINK_DEFS(sen_tdm_rx_0_dummy, + DAILINK_COMP_ARRAY(COMP_CPU("snd-soc-dummy-dai")), + DAILINK_COMP_ARRAY(COMP_CODEC("msm-stub-codec.1", "msm-stub-rx")), + DAILINK_COMP_ARRAY(COMP_PLATFORM("snd-soc-dummy"))); + +SND_SOC_DAILINK_DEFS(sen_tdm_tx_0_dummy, + DAILINK_COMP_ARRAY(COMP_CPU("snd-soc-dummy-dai")), + DAILINK_COMP_ARRAY(COMP_CODEC("msm-stub-codec.1", "msm-stub-tx")), + DAILINK_COMP_ARRAY(COMP_PLATFORM("snd-soc-dummy"))); + +SND_SOC_DAILINK_DEFS(sep_tdm_rx_0_dummy, + DAILINK_COMP_ARRAY(COMP_CPU("snd-soc-dummy-dai")), + DAILINK_COMP_ARRAY(COMP_CODEC("msm-stub-codec.1", "msm-stub-rx")), + DAILINK_COMP_ARRAY(COMP_PLATFORM("snd-soc-dummy"))); + +SND_SOC_DAILINK_DEFS(sep_tdm_tx_0_dummy, + DAILINK_COMP_ARRAY(COMP_CPU("snd-soc-dummy-dai")), + DAILINK_COMP_ARRAY(COMP_CODEC("msm-stub-codec.1", "msm-stub-tx")), + DAILINK_COMP_ARRAY(COMP_PLATFORM("snd-soc-dummy"))); + +SND_SOC_DAILINK_DEFS(oct_tdm_rx_0_dummy, + DAILINK_COMP_ARRAY(COMP_CPU("snd-soc-dummy-dai")), + DAILINK_COMP_ARRAY(COMP_CODEC("msm-stub-codec.1", "msm-stub-rx")), + DAILINK_COMP_ARRAY(COMP_PLATFORM("snd-soc-dummy"))); + +SND_SOC_DAILINK_DEFS(oct_tdm_tx_0_dummy, + DAILINK_COMP_ARRAY(COMP_CPU("snd-soc-dummy-dai")), + DAILINK_COMP_ARRAY(COMP_CODEC("msm-stub-codec.1", "msm-stub-tx")), + DAILINK_COMP_ARRAY(COMP_PLATFORM("snd-soc-dummy"))); + +SND_SOC_DAILINK_DEFS(hs_if0_tdm_rx_0_dummy, + DAILINK_COMP_ARRAY(COMP_CPU("snd-soc-dummy-dai")), + DAILINK_COMP_ARRAY(COMP_CODEC("msm-stub-codec.1", "msm-stub-rx")), + DAILINK_COMP_ARRAY(COMP_PLATFORM("snd-soc-dummy"))); + +SND_SOC_DAILINK_DEFS(hs_if0_tdm_tx_0_dummy, + DAILINK_COMP_ARRAY(COMP_CPU("snd-soc-dummy-dai")), + DAILINK_COMP_ARRAY(COMP_CODEC("msm-stub-codec.1", "msm-stub-tx")), + DAILINK_COMP_ARRAY(COMP_PLATFORM("snd-soc-dummy"))); + +SND_SOC_DAILINK_DEFS(hs_if1_tdm_rx_0_dummy, + DAILINK_COMP_ARRAY(COMP_CPU("snd-soc-dummy-dai")), + DAILINK_COMP_ARRAY(COMP_CODEC("msm-stub-codec.1", "msm-stub-rx")), + DAILINK_COMP_ARRAY(COMP_PLATFORM("snd-soc-dummy"))); + +SND_SOC_DAILINK_DEFS(hs_if1_tdm_tx_0_dummy, + DAILINK_COMP_ARRAY(COMP_CPU("snd-soc-dummy-dai")), + DAILINK_COMP_ARRAY(COMP_CODEC("msm-stub-codec.1", "msm-stub-tx")), + DAILINK_COMP_ARRAY(COMP_PLATFORM("snd-soc-dummy"))); + +SND_SOC_DAILINK_DEFS(hs_if2_tdm_rx_0_dummy, + DAILINK_COMP_ARRAY(COMP_CPU("snd-soc-dummy-dai")), + DAILINK_COMP_ARRAY(COMP_CODEC("msm-stub-codec.1", "msm-stub-rx")), + DAILINK_COMP_ARRAY(COMP_PLATFORM("snd-soc-dummy"))); + +SND_SOC_DAILINK_DEFS(hs_if2_tdm_tx_0_dummy, + DAILINK_COMP_ARRAY(COMP_CPU("snd-soc-dummy-dai")), + DAILINK_COMP_ARRAY(COMP_CODEC("msm-stub-codec.1", "msm-stub-tx")), + DAILINK_COMP_ARRAY(COMP_PLATFORM("snd-soc-dummy"))); + +SND_SOC_DAILINK_DEFS(hs_if3_tdm_rx_0_dummy, + DAILINK_COMP_ARRAY(COMP_CPU("snd-soc-dummy-dai")), + DAILINK_COMP_ARRAY(COMP_CODEC("msm-stub-codec.1", "msm-stub-rx")), + DAILINK_COMP_ARRAY(COMP_PLATFORM("snd-soc-dummy"))); + +SND_SOC_DAILINK_DEFS(hs_if3_tdm_tx_0_dummy, + DAILINK_COMP_ARRAY(COMP_CPU("snd-soc-dummy-dai")), + DAILINK_COMP_ARRAY(COMP_CODEC("msm-stub-codec.1", "msm-stub-tx")), + DAILINK_COMP_ARRAY(COMP_PLATFORM("snd-soc-dummy"))); + +SND_SOC_DAILINK_DEFS(hs_if4_tdm_rx_0_dummy, + DAILINK_COMP_ARRAY(COMP_CPU("snd-soc-dummy-dai")), + DAILINK_COMP_ARRAY(COMP_CODEC("msm-stub-codec.1", "msm-stub-rx")), + DAILINK_COMP_ARRAY(COMP_PLATFORM("snd-soc-dummy"))); + +SND_SOC_DAILINK_DEFS(hs_if4_tdm_tx_0_dummy, + DAILINK_COMP_ARRAY(COMP_CPU("snd-soc-dummy-dai")), + DAILINK_COMP_ARRAY(COMP_CODEC("msm-stub-codec.1", "msm-stub-tx")), + DAILINK_COMP_ARRAY(COMP_PLATFORM("snd-soc-dummy"))); + diff --git a/audio_kernel_modules.mk b/audio_kernel_modules.mk index d6ec05729c..72111b450a 100644 --- a/audio_kernel_modules.mk +++ b/audio_kernel_modules.mk @@ -61,5 +61,12 @@ AUDIO_KERNEL_MODULES += $(KERNEL_MODULES_OUT)/wcd938x_dlkm.ko \ $(KERNEL_MODULES_OUT)/wcd938x_slave_dlkm.ko endif endif +else +ifeq ($(call is-board-platform-in-list, gen4 msmnile), true) +ifneq (,$(filter $(TARGET_BOARD_PLATFORM)$(TARGET_BOARD_SUFFIX), gen4_gvm msmnile_gvmq)) +AUDIO_KERNEL_MODULES += $(KERNEL_MODULES_OUT)/machine_dlkm.ko\ + $(KERNEL_MODULES_OUT)/stub_dlkm.ko +endif #msmnile +endif endif endif diff --git a/audio_kernel_product_board.mk b/audio_kernel_product_board.mk index 97f2ece55e..80feb37462 100644 --- a/audio_kernel_product_board.mk +++ b/audio_kernel_product_board.mk @@ -47,3 +47,10 @@ ifeq ($(call is-board-platform-in-list, holi blair), true) PRODUCT_PACKAGES += $(KERNEL_MODULES_OUT)/wcd938x_dlkm.ko \ $(KERNEL_MODULES_OUT)/wcd938x_slave_dlkm.ko endif + +ifeq ($(call is-board-platform-in-list, gen4 msmnile), true) +ifneq (,$(filter $(TARGET_BOARD_PLATFORM)$(TARGET_BOARD_SUFFIX), gen4_gvm msmnile_gvmq)) +PRODUCT_PACKAGES += $(KERNEL_MODULES_OUT)/machine_dlkm.ko \ + $(KERNEL_MODULES_OUT)/stub_dlkm.ko +endif #msmnile +endif diff --git a/config/gvmauto.conf b/config/gvmauto.conf index 4597bf80ae..59f06a0b03 100644 --- a/config/gvmauto.conf +++ b/config/gvmauto.conf @@ -1,16 +1,2 @@ -CONFIG_MSM_QDSP6_APRV2_VM=m -CONFIG_MSM_QDSP6_SSR=m -CONFIG_MSM_ADSP_LOADER=m -CONFIG_MSM_QDSP6_NOTIFIER=m -CONFIG_SND_SOC_MSM_QDSP6V2_VM=m -CONFIG_SND_SOC_QDSP6V2=m -CONFIG_QTI_PP=m -CONFIG_SND_HWDEP_ROUTING=m -CONFIG_DTS_EAGLE=m -CONFIG_DOLBY_DS2=m -CONFIG_DOLBY_LICENSE=m CONFIG_SND_SOC_MSM_STUB=m -CONFIG_SND_SOC_MSM_HDMI_CODEC_RX=m -CONFIG_MSM_QDSP6V2_CODECS=m -CONFIG_SND_EVENT=m -CONFIG_SND_SOC_SA8155=m +CONFIG_SND_SOC_GVM_AUTO_SPF=m \ No newline at end of file diff --git a/config/gvmautoconf.h b/config/gvmautoconf.h index 2feb744f9a..f33b4b4138 100644 --- a/config/gvmautoconf.h +++ b/config/gvmautoconf.h @@ -10,19 +10,5 @@ * GNU General Public License for more details. */ -#define CONFIG_MSM_QDSP6_APRV2_VM 1 -#define CONFIG_MSM_ADSP_LOADER 1 -#define CONFIG_MSM_QDSP6_SSR 1 -#define CONFIG_MSM_QDSP6_NOTIFIER 1 -#define CONFIG_SND_SOC_MSM_QDSP6V2_VM 1 -#define CONFIG_SND_SOC_QDSP6V2 1 -#define CONFIG_QTI_PP 1 -#define CONFIG_SND_HWDEP_ROUTING 1 -#define CONFIG_DTS_EAGLE 1 -#define CONFIG_DOLBY_DS2 1 -#define CONFIG_DOLBY_LICENSE 1 +#define CONFIG_SND_SOC_GVM_AUTO_SPF 1 #define CONFIG_SND_SOC_MSM_STUB 1 -#define CONFIG_SND_SOC_MSM_HDMI_CODEC_RX 1 -#define CONFIG_MSM_QDSP6V2_CODECS 1 -#define CONFIG_SND_EVENT 1 -#define CONFIG_SND_SOC_SA8155 1