Merge "ASoC: remove error prints and warning at bootup log"
diff --git a/Android.mk b/Android.mk
index 18e9263..a95c0da 100644
--- a/Android.mk
+++ b/Android.mk
@@ -6,6 +6,13 @@
ifeq ($(call is-board-platform-in-list,sdm845 sdm670 qcs605),true)
$(shell mkdir -p $(UAPI_OUT)/linux;)
$(shell mkdir -p $(UAPI_OUT)/sound;)
+$(shell rm -rf $(OUT)/obj/vendor/qcom/opensource/audio-kernel/ipc/Module.symvers)
+$(shell rm -rf $(OUT)/obj/vendor/qcom/opensource/audio-kernel/dsp/Module.symvers)
+$(shell rm -rf $(OUT)/obj/vendor/qcom/opensource/audio-kernel/dsp/codecs/Module.symvers)
+$(shell rm -rf $(OUT)/obj/vendor/qcom/opensource/audio-kernel/soc/Module.symvers)
+$(shell rm -rf $(OUT)/obj/vendor/qcom/opensource/audio-kernel/asoc/Module.symvers)
+$(shell rm -rf $(OUT)/obj/vendor/qcom/opensource/audio-kernel/asoc/codecs/Module.symvers)
+$(shell rm -rf $(OUT)/obj/vendor/qcom/opensource/audio-kernel/asoc/codecs/wcd934x/Module.symvers)
include $(MY_LOCAL_PATH)/ipc/Android.mk
include $(MY_LOCAL_PATH)/dsp/Android.mk
@@ -17,6 +24,8 @@
endif
ifeq ($(call is-board-platform-in-list,sdm670 qcs605),true)
+$(shell rm -rf $(OUT)/obj/vendor/qcom/opensource/audio-kernel/asoc/codecs/sdm660_cdc/Module.symvers)
+$(shell rm -rf $(OUT)/obj/vendor/qcom/opensource/audio-kernel/asoc/codecs/msm_sdw/Module.symvers)
include $(MY_LOCAL_PATH)/asoc/codecs/sdm660_cdc/Android.mk
include $(MY_LOCAL_PATH)/asoc/codecs/msm_sdw/Android.mk
endif
diff --git a/Makefile b/Makefile
index de65a18..2848799 100644
--- a/Makefile
+++ b/Makefile
@@ -4,7 +4,7 @@
export
endif
ifeq ($(CONFIG_ARCH_SDM670), y)
-include $(srctree)/techpack/audio/config/sdm670auto.conf
+include $(srctree)/techpack/audio/config/sdm670auto_static.conf
export
endif
ifeq ($(CONFIG_ARCH_SDXPOORWILLS), y)
diff --git a/asoc/Kbuild b/asoc/Kbuild
index eb32e88..e5b8514 100644
--- a/asoc/Kbuild
+++ b/asoc/Kbuild
@@ -1,22 +1,32 @@
# We can build either as part of a standalone Kernel build or as
# an external module. Determine which mechanism is being used
-KERNEL_BUILD := 0
+ifeq ($(MODNAME),)
+ KERNEL_BUILD := 1
+else
+ KERNEL_BUILD := 0
+endif
-ifeq ($(KERNEL_BUILD), 0)
+ifeq ($(KERNEL_BUILD), 1)
# These are configurable via Kconfig for kernel-based builds
# Need to explicitly configure for Android-based builds
+ AUDIO_BLD_DIR := $(ANDROID_BUILD_TOP)/kernel/msm-4.9
+ AUDIO_ROOT := $(AUDIO_BLD_DIR)/techpack/audio
+endif
+
+ifeq ($(KERNEL_BUILD), 0)
ifeq ($(CONFIG_ARCH_SDM845), y)
include $(AUDIO_ROOT)/config/sdm845auto.conf
export
+ INCS += -include $(AUDIO_ROOT)/config/sdm845autoconf.h
endif
ifeq ($(CONFIG_ARCH_SDM670), y)
include $(AUDIO_ROOT)/config/sdm670auto.conf
export
+ INCS += -include $(AUDIO_ROOT)/config/sdm670autoconf.h
endif
endif
-
# As per target team, build is done as follows:
# Defconfig : build with default flags
# Slub : defconfig + CONFIG_SLUB_DEBUG := y +
@@ -45,31 +55,31 @@
# for SDM6xx sound card driver
-ifeq ($(CONFIG_SND_SOC_SDM670), m)
+ifdef CONFIG_SND_SOC_SDM670
MACHINE_OBJS += sdm660-common.o
endif
# for SDM6xx sound card driver
-ifeq ($(CONFIG_SND_SOC_INT_CODEC), m)
+ifdef CONFIG_SND_SOC_INT_CODEC
MACHINE_OBJS += sdm660-internal.o
endif
# for SDM6xx sound card driver
-ifeq ($(CONFIG_SND_SOC_EXT_CODEC), m)
+ifdef CONFIG_SND_SOC_EXT_CODEC
MACHINE_OBJS += sdm660-external.o
MACHINE_OBJS += sdm660-ext-dai-links.o
endif
# for SDM845 sound card driver
-ifeq ($(CONFIG_SND_SOC_MACHINE_SDM845), m)
+ifdef CONFIG_SND_SOC_MACHINE_SDM845
MACHINE_OBJS += sdm845.o
endif
-ifeq ($(CONFIG_SND_SOC_CPE), m)
+ifdef CONFIG_SND_SOC_CPE
CPE_LSM_OBJS += msm-cpe-lsm.o
endif
-ifeq ($(CONFIG_SND_SOC_QDSP6V2), m)
+ifdef CONFIG_SND_SOC_QDSP6V2
PLATFORM_OBJS += msm-audio-effects-q6-v2.o
PLATFORM_OBJS += msm-compress-q6-v2.o
PLATFORM_OBJS += msm-dai-fe.o
@@ -77,7 +87,6 @@
PLATFORM_OBJS += msm-dai-q6-v2.o
PLATFORM_OBJS += msm-dai-slim.o
PLATFORM_OBJS += msm-dai-stub-v2.o
- PLATFORM_OBJS += msm-ds2-dap-config.o
PLATFORM_OBJS += msm-lsm-client.o
PLATFORM_OBJS += msm-pcm-afe-v2.o
PLATFORM_OBJS += msm-pcm-dtmf-v2.o
@@ -86,30 +95,32 @@
PLATFORM_OBJS += msm-pcm-loopback-v2.o
PLATFORM_OBJS += msm-pcm-q6-noirq.o
PLATFORM_OBJS += msm-pcm-q6-v2.o
- PLATFORM_OBJS += msm-pcm-routing-devdep.o
PLATFORM_OBJS += msm-pcm-routing-v2.o
PLATFORM_OBJS += msm-pcm-voice-v2.o
PLATFORM_OBJS += msm-pcm-voip-v2.o
- PLATFORM_OBJS += msm-qti-pp-config.o
PLATFORM_OBJS += msm-transcode-loopback-q6-v2.o
PLATFORM_OBJS += platform_init.o
endif
+ifdef CONFIG_DOLBY_DS2
+ PLATFORM_OBJS += msm-ds2-dap-config.o
+endif
+ifdef CONFIG_DOLBY_LICENSE
+ PLATFORM_OBJS += msm-ds2-dap-config.o
+endif
+ifdef CONFIG_SND_HWDEP
+ PLATFORM_OBJS += msm-pcm-routing-devdep.o
+endif
+ifdef CONFIG_QTI_PP
+ PLATFORM_OBJS += msm-qti-pp-config.o
+endif
LINUX_INC += -Iinclude/linux
-INCS := $(COMMON_INC) \
+INCS += $(COMMON_INC) \
$(UAPI_INC)
-ifeq ($(CONFIG_ARCH_SDM845), y)
-INCS += -include $(AUDIO_ROOT)/config/sdm845autoconf.h
-endif
-ifeq ($(CONFIG_ARCH_SDM670), y)
-INCS += -include $(AUDIO_ROOT)/config/sdm670autoconf.h
-endif
-
EXTRA_CFLAGS += $(INCS)
-
CDEFINES += -DANI_LITTLE_BYTE_ENDIAN \
-DANI_LITTLE_BIT_ENDIAN \
-DDOT11F_LITTLE_ENDIAN_HOST \
@@ -135,12 +146,16 @@
EXTRA_CFLAGS += -Wheader-guard
endif
-
+ifeq ($(KERNEL_BUILD), 0)
KBUILD_EXTRA_SYMBOLS +=$(OUT)/obj/vendor/qcom/opensource/audio-kernel/dsp/Module.symvers
KBUILD_EXTRA_SYMBOLS +=$(OUT)/obj/vendor/qcom/opensource/audio-kernel/asoc/codecs/Module.symvers
KBUILD_EXTRA_SYMBOLS +=$(OUT)/obj/vendor/qcom/opensource/audio-kernel/asoc/codecs/wcd934x/Module.symvers
KBUILD_EXTRA_SYMBOLS +=$(OUT)/obj/vendor/qcom/opensource/audio-kernel/asoc/codecs/sdm660_cdc/Module.symvers
KBUILD_EXTRA_SYMBOLS +=$(OUT)/obj/vendor/qcom/opensource/audio-kernel/asoc/codecs/msm_sdw/Module.symvers
+endif
+ifeq ($(KERNEL_BUILD), 1)
+ obj-y += codecs/
+endif
# Module information used by KBuild framework
obj-$(CONFIG_SND_SOC_QDSP6V2) += platform_dlkm.o
platform_dlkm-y := $(PLATFORM_OBJS)
diff --git a/asoc/Makefile b/asoc/Makefile
deleted file mode 100644
index 4d3839d..0000000
--- a/asoc/Makefile
+++ /dev/null
@@ -1,41 +0,0 @@
-# MSM Machine Support
-
-snd-soc-hostless-pcm-objs := msm-pcm-hostless.o
-obj-$(CONFIG_SND_SOC_MSM_HOSTLESS_PCM) += snd-soc-hostless-pcm.o
-
-
-snd-soc-qdsp6v2-objs := msm-dai-fe.o
-obj-$(CONFIG_SND_SOC_QDSP6V2) += snd-soc-qdsp6v2.o
-
-#for CPE drivers
-snd-soc-cpe-objs := msm-cpe-lsm.o
-obj-$(CONFIG_SND_SOC_CPE) += snd-soc-cpe.o
-
-# for MSM8998 sound card driver
-snd-soc-msm8998-objs := msm8998.o
-obj-$(CONFIG_SND_SOC_MACHINE_MSM8998) += snd-soc-msm8998.o
-
-# for SDM670 sound card driver
-snd-soc-sdm670-objs := sdm660-common.o sdm660-internal.o sdm660-external.o sdm660-ext-dai-links.o
-obj-$(CONFIG_SND_SOC_SDM670) += snd-soc-sdm670.o
-
-# for SDM845 sound card driver
-snd-soc-sdm845-objs := sdm845.o
-obj-$(CONFIG_SND_SOC_MACHINE_SDM845) += snd-soc-sdm845.o
-
-snd-soc-qdsp6v2-objs += msm-dai-q6-v2.o msm-pcm-q6-v2.o \
- msm-pcm-routing-v2.o msm-compress-q6-v2.o \
- msm-pcm-afe-v2.o msm-pcm-voip-v2.o \
- msm-pcm-voice-v2.o msm-dai-q6-hdmi-v2.o \
- msm-lsm-client.o msm-pcm-host-voice-v2.o \
- msm-audio-effects-q6-v2.o msm-pcm-loopback-v2.o \
- msm-dai-slim.o msm-transcode-loopback-q6-v2.o msm-pcm-q6-noirq.o
-obj-$(CONFIG_SND_SOC_QDSP6V2) += snd-soc-qdsp6v2.o msm-pcm-dtmf-v2.o \
- msm-dai-stub-v2.o
-obj-$(CONFIG_SND_HWDEP) += msm-pcm-routing-devdep.o
-obj-$(CONFIG_DOLBY_DAP) += msm-dolby-dap-config.o
-obj-$(CONFIG_DOLBY_DS2) += msm-ds2-dap-config.o
-obj-$(CONFIG_DOLBY_LICENSE) += msm-ds2-dap-config.o
-obj-$(CONFIG_DTS_SRS_TM) += msm-dts-srs-tm-config.o
-obj-$(CONFIG_QTI_PP) += msm-qti-pp-config.o
-obj-y += codecs/
diff --git a/asoc/codecs/Kbuild b/asoc/codecs/Kbuild
index 83d4da4..1cbd20e 100644
--- a/asoc/codecs/Kbuild
+++ b/asoc/codecs/Kbuild
@@ -1,22 +1,31 @@
# We can build either as part of a standalone Kernel build or as
# an external module. Determine which mechanism is being used
-KERNEL_BUILD := 0
+ifeq ($(MODNAME),)
+ KERNEL_BUILD := 1
+else
+ KERNEL_BUILD := 0
+endif
-
-ifeq ($(KERNEL_BUILD), 0)
+ifeq ($(KERNEL_BUILD), 1)
# These are configurable via Kconfig for kernel-based builds
# Need to explicitly configure for Android-based builds
+ AUDIO_BLD_DIR := $(ANDROID_BUILD_TOP)/kernel/msm-4.9
+ AUDIO_ROOT := $(AUDIO_BLD_DIR)/techpack/audio
+endif
+
+ifeq ($(KERNEL_BUILD), 0)
ifeq ($(CONFIG_ARCH_SDM845), y)
include $(AUDIO_ROOT)/config/sdm845auto.conf
export
+ INCS += -include $(AUDIO_ROOT)/config/sdm845autoconf.h
endif
ifeq ($(CONFIG_ARCH_SDM670), y)
include $(AUDIO_ROOT)/config/sdm670auto.conf
export
+ INCS += -include $(AUDIO_ROOT)/config/sdm670autoconf.h
endif
endif
-
# As per target team, build is done as follows:
# Defconfig : build with default flags
# Slub : defconfig + CONFIG_SLUB_DEBUG := y +
@@ -42,7 +51,7 @@
COMMON_INC := -I$(AUDIO_ROOT)/$(COMMON_DIR)
############ ASoC Codecs ############
-ifeq ($(CONFIG_WCD9XXX_CODEC_CORE), m)
+ifdef CONFIG_WCD9XXX_CODEC_CORE
CORE_OBJS += wcd9xxx-rst.o
CORE_OBJS += wcd9xxx-core-init.o
CORE_OBJS += wcd9xxx-core.o
@@ -57,7 +66,7 @@
CORE_OBJS += wcd934x/wcd934x-tables.o
endif
-ifeq ($(CONFIG_SND_SOC_WCD9XXX_V2), m)
+ifdef CONFIG_SND_SOC_WCD9XXX_V2
WCD9XXX_OBJS += wcd9xxx-common-v2.o
WCD9XXX_OBJS += wcd9xxx-resmgr-v2.o
WCD9XXX_OBJS += wcdcal-hwdep.o
@@ -67,56 +76,50 @@
WCD9XXX_OBJS += audio-ext-clk-up.o
endif
-ifeq ($(CONFIG_SND_SOC_WCD9335), m)
+ifdef CONFIG_SND_SOC_WCD9335
WCD9335_OBJS += wcd9335.o
endif
-ifeq ($(CONFIG_SND_SOC_WSA881X), m)
+ifdef CONFIG_SND_SOC_WSA881X
WSA881X_OBJS += wsa881x.o
WSA881X_OBJS += wsa881x-tables.o
WSA881X_OBJS += wsa881x-regmap.o
WSA881X_OBJS += wsa881x-temp-sensor.o
endif
-ifeq ($(CONFIG_SND_SOC_MSM_STUB), m)
+ifdef CONFIG_SND_SOC_MSM_STUB
STUB_OBJS += msm_stub.o
endif
-ifeq ($(CONFIG_SND_SOC_WCD_SPI), m)
+ifdef CONFIG_SND_SOC_WCD_SPI
SPI_OBJS += wcd-spi.o
endif
-ifeq ($(CONFIG_SND_SOC_WCD_CPE), m)
+ifdef CONFIG_SND_SOC_WCD_CPE
WCD_CPE_OBJS += wcd_cpe_core.o
WCD_CPE_OBJS += wcd_cpe_services.o
endif
-ifeq ($(CONFIG_SND_SOC_WCD_MBHC), m)
+ifdef CONFIG_SND_SOC_WCD_MBHC
MBHC_OBJS += wcd-mbhc-v2.o
endif
-ifeq ($(CONFIG_SND_SOC_WCD_MBHC_ADC), m)
+ifdef CONFIG_SND_SOC_WCD_MBHC_ADC
MBHC_OBJS += wcd-mbhc-adc.o
endif
-ifeq ($(CONFIG_SND_SOC_WCD_MBHC_LEGACY), m)
+ifdef CONFIG_SND_SOC_WCD_MBHC_LEGACY
MBHC_OBJS += wcd-mbhc-legacy.o
endif
-ifeq ($(CONFIG_SND_SOC_MSM_HDMI_CODEC_RX), m)
+ifdef CONFIG_SND_SOC_MSM_HDMI_CODEC_RX
HDMICODEC_OBJS += msm_hdmi_codec_rx.o
endif
LINUX_INC += -Iinclude/linux
-INCS := $(COMMON_INC) \
+INCS += $(COMMON_INC) \
$(UAPI_INC)
-ifeq ($(CONFIG_ARCH_SDM845), y)
-INCS += -include $(AUDIO_ROOT)/config/sdm845autoconf.h
-endif
-ifeq ($(CONFIG_ARCH_SDM670), y)
-INCS += -include $(AUDIO_ROOT)/config/sdm670autoconf.h
-endif
EXTRA_CFLAGS += $(INCS)
@@ -147,8 +150,16 @@
endif
+ifeq ($(KERNEL_BUILD), 0)
KBUILD_EXTRA_SYMBOLS +=$(OUT)/obj/vendor/qcom/opensource/audio-kernel/dsp/Module.symvers
KBUILD_EXTRA_SYMBOLS +=$(OUT)/obj/vendor/qcom/opensource/audio-kernel/soc/Module.symvers
+endif
+
+ifeq ($(KERNEL_BUILD), 1)
+ obj-y += wcd934x/
+ obj-y += sdm660_cdc/
+ obj-y += msm_sdw/
+endif
# Module information used by KBuild framework
obj-$(CONFIG_WCD9XXX_CODEC_CORE) += wcd_core_dlkm.o
wcd_core_dlkm-y := $(CORE_OBJS)
diff --git a/asoc/codecs/Makefile b/asoc/codecs/Makefile
deleted file mode 100644
index 9b02c8a..0000000
--- a/asoc/codecs/Makefile
+++ /dev/null
@@ -1,40 +0,0 @@
-snd-soc-wcd9xxx-objs := wcd9xxx-common-v2.o wcd9xxx-resmgr-v2.o \
- wcdcal-hwdep.o wcd9xxx-soc-init.o wcd-dsp-utils.o \
- wcd-dsp-mgr.o audio-ext-clk-up.o
-snd-soc-wcd-cpe-objs := wcd_cpe_services.o wcd_cpe_core.o
-snd-soc-wsa881x-objs := wsa881x.o wsa881x-tables.o wsa881x-regmap.o wsa881x-temp-sensor.o
-snd-soc-wcd-mbhc-objs := wcd-mbhc-v2.o
-ifneq (,$(filter $(CONFIG_SND_SOC_WCD_MBHC_LEGACY),y m))
- snd-soc-wcd-mbhc-objs += wcd-mbhc-legacy.o
-endif
-ifneq (,$(filter $(CONFIG_SND_SOC_WCD_MBHC_ADC),y m))
- snd-soc-wcd-mbhc-objs += wcd-mbhc-adc.o
-endif
-snd-soc-wcd-spi-objs := wcd-spi.o
-snd-soc-wcd9335-objs := wcd9335.o
-snd-soc-wcd-cpe-objs := wcd_cpe_services.o wcd_cpe_core.o
-
-obj-$(CONFIG_SND_SOC_WCD9335) += snd-soc-wcd9335.o
-obj-$(CONFIG_SND_SOC_WCD_CPE) += snd-soc-wcd-cpe.o
-obj-$(CONFIG_SND_SOC_WCD934X) += wcd934x/
-obj-$(CONFIG_SND_SOC_SDM660_CDC) += sdm660_cdc/
-obj-$(CONFIG_SND_SOC_MSM_SDW) += msm_sdw/
-
-obj-$(CONFIG_SND_SOC_WCD9XXX_V2) += snd-soc-wcd9xxx.o
-obj-$(CONFIG_SND_SOC_WCD_MBHC) += snd-soc-wcd-mbhc.o
-obj-$(CONFIG_SND_SOC_WSA881X) += snd-soc-wsa881x.o
-obj-$(CONFIG_SND_SOC_WCD_SPI) += snd-soc-wcd-spi.o
-
-snd-soc-msm-stub-objs := msm_stub.o
-obj-$(CONFIG_SND_SOC_MSM_STUB) += snd-soc-msm-stub.o
-
-wcd-core-objs := wcd9xxx-rst.o wcd9xxx-core-init.o \
- wcd9xxx-core.o wcd9xxx-irq.o \
- wcd9xxx-slimslave.o wcd9xxx-utils.o \
- wcd9335-regmap.o wcd9335-tables.o \
- msm-cdc-pinctrl.o msm-cdc-supply.o
-wcd-core-objs += wcd934x/wcd934x-regmap.o
-wcd-core-objs += wcd934x/wcd934x-tables.o
-
-obj-$(CONFIG_WCD9XXX_CODEC_CORE) += wcd-core.o
-obj-$(CONFIG_SND_SOC_MSM_HDMI_CODEC_RX) += msm_hdmi_codec_rx.o
diff --git a/asoc/codecs/msm_sdw/Kbuild b/asoc/codecs/msm_sdw/Kbuild
index a55948e..e2b5bc3 100644
--- a/asoc/codecs/msm_sdw/Kbuild
+++ b/asoc/codecs/msm_sdw/Kbuild
@@ -1,22 +1,32 @@
# We can build either as part of a standalone Kernel build or as
# an external module. Determine which mechanism is being used
-KERNEL_BUILD := 0
+ifeq ($(MODNAME),)
+ KERNEL_BUILD := 1
+else
+ KERNEL_BUILD := 0
+endif
-ifeq ($(KERNEL_BUILD), 0)
+ifeq ($(KERNEL_BUILD), 1)
# These are configurable via Kconfig for kernel-based builds
# Need to explicitly configure for Android-based builds
+ AUDIO_BLD_DIR := $(ANDROID_BUILD_TOP)/kernel/msm-4.9
+ AUDIO_ROOT := $(AUDIO_BLD_DIR)/techpack/audio
+endif
+
+ifeq ($(KERNEL_BUILD), 0)
ifeq ($(CONFIG_ARCH_SDM845), y)
include $(AUDIO_ROOT)/config/sdm845auto.conf
export
+ INCS += -include $(AUDIO_ROOT)/config/sdm845autoconf.h
endif
ifeq ($(CONFIG_ARCH_SDM670), y)
include $(AUDIO_ROOT)/config/sdm670auto.conf
export
+ INCS += -include $(AUDIO_ROOT)/config/sdm670autoconf.h
endif
endif
-
# As per target team, build is done as follows:
# Defconfig : build with default flags
# Slub : defconfig + CONFIG_SLUB_DEBUG := y +
@@ -44,7 +54,7 @@
############ MSM Soundwire ############
# for MSM Soundwire Codec
-ifeq ($(CONFIG_SND_SOC_MSM_SDW), m)
+ifdef CONFIG_SND_SOC_MSM_SDW
MSM_SDW_OBJS += msm_sdw_cdc.o
MSM_SDW_OBJS += msm_sdw_regmap.o
MSM_SDW_OBJS += msm-sdw-tables.o
@@ -53,16 +63,9 @@
LINUX_INC += -Iinclude/linux
-INCS := $(COMMON_INC) \
+INCS += $(COMMON_INC) \
$(UAPI_INC)
-ifeq ($(CONFIG_ARCH_SDM845), y)
-INCS += -include $(AUDIO_ROOT)/config/sdm845autoconf.h
-endif
-ifeq ($(CONFIG_ARCH_SDM670), y)
-INCS += -include $(AUDIO_ROOT)/config/sdm670autoconf.h
-endif
-
EXTRA_CFLAGS += $(INCS)
@@ -91,11 +94,14 @@
EXTRA_CFLAGS += -Wheader-guard
endif
+ifeq ($(KERNEL_BUILD), 0)
KBUILD_EXTRA_SYMBOLS +=$(OUT)/obj/vendor/qcom/opensource/audio-kernel/ipc/Module.symvers
KBUILD_EXTRA_SYMBOLS +=$(OUT)/obj/vendor/qcom/opensource/audio-kernel/dsp/Module.symvers
KBUILD_EXTRA_SYMBOLS +=$(OUT)/obj/vendor/qcom/opensource/audio-kernel/asoc/Module.symvers
KBUILD_EXTRA_SYMBOLS +=$(OUT)/obj/vendor/qcom/opensource/audio-kernel/asoc/codecs/Module.symvers
KBUILD_EXTRA_SYMBOLS +=$(OUT)/obj/vendor/qcom/opensource/audio-kernel/soc/Module.symvers
+endif
+
# Module information used by KBuild framework
obj-$(CONFIG_SND_SOC_MSM_SDW) += msm_sdw_dlkm.o
msm_sdw_dlkm-y := $(MSM_SDW_OBJS)
diff --git a/asoc/codecs/msm_sdw/Makefile b/asoc/codecs/msm_sdw/Makefile
deleted file mode 100644
index 9518f4d..0000000
--- a/asoc/codecs/msm_sdw/Makefile
+++ /dev/null
@@ -1,2 +0,0 @@
-snd-soc-msm-sdw-objs := msm_sdw_cdc.o msm_sdw_regmap.o msm-sdw-tables.o msm_sdw_cdc_utils.o
-obj-$(CONFIG_SND_SOC_MSM_SDW) += snd-soc-msm-sdw.o
diff --git a/asoc/codecs/sdm660_cdc/Kbuild b/asoc/codecs/sdm660_cdc/Kbuild
index c1777ee..56122c1 100644
--- a/asoc/codecs/sdm660_cdc/Kbuild
+++ b/asoc/codecs/sdm660_cdc/Kbuild
@@ -1,22 +1,32 @@
# We can build either as part of a standalone Kernel build or as
# an external module. Determine which mechanism is being used
-KERNEL_BUILD := 0
+ifeq ($(MODNAME),)
+ KERNEL_BUILD := 1
+else
+ KERNEL_BUILD := 0
+endif
-ifeq ($(KERNEL_BUILD), 0)
+ifeq ($(KERNEL_BUILD), 1)
# These are configurable via Kconfig for kernel-based builds
# Need to explicitly configure for Android-based builds
+ AUDIO_BLD_DIR := $(ANDROID_BUILD_TOP)/kernel/msm-4.9
+ AUDIO_ROOT := $(AUDIO_BLD_DIR)/techpack/audio
+endif
+
+ifeq ($(KERNEL_BUILD), 0)
ifeq ($(CONFIG_ARCH_SDM845), y)
include $(AUDIO_ROOT)/config/sdm845auto.conf
export
+ INCS += -include $(AUDIO_ROOT)/config/sdm845autoconf.h
endif
ifeq ($(CONFIG_ARCH_SDM670), y)
include $(AUDIO_ROOT)/config/sdm670auto.conf
export
+ INCS += -include $(AUDIO_ROOT)/config/sdm670autoconf.h
endif
endif
-
# As per target team, build is done as follows:
# Defconfig : build with default flags
# Slub : defconfig + CONFIG_SLUB_DEBUG := y +
@@ -44,27 +54,20 @@
############ SDM660_CDC ############
# for SDM660_CDC Codec
-ifeq ($(CONFIG_SND_SOC_ANALOG_CDC), m)
+ifdef CONFIG_SND_SOC_ANALOG_CDC
ANALOG_CDC_OBJS += msm-analog-cdc.o
ANALOG_CDC_OBJS += sdm660-cdc-irq.o
endif
-ifeq ($(CONFIG_SND_SOC_DIGITAL_CDC), m)
+ifdef CONFIG_SND_SOC_DIGITAL_CDC
DIGITAL_CDC_OBJS += msm-digital-cdc.o
DIGITAL_CDC_OBJS += msm-digital-cdc-regmap.o
endif
LINUX_INC += -Iinclude/linux
-INCS := $(COMMON_INC) \
+INCS += $(COMMON_INC) \
$(UAPI_INC)
-ifeq ($(CONFIG_ARCH_SDM845), y)
-INCS += -include $(AUDIO_ROOT)/config/sdm845autoconf.h
-endif
-ifeq ($(CONFIG_ARCH_SDM670), y)
-INCS += -include $(AUDIO_ROOT)/config/sdm670autoconf.h
-endif
-
EXTRA_CFLAGS += $(INCS)
@@ -94,11 +97,14 @@
endif
+ifeq ($(KERNEL_BUILD), 0)
KBUILD_EXTRA_SYMBOLS +=$(OUT)/obj/vendor/qcom/opensource/audio-kernel/ipc/Module.symvers
KBUILD_EXTRA_SYMBOLS +=$(OUT)/obj/vendor/qcom/opensource/audio-kernel/dsp/Module.symvers
KBUILD_EXTRA_SYMBOLS +=$(OUT)/obj/vendor/qcom/opensource/audio-kernel/asoc/Module.symvers
KBUILD_EXTRA_SYMBOLS +=$(OUT)/obj/vendor/qcom/opensource/audio-kernel/asoc/codecs/Module.symvers
KBUILD_EXTRA_SYMBOLS +=$(OUT)/obj/vendor/qcom/opensource/audio-kernel/soc/Module.symvers
+endif
+
# Module information used by KBuild framework
obj-$(CONFIG_SND_SOC_ANALOG_CDC) += analog_cdc_dlkm.o
analog_cdc_dlkm-y := $(ANALOG_CDC_OBJS)
diff --git a/asoc/codecs/sdm660_cdc/Makefile b/asoc/codecs/sdm660_cdc/Makefile
deleted file mode 100644
index 0ebf407..0000000
--- a/asoc/codecs/sdm660_cdc/Makefile
+++ /dev/null
@@ -1,4 +0,0 @@
-snd-soc-analog-cdc-objs := sdm660-cdc-irq.o msm-analog-cdc.o
-snd-soc-digital-cdc-objs := msm-digital-cdc.o msm-digital-cdc-regmap.o
-obj-$(CONFIG_SND_SOC_ANALOG_CDC) += snd-soc-analog-cdc.o
-obj-$(CONFIG_SND_SOC_DIGITAL_CDC) += snd-soc-digital-cdc.o
diff --git a/asoc/codecs/sdm660_cdc/msm-analog-cdc.c b/asoc/codecs/sdm660_cdc/msm-analog-cdc.c
index ffd4260..a1732b7 100644
--- a/asoc/codecs/sdm660_cdc/msm-analog-cdc.c
+++ b/asoc/codecs/sdm660_cdc/msm-analog-cdc.c
@@ -4195,7 +4195,7 @@
struct sdm660_cdc_pdata *pdata)
{
int i;
- int ret = 0;
+ int ret = 0, rc = 0;
for (i = 0; i < sdm660_cdc->num_of_supplies; i++) {
if (pdata->regulator[i].ondemand)
@@ -4204,6 +4204,12 @@
sdm660_cdc->supplies[i].consumer) <= 0)
continue;
+ rc = regulator_enable(sdm660_cdc->supplies[i].consumer);
+ if (rc) {
+ dev_err(sdm660_cdc->dev, "Failed to enable %s: %d\n",
+ sdm660_cdc->supplies[i].supply, rc);
+ break;
+ }
ret = regulator_set_voltage(
sdm660_cdc->supplies[i].consumer,
pdata->regulator[i].min_uv,
@@ -4220,7 +4226,10 @@
sdm660_cdc->supplies[i].supply);
}
- return ret;
+ while (rc && i--)
+ if (!pdata->regulator[i].ondemand)
+ regulator_disable(sdm660_cdc->supplies[i].consumer);
+ return rc;
}
static int msm_anlg_cdc_disable_static_supplies_to_optimum(
@@ -4239,7 +4248,12 @@
regulator_set_voltage(sdm660_cdc->supplies[i].consumer, 0,
pdata->regulator[i].max_uv);
regulator_set_load(sdm660_cdc->supplies[i].consumer, 0);
- dev_dbg(sdm660_cdc->dev, "Regulator %s set optimum mode\n",
+ ret = regulator_disable(sdm660_cdc->supplies[i].consumer);
+ if (ret)
+ dev_err(sdm660_cdc->dev, "Failed to disable %s: %d\n",
+ sdm660_cdc->supplies[i].supply, ret);
+
+ dev_dbg(sdm660_cdc->dev, "Regulator %s disable\n",
sdm660_cdc->supplies[i].supply);
}
@@ -4408,7 +4422,7 @@
sdm660_cdc->supplies[i].supply);
}
- while (ret && --i)
+ while (ret && i--)
if (!pdata->regulator[i].ondemand)
regulator_disable(sdm660_cdc->supplies[i].consumer);
return ret;
diff --git a/asoc/codecs/wcd-mbhc-adc.c b/asoc/codecs/wcd-mbhc-adc.c
index bcb616e..920796f 100644
--- a/asoc/codecs/wcd-mbhc-adc.c
+++ b/asoc/codecs/wcd-mbhc-adc.c
@@ -622,7 +622,7 @@
do {
cross_conn = wcd_check_cross_conn(mbhc);
try++;
- } while (try < GND_MIC_SWAP_THRESHOLD);
+ } while (try < mbhc->swap_thr);
if (cross_conn > 0) {
plug_type = MBHC_PLUG_TYPE_GND_MIC_SWAP;
@@ -714,10 +714,10 @@
pt_gnd_mic_swap_cnt++;
no_gnd_mic_swap_cnt = 0;
if (pt_gnd_mic_swap_cnt <
- GND_MIC_SWAP_THRESHOLD) {
+ mbhc->swap_thr) {
continue;
} else if (pt_gnd_mic_swap_cnt >
- GND_MIC_SWAP_THRESHOLD) {
+ mbhc->swap_thr) {
/*
* This is due to GND/MIC switch didn't
* work, Report unsupported plug.
@@ -735,14 +735,14 @@
plug_type = wcd_mbhc_get_plug_from_adc(
mbhc, output_mv);
if ((no_gnd_mic_swap_cnt <
- GND_MIC_SWAP_THRESHOLD) &&
+ mbhc->swap_thr) &&
(spl_hs_count != WCD_MBHC_SPL_HS_CNT)) {
continue;
} else {
no_gnd_mic_swap_cnt = 0;
}
}
- if ((pt_gnd_mic_swap_cnt == GND_MIC_SWAP_THRESHOLD) &&
+ if ((pt_gnd_mic_swap_cnt == mbhc->swap_thr) &&
(plug_type == MBHC_PLUG_TYPE_GND_MIC_SWAP)) {
/*
* if switch is toggled, check again,
diff --git a/asoc/codecs/wcd-mbhc-legacy.c b/asoc/codecs/wcd-mbhc-legacy.c
index a72f64b..9f6a625 100644
--- a/asoc/codecs/wcd-mbhc-legacy.c
+++ b/asoc/codecs/wcd-mbhc-legacy.c
@@ -498,7 +498,7 @@
do {
cross_conn = wcd_check_cross_conn(mbhc);
try++;
- } while (try < GND_MIC_SWAP_THRESHOLD);
+ } while (try < mbhc->swap_thr);
/*
* Check for cross connection 4 times.
@@ -599,10 +599,10 @@
pt_gnd_mic_swap_cnt++;
no_gnd_mic_swap_cnt = 0;
if (pt_gnd_mic_swap_cnt <
- GND_MIC_SWAP_THRESHOLD) {
+ mbhc->swap_thr) {
continue;
} else if (pt_gnd_mic_swap_cnt >
- GND_MIC_SWAP_THRESHOLD) {
+ mbhc->swap_thr) {
/*
* This is due to GND/MIC switch didn't
* work, Report unsupported plug.
@@ -626,7 +626,7 @@
no_gnd_mic_swap_cnt = 0;
}
}
- if ((pt_gnd_mic_swap_cnt == GND_MIC_SWAP_THRESHOLD) &&
+ if ((pt_gnd_mic_swap_cnt == mbhc->swap_thr) &&
(plug_type == MBHC_PLUG_TYPE_GND_MIC_SWAP)) {
/*
* if switch is toggled, check again,
diff --git a/asoc/codecs/wcd-mbhc-v2.c b/asoc/codecs/wcd-mbhc-v2.c
index 3c501b4..6088a1e 100644
--- a/asoc/codecs/wcd-mbhc-v2.c
+++ b/asoc/codecs/wcd-mbhc-v2.c
@@ -1707,6 +1707,7 @@
if (mbhc_cfg->enable_usbc_analog) {
dev_dbg(mbhc->codec->dev, "%s: usbc analog enabled\n",
__func__);
+ mbhc->swap_thr = GND_MIC_USBC_SWAP_THRESHOLD;
rc = wcd_mbhc_init_gpio(mbhc, mbhc_cfg,
"qcom,usbc-analog-en1-gpio",
&config->usbc_en1_gpio,
@@ -1901,6 +1902,7 @@
mbhc->extn_cable_hph_rem = false;
mbhc->hph_type = WCD_MBHC_HPH_NONE;
mbhc->wcd_mbhc_regs = wcd_mbhc_regs;
+ mbhc->swap_thr = GND_MIC_SWAP_THRESHOLD;
if (mbhc->intr_ids == NULL) {
pr_err("%s: Interrupt mapping not provided\n", __func__);
diff --git a/asoc/codecs/wcd-mbhc-v2.h b/asoc/codecs/wcd-mbhc-v2.h
index 0c57eee..bdae776 100644
--- a/asoc/codecs/wcd-mbhc-v2.h
+++ b/asoc/codecs/wcd-mbhc-v2.h
@@ -142,6 +142,7 @@
#define SPECIAL_HS_DETECT_TIME_MS (2 * 1000)
#define MBHC_BUTTON_PRESS_THRESHOLD_MIN 250
#define GND_MIC_SWAP_THRESHOLD 4
+#define GND_MIC_USBC_SWAP_THRESHOLD 2
#define WCD_FAKE_REMOVAL_MIN_PERIOD_MS 100
#define HS_VREF_MIN_VAL 1400
#define FW_READ_ATTEMPTS 15
@@ -524,6 +525,7 @@
bool gnd_swh; /*track GND switch NC / NO */
u32 hs_thr;
u32 hph_thr;
+ u32 swap_thr;
u32 moist_vref;
u32 moist_iref;
u32 moist_rref;
diff --git a/asoc/codecs/wcd934x/Kbuild b/asoc/codecs/wcd934x/Kbuild
index 6bc854c..e46e39d 100644
--- a/asoc/codecs/wcd934x/Kbuild
+++ b/asoc/codecs/wcd934x/Kbuild
@@ -1,22 +1,33 @@
# We can build either as part of a standalone Kernel build or as
# an external module. Determine which mechanism is being used
-KERNEL_BUILD := 0
+ifeq ($(MODNAME),)
+ KERNEL_BUILD := 1
+else
+ KERNEL_BUILD := 0
+endif
-ifeq ($(KERNEL_BUILD), 0)
+
+ifeq ($(KERNEL_BUILD), 1)
# These are configurable via Kconfig for kernel-based builds
# Need to explicitly configure for Android-based builds
+ AUDIO_BLD_DIR := $(ANDROID_BUILD_TOP)/kernel/msm-4.9
+ AUDIO_ROOT := $(AUDIO_BLD_DIR)/techpack/audio
+endif
+
+ifeq ($(KERNEL_BUILD), 0)
ifeq ($(CONFIG_ARCH_SDM845), y)
include $(AUDIO_ROOT)/config/sdm845auto.conf
export
+ INCS += -include $(AUDIO_ROOT)/config/sdm845autoconf.h
endif
ifeq ($(CONFIG_ARCH_SDM670), y)
include $(AUDIO_ROOT)/config/sdm670auto.conf
export
+ INCS += -include $(AUDIO_ROOT)/config/sdm670autoconf.h
endif
endif
-
# As per target team, build is done as follows:
# Defconfig : build with default flags
# Slub : defconfig + CONFIG_SLUB_DEBUG := y +
@@ -44,7 +55,7 @@
############ WCD934X ############
# for WCD934X Codec
-ifeq ($(CONFIG_SND_SOC_WCD934X), m)
+ifdef CONFIG_SND_SOC_WCD934X
WCD934X_OBJS += wcd934x.o
WCD934X_OBJS += wcd934x-dsp-cntl.o
WCD934X_OBJS += wcd934x-mbhc.o
@@ -53,16 +64,9 @@
LINUX_INC += -Iinclude/linux
-INCS := $(COMMON_INC) \
+INCS += $(COMMON_INC) \
$(UAPI_INC)
-ifeq ($(CONFIG_ARCH_SDM845), y)
-INCS += -include $(AUDIO_ROOT)/config/sdm845autoconf.h
-endif
-ifeq ($(CONFIG_ARCH_SDM670), y)
-INCS += -include $(AUDIO_ROOT)/config/sdm670autoconf.h
-endif
-
EXTRA_CFLAGS += $(INCS)
@@ -91,12 +95,14 @@
EXTRA_CFLAGS += -Wheader-guard
endif
-
+ifeq ($(KERNEL_BUILD), 0)
KBUILD_EXTRA_SYMBOLS +=$(OUT)/obj/vendor/qcom/opensource/audio-kernel/ipc/Module.symvers
KBUILD_EXTRA_SYMBOLS +=$(OUT)/obj/vendor/qcom/opensource/audio-kernel/dsp/Module.symvers
KBUILD_EXTRA_SYMBOLS +=$(OUT)/obj/vendor/qcom/opensource/audio-kernel/asoc/Module.symvers
KBUILD_EXTRA_SYMBOLS +=$(OUT)/obj/vendor/qcom/opensource/audio-kernel/asoc/codecs/Module.symvers
KBUILD_EXTRA_SYMBOLS +=$(OUT)/obj/vendor/qcom/opensource/audio-kernel/soc/Module.symvers
+endif
+
# Module information used by KBuild framework
obj-$(CONFIG_SND_SOC_WCD934X) += wcd934x_dlkm.o
wcd934x_dlkm-y := $(WCD934X_OBJS)
diff --git a/asoc/codecs/wcd934x/Makefile b/asoc/codecs/wcd934x/Makefile
deleted file mode 100644
index 12781f6..0000000
--- a/asoc/codecs/wcd934x/Makefile
+++ /dev/null
@@ -1,6 +0,0 @@
-#
-# Makefile for wcd934x codec driver.
-#
-snd-soc-wcd934x-objs := wcd934x.o wcd934x-dsp-cntl.o \
- wcd934x-mbhc.o wcd934x-dsd.o
-obj-$(CONFIG_SND_SOC_WCD934X) += snd-soc-wcd934x.o
diff --git a/asoc/codecs/wcd934x/wcd934x-mbhc.c b/asoc/codecs/wcd934x/wcd934x-mbhc.c
index 807d4ea..ae147ca 100644
--- a/asoc/codecs/wcd934x/wcd934x-mbhc.c
+++ b/asoc/codecs/wcd934x/wcd934x-mbhc.c
@@ -1043,6 +1043,7 @@
return -EINVAL;
}
+ tavil_mbhc_hs_detect_exit(codec);
wcd_mbhc_deinit(wcd_mbhc);
ret = wcd_mbhc_init(wcd_mbhc, codec, &mbhc_cb, &intr_ids,
wcd_mbhc_registers, TAVIL_ZDET_SUPPORTED);
diff --git a/asoc/msm-compress-q6-v2.c b/asoc/msm-compress-q6-v2.c
index 1df13af..3a3774a 100644
--- a/asoc/msm-compress-q6-v2.c
+++ b/asoc/msm-compress-q6-v2.c
@@ -102,6 +102,7 @@
bool use_legacy_api; /* indicates use older asm apis*/
struct msm_compr_dec_params *dec_params[MSM_FRONTEND_DAI_MAX];
struct msm_compr_ch_map *ch_map[MSM_FRONTEND_DAI_MAX];
+ bool is_in_use[MSM_FRONTEND_DAI_MAX];
};
struct msm_compr_audio {
@@ -1531,11 +1532,16 @@
{
struct snd_compr_runtime *runtime = cstream->runtime;
struct snd_soc_pcm_runtime *rtd = cstream->private_data;
- struct msm_compr_audio *prtd;
+ struct msm_compr_audio *prtd = NULL;
struct msm_compr_pdata *pdata =
snd_soc_platform_get_drvdata(rtd->platform);
pr_debug("%s\n", __func__);
+ if (pdata->is_in_use[rtd->dai_link->id] == true) {
+ pr_err("%s: %s is already in use, err: %d\n",
+ __func__, rtd->dai_link->cpu_dai_name, -EBUSY);
+ return -EBUSY;
+ }
prtd = kzalloc(sizeof(struct msm_compr_audio), GFP_KERNEL);
if (prtd == NULL) {
pr_err("Failed to allocate memory for msm_compr_audio\n");
@@ -1547,7 +1553,7 @@
pdata->cstream[rtd->dai_link->id] = cstream;
pdata->audio_effects[rtd->dai_link->id] =
kzalloc(sizeof(struct msm_compr_audio_effects), GFP_KERNEL);
- if (!pdata->audio_effects[rtd->dai_link->id]) {
+ if (pdata->audio_effects[rtd->dai_link->id] == NULL) {
pr_err("%s: Could not allocate memory for effects\n", __func__);
pdata->cstream[rtd->dai_link->id] = NULL;
kfree(prtd);
@@ -1555,10 +1561,11 @@
}
pdata->dec_params[rtd->dai_link->id] =
kzalloc(sizeof(struct msm_compr_dec_params), GFP_KERNEL);
- if (!pdata->dec_params[rtd->dai_link->id]) {
+ if (pdata->dec_params[rtd->dai_link->id] == NULL) {
pr_err("%s: Could not allocate memory for dec params\n",
__func__);
kfree(pdata->audio_effects[rtd->dai_link->id]);
+ pdata->audio_effects[rtd->dai_link->id] = NULL;
pdata->cstream[rtd->dai_link->id] = NULL;
kfree(prtd);
return -ENOMEM;
@@ -1603,20 +1610,22 @@
populate_codec_list(prtd);
prtd->audio_client = q6asm_audio_client_alloc(
(app_cb)compr_event_handler, prtd);
- if (!prtd->audio_client) {
+ if (prtd->audio_client == NULL) {
pr_err("%s: Could not allocate memory for client\n", __func__);
kfree(pdata->audio_effects[rtd->dai_link->id]);
+ pdata->audio_effects[rtd->dai_link->id] = NULL;
kfree(pdata->dec_params[rtd->dai_link->id]);
+ pdata->dec_params[rtd->dai_link->id] = NULL;
pdata->cstream[rtd->dai_link->id] = NULL;
- runtime->private_data = NULL;
kfree(prtd);
+ runtime->private_data = NULL;
return -ENOMEM;
}
pr_debug("%s: session ID %d\n", __func__, prtd->audio_client->session);
prtd->audio_client->perf_mode = false;
prtd->session_id = prtd->audio_client->session;
msm_adsp_init_mixer_ctl_pp_event_queue(rtd);
-
+ pdata->is_in_use[rtd->dai_link->id] = true;
return 0;
}
@@ -1772,10 +1781,15 @@
q6asm_audio_client_free(ac);
msm_adsp_clean_mixer_ctl_pp_event_queue(soc_prtd);
- kfree(pdata->audio_effects[soc_prtd->dai_link->id]);
- pdata->audio_effects[soc_prtd->dai_link->id] = NULL;
- kfree(pdata->dec_params[soc_prtd->dai_link->id]);
- pdata->dec_params[soc_prtd->dai_link->id] = NULL;
+ if (pdata->audio_effects[soc_prtd->dai_link->id] != NULL) {
+ kfree(pdata->audio_effects[soc_prtd->dai_link->id]);
+ pdata->audio_effects[soc_prtd->dai_link->id] = NULL;
+ }
+ if (pdata->dec_params[soc_prtd->dai_link->id] != NULL) {
+ kfree(pdata->dec_params[soc_prtd->dai_link->id]);
+ pdata->dec_params[soc_prtd->dai_link->id] = NULL;
+ }
+ pdata->is_in_use[soc_prtd->dai_link->id] = false;
kfree(prtd);
runtime->private_data = NULL;
@@ -3842,6 +3856,7 @@
pdata->dec_params[i] = NULL;
pdata->cstream[i] = NULL;
pdata->ch_map[i] = NULL;
+ pdata->is_in_use[i] = false;
}
snd_soc_add_platform_controls(platform, msm_compr_gapless_controls,
@@ -4546,7 +4561,7 @@
return platform_driver_register(&msm_compr_driver);
}
-void __exit msm_compress_dsp_exit(void)
+void msm_compress_dsp_exit(void)
{
platform_driver_unregister(&msm_compr_driver);
}
diff --git a/asoc/msm-dai-fe.c b/asoc/msm-dai-fe.c
index 9160a2d..72883eb 100644
--- a/asoc/msm-dai-fe.c
+++ b/asoc/msm-dai-fe.c
@@ -2576,7 +2576,7 @@
return platform_driver_register(&msm_fe_dai_driver);
}
-void __exit msm_fe_dai_exit(void)
+void msm_fe_dai_exit(void)
{
platform_driver_unregister(&msm_fe_dai_driver);
}
diff --git a/asoc/msm-dai-q6-hdmi-v2.c b/asoc/msm-dai-q6-hdmi-v2.c
index eb9f5f5..c061c08 100644
--- a/asoc/msm-dai-q6-hdmi-v2.c
+++ b/asoc/msm-dai-q6-hdmi-v2.c
@@ -543,7 +543,7 @@
return platform_driver_register(&msm_dai_q6_hdmi_driver);
}
-void __exit msm_dai_q6_hdmi_exit(void)
+void msm_dai_q6_hdmi_exit(void)
{
platform_driver_unregister(&msm_dai_q6_hdmi_driver);
}
diff --git a/asoc/msm-dai-q6-v2.c b/asoc/msm-dai-q6-v2.c
index af288f1..bec7fcf 100644
--- a/asoc/msm-dai-q6-v2.c
+++ b/asoc/msm-dai-q6-v2.c
@@ -51,6 +51,7 @@
ENC_FMT_APTX = ASM_MEDIA_FMT_APTX,
ENC_FMT_APTX_HD = ASM_MEDIA_FMT_APTX_HD,
ENC_FMT_CELT = ASM_MEDIA_FMT_CELT,
+ ENC_FMT_LDAC = ASM_MEDIA_FMT_LDAC,
};
enum {
@@ -2263,6 +2264,11 @@
&dai_data->enc_config.data,
sizeof(struct asm_celt_enc_cfg_t));
break;
+ case ENC_FMT_LDAC:
+ memcpy(ucontrol->value.bytes.data + format_size,
+ &dai_data->enc_config.data,
+ sizeof(struct asm_ldac_enc_cfg_t));
+ break;
default:
pr_debug("%s: unknown format = %d\n",
__func__, dai_data->enc_config.format);
@@ -2316,6 +2322,11 @@
ucontrol->value.bytes.data + format_size,
sizeof(struct asm_celt_enc_cfg_t));
break;
+ case ENC_FMT_LDAC:
+ memcpy(&dai_data->enc_config.data,
+ ucontrol->value.bytes.data + format_size,
+ sizeof(struct asm_ldac_enc_cfg_t));
+ break;
default:
pr_debug("%s: Ignore enc config for unknown format = %d\n",
__func__, dai_data->enc_config.format);
@@ -2419,6 +2430,36 @@
return 0;
}
+static int msm_dai_q6_afe_scrambler_mode_get(
+ struct snd_kcontrol *kcontrol,
+ struct snd_ctl_elem_value *ucontrol)
+{
+ struct msm_dai_q6_dai_data *dai_data = kcontrol->private_data;
+
+ if (!dai_data) {
+ pr_err("%s: Invalid dai data\n", __func__);
+ return -EINVAL;
+ }
+ ucontrol->value.integer.value[0] = dai_data->enc_config.scrambler_mode;
+
+ return 0;
+}
+
+static int msm_dai_q6_afe_scrambler_mode_put(
+ struct snd_kcontrol *kcontrol,
+ struct snd_ctl_elem_value *ucontrol)
+{
+ struct msm_dai_q6_dai_data *dai_data = kcontrol->private_data;
+
+ if (!dai_data) {
+ pr_err("%s: Invalid dai data\n", __func__);
+ return -EINVAL;
+ }
+ dai_data->enc_config.scrambler_mode = ucontrol->value.integer.value[0];
+ pr_debug("%s: afe scrambler mode : %d\n",
+ __func__, dai_data->enc_config.scrambler_mode);
+ return 0;
+}
static const struct snd_kcontrol_new afe_enc_config_controls[] = {
{
@@ -2436,6 +2477,10 @@
SOC_ENUM_EXT("AFE Input Bit Format", afe_input_bit_format_enum[0],
msm_dai_q6_afe_input_bit_format_get,
msm_dai_q6_afe_input_bit_format_put),
+ SOC_SINGLE_EXT("AFE Scrambler Mode",
+ 0, 0, 1, 0,
+ msm_dai_q6_afe_scrambler_mode_get,
+ msm_dai_q6_afe_scrambler_mode_put),
};
static int msm_dai_q6_slim_rx_drift_info(struct snd_kcontrol *kcontrol,
@@ -2599,6 +2644,9 @@
snd_ctl_new1(&afe_enc_config_controls[2],
dai_data));
rc = snd_ctl_add(dai->component->card->snd_card,
+ snd_ctl_new1(&afe_enc_config_controls[3],
+ dai_data));
+ rc = snd_ctl_add(dai->component->card->snd_card,
snd_ctl_new1(&avd_drift_config_controls[2],
dai));
break;
@@ -8928,7 +8976,7 @@
return rc;
}
-void __exit msm_dai_q6_exit(void)
+void msm_dai_q6_exit(void)
{
platform_driver_unregister(&msm_dai_q6_tdm_driver);
platform_driver_unregister(&msm_dai_q6_spdif_driver);
diff --git a/asoc/msm-dai-slim.c b/asoc/msm-dai-slim.c
index 427fd6c..e8bdf13 100644
--- a/asoc/msm-dai-slim.c
+++ b/asoc/msm-dai-slim.c
@@ -653,7 +653,7 @@
return rc;
}
-void __exit msm_dai_slim_exit(void)
+void msm_dai_slim_exit(void)
{
slim_driver_unregister(&msm_dai_slim_driver);
}
diff --git a/asoc/msm-dai-stub-v2.c b/asoc/msm-dai-stub-v2.c
index d4178c8..c8b6b77 100644
--- a/asoc/msm-dai-stub-v2.c
+++ b/asoc/msm-dai-stub-v2.c
@@ -379,7 +379,7 @@
return rc;
}
-void __exit msm_dai_stub_exit(void)
+void msm_dai_stub_exit(void)
{
pr_debug("%s:\n", __func__);
diff --git a/asoc/msm-ds2-dap-config.c b/asoc/msm-ds2-dap-config.c
index 419da8f..645ecf5 100644
--- a/asoc/msm-ds2-dap-config.c
+++ b/asoc/msm-ds2-dap-config.c
@@ -22,8 +22,6 @@
#include "msm-pcm-routing-v2.h"
-#if defined(CONFIG_DOLBY_DS2) || defined(CONFIG_DOLBY_LICENSE)
-
/* ramp up/down for 30ms */
#define DOLBY_SOFT_VOLUME_PERIOD 40
/* Step value 0ms or 0us */
@@ -2174,144 +2172,3 @@
}
return rc;
}
-
-#else
-
-static int msm_ds2_dap_alloc_and_store_cal_data(int dev_map_idx, int path,
- int perf_mode)
-{
- return 0;
-}
-
-static int msm_ds2_dap_free_cal_data(int dev_map_idx)
-{
- return 0;
-}
-
-static int msm_ds2_dap_send_cal_data(int dev_map_idx)
-{
- return 0;
-}
-
-static int msm_ds2_dap_can_enable_module(int32_t module_id)
-{
- return 0;
-}
-
-static int msm_ds2_dap_init_modules_in_topology(int dev_map_idx)
-{
- return 0;
-}
-
-static bool msm_ds2_dap_check_is_param_modified(int32_t *dap_params_modified,
- int32_t idx, int32_t commit)
-{
- return false;
-}
-
-
-static int msm_ds2_dap_map_device_to_dolby_cache_devices(int32_t device_id)
-{
- return 0;
-}
-
-static int msm_ds2_dap_update_num_devices(struct dolby_param_data *dolby_data,
- int32_t *num_device, int32_t *dev_arr,
- int32_t array_size)
-{
- return 0;
-}
-
-static int msm_ds2_dap_commit_params(struct dolby_param_data *dolby_data,
- int commit)
-{
- return 0;
-}
-
-static int msm_ds2_dap_handle_commands(u32 cmd, void *arg)
-{
- return 0;
-}
-
-static int msm_ds2_dap_set_param(u32 cmd, void *arg)
-{
- return 0;
-}
-
-static int msm_ds2_dap_get_param(u32 cmd, void *arg)
-{
- return 0;
-}
-
-static int msm_ds2_dap_send_end_point(int dev_map_idx, int endp_idx)
-{
- return 0;
-}
-
-static int msm_ds2_dap_send_cached_params(int dev_map_idx,
- int commit)
-{
- return 0;
-}
-
-static int msm_ds2_dap_set_vspe_vdhe(int dev_map_idx,
- bool is_custom_stereo_enabled)
-{
- return 0;
-}
-
-static int msm_ds2_dap_param_visualizer_control_get(
- u32 cmd, void *arg,
- struct msm_pcm_routing_bdai_data *bedais)
-{
- return 0;
-}
-
-static int msm_ds2_dap_set_security_control(u32 cmd, void *arg)
-{
- return 0;
-}
-
-static int msm_ds2_dap_update_dev_map_port_id(int32_t device_id, int port_id)
-{
- return 0;
-}
-
-static int32_t msm_ds2_dap_get_port_id(
- int32_t device_id, int32_t be_id)
-{
- return 0;
-}
-
-static int msm_ds2_dap_handle_bypass(struct dolby_param_data *dolby_data)
-{
- return 0;
-}
-
-static int msm_ds2_dap_handle_bypass_wait(int port_id, int copp_idx,
- int wait_time)
-{
- return 0;
-}
-
-static int dap_set_custom_stereo_onoff(int dev_map_idx,
- bool is_custom_stereo_enabled)
-{
- return 0;
-}
-int qti_set_custom_stereo_on(int port_id, int copp_idx,
- bool is_custom_stereo_on)
-{
- return 0;
-}
-int set_custom_stereo_onoff(int dev_map_idx,
- bool is_custom_stereo_enabled)
-{
- return 0;
-}
-int msm_ds2_dap_ioctl_shared(struct snd_hwdep *hw, struct file *file,
- u32 cmd, void *arg)
-{
- return 0;
-}
-#endif /* CONFIG_DOLBY_DS2 || CONFIG_DOLBY_LICENSE */
diff --git a/asoc/msm-lsm-client.c b/asoc/msm-lsm-client.c
index 15cdfb1..f6a5698 100644
--- a/asoc/msm-lsm-client.c
+++ b/asoc/msm-lsm-client.c
@@ -2406,7 +2406,7 @@
return platform_driver_register(&msm_lsm_driver);
}
-void __exit msm_lsm_client_exit(void)
+void msm_lsm_client_exit(void)
{
platform_driver_unregister(&msm_lsm_driver);
}
diff --git a/asoc/msm-pcm-afe-v2.c b/asoc/msm-pcm-afe-v2.c
index f700f0b..77eecb2 100644
--- a/asoc/msm-pcm-afe-v2.c
+++ b/asoc/msm-pcm-afe-v2.c
@@ -910,7 +910,7 @@
return platform_driver_register(&msm_afe_driver);
}
-void __exit msm_pcm_afe_exit(void)
+void msm_pcm_afe_exit(void)
{
pr_debug("%s\n", __func__);
platform_driver_unregister(&msm_afe_driver);
diff --git a/asoc/msm-pcm-dtmf-v2.c b/asoc/msm-pcm-dtmf-v2.c
index 7bc823b..9953eeb 100644
--- a/asoc/msm-pcm-dtmf-v2.c
+++ b/asoc/msm-pcm-dtmf-v2.c
@@ -585,7 +585,7 @@
return platform_driver_register(&msm_pcm_driver);
}
-void __exit msm_pcm_dtmf_exit(void)
+void msm_pcm_dtmf_exit(void)
{
platform_driver_unregister(&msm_pcm_driver);
}
diff --git a/asoc/msm-pcm-host-voice-v2.c b/asoc/msm-pcm-host-voice-v2.c
index 0c47ec1..fd771df 100644
--- a/asoc/msm-pcm-host-voice-v2.c
+++ b/asoc/msm-pcm-host-voice-v2.c
@@ -1542,7 +1542,7 @@
return platform_driver_register(&msm_pcm_driver);
}
-void __exit msm_voice_host_exit(void)
+void msm_voice_host_exit(void)
{
platform_driver_unregister(&msm_pcm_driver);
}
diff --git a/asoc/msm-pcm-hostless.c b/asoc/msm-pcm-hostless.c
index 90d76b4..e2850a4 100644
--- a/asoc/msm-pcm-hostless.c
+++ b/asoc/msm-pcm-hostless.c
@@ -71,7 +71,7 @@
return platform_driver_register(&msm_pcm_hostless_driver);
}
-void __exit msm_pcm_hostless_exit(void)
+void msm_pcm_hostless_exit(void)
{
platform_driver_unregister(&msm_pcm_hostless_driver);
}
diff --git a/asoc/msm-pcm-loopback-v2.c b/asoc/msm-pcm-loopback-v2.c
index e50a005..1c26d19 100644
--- a/asoc/msm-pcm-loopback-v2.c
+++ b/asoc/msm-pcm-loopback-v2.c
@@ -790,7 +790,7 @@
return platform_driver_register(&msm_pcm_driver);
}
-void __exit msm_pcm_loopback_exit(void)
+void msm_pcm_loopback_exit(void)
{
platform_driver_unregister(&msm_pcm_driver);
}
diff --git a/asoc/msm-pcm-q6-noirq.c b/asoc/msm-pcm-q6-noirq.c
index 307e7a6..dbc6d33 100644
--- a/asoc/msm-pcm-q6-noirq.c
+++ b/asoc/msm-pcm-q6-noirq.c
@@ -1273,7 +1273,7 @@
return platform_driver_register(&msm_pcm_driver_noirq);
}
-void __exit msm_pcm_noirq_exit(void)
+void msm_pcm_noirq_exit(void)
{
platform_driver_unregister(&msm_pcm_driver_noirq);
}
diff --git a/asoc/msm-pcm-q6-v2.c b/asoc/msm-pcm-q6-v2.c
index 0a0e26d..4311499 100644
--- a/asoc/msm-pcm-q6-v2.c
+++ b/asoc/msm-pcm-q6-v2.c
@@ -614,8 +614,15 @@
struct snd_pcm_runtime *runtime = substream->runtime;
struct snd_soc_pcm_runtime *soc_prtd = substream->private_data;
struct msm_audio *prtd;
+ struct msm_plat_data *pdata;
int ret = 0;
+ pdata = (struct msm_plat_data *)
+ dev_get_drvdata(soc_prtd->platform->dev);
+ if (!pdata) {
+ pr_err("%s: platform data not populated\n", __func__);
+ return -EINVAL;
+ }
prtd = kzalloc(sizeof(struct msm_audio), GFP_KERNEL);
if (prtd == NULL)
return -ENOMEM;
@@ -693,6 +700,10 @@
prtd->reset_event = false;
runtime->private_data = prtd;
msm_adsp_init_mixer_ctl_pp_event_queue(soc_prtd);
+ /* Vote to update the Rx thread priority to RT Thread for playback */
+ if ((substream->stream == SNDRV_PCM_STREAM_PLAYBACK) &&
+ (pdata->perf_mode == LOW_LATENCY_PCM_MODE))
+ apr_start_rx_rt(prtd->audio_client->apr);
return 0;
}
@@ -800,6 +811,7 @@
struct snd_pcm_runtime *runtime = substream->runtime;
struct snd_soc_pcm_runtime *soc_prtd = substream->private_data;
struct msm_audio *prtd = runtime->private_data;
+ struct msm_plat_data *pdata;
uint32_t timeout;
int dir = 0;
int ret = 0;
@@ -809,6 +821,16 @@
if (prtd->audio_client) {
dir = IN;
+ /*
+ * Unvote to downgrade the Rx thread priority from
+ * RT Thread for Low-Latency use case.
+ */
+ pdata = (struct msm_plat_data *)
+ dev_get_drvdata(soc_prtd->platform->dev);
+ if (pdata) {
+ if (pdata->perf_mode == LOW_LATENCY_PCM_MODE)
+ apr_end_rx_rt(prtd->audio_client->apr);
+ }
/* determine timeout length */
if (runtime->frame_bits == 0 || runtime->rate == 0) {
timeout = CMD_EOS_MIN_TIMEOUT_LENGTH;
@@ -1873,7 +1895,7 @@
return platform_driver_register(&msm_pcm_driver);
}
-void __exit msm_pcm_dsp_exit(void)
+void msm_pcm_dsp_exit(void)
{
platform_driver_unregister(&msm_pcm_driver);
}
diff --git a/asoc/msm-pcm-routing-v2.c b/asoc/msm-pcm-routing-v2.c
index c2ad1b0..1ff7c41 100644
--- a/asoc/msm-pcm-routing-v2.c
+++ b/asoc/msm-pcm-routing-v2.c
@@ -57,7 +57,7 @@
static struct mutex routing_lock;
-static struct cal_type_data *cal_data;
+static struct cal_type_data *cal_data[MAX_ROUTING_CAL_TYPES];
static int fm_switch_enable;
static int hfp_switch_enable;
@@ -883,21 +883,21 @@
}
EXPORT_SYMBOL(msm_pcm_routing_get_stream_app_type_cfg);
-static struct cal_block_data *msm_routing_find_topology_by_path(int path)
+static struct cal_block_data *msm_routing_find_topology_by_path(int path,
+ int cal_index)
{
- struct list_head *ptr, *next;
- struct cal_block_data *cal_block = NULL;
-
+ struct list_head *ptr, *next;
+ struct cal_block_data *cal_block = NULL;
pr_debug("%s\n", __func__);
list_for_each_safe(ptr, next,
- &cal_data->cal_blocks) {
+ &cal_data[cal_index]->cal_blocks) {
cal_block = list_entry(ptr,
struct cal_block_data, list);
- if (((struct audio_cal_info_adm_top *)cal_block->cal_info)
- ->path == path) {
+ if (((struct audio_cal_info_adm_top *)cal_block
+ ->cal_info)->path == path) {
return cal_block;
}
}
@@ -907,7 +907,8 @@
static struct cal_block_data *msm_routing_find_topology(int path,
int app_type,
- int acdb_id)
+ int acdb_id,
+ int cal_index)
{
struct list_head *ptr, *next;
struct cal_block_data *cal_block = NULL;
@@ -916,7 +917,7 @@
pr_debug("%s\n", __func__);
list_for_each_safe(ptr, next,
- &cal_data->cal_blocks) {
+ &cal_data[cal_index]->cal_blocks) {
cal_block = list_entry(ptr,
struct cal_block_data, list);
@@ -931,7 +932,7 @@
}
pr_debug("%s: Can't find topology for path %d, app %d, acdb_id %d defaulting to search by path\n",
__func__, path, app_type, acdb_id);
- return msm_routing_find_topology_by_path(path);
+ return msm_routing_find_topology_by_path(cal_index, path);
}
static int msm_routing_get_adm_topology(int fedai_id, int session_type,
@@ -941,28 +942,37 @@
struct cal_block_data *cal_block = NULL;
int app_type = 0, acdb_dev_id = 0;
-
pr_debug("%s: fedai_id %d, session_type %d, be_id %d\n",
__func__, fedai_id, session_type, be_id);
if (cal_data == NULL)
goto done;
- mutex_lock(&cal_data->lock);
-
app_type = fe_dai_app_type_cfg[fedai_id][session_type][be_id].app_type;
acdb_dev_id =
fe_dai_app_type_cfg[fedai_id][session_type][be_id].acdb_dev_id;
+ mutex_lock(&cal_data[ADM_TOPOLOGY_CAL_TYPE_IDX]->lock);
cal_block = msm_routing_find_topology(session_type, app_type,
- acdb_dev_id);
- if (cal_block == NULL)
- goto unlock;
+ acdb_dev_id,
+ ADM_TOPOLOGY_CAL_TYPE_IDX);
+ if (cal_block != NULL)
+ topology = ((struct audio_cal_info_adm_top *)
+ cal_block->cal_info)->topology;
+ mutex_unlock(&cal_data[ADM_TOPOLOGY_CAL_TYPE_IDX]->lock);
- topology = ((struct audio_cal_info_adm_top *)
- cal_block->cal_info)->topology;
-unlock:
- mutex_unlock(&cal_data->lock);
+ if (cal_block == NULL) {
+ pr_debug("%s: Check for LSM topology\n", __func__);
+ mutex_lock(&cal_data[ADM_LSM_TOPOLOGY_CAL_TYPE_IDX]->lock);
+ cal_block = msm_routing_find_topology(session_type, app_type,
+ acdb_dev_id,
+ ADM_LSM_TOPOLOGY_CAL_TYPE_IDX);
+ if (cal_block != NULL)
+ topology = ((struct audio_cal_info_adm_top *)
+ cal_block->cal_info)->topology;
+ mutex_unlock(&cal_data[ADM_LSM_TOPOLOGY_CAL_TYPE_IDX]->lock);
+ }
+
done:
pr_debug("%s: Using topology %d\n", __func__, topology);
return topology;
@@ -2562,6 +2572,7 @@
pr_debug("%s: port_id 0x%x, mad_type %d\n", __func__, port_id,
mad_type);
+ adm_set_lsm_port_id(port_id);
return afe_port_set_mad_type(port_id, mad_type);
}
@@ -3620,6 +3631,10 @@
msm_route_ec_ref_rx = 22;
ec_ref_port_id = AFE_PORT_ID_INT3_MI2S_TX;
break;
+ case 23:
+ msm_route_ec_ref_rx = 23;
+ ec_ref_port_id = AFE_PORT_ID_HDMI_OVER_DP_RX;
+ break;
default:
msm_route_ec_ref_rx = 0; /* NONE */
pr_err("%s EC ref rx %ld not valid\n",
@@ -3642,7 +3657,7 @@
"SLIM_5_RX", "SLIM_1_TX", "QUAT_TDM_TX_1",
"QUAT_TDM_RX_0", "QUAT_TDM_RX_1", "QUAT_TDM_RX_2", "SLIM_6_RX",
"TERT_MI2S_RX", "QUAT_MI2S_RX", "TERT_TDM_TX_0", "USB_AUDIO_RX",
- "INT0_MI2S_RX", "INT4_MI2S_RX", "INT3_MI2S_TX"};
+ "INT0_MI2S_RX", "INT4_MI2S_RX", "INT3_MI2S_TX", "DISPLAY_PORT"};
static const struct soc_enum msm_route_ec_ref_rx_enum[] = {
SOC_ENUM_SINGLE_EXT(ARRAY_SIZE(ec_ref_rx), ec_ref_rx),
@@ -8014,15 +8029,6 @@
SOC_SINGLE_EXT("Voip", MSM_BACKEND_DAI_SLIMBUS_0_RX,
MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
msm_routing_put_voice_mixer),
- SOC_SINGLE_EXT("Voice Stub", MSM_BACKEND_DAI_SLIMBUS_0_RX,
- MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
- msm_routing_put_voice_stub_mixer),
- SOC_SINGLE_EXT("Voice2 Stub", MSM_BACKEND_DAI_SLIMBUS_0_RX,
- MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
- msm_routing_put_voice_stub_mixer),
- SOC_SINGLE_EXT("VoLTE Stub", MSM_BACKEND_DAI_SLIMBUS_0_RX,
- MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
- msm_routing_put_voice_stub_mixer),
SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_SLIMBUS_0_RX,
MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer,
msm_routing_put_voice_mixer),
@@ -8041,15 +8047,6 @@
SOC_SINGLE_EXT("Voip", MSM_BACKEND_DAI_SLIMBUS_6_RX,
MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
msm_routing_put_voice_mixer),
- SOC_SINGLE_EXT("Voice Stub", MSM_BACKEND_DAI_SLIMBUS_6_RX,
- MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
- msm_routing_put_voice_stub_mixer),
- SOC_SINGLE_EXT("Voice2 Stub", MSM_BACKEND_DAI_SLIMBUS_6_RX,
- MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
- msm_routing_put_voice_stub_mixer),
- SOC_SINGLE_EXT("VoLTE Stub", MSM_BACKEND_DAI_SLIMBUS_6_RX,
- MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
- msm_routing_put_voice_stub_mixer),
SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_SLIMBUS_6_RX,
MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer,
msm_routing_put_voice_mixer),
@@ -8068,15 +8065,6 @@
SOC_SINGLE_EXT("Voip", MSM_BACKEND_DAI_USB_RX,
MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
msm_routing_put_voice_mixer),
- SOC_SINGLE_EXT("Voice Stub", MSM_BACKEND_DAI_USB_RX,
- MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
- msm_routing_put_voice_stub_mixer),
- SOC_SINGLE_EXT("Voice2 Stub", MSM_BACKEND_DAI_USB_RX,
- MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
- msm_routing_put_voice_stub_mixer),
- SOC_SINGLE_EXT("VoLTE Stub", MSM_BACKEND_DAI_USB_RX,
- MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
- msm_routing_put_voice_stub_mixer),
SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_USB_RX,
MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer,
msm_routing_put_voice_mixer),
@@ -8091,16 +8079,28 @@
msm_routing_put_voice_mixer),
};
+static const struct snd_kcontrol_new display_port_rx_voice_mixer_controls[] = {
+ SOC_SINGLE_EXT("Voip", MSM_BACKEND_DAI_DISPLAY_PORT_RX,
+ MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
+ msm_routing_put_voice_mixer),
+ SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_DISPLAY_PORT_RX,
+ MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer,
+ msm_routing_put_voice_mixer),
+ SOC_SINGLE_EXT("QCHAT", MSM_BACKEND_DAI_DISPLAY_PORT_RX,
+ MSM_FRONTEND_DAI_QCHAT, 1, 0, msm_routing_get_voice_mixer,
+ msm_routing_put_voice_mixer),
+ SOC_SINGLE_EXT("VoiceMMode1", MSM_BACKEND_DAI_DISPLAY_PORT_RX,
+ MSM_FRONTEND_DAI_VOICEMMODE1, 1, 0, msm_routing_get_voice_mixer,
+ msm_routing_put_voice_mixer),
+ SOC_SINGLE_EXT("VoiceMMode2", MSM_BACKEND_DAI_DISPLAY_PORT_RX,
+ MSM_FRONTEND_DAI_VOICEMMODE2, 1, 0, msm_routing_get_voice_mixer,
+ msm_routing_put_voice_mixer),
+};
+
static const struct snd_kcontrol_new bt_sco_rx_voice_mixer_controls[] = {
SOC_SINGLE_EXT("Voip", MSM_BACKEND_DAI_INT_BT_SCO_RX,
MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
msm_routing_put_voice_mixer),
- SOC_SINGLE_EXT("Voice Stub", MSM_BACKEND_DAI_INT_BT_SCO_RX,
- MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
- msm_routing_put_voice_stub_mixer),
- SOC_SINGLE_EXT("Voice2 Stub", MSM_BACKEND_DAI_INT_BT_SCO_RX,
- MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
- msm_routing_put_voice_stub_mixer),
SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_INT_BT_SCO_RX,
MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer,
msm_routing_put_voice_mixer),
@@ -8119,9 +8119,6 @@
SOC_SINGLE_EXT("Voip", MSM_BACKEND_DAI_MI2S_RX,
MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
msm_routing_put_voice_mixer),
- SOC_SINGLE_EXT("Voice Stub", MSM_BACKEND_DAI_MI2S_RX,
- MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
- msm_routing_put_voice_stub_mixer),
SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_MI2S_RX,
MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer,
msm_routing_put_voice_mixer),
@@ -8140,15 +8137,6 @@
SOC_SINGLE_EXT("Voip", MSM_BACKEND_DAI_PRI_MI2S_RX,
MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
msm_routing_put_voice_mixer),
- SOC_SINGLE_EXT("Voice Stub", MSM_BACKEND_DAI_PRI_MI2S_RX,
- MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
- msm_routing_put_voice_stub_mixer),
- SOC_SINGLE_EXT("Voice2 Stub", MSM_BACKEND_DAI_PRI_MI2S_RX,
- MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
- msm_routing_put_voice_stub_mixer),
- SOC_SINGLE_EXT("VoLTE Stub", MSM_BACKEND_DAI_PRI_MI2S_RX,
- MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_mixer,
- msm_routing_put_voice_mixer),
SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_PRI_MI2S_RX,
MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer,
msm_routing_put_voice_mixer),
@@ -8203,15 +8191,6 @@
SOC_SINGLE_EXT("Voip", MSM_BACKEND_DAI_TERTIARY_MI2S_RX,
MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
msm_routing_put_voice_mixer),
- SOC_SINGLE_EXT("Voice Stub", MSM_BACKEND_DAI_TERTIARY_MI2S_RX,
- MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
- msm_routing_put_voice_stub_mixer),
- SOC_SINGLE_EXT("Voice2 Stub", MSM_BACKEND_DAI_TERTIARY_MI2S_RX,
- MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
- msm_routing_put_voice_stub_mixer),
- SOC_SINGLE_EXT("VoLTE Stub", MSM_BACKEND_DAI_TERTIARY_MI2S_RX,
- MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_mixer,
- msm_routing_put_voice_mixer),
SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_TERTIARY_MI2S_RX,
MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer,
msm_routing_put_voice_mixer),
@@ -8230,15 +8209,6 @@
SOC_SINGLE_EXT("Voip", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
msm_routing_put_voice_mixer),
- SOC_SINGLE_EXT("Voice Stub", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
- MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
- msm_routing_put_voice_stub_mixer),
- SOC_SINGLE_EXT("Voice2 Stub", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
- MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
- msm_routing_put_voice_stub_mixer),
- SOC_SINGLE_EXT("VoLTE Stub", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
- MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_mixer,
- msm_routing_put_voice_mixer),
SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer,
msm_routing_put_voice_mixer),
@@ -8257,15 +8227,6 @@
SOC_SINGLE_EXT("Voip", MSM_BACKEND_DAI_QUINARY_MI2S_RX,
MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
msm_routing_put_voice_mixer),
- SOC_SINGLE_EXT("Voice Stub", MSM_BACKEND_DAI_QUINARY_MI2S_RX,
- MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
- msm_routing_put_voice_stub_mixer),
- SOC_SINGLE_EXT("Voice2 Stub", MSM_BACKEND_DAI_QUINARY_MI2S_RX,
- MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
- msm_routing_put_voice_stub_mixer),
- SOC_SINGLE_EXT("VoLTE Stub", MSM_BACKEND_DAI_QUINARY_MI2S_RX,
- MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_mixer,
- msm_routing_put_voice_mixer),
SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_QUINARY_MI2S_RX,
MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer,
msm_routing_put_voice_mixer),
@@ -8284,15 +8245,6 @@
SOC_SINGLE_EXT("Voip", MSM_BACKEND_DAI_AFE_PCM_RX,
MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
msm_routing_put_voice_mixer),
- SOC_SINGLE_EXT("Voice Stub", MSM_BACKEND_DAI_AFE_PCM_RX,
- MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
- msm_routing_put_voice_stub_mixer),
- SOC_SINGLE_EXT("Voice2 Stub", MSM_BACKEND_DAI_AFE_PCM_RX,
- MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
- msm_routing_put_voice_stub_mixer),
- SOC_SINGLE_EXT("VoLTE Stub", MSM_BACKEND_DAI_AFE_PCM_RX,
- MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
- msm_routing_put_voice_stub_mixer),
SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_AFE_PCM_RX,
MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer,
msm_routing_put_voice_mixer),
@@ -8311,15 +8263,6 @@
SOC_SINGLE_EXT("Voip", MSM_BACKEND_DAI_AUXPCM_RX,
MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
msm_routing_put_voice_mixer),
- SOC_SINGLE_EXT("Voice Stub", MSM_BACKEND_DAI_AUXPCM_RX,
- MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
- msm_routing_put_voice_stub_mixer),
- SOC_SINGLE_EXT("Voice2 Stub", MSM_BACKEND_DAI_AUXPCM_RX,
- MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
- msm_routing_put_voice_stub_mixer),
- SOC_SINGLE_EXT("VoLTE Stub", MSM_BACKEND_DAI_AUXPCM_RX,
- MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
- msm_routing_put_voice_stub_mixer),
SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_AUXPCM_RX,
MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer,
msm_routing_put_voice_mixer),
@@ -8338,9 +8281,6 @@
SOC_SINGLE_EXT("Voip", MSM_BACKEND_DAI_SEC_AUXPCM_RX,
MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
msm_routing_put_voice_mixer),
- SOC_SINGLE_EXT("Voice Stub", MSM_BACKEND_DAI_SEC_AUXPCM_RX,
- MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
- msm_routing_put_voice_stub_mixer),
SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_SEC_AUXPCM_RX,
MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer,
msm_routing_put_voice_mixer),
@@ -8359,9 +8299,6 @@
SOC_SINGLE_EXT("Voip", MSM_BACKEND_DAI_TERT_AUXPCM_RX,
MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
msm_routing_put_voice_mixer),
- SOC_SINGLE_EXT("Voice Stub", MSM_BACKEND_DAI_TERT_AUXPCM_RX,
- MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
- msm_routing_put_voice_stub_mixer),
SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_TERT_AUXPCM_RX,
MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer,
msm_routing_put_voice_mixer),
@@ -8380,9 +8317,6 @@
SOC_SINGLE_EXT("Voip", MSM_BACKEND_DAI_QUAT_AUXPCM_RX,
MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
msm_routing_put_voice_mixer),
- SOC_SINGLE_EXT("Voice Stub", MSM_BACKEND_DAI_QUAT_AUXPCM_RX,
- MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
- msm_routing_put_voice_stub_mixer),
SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_QUAT_AUXPCM_RX,
MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer,
msm_routing_put_voice_mixer),
@@ -8401,9 +8335,6 @@
SOC_SINGLE_EXT("Voip", MSM_BACKEND_DAI_QUIN_AUXPCM_RX,
MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
msm_routing_put_voice_mixer),
- SOC_SINGLE_EXT("Voice Stub", MSM_BACKEND_DAI_QUIN_AUXPCM_RX,
- MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
- msm_routing_put_voice_stub_mixer),
SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_QUIN_AUXPCM_RX,
MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer,
msm_routing_put_voice_mixer),
@@ -8422,15 +8353,6 @@
SOC_SINGLE_EXT("Voip", MSM_BACKEND_DAI_HDMI_RX,
MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
msm_routing_put_voice_mixer),
- SOC_SINGLE_EXT("Voice Stub", MSM_BACKEND_DAI_HDMI_RX,
- MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
- msm_routing_put_voice_stub_mixer),
- SOC_SINGLE_EXT("Voice2 Stub", MSM_BACKEND_DAI_HDMI_RX,
- MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
- msm_routing_put_voice_stub_mixer),
- SOC_SINGLE_EXT("VoLTE Stub", MSM_BACKEND_DAI_HDMI_RX,
- MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
- msm_routing_put_voice_stub_mixer),
SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_HDMI_RX,
MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer,
msm_routing_put_voice_mixer),
@@ -8449,15 +8371,6 @@
SOC_SINGLE_EXT("Voip", MSM_BACKEND_DAI_SLIMBUS_7_RX,
MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
msm_routing_put_voice_mixer),
- SOC_SINGLE_EXT("Voice Stub", MSM_BACKEND_DAI_SLIMBUS_7_RX,
- MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
- msm_routing_put_voice_stub_mixer),
- SOC_SINGLE_EXT("Voice2 Stub", MSM_BACKEND_DAI_SLIMBUS_7_RX,
- MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
- msm_routing_put_voice_stub_mixer),
- SOC_SINGLE_EXT("VoLTE Stub", MSM_BACKEND_DAI_SLIMBUS_7_RX,
- MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
- msm_routing_put_voice_stub_mixer),
SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_SLIMBUS_7_RX,
MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer,
msm_routing_put_voice_mixer),
@@ -8476,15 +8389,6 @@
SOC_SINGLE_EXT("Voip", MSM_BACKEND_DAI_SLIMBUS_8_RX,
MSM_FRONTEND_DAI_VOIP, 1, 0, msm_routing_get_voice_mixer,
msm_routing_put_voice_mixer),
- SOC_SINGLE_EXT("Voice Stub", MSM_BACKEND_DAI_SLIMBUS_8_RX,
- MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
- msm_routing_put_voice_stub_mixer),
- SOC_SINGLE_EXT("Voice2 Stub", MSM_BACKEND_DAI_SLIMBUS_8_RX,
- MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
- msm_routing_put_voice_stub_mixer),
- SOC_SINGLE_EXT("VoLTE Stub", MSM_BACKEND_DAI_SLIMBUS_8_RX,
- MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
- msm_routing_put_voice_stub_mixer),
SOC_SINGLE_EXT("DTMF", MSM_BACKEND_DAI_SLIMBUS_8_RX,
MSM_FRONTEND_DAI_DTMF_RX, 1, 0, msm_routing_get_voice_mixer,
msm_routing_put_voice_mixer),
@@ -8506,39 +8410,30 @@
};
static const struct snd_kcontrol_new stub_rx_mixer_controls[] = {
- SOC_SINGLE_EXT("Voice Stub", MSM_BACKEND_DAI_EXTPROC_RX,
- MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
- msm_routing_put_voice_stub_mixer),
- SOC_SINGLE_EXT("Voice2 Stub", MSM_BACKEND_DAI_EXTPROC_RX,
- MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
- msm_routing_put_voice_stub_mixer),
- SOC_SINGLE_EXT("VoLTE Stub", MSM_BACKEND_DAI_EXTPROC_RX,
- MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
- msm_routing_put_voice_stub_mixer),
+ SOC_SINGLE_EXT("VoiceMMode1", MSM_BACKEND_DAI_EXTPROC_RX,
+ MSM_FRONTEND_DAI_VOICEMMODE1, 1, 0, msm_routing_get_voice_mixer,
+ msm_routing_put_voice_mixer),
+ SOC_SINGLE_EXT("VoiceMMode2", MSM_BACKEND_DAI_EXTPROC_RX,
+ MSM_FRONTEND_DAI_VOICEMMODE2, 1, 0, msm_routing_get_voice_mixer,
+ msm_routing_put_voice_mixer),
};
static const struct snd_kcontrol_new slimbus_1_rx_mixer_controls[] = {
- SOC_SINGLE_EXT("Voice Stub", MSM_BACKEND_DAI_SLIMBUS_1_RX,
- MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
- msm_routing_put_voice_stub_mixer),
- SOC_SINGLE_EXT("Voice2 Stub", MSM_BACKEND_DAI_SLIMBUS_1_RX,
- MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
- msm_routing_put_voice_stub_mixer),
- SOC_SINGLE_EXT("VoLTE Stub", MSM_BACKEND_DAI_SLIMBUS_1_RX,
- MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
- msm_routing_put_voice_stub_mixer),
+ SOC_SINGLE_EXT("VoiceMMode1", MSM_BACKEND_DAI_SLIMBUS_1_RX,
+ MSM_FRONTEND_DAI_VOICEMMODE1, 1, 0, msm_routing_get_voice_mixer,
+ msm_routing_put_voice_mixer),
+ SOC_SINGLE_EXT("VoiceMMode2", MSM_BACKEND_DAI_SLIMBUS_1_RX,
+ MSM_FRONTEND_DAI_VOICEMMODE2, 1, 0, msm_routing_get_voice_mixer,
+ msm_routing_put_voice_mixer),
};
static const struct snd_kcontrol_new slimbus_3_rx_mixer_controls[] = {
- SOC_SINGLE_EXT("Voice Stub", MSM_BACKEND_DAI_SLIMBUS_3_RX,
- MSM_FRONTEND_DAI_VOICE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
- msm_routing_put_voice_stub_mixer),
- SOC_SINGLE_EXT("Voice2 Stub", MSM_BACKEND_DAI_SLIMBUS_3_RX,
- MSM_FRONTEND_DAI_VOICE2_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
- msm_routing_put_voice_stub_mixer),
- SOC_SINGLE_EXT("VoLTE Stub", MSM_BACKEND_DAI_SLIMBUS_3_RX,
- MSM_FRONTEND_DAI_VOLTE_STUB, 1, 0, msm_routing_get_voice_stub_mixer,
- msm_routing_put_voice_stub_mixer),
+ SOC_SINGLE_EXT("VoiceMMode1", MSM_BACKEND_DAI_SLIMBUS_3_RX,
+ MSM_FRONTEND_DAI_VOICEMMODE1, 1, 0, msm_routing_get_voice_mixer,
+ msm_routing_put_voice_mixer),
+ SOC_SINGLE_EXT("VoiceMMode2", MSM_BACKEND_DAI_SLIMBUS_3_RX,
+ MSM_FRONTEND_DAI_VOICEMMODE2, 1, 0, msm_routing_get_voice_mixer,
+ msm_routing_put_voice_mixer),
};
static const struct snd_kcontrol_new tx_voicemmode1_mixer_controls[] = {
@@ -13562,6 +13457,9 @@
SND_SOC_DAPM_MIXER("USB_AUDIO_RX Port Mixer",
SND_SOC_NOPM, 0, 0, usb_rx_port_mixer_controls,
ARRAY_SIZE(usb_rx_port_mixer_controls)),
+ SND_SOC_DAPM_MIXER("DISPLAY_PORT_RX_Voice Mixer",
+ SND_SOC_NOPM, 0, 0, display_port_rx_voice_mixer_controls,
+ ARRAY_SIZE(display_port_rx_voice_mixer_controls)),
/* lsm mixer definitions */
SND_SOC_DAPM_MIXER("LSM1 Mixer", SND_SOC_NOPM, 0, 0,
lsm1_mixer_controls, ARRAY_SIZE(lsm1_mixer_controls)),
@@ -15011,9 +14909,6 @@
{"SLIM_0_RX_Voice Mixer", "Voip", "VOIP_DL"},
{"SLIM_0_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"},
- {"SLIM_0_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"},
- {"SLIM_0_RX_Voice Mixer", "Voice2 Stub", "VOICE2_STUB_DL"},
- {"SLIM_0_RX_Voice Mixer", "VoLTE Stub", "VOLTE_STUB_DL"},
{"SLIM_0_RX_Voice Mixer", "QCHAT", "QCHAT_DL"},
{"SLIM_0_RX_Voice Mixer", "VoiceMMode1", "VOICEMMODE1_DL"},
{"SLIM_0_RX_Voice Mixer", "VoiceMMode2", "VOICEMMODE2_DL"},
@@ -15021,9 +14916,6 @@
{"SLIM_6_RX_Voice Mixer", "Voip", "VOIP_DL"},
{"SLIM_6_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"},
- {"SLIM_6_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"},
- {"SLIM_6_RX_Voice Mixer", "Voice2 Stub", "VOICE2_STUB_DL"},
- {"SLIM_6_RX_Voice Mixer", "VoLTE Stub", "VOLTE_STUB_DL"},
{"SLIM_6_RX_Voice Mixer", "QCHAT", "QCHAT_DL"},
{"SLIM_6_RX_Voice Mixer", "VoiceMMode1", "VOICEMMODE1_DL"},
{"SLIM_6_RX_Voice Mixer", "VoiceMMode2", "VOICEMMODE2_DL"},
@@ -15031,21 +14923,23 @@
{"USB_AUDIO_RX_Voice Mixer", "Voip", "VOIP_DL"},
{"USB_AUDIO_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"},
- {"USB_AUDIO_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"},
- {"USB_AUDIO_RX_Voice Mixer", "Voice2 Stub", "VOICE2_STUB_DL"},
- {"USB_AUDIO_RX_Voice Mixer", "VoLTE Stub", "VOLTE_STUB_DL"},
{"USB_AUDIO_RX_Voice Mixer", "QCHAT", "QCHAT_DL"},
{"USB_AUDIO_RX_Voice Mixer", "VoiceMMode1", "VOICEMMODE1_DL"},
{"USB_AUDIO_RX_Voice Mixer", "VoiceMMode2", "VOICEMMODE2_DL"},
{"USB_AUDIO_RX", NULL, "USB_AUDIO_RX_Voice Mixer"},
+ {"DISPLAY_PORT_RX_Voice Mixer", "Voip", "VOIP_DL"},
+ {"DISPLAY_PORT_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"},
+ {"DISPLAY_PORT_RX_Voice Mixer", "QCHAT", "QCHAT_DL"},
+ {"DISPLAY_PORT_RX_Voice Mixer", "VoiceMMode1", "VOICEMMODE1_DL"},
+ {"DISPLAY_PORT_RX_Voice Mixer", "VoiceMMode2", "VOICEMMODE2_DL"},
+ {"DISPLAY_PORT", NULL, "DISPLAY_PORT_RX_Voice Mixer"},
+
{"INTERNAL_BT_SCO_RX_Voice Mixer", "Voip", "VOIP_DL"},
{"INTERNAL_BT_SCO_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"},
{"INTERNAL_BT_SCO_RX_Voice Mixer", "QCHAT", "QCHAT_DL"},
{"INTERNAL_BT_SCO_RX_Voice Mixer", "VoiceMMode1", "VOICEMMODE1_DL"},
{"INTERNAL_BT_SCO_RX_Voice Mixer", "VoiceMMode2", "VOICEMMODE2_DL"},
- {"INTERNAL_BT_SCO_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"},
- {"INTERNAL_BT_SCO_RX_Voice Mixer", "Voice2 Stub", "VOICE2_STUB_DL"},
{"INT_BT_SCO_RX", NULL, "INTERNAL_BT_SCO_RX_Voice Mixer"},
{"AFE_PCM_RX_Voice Mixer", "Voip", "VOIP_DL"},
@@ -15057,9 +14951,6 @@
{"AUX_PCM_RX_Voice Mixer", "Voip", "VOIP_DL"},
{"AUX_PCM_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"},
- {"AUX_PCM_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"},
- {"AUX_PCM_RX_Voice Mixer", "Voice2 Stub", "VOICE2_STUB_DL"},
- {"AUX_PCM_RX_Voice Mixer", "VoLTE Stub", "VOLTE_STUB_DL"},
{"AUX_PCM_RX_Voice Mixer", "QCHAT", "QCHAT_DL"},
{"AUX_PCM_RX_Voice Mixer", "VoiceMMode1", "VOICEMMODE1_DL"},
{"AUX_PCM_RX_Voice Mixer", "VoiceMMode2", "VOICEMMODE2_DL"},
@@ -15067,7 +14958,6 @@
{"SEC_AUX_PCM_RX_Voice Mixer", "Voip", "VOIP_DL"},
{"SEC_AUX_PCM_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"},
- {"SEC_AUX_PCM_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"},
{"SEC_AUX_PCM_RX_Voice Mixer", "QCHAT", "QCHAT_DL"},
{"SEC_AUX_PCM_RX_Voice Mixer", "VoiceMMode1", "VOICEMMODE1_DL"},
{"SEC_AUX_PCM_RX_Voice Mixer", "VoiceMMode2", "VOICEMMODE2_DL"},
@@ -15075,7 +14965,6 @@
{"TERT_AUX_PCM_RX_Voice Mixer", "Voip", "VOIP_DL"},
{"TERT_AUX_PCM_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"},
- {"TERT_AUX_PCM_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"},
{"TERT_AUX_PCM_RX_Voice Mixer", "QCHAT", "QCHAT_DL"},
{"TERT_AUX_PCM_RX_Voice Mixer", "VoiceMMode1", "VOICEMMODE1_DL"},
{"TERT_AUX_PCM_RX_Voice Mixer", "VoiceMMode2", "VOICEMMODE2_DL"},
@@ -15083,7 +14972,6 @@
{"QUAT_AUX_PCM_RX_Voice Mixer", "Voip", "VOIP_DL"},
{"QUAT_AUX_PCM_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"},
- {"QUAT_AUX_PCM_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"},
{"QUAT_AUX_PCM_RX_Voice Mixer", "QCHAT", "QCHAT_DL"},
{"QUAT_AUX_PCM_RX_Voice Mixer", "VoiceMMode1", "VOICEMMODE1_DL"},
{"QUAT_AUX_PCM_RX_Voice Mixer", "VoiceMMode2", "VOICEMMODE2_DL"},
@@ -15091,7 +14979,6 @@
{"QUIN_AUX_PCM_RX_Voice Mixer", "Voip", "VOIP_DL"},
{"QUIN_AUX_PCM_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"},
- {"QUIN_AUX_PCM_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"},
{"QUIN_AUX_PCM_RX_Voice Mixer", "QCHAT", "QCHAT_DL"},
{"QUIN_AUX_PCM_RX_Voice Mixer", "VoiceMMode1", "VOICEMMODE1_DL"},
{"QUIN_AUX_PCM_RX_Voice Mixer", "VoiceMMode2", "VOICEMMODE2_DL"},
@@ -15106,7 +14993,6 @@
{"HDMI", NULL, "HDMI_DL_HL"},
{"MI2S_RX_Voice Mixer", "Voip", "VOIP_DL"},
- {"MI2S_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"},
{"MI2S_RX_Voice Mixer", "QCHAT", "QCHAT_DL"},
{"MI2S_RX_Voice Mixer", "VoiceMMode1", "VOICEMMODE1_DL"},
{"MI2S_RX_Voice Mixer", "VoiceMMode2", "VOICEMMODE2_DL"},
@@ -15114,9 +15000,6 @@
{"MI2S_RX", NULL, "MI2S_RX_Voice Mixer"},
{"PRI_MI2S_RX_Voice Mixer", "Voip", "VOIP_DL"},
- {"PRI_MI2S_RX_Voice Mixer", "VoLTE Stub", "VOLTE_STUB_DL"},
- {"PRI_MI2S_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"},
- {"PRI_MI2S_RX_Voice Mixer", "Voice2 Stub", "VOICE2_STUB_DL"},
{"PRI_MI2S_RX_Voice Mixer", "QCHAT", "QCHAT_DL"},
{"PRI_MI2S_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"},
{"PRI_MI2S_RX_Voice Mixer", "VoiceMMode1", "VOICEMMODE1_DL"},
@@ -15138,9 +15021,6 @@
{"INT4_MI2S_RX", NULL, "INT4_MI2S_RX_Voice Mixer"},
{"TERT_MI2S_RX_Voice Mixer", "Voip", "VOIP_DL"},
- {"TERT_MI2S_RX_Voice Mixer", "VoLTE Stub", "VOLTE_STUB_DL"},
- {"TERT_MI2S_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"},
- {"TERT_MI2S_RX_Voice Mixer", "Voice2 Stub", "VOICE2_STUB_DL"},
{"TERT_MI2S_RX_Voice Mixer", "QCHAT", "QCHAT_DL"},
{"TERT_MI2S_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"},
{"TERT_MI2S_RX_Voice Mixer", "VoiceMMode1", "VOICEMMODE1_DL"},
@@ -15148,18 +15028,12 @@
{"TERT_MI2S_RX", NULL, "TERT_MI2S_RX_Voice Mixer"},
{"QUAT_MI2S_RX_Voice Mixer", "Voip", "VOIP_DL"},
- {"QUAT_MI2S_RX_Voice Mixer", "VoLTE Stub", "VOLTE_STUB_DL"},
- {"QUAT_MI2S_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"},
- {"QUAT_MI2S_RX_Voice Mixer", "Voice2 Stub", "VOICE2_STUB_DL"},
{"QUAT_MI2S_RX_Voice Mixer", "QCHAT", "QCHAT_DL"},
{"QUAT_MI2S_RX_Voice Mixer", "VoiceMMode1", "VOICEMMODE1_DL"},
{"QUAT_MI2S_RX_Voice Mixer", "VoiceMMode2", "VOICEMMODE2_DL"},
{"QUAT_MI2S_RX", NULL, "QUAT_MI2S_RX_Voice Mixer"},
{"QUIN_MI2S_RX_Voice Mixer", "Voip", "VOIP_DL"},
- {"QUIN_MI2S_RX_Voice Mixer", "VoLTE Stub", "VOLTE_STUB_DL"},
- {"QUIN_MI2S_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"},
- {"QUIN_MI2S_RX_Voice Mixer", "Voice2 Stub", "VOICE2_STUB_DL"},
{"QUIN_MI2S_RX_Voice Mixer", "QCHAT", "QCHAT_DL"},
{"QUIN_MI2S_RX_Voice Mixer", "VoiceMMode1", "VOICEMMODE1_DL"},
{"QUIN_MI2S_RX_Voice Mixer", "VoiceMMode2", "VOICEMMODE2_DL"},
@@ -15174,11 +15048,7 @@
{"VOC_EXT_EC MUX", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
{"VOC_EXT_EC MUX", "QUIN_MI2S_TX", "QUIN_MI2S_TX"},
{"VOC_EXT_EC MUX", "SLIM_1_TX", "SLIMBUS_1_TX"},
- {"CS-VOICE_UL1", NULL, "VOC_EXT_EC MUX"},
{"VOIP_UL", NULL, "VOC_EXT_EC MUX"},
- {"VoLTE_UL", NULL, "VOC_EXT_EC MUX"},
- {"VOICE2_UL", NULL, "VOC_EXT_EC MUX"},
- {"VoWLAN_UL", NULL, "VOC_EXT_EC MUX"},
{"VOICEMMODE1_UL", NULL, "VOC_EXT_EC MUX"},
{"VOICEMMODE2_UL", NULL, "VOC_EXT_EC MUX"},
@@ -15259,6 +15129,16 @@
{"AUDIO_REF_EC_UL19 MUX", "TERT_MI2S_TX", "TERT_MI2S_TX"},
{"AUDIO_REF_EC_UL19 MUX", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
+
+ {"LSM1_UL_HL", NULL, "AUDIO_REF_EC_UL1 MUX"},
+ {"LSM2_UL_HL", NULL, "AUDIO_REF_EC_UL1 MUX"},
+ {"LSM3_UL_HL", NULL, "AUDIO_REF_EC_UL1 MUX"},
+ {"LSM4_UL_HL", NULL, "AUDIO_REF_EC_UL1 MUX"},
+ {"LSM5_UL_HL", NULL, "AUDIO_REF_EC_UL1 MUX"},
+ {"LSM6_UL_HL", NULL, "AUDIO_REF_EC_UL1 MUX"},
+ {"LSM7_UL_HL", NULL, "AUDIO_REF_EC_UL1 MUX"},
+ {"LSM8_UL_HL", NULL, "AUDIO_REF_EC_UL1 MUX"},
+
{"MM_UL1", NULL, "AUDIO_REF_EC_UL1 MUX"},
{"MM_UL2", NULL, "AUDIO_REF_EC_UL2 MUX"},
{"MM_UL3", NULL, "AUDIO_REF_EC_UL3 MUX"},
@@ -15273,75 +15153,6 @@
{"MM_UL18", NULL, "AUDIO_REF_EC_UL18 MUX"},
{"MM_UL19", NULL, "AUDIO_REF_EC_UL19 MUX"},
- {"Voice_Tx Mixer", "PRI_TX_Voice", "PRI_I2S_TX"},
- {"Voice_Tx Mixer", "PRI_MI2S_TX_Voice", "PRI_MI2S_TX"},
- {"Voice_Tx Mixer", "MI2S_TX_Voice", "MI2S_TX"},
- {"Voice_Tx Mixer", "TERT_MI2S_TX_Voice", "TERT_MI2S_TX"},
- {"Voice_Tx Mixer", "SLIM_0_TX_Voice", "SLIMBUS_0_TX"},
- {"Voice_Tx Mixer", "SLIM_7_TX_Voice", "SLIMBUS_7_TX"},
- {"Voice_Tx Mixer", "SLIM_8_TX_Voice", "SLIMBUS_8_TX"},
- {"Voice_Tx Mixer", "USB_AUDIO_TX_Voice", "USB_AUDIO_TX"},
- {"Voice_Tx Mixer", "INTERNAL_BT_SCO_TX_Voice", "INT_BT_SCO_TX"},
- {"Voice_Tx Mixer", "AFE_PCM_TX_Voice", "PCM_TX"},
- {"Voice_Tx Mixer", "AUX_PCM_TX_Voice", "AUX_PCM_TX"},
- {"Voice_Tx Mixer", "SEC_AUX_PCM_TX_Voice", "SEC_AUX_PCM_TX"},
- {"Voice_Tx Mixer", "TERT_AUX_PCM_TX_Voice", "TERT_AUX_PCM_TX"},
- {"Voice_Tx Mixer", "QUAT_AUX_PCM_TX_Voice", "QUAT_AUX_PCM_TX"},
- {"Voice_Tx Mixer", "QUIN_AUX_PCM_TX_Voice", "QUIN_AUX_PCM_TX"},
- {"Voice_Tx Mixer", "SEC_MI2S_TX_Voice", "SEC_MI2S_TX"},
- {"CS-VOICE_UL1", NULL, "Voice_Tx Mixer"},
-
- {"Voice2_Tx Mixer", "PRI_TX_Voice2", "PRI_I2S_TX"},
- {"Voice2_Tx Mixer", "PRI_MI2S_TX_Voice2", "PRI_MI2S_TX"},
- {"Voice2_Tx Mixer", "MI2S_TX_Voice2", "MI2S_TX"},
- {"Voice2_Tx Mixer", "TERT_MI2S_TX_Voice2", "TERT_MI2S_TX"},
- {"Voice2_Tx Mixer", "SLIM_0_TX_Voice2", "SLIMBUS_0_TX"},
- {"Voice2_Tx Mixer", "SLIM_7_TX_Voice2", "SLIMBUS_7_TX"},
- {"Voice2_Tx Mixer", "SLIM_8_TX_Voice2", "SLIMBUS_8_TX"},
- {"Voice2_Tx Mixer", "USB_AUDIO_TX_Voice2", "USB_AUDIO_TX"},
- {"Voice2_Tx Mixer", "INTERNAL_BT_SCO_TX_Voice2", "INT_BT_SCO_TX"},
- {"Voice2_Tx Mixer", "AFE_PCM_TX_Voice2", "PCM_TX"},
- {"Voice2_Tx Mixer", "AUX_PCM_TX_Voice2", "AUX_PCM_TX"},
- {"Voice2_Tx Mixer", "SEC_AUX_PCM_TX_Voice2", "SEC_AUX_PCM_TX"},
- {"Voice2_Tx Mixer", "TERT_AUX_PCM_TX_Voice2", "TERT_AUX_PCM_TX"},
- {"Voice2_Tx Mixer", "QUAT_AUX_PCM_TX_Voice2", "QUAT_AUX_PCM_TX"},
- {"Voice2_Tx Mixer", "QUIN_AUX_PCM_TX_Voice2", "QUIN_AUX_PCM_TX"},
- {"VOICE2_UL", NULL, "Voice2_Tx Mixer"},
-
- {"VoLTE_Tx Mixer", "PRI_TX_VoLTE", "PRI_I2S_TX"},
- {"VoLTE_Tx Mixer", "SLIM_0_TX_VoLTE", "SLIMBUS_0_TX"},
- {"VoLTE_Tx Mixer", "SLIM_7_TX_VoLTE", "SLIMBUS_7_TX"},
- {"VoLTE_Tx Mixer", "SLIM_8_TX_VoLTE", "SLIMBUS_8_TX"},
- {"VoLTE_Tx Mixer", "USB_AUDIO_TX_VoLTE", "USB_AUDIO_TX"},
- {"VoLTE_Tx Mixer", "INTERNAL_BT_SCO_TX_VoLTE", "INT_BT_SCO_TX"},
- {"VoLTE_Tx Mixer", "AFE_PCM_TX_VoLTE", "PCM_TX"},
- {"VoLTE_Tx Mixer", "AUX_PCM_TX_VoLTE", "AUX_PCM_TX"},
- {"VoLTE_Tx Mixer", "SEC_AUX_PCM_TX_VoLTE", "SEC_AUX_PCM_TX"},
- {"VoLTE_Tx Mixer", "TERT_AUX_PCM_TX_VoLTE", "TERT_AUX_PCM_TX"},
- {"VoLTE_Tx Mixer", "QUAT_AUX_PCM_TX_VoLTE", "QUAT_AUX_PCM_TX"},
- {"VoLTE_Tx Mixer", "QUIN_AUX_PCM_TX_VoLTE", "QUIN_AUX_PCM_TX"},
- {"VoLTE_Tx Mixer", "MI2S_TX_VoLTE", "MI2S_TX"},
- {"VoLTE_Tx Mixer", "PRI_MI2S_TX_VoLTE", "PRI_MI2S_TX"},
- {"VoLTE_Tx Mixer", "TERT_MI2S_TX_VoLTE", "TERT_MI2S_TX"},
- {"VoLTE_UL", NULL, "VoLTE_Tx Mixer"},
-
- {"VoWLAN_Tx Mixer", "PRI_TX_VoWLAN", "PRI_I2S_TX"},
- {"VoWLAN_Tx Mixer", "SLIM_0_TX_VoWLAN", "SLIMBUS_0_TX"},
- {"VoWLAN_Tx Mixer", "SLIM_7_TX_VoWLAN", "SLIMBUS_7_TX"},
- {"VoWLAN_Tx Mixer", "SLIM_8_TX_VoWLAN", "SLIMBUS_8_TX"},
- {"VoWLAN_Tx Mixer", "USB_AUDIO_TX_VoWLAN", "USB_AUDIO_TX"},
- {"VoWLAN_Tx Mixer", "INTERNAL_BT_SCO_TX_VoWLAN", "INT_BT_SCO_TX"},
- {"VoWLAN_Tx Mixer", "AFE_PCM_TX_VoWLAN", "PCM_TX"},
- {"VoWLAN_Tx Mixer", "AUX_PCM_TX_VoWLAN", "AUX_PCM_TX"},
- {"VoWLAN_Tx Mixer", "SEC_AUX_PCM_TX_VoWLAN", "SEC_AUX_PCM_TX"},
- {"VoWLAN_Tx Mixer", "TERT_AUX_PCM_TX_VoWLAN", "TERT_AUX_PCM_TX"},
- {"VoWLAN_Tx Mixer", "QUAT_AUX_PCM_TX_VoWLAN", "QUAT_AUX_PCM_TX"},
- {"VoWLAN_Tx Mixer", "QUIN_AUX_PCM_TX_VoWLAN", "QUIN_AUX_PCM_TX"},
- {"VoWLAN_Tx Mixer", "MI2S_TX_VoWLAN", "MI2S_TX"},
- {"VoWLAN_Tx Mixer", "PRI_MI2S_TX_VoWLAN", "PRI_MI2S_TX"},
- {"VoWLAN_Tx Mixer", "TERT_MI2S_TX_VoWLAN", "TERT_MI2S_TX"},
- {"VoWLAN_UL", NULL, "VoWLAN_Tx Mixer"},
-
{"VoiceMMode1_Tx Mixer", "PRI_TX_MMode1", "PRI_I2S_TX"},
{"VoiceMMode1_Tx Mixer", "PRI_MI2S_TX_MMode1", "PRI_MI2S_TX"},
{"VoiceMMode1_Tx Mixer", "MI2S_TX_MMode1", "MI2S_TX"},
@@ -16161,27 +15972,20 @@
{"Voice2 Stub Tx Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
{"VOICE2_STUB_UL", NULL, "Voice2 Stub Tx Mixer"},
- {"STUB_RX Mixer", "Voice Stub", "VOICE_STUB_DL"},
- {"STUB_RX Mixer", "Voice2 Stub", "VOICE2_STUB_DL"},
- {"STUB_RX Mixer", "VoLTE Stub", "VOLTE_STUB_DL"},
+ {"STUB_RX Mixer", "VoiceMMode1", "VOICEMMODE1_DL"},
+ {"STUB_RX Mixer", "VoiceMMode2", "VOICEMMODE2_DL"},
{"STUB_RX", NULL, "STUB_RX Mixer"},
- {"SLIMBUS_1_RX Mixer", "Voice Stub", "VOICE_STUB_DL"},
- {"SLIMBUS_1_RX Mixer", "Voice2 Stub", "VOICE2_STUB_DL"},
- {"SLIMBUS_1_RX Mixer", "VoLTE Stub", "VOLTE_STUB_DL"},
+
+ {"SLIMBUS_1_RX Mixer", "VoiceMMode1", "VOICEMMODE1_DL"},
+ {"SLIMBUS_1_RX Mixer", "VoiceMMode2", "VOICEMMODE2_DL"},
{"SLIMBUS_1_RX", NULL, "SLIMBUS_1_RX Mixer"},
- {"AFE_PCM_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"},
- {"AFE_PCM_RX_Voice Mixer", "Voice2 Stub", "VOICE2_STUB_DL"},
- {"AFE_PCM_RX_Voice Mixer", "VoLTE Stub", "VOLTE_STUB_DL"},
- {"SLIMBUS_3_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"},
- {"SLIMBUS_3_RX_Voice Mixer", "Voice2 Stub", "VOICE2_STUB_DL"},
- {"SLIMBUS_3_RX_Voice Mixer", "VoLTE Stub", "VOLTE_STUB_DL"},
+
+ {"SLIMBUS_3_RX_Voice Mixer", "VoiceMMode1", "VOICEMMODE1_DL"},
+ {"SLIMBUS_3_RX_Voice Mixer", "VoiceMMode2", "VOICEMMODE2_DL"},
{"SLIMBUS_3_RX", NULL, "SLIMBUS_3_RX_Voice Mixer"},
{"SLIM_7_RX_Voice Mixer", "Voip", "VOIP_DL"},
{"SLIM_7_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"},
- {"SLIM_7_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"},
- {"SLIM_7_RX_Voice Mixer", "Voice2 Stub", "VOICE2_STUB_DL"},
- {"SLIM_7_RX_Voice Mixer", "VoLTE Stub", "VOLTE_STUB_DL"},
{"SLIM_7_RX_Voice Mixer", "QCHAT", "QCHAT_DL"},
{"SLIM_7_RX_Voice Mixer", "VoiceMMode1", "VOICEMMODE1_DL"},
{"SLIM_7_RX_Voice Mixer", "VoiceMMode2", "VOICEMMODE2_DL"},
@@ -16189,9 +15993,6 @@
{"SLIM_8_RX_Voice Mixer", "Voip", "VOIP_DL"},
{"SLIM_8_RX_Voice Mixer", "DTMF", "DTMF_DL_HL"},
- {"SLIM_8_RX_Voice Mixer", "Voice Stub", "VOICE_STUB_DL"},
- {"SLIM_8_RX_Voice Mixer", "Voice2 Stub", "VOICE2_STUB_DL"},
- {"SLIM_8_RX_Voice Mixer", "VoLTE Stub", "VOLTE_STUB_DL"},
{"SLIM_8_RX_Voice Mixer", "QCHAT", "QCHAT_DL"},
{"SLIM_8_RX_Voice Mixer", "VoiceMMode1", "VOICEMMODE1_DL"},
{"SLIM_8_RX_Voice Mixer", "VoiceMMode2", "VOICEMMODE2_DL"},
@@ -17161,14 +16962,39 @@
return 0;
}
+static int get_cal_type_index(int32_t cal_type)
+{
+ int ret = -EINVAL;
+
+ switch (cal_type) {
+ case ADM_TOPOLOGY_CAL_TYPE:
+ ret = ADM_TOPOLOGY_CAL_TYPE_IDX;
+ break;
+ case ADM_LSM_TOPOLOGY_CAL_TYPE:
+ ret = ADM_LSM_TOPOLOGY_CAL_TYPE_IDX;
+ break;
+ default:
+ pr_err("%s: Invalid cal type %d\n", __func__, cal_type);
+ }
+ return ret;
+}
+
static int msm_routing_set_cal(int32_t cal_type,
size_t data_size, void *data)
{
int ret = 0;
-
+ int cal_index;
pr_debug("%s\n", __func__);
- ret = cal_utils_set_cal(data_size, data, cal_data, 0, NULL);
+ cal_index = get_cal_type_index(cal_type);
+ if (cal_index < 0) {
+ pr_err("%s: Could not get cal index %d\n",
+ __func__, cal_index);
+ ret = -EINVAL;
+ goto done;
+ }
+
+ ret = cal_utils_set_cal(data_size, data, cal_data[cal_index], 0, NULL);
if (ret < 0) {
pr_err("%s: cal_utils_set_cal failed, ret = %d, cal type = %d!\n",
__func__, ret, cal_type);
@@ -17183,22 +17009,27 @@
{
pr_debug("%s\n", __func__);
- cal_utils_destroy_cal_types(1, &cal_data);
+ cal_utils_destroy_cal_types(MAX_ROUTING_CAL_TYPES, &cal_data[0]);
}
static int msm_routing_init_cal_data(void)
{
int ret = 0;
- struct cal_type_info cal_type_info = {
- {ADM_TOPOLOGY_CAL_TYPE,
+ struct cal_type_info cal_type_info[] = {
+ {{ADM_TOPOLOGY_CAL_TYPE,
{NULL, NULL, NULL,
msm_routing_set_cal, NULL, NULL} },
- {NULL, NULL, cal_utils_match_buf_num}
+ {NULL, NULL, cal_utils_match_buf_num} },
+
+ {{ADM_LSM_TOPOLOGY_CAL_TYPE,
+ {NULL, NULL, NULL,
+ msm_routing_set_cal, NULL, NULL} },
+ {NULL, NULL, cal_utils_match_buf_num} },
};
pr_debug("%s\n", __func__);
- ret = cal_utils_create_cal_types(1, &cal_data,
- &cal_type_info);
+ ret = cal_utils_create_cal_types(MAX_ROUTING_CAL_TYPES, &cal_data[0],
+ &cal_type_info[0]);
if (ret < 0) {
pr_err("%s: could not create cal type!\n",
__func__);
@@ -17227,7 +17058,7 @@
return platform_driver_register(&msm_routing_pcm_driver);
}
-void __exit msm_soc_routing_platform_exit(void)
+void msm_soc_routing_platform_exit(void)
{
msm_routing_delete_cal_data();
memset(&be_dai_name_table, 0, sizeof(be_dai_name_table));
diff --git a/asoc/msm-pcm-routing-v2.h b/asoc/msm-pcm-routing-v2.h
index 5360b5b..a1977b4 100644
--- a/asoc/msm-pcm-routing-v2.h
+++ b/asoc/msm-pcm-routing-v2.h
@@ -433,6 +433,12 @@
#define BE_DAI_PORT_SESSIONS_IDX_MAX 4
#define BE_DAI_FE_SESSIONS_IDX_MAX 2
+enum {
+ ADM_TOPOLOGY_CAL_TYPE_IDX = 0,
+ ADM_LSM_TOPOLOGY_CAL_TYPE_IDX,
+ MAX_ROUTING_CAL_TYPES
+};
+
struct msm_pcm_routing_evt {
void (*event_func)(enum msm_pcm_routing_event, void *);
void *priv_data;
diff --git a/asoc/msm-pcm-voice-v2.c b/asoc/msm-pcm-voice-v2.c
index 7b236b4..b82c587 100644
--- a/asoc/msm-pcm-voice-v2.c
+++ b/asoc/msm-pcm-voice-v2.c
@@ -770,7 +770,7 @@
return platform_driver_register(&msm_pcm_driver);
}
-void __exit msm_pcm_voice_exit(void)
+void msm_pcm_voice_exit(void)
{
platform_driver_unregister(&msm_pcm_driver);
}
diff --git a/asoc/msm-pcm-voip-v2.c b/asoc/msm-pcm-voip-v2.c
index 58fc534..02cee29 100644
--- a/asoc/msm-pcm-voip-v2.c
+++ b/asoc/msm-pcm-voip-v2.c
@@ -1704,7 +1704,7 @@
return platform_driver_register(&msm_pcm_driver);
}
-void __exit msm_pcm_voip_exit(void)
+void msm_pcm_voip_exit(void)
{
platform_driver_unregister(&msm_pcm_driver);
}
diff --git a/asoc/msm-transcode-loopback-q6-v2.c b/asoc/msm-transcode-loopback-q6-v2.c
index 94ebbf7..3c8e917 100644
--- a/asoc/msm-transcode-loopback-q6-v2.c
+++ b/asoc/msm-transcode-loopback-q6-v2.c
@@ -958,7 +958,7 @@
return platform_driver_register(&msm_transcode_loopback_driver);
}
-void __exit msm_transcode_loopback_exit(void)
+void msm_transcode_loopback_exit(void)
{
mutex_destroy(&transcode_info.lock);
platform_driver_unregister(&msm_transcode_loopback_driver);
diff --git a/asoc/sdm845.c b/asoc/sdm845.c
index d75174c..f60e3a9 100644
--- a/asoc/sdm845.c
+++ b/asoc/sdm845.c
@@ -404,7 +404,9 @@
"KHZ_32", "KHZ_44P1", "KHZ_48",
"KHZ_88P2", "KHZ_96", "KHZ_176P4",
"KHZ_192", "KHZ_352P8", "KHZ_384"};
-static char const *bt_sample_rate_text[] = {"KHZ_8", "KHZ_16", "KHZ_48"};
+static char const *bt_sample_rate_text[] = {"KHZ_8", "KHZ_16",
+ "KHZ_44P1", "KHZ_48",
+ "KHZ_88P2", "KHZ_96"};
static const char *const usb_ch_text[] = {"One", "Two", "Three", "Four",
"Five", "Six", "Seven",
"Eight"};
@@ -425,9 +427,9 @@
"KHZ_48", "KHZ_176P4",
"KHZ_352P8"};
static const char *const auxpcm_rate_text[] = {"KHZ_8", "KHZ_16"};
-static char const *mi2s_rate_text[] = {"KHZ_8", "KHZ_16",
- "KHZ_32", "KHZ_44P1", "KHZ_48",
- "KHZ_96", "KHZ_192"};
+static char const *mi2s_rate_text[] = {"KHZ_8", "KHZ_11P025", "KHZ_16",
+ "KHZ_22P05", "KHZ_32", "KHZ_44P1",
+ "KHZ_48", "KHZ_96", "KHZ_192"};
static const char *const mi2s_ch_text[] = {"One", "Two", "Three", "Four",
"Five", "Six", "Seven",
"Eight"};
@@ -984,7 +986,16 @@
* value.
*/
switch (slim_rx_cfg[SLIM_RX_7].sample_rate) {
+ case SAMPLING_RATE_96KHZ:
+ ucontrol->value.integer.value[0] = 5;
+ break;
+ case SAMPLING_RATE_88P2KHZ:
+ ucontrol->value.integer.value[0] = 4;
+ break;
case SAMPLING_RATE_48KHZ:
+ ucontrol->value.integer.value[0] = 3;
+ break;
+ case SAMPLING_RATE_44P1KHZ:
ucontrol->value.integer.value[0] = 2;
break;
case SAMPLING_RATE_16KHZ:
@@ -1010,9 +1021,21 @@
slim_tx_cfg[SLIM_TX_7].sample_rate = SAMPLING_RATE_16KHZ;
break;
case 2:
+ slim_rx_cfg[SLIM_RX_7].sample_rate = SAMPLING_RATE_44P1KHZ;
+ slim_tx_cfg[SLIM_TX_7].sample_rate = SAMPLING_RATE_44P1KHZ;
+ break;
+ case 3:
slim_rx_cfg[SLIM_RX_7].sample_rate = SAMPLING_RATE_48KHZ;
slim_tx_cfg[SLIM_TX_7].sample_rate = SAMPLING_RATE_48KHZ;
break;
+ case 4:
+ slim_rx_cfg[SLIM_RX_7].sample_rate = SAMPLING_RATE_88P2KHZ;
+ slim_tx_cfg[SLIM_TX_7].sample_rate = SAMPLING_RATE_88P2KHZ;
+ break;
+ case 5:
+ slim_rx_cfg[SLIM_RX_7].sample_rate = SAMPLING_RATE_96KHZ;
+ slim_tx_cfg[SLIM_TX_7].sample_rate = SAMPLING_RATE_96KHZ;
+ break;
case 0:
default:
slim_rx_cfg[SLIM_RX_7].sample_rate = SAMPLING_RATE_8KHZ;
@@ -2184,26 +2207,32 @@
case SAMPLING_RATE_8KHZ:
sample_rate_val = 0;
break;
- case SAMPLING_RATE_16KHZ:
+ case SAMPLING_RATE_11P025KHZ:
sample_rate_val = 1;
break;
- case SAMPLING_RATE_32KHZ:
+ case SAMPLING_RATE_16KHZ:
sample_rate_val = 2;
break;
- case SAMPLING_RATE_44P1KHZ:
+ case SAMPLING_RATE_22P05KHZ:
sample_rate_val = 3;
break;
- case SAMPLING_RATE_48KHZ:
+ case SAMPLING_RATE_32KHZ:
sample_rate_val = 4;
break;
- case SAMPLING_RATE_96KHZ:
+ case SAMPLING_RATE_44P1KHZ:
sample_rate_val = 5;
break;
- case SAMPLING_RATE_192KHZ:
+ case SAMPLING_RATE_48KHZ:
sample_rate_val = 6;
break;
+ case SAMPLING_RATE_96KHZ:
+ sample_rate_val = 7;
+ break;
+ case SAMPLING_RATE_192KHZ:
+ sample_rate_val = 8;
+ break;
default:
- sample_rate_val = 4;
+ sample_rate_val = 6;
break;
}
return sample_rate_val;
@@ -2218,21 +2247,27 @@
sample_rate = SAMPLING_RATE_8KHZ;
break;
case 1:
- sample_rate = SAMPLING_RATE_16KHZ;
+ sample_rate = SAMPLING_RATE_11P025KHZ;
break;
case 2:
- sample_rate = SAMPLING_RATE_32KHZ;
+ sample_rate = SAMPLING_RATE_16KHZ;
break;
case 3:
- sample_rate = SAMPLING_RATE_44P1KHZ;
+ sample_rate = SAMPLING_RATE_22P05KHZ;
break;
case 4:
- sample_rate = SAMPLING_RATE_48KHZ;
+ sample_rate = SAMPLING_RATE_32KHZ;
break;
case 5:
- sample_rate = SAMPLING_RATE_96KHZ;
+ sample_rate = SAMPLING_RATE_44P1KHZ;
break;
case 6:
+ sample_rate = SAMPLING_RATE_48KHZ;
+ break;
+ case 7:
+ sample_rate = SAMPLING_RATE_96KHZ;
+ break;
+ case 8:
sample_rate = SAMPLING_RATE_192KHZ;
break;
default:
@@ -3618,31 +3653,44 @@
afe_clear_config(AFE_SLIMBUS_SLAVE_CONFIG);
}
-static int msm_adsp_power_up_config(struct snd_soc_codec *codec)
+static int msm_adsp_power_up_config(struct snd_soc_codec *codec,
+ struct snd_card *card)
{
int ret = 0;
unsigned long timeout;
int adsp_ready = 0;
+ bool snd_card_online = 0;
timeout = jiffies +
msecs_to_jiffies(ADSP_STATE_READY_TIMEOUT_MS);
do {
- if (q6core_is_adsp_ready()) {
- pr_debug("%s: ADSP Audio is ready\n", __func__);
- adsp_ready = 1;
- break;
+ if (!snd_card_online) {
+ snd_card_online = snd_card_is_online_state(card);
+ pr_debug("%s: Sound card is %s\n", __func__,
+ snd_card_online ? "Online" : "Offline");
}
+ if (!adsp_ready) {
+ adsp_ready = q6core_is_adsp_ready();
+ pr_debug("%s: ADSP Audio is %s\n", __func__,
+ adsp_ready ? "ready" : "not ready");
+ }
+ if (snd_card_online && adsp_ready)
+ break;
+
/*
- * ADSP will be coming up after subsystem restart and
+ * Sound card/ADSP will be coming up after subsystem restart and
* it might not be fully up when the control reaches
* here. So, wait for 50msec before checking ADSP state
*/
msleep(50);
} while (time_after(timeout, jiffies));
- if (!adsp_ready) {
- pr_err("%s: timed out waiting for ADSP Audio\n", __func__);
+ if (!snd_card_online || !adsp_ready) {
+ pr_err("%s: Timeout. Sound card is %s, ADSP Audio is %s\n",
+ __func__,
+ snd_card_online ? "Online" : "Offline",
+ adsp_ready ? "ready" : "not ready");
ret = -ETIMEDOUT;
goto err;
}
@@ -3700,7 +3748,7 @@
}
codec = rtd->codec;
- ret = msm_adsp_power_up_config(codec);
+ ret = msm_adsp_power_up_config(codec, card->snd_card);
if (ret < 0) {
dev_err(card->dev,
"%s: msm_adsp_power_up_config failed ret = %d!\n",
@@ -3798,7 +3846,7 @@
msm_codec_fn.get_afe_config_fn = tavil_get_afe_config;
- ret = msm_adsp_power_up_config(codec);
+ ret = msm_adsp_power_up_config(codec, rtd->card->snd_card);
if (ret) {
pr_err("%s: Failed to set AFE config %d\n", __func__, ret);
goto err;
@@ -7046,6 +7094,7 @@
struct msm_asoc_mach_data *pdata =
snd_soc_card_get_drvdata(card);
+ audio_notifier_deregister("sdm845");
if (pdata->us_euro_gpio > 0) {
gpio_free(pdata->us_euro_gpio);
pdata->us_euro_gpio = 0;
@@ -7054,7 +7103,6 @@
msm_release_pinctrl(pdev);
snd_soc_unregister_card(card);
- audio_notifier_deregister("sdm845");
return 0;
}
diff --git a/config/sdm670auto_static.conf b/config/sdm670auto_static.conf
new file mode 100644
index 0000000..dc55564
--- /dev/null
+++ b/config/sdm670auto_static.conf
@@ -0,0 +1,50 @@
+CONFIG_PINCTRL_LPI=y
+CONFIG_PINCTRL_WCD=y
+CONFIG_AUDIO_EXT_CLK=y
+CONFIG_SND_SOC_WCD9XXX_V2=y
+CONFIG_SND_SOC_WCD_MBHC=y
+CONFIG_SND_SOC_WSA881X=y
+CONFIG_SND_SOC_WCD_DSP_MGR=y
+CONFIG_SND_SOC_WCD_SPI=y
+CONFIG_SND_SOC_WCD_CPE=y
+CONFIG_SND_SOC_CPE=y
+CONFIG_SND_SOC_WCD9335=y
+CONFIG_SND_SOC_WCD934X=y
+CONFIG_SND_SOC_WCD934X_MBHC=y
+CONFIG_SND_SOC_WCD934X_DSD=y
+CONFIG_MSM_QDSP6V2_CODECS=y
+CONFIG_MSM_ULTRASOUND=y
+CONFIG_MSM_QDSP6_APRV2_GLINK=y
+CONFIG_MSM_ADSP_LOADER=y
+CONFIG_REGMAP_SWR=y
+CONFIG_MSM_QDSP6_SSR=y
+CONFIG_MSM_QDSP6_PDR=y
+CONFIG_MSM_QDSP6_NOTIFIER=y
+CONFIG_SND_SOC_MSM_HOSTLESS_PCM=y
+CONFIG_SND_SOC_MSM_QDSP6V2_INTF=y
+CONFIG_SND_SOC_SDM670=y
+CONFIG_MSM_GLINK_SPI_XPRT=y
+CONFIG_SOUNDWIRE=y
+CONFIG_SOUNDWIRE_WCD_CTRL=y
+CONFIG_SND_SOC_QDSP6V2=y
+CONFIG_SND_SOC_MSM_QDSP6V2_INTF=y
+CONFIG_WCD9XXX_CODEC_CORE=y
+CONFIG_MSM_CDC_PINCTRL=y
+CONFIG_SND_SOC_WCD_MBHC_ADC=y
+CONFIG_SND_SOC_WCD_MBHC_LEGACY=y
+CONFIG_QTI_PP=y
+CONFIG_SND_HWDEP=y
+CONFIG_DTS_EAGLE=y
+CONFIG_DOLBY_DS2=y
+CONFIG_DOLBY_LICENSE=y
+CONFIG_DTS_SRS_TM=y
+CONFIG_SND_SOC_EXT_CODEC=y
+CONFIG_SND_SOC_INT_CODEC=y
+CONFIG_SND_SOC_MSM_STUB=y
+CONFIG_WCD_DSP_GLINK=y
+CONFIG_MSM_AVTIMER=y
+CONFIG_SND_SOC_SDM660_CDC=y
+CONFIG_SND_SOC_ANALOG_CDC=y
+CONFIG_SND_SOC_DIGITAL_CDC=y
+CONFIG_SND_SOC_MSM_SDW=y
+CONFIG_SND_SOC_MSM_HDMI_CODEC_RX=y
diff --git a/config/sdm845autoconf.h b/config/sdm845autoconf.h
index 5bd70f6..fcef4c1 100644
--- a/config/sdm845autoconf.h
+++ b/config/sdm845autoconf.h
@@ -13,14 +13,11 @@
#define CONFIG_PINCTRL_WCD 1
#define CONFIG_SND_SOC_WCD934X 1
-#define CONFIG_AUDIO_EXT_CLK 1
#define CONFIG_SND_SOC_WCD9XXX_V2 1
#define CONFIG_SND_SOC_WCD_CPE 1
#define CONFIG_SND_SOC_WCD_MBHC 1
#define CONFIG_SND_SOC_WSA881X 1
-#define CONFIG_SND_SOC_WCD_DSP_MGR 1
#define CONFIG_SND_SOC_WCD_SPI 1
-#define CONFIG_SND_SOC_WCD934X 1
#define CONFIG_SND_SOC_WCD934X_MBHC 1
#define CONFIG_SND_SOC_WCD934X_DSD 1
#define CONFIG_MSM_QDSP6V2_CODECS 1
@@ -33,14 +30,12 @@
#define CONFIG_MSM_QDSP6_PDR 1
#define CONFIG_MSM_QDSP6_NOTIFIER 1
#define CONFIG_SND_SOC_MSM_HOSTLESS_PCM 1
-#define CONFIG_SND_SOC_MSM_QDSP6V2_INTF 1
#define CONFIG_SND_SOC_SDM845 1
#define CONFIG_MSM_GLINK_SPI_XPRT 1
#define CONFIG_SOUNDWIRE 1
#define CONFIG_SOUNDWIRE_WCD_CTRL 1
#define CONFIG_SND_SOC_WCD_MBHC_ADC 1
#define CONFIG_SND_SOC_QDSP6V2 1
-#define CONFIG_SND_SOC_MSM_QDSP6V2_INTF 1
#define CONFIG_MSM_CDC_PINCTRL 1
#define CONFIG_QTI_PP 1
#define CONFIG_SND_HWDEP 1
diff --git a/dsp/Kbuild b/dsp/Kbuild
index 8772085..306a25a 100644
--- a/dsp/Kbuild
+++ b/dsp/Kbuild
@@ -1,22 +1,33 @@
# We can build either as part of a standalone Kernel build or as
# an external module. Determine which mechanism is being used
-KERNEL_BUILD := 0
+ifeq ($(MODNAME), )
+ KERNEL_BUILD := 1
+else
+ KERNEL_BUILD := 0
+endif
-
-ifeq ($(KERNEL_BUILD), 0)
+ifeq ($(KERNEL_BUILD), 1)
# These are configurable via Kconfig for kernel-based builds
# Need to explicitly configure for Android-based builds
+ AUDIO_BLD_DIR := $(ANDROID_BUILD_TOP)/kernel/msm-4.9
+ AUDIO_ROOT := $(AUDIO_BLD_DIR)/techpack/audio
+endif
+
+ifeq ($(KERNEL_BUILD), 0)
ifeq ($(CONFIG_ARCH_SDM845), y)
include $(AUDIO_ROOT)/config/sdm845auto.conf
export
+ INCS += -include $(AUDIO_ROOT)/config/sdm845autoconf.h
endif
ifeq ($(CONFIG_ARCH_SDM670), y)
include $(AUDIO_ROOT)/config/sdm670auto.conf
export
+ INCS += -include $(AUDIO_ROOT)/config/sdm670autoconf.h
endif
endif
+
# As per target team, build is done as follows:
# Defconfig : build with default flags
# Slub : defconfig + CONFIG_SLUB_DEBUG := y +
@@ -43,10 +54,9 @@
############ QDSP6V2 ############
-ifeq ($(CONFIG_SND_SOC_MSM_QDSP6V2_INTF), m)
+ifdef CONFIG_SND_SOC_MSM_QDSP6V2_INTF
Q6_OBJS += audio_calibration.o
Q6_OBJS += audio_cal_utils.o
- Q6_OBJS += msm-dts-srs-tm-config.o
Q6_OBJS += q6adm.o
Q6_OBJS += q6afe.o
Q6_OBJS += q6asm.o
@@ -61,34 +71,31 @@
Q6_OBJS += avtimer.o
Q6_OBJS += q6_init.o
endif
-ifeq ($(CONFIG_MSM_ADSP_LOADER), m)
+ifdef CONFIG_DTS_SRS_TM
+ Q6_OBJS += msm-dts-srs-tm-config.o
+endif
+
+ifdef CONFIG_MSM_ADSP_LOADER
ADSP_LOADER_OBJS += adsp-loader.o
endif
-ifeq ($(CONFIG_MSM_QDSP6_NOTIFIER), m)
+ifdef CONFIG_MSM_QDSP6_NOTIFIER
QDSP6_NOTIFIER_OBJS += audio_notifier.o audio_ssr.o
endif
-ifeq ($(CONFIG_MSM_QDSP6_PDR), m)
+ifdef CONFIG_MSM_QDSP6_PDR
QDSP6_PDR_OBJS += audio_pdr.o
endif
-ifeq ($(CONFIG_MSM_ULTRASOUND), m)
+ifdef CONFIG_MSM_ULTRASOUND
USF_OBJS += usf.o usfcdev.o q6usm.o
endif
LINUX_INC += -Iinclude/linux
-INCS := $(COMMON_INC) \
+INCS += $(COMMON_INC) \
$(UAPI_INC)
-ifeq ($(CONFIG_ARCH_SDM845), y)
-INCS += -include $(AUDIO_ROOT)/config/sdm845autoconf.h
-endif
-ifeq ($(CONFIG_ARCH_SDM670), y)
-INCS += -include $(AUDIO_ROOT)/config/sdm670autoconf.h
-endif
-
EXTRA_CFLAGS += $(INCS)
@@ -128,7 +135,13 @@
CDEFINES += -DMULTI_IF_NAME=\"$(CHIP_NAME)\"
endif
+ifeq ($(KERNEL_BUILD), 0)
KBUILD_EXTRA_SYMBOLS +=$(OUT)/obj/vendor/qcom/opensource/audio-kernel/ipc/Module.symvers
+endif
+
+ifeq ($(KERNEL_BUILD), 1)
+ obj-y += codecs/
+endif
obj-$(CONFIG_SND_SOC_MSM_QDSP6V2_INTF) += q6_dlkm.o
q6_dlkm-y := $(Q6_OBJS)
diff --git a/dsp/Makefile b/dsp/Makefile
deleted file mode 100644
index b609df2..0000000
--- a/dsp/Makefile
+++ /dev/null
@@ -1,10 +0,0 @@
-obj-$(CONFIG_SND_SOC_MSM_QDSP6V2_INTF) += audio_calibration.o audio_cal_utils.o \
- q6adm.o q6afe.o q6asm.o q6audio-v2.o q6voice.o q6core.o \
- rtac.o q6lsm.o audio_slimslave.o adsp_err.o msm_audio_ion.o
-obj-$(CONFIG_MSM_ADSP_LOADER) += adsp-loader.o
-obj-$(CONFIG_MSM_QDSP6_SSR) += audio_ssr.o
-obj-$(CONFIG_MSM_QDSP6_PDR) += audio_pdr.o
-obj-$(CONFIG_MSM_QDSP6_NOTIFIER) += audio_notifier.o
-obj-$(CONFIG_MSM_ULTRASOUND) += usf.o usfcdev.o q6usm.o
-obj-$(CONFIG_MSM_AVTIMER) += avtimer.o
-obj-$(CONFIG_MSM_QDSP6V2_CODECS) += codecs/
diff --git a/dsp/adsp_err.c b/dsp/adsp_err.c
index 7ad80dc..e34d76b 100644
--- a/dsp/adsp_err.c
+++ b/dsp/adsp_err.c
@@ -167,7 +167,7 @@
#endif
-void __exit adsp_err_exit(void)
+void adsp_err_exit(void)
{
return;
}
diff --git a/dsp/audio_cal_utils.c b/dsp/audio_cal_utils.c
index ffd3929..ad1dc3d 100644
--- a/dsp/audio_cal_utils.c
+++ b/dsp/audio_cal_utils.c
@@ -54,6 +54,7 @@
size = sizeof(struct audio_cal_info_voc_col);
break;
case ADM_TOPOLOGY_CAL_TYPE:
+ case ADM_LSM_TOPOLOGY_CAL_TYPE:
size = sizeof(struct audio_cal_info_adm_top);
break;
case ADM_CUST_TOPOLOGY_CAL_TYPE:
@@ -61,6 +62,7 @@
size = 0;
break;
case ADM_AUDPROC_CAL_TYPE:
+ case ADM_LSM_AUDPROC_CAL_TYPE:
size = sizeof(struct audio_cal_info_audproc);
break;
case ADM_AUDVOL_CAL_TYPE:
@@ -77,6 +79,7 @@
size = sizeof(struct audio_cal_info_audstrm);
break;
case AFE_TOPOLOGY_CAL_TYPE:
+ case AFE_LSM_TOPOLOGY_CAL_TYPE:
size = sizeof(struct audio_cal_info_afe_top);
break;
case AFE_CUST_TOPOLOGY_CAL_TYPE:
@@ -86,6 +89,7 @@
size = sizeof(struct audio_cal_info_afe);
break;
case AFE_COMMON_TX_CAL_TYPE:
+ case AFE_LSM_TX_CAL_TYPE:
size = sizeof(struct audio_cal_info_afe);
break;
case AFE_FB_SPKR_PROT_CAL_TYPE:
@@ -200,6 +204,7 @@
size = sizeof(struct audio_cal_type_voc_col);
break;
case ADM_TOPOLOGY_CAL_TYPE:
+ case ADM_LSM_TOPOLOGY_CAL_TYPE:
size = sizeof(struct audio_cal_type_adm_top);
break;
case ADM_CUST_TOPOLOGY_CAL_TYPE:
@@ -207,6 +212,7 @@
size = sizeof(struct audio_cal_type_basic);
break;
case ADM_AUDPROC_CAL_TYPE:
+ case ADM_LSM_AUDPROC_CAL_TYPE:
size = sizeof(struct audio_cal_type_audproc);
break;
case ADM_AUDVOL_CAL_TYPE:
@@ -223,6 +229,7 @@
size = sizeof(struct audio_cal_type_audstrm);
break;
case AFE_TOPOLOGY_CAL_TYPE:
+ case AFE_LSM_TOPOLOGY_CAL_TYPE:
size = sizeof(struct audio_cal_type_afe_top);
break;
case AFE_CUST_TOPOLOGY_CAL_TYPE:
@@ -232,6 +239,7 @@
size = sizeof(struct audio_cal_type_afe);
break;
case AFE_COMMON_TX_CAL_TYPE:
+ case AFE_LSM_TX_CAL_TYPE:
size = sizeof(struct audio_cal_type_afe);
break;
case AFE_FB_SPKR_PROT_CAL_TYPE:
diff --git a/dsp/audio_calibration.c b/dsp/audio_calibration.c
index f812c98..c895fa7 100644
--- a/dsp/audio_calibration.c
+++ b/dsp/audio_calibration.c
@@ -609,7 +609,7 @@
return misc_register(&audio_cal_misc);
}
-void __exit audio_cal_exit(void)
+void audio_cal_exit(void)
{
int i = 0;
struct list_head *ptr, *next;
diff --git a/dsp/audio_slimslave.c b/dsp/audio_slimslave.c
index f9e9cdc..25866d1 100644
--- a/dsp/audio_slimslave.c
+++ b/dsp/audio_slimslave.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2013-2014, 2017 The Linux Foundation. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and
@@ -165,7 +165,7 @@
return slim_driver_register(&audio_slimslave_driver);
}
-void __exit audio_slimslave_exit(void)
+void audio_slimslave_exit(void)
{
}
diff --git a/dsp/avtimer.c b/dsp/avtimer.c
index 184e0e9..b6833ed 100644
--- a/dsp/avtimer.c
+++ b/dsp/avtimer.c
@@ -535,7 +535,7 @@
return rc;
}
-void __exit avtimer_exit(void)
+void avtimer_exit(void)
{
platform_driver_unregister(&dev_avtimer_driver);
}
diff --git a/dsp/codecs/Kbuild b/dsp/codecs/Kbuild
index 683f599..13b2399 100644
--- a/dsp/codecs/Kbuild
+++ b/dsp/codecs/Kbuild
@@ -1,22 +1,32 @@
# We can build either as part of a standalone Kernel build or as
# an external module. Determine which mechanism is being used
-KERNEL_BUILD := 0
+ifeq ($(MODNAME), )
+ KERNEL_BUILD := 1
+else
+ KERNEL_BUILD := 0
+endif
-
-ifeq ($(KERNEL_BUILD), 0)
+ifeq ($(KERNEL_BUILD), 1)
# These are configurable via Kconfig for kernel-based builds
# Need to explicitly configure for Android-based builds
+ AUDIO_BLD_DIR := $(ANDROID_BUILD_TOP)/kernel/msm-4.9
+ AUDIO_ROOT := $(AUDIO_BLD_DIR)/techpack/audio
+endif
+
+ifeq ($(KERNEL_BUILD), 0)
ifeq ($(CONFIG_ARCH_SDM845), y)
include $(AUDIO_ROOT)/config/sdm845auto.conf
export
+ INCS += -include $(AUDIO_ROOT)/config/sdm845autoconf.h
+
endif
ifeq ($(CONFIG_ARCH_SDM670), y)
include $(AUDIO_ROOT)/config/sdm670auto.conf
export
+ INCS += -include $(AUDIO_ROOT)/config/sdm670autoconf.h
endif
endif
-
# As per target team, build is done as follows:
# Defconfig : build with default flags
# Slub : defconfig + CONFIG_SLUB_DEBUG := y +
@@ -43,7 +53,7 @@
############ Native Enc/Dec ############
-ifeq ($(CONFIG_MSM_QDSP6V2_CODECS), m)
+ifdef CONFIG_MSM_QDSP6V2_CODECS
NATIVE_OBJS += q6audio_v2.o q6audio_v2_aio.o
NATIVE_OBJS += audio_utils_aio.o
NATIVE_OBJS += audio_utils.o
@@ -74,16 +84,9 @@
LINUX_INC += -Iinclude/linux
-INCS := $(COMMON_INC) \
+INCS += $(COMMON_INC) \
$(UAPI_INC)
-ifeq ($(CONFIG_ARCH_SDM845), y)
-INCS += -include $(AUDIO_ROOT)/config/sdm845autoconf.h
-endif
-ifeq ($(CONFIG_ARCH_SDM670), y)
-INCS += -include $(AUDIO_ROOT)/config/sdm670autoconf.h
-endif
-
EXTRA_CFLAGS += $(INCS)
@@ -112,17 +115,9 @@
EXTRA_CFLAGS += -Wheader-guard
endif
+ifeq ($(KERNEL_BUILD), 0)
KBUILD_EXTRA_SYMBOLS +=$(OUT)/obj/vendor/qcom/opensource/audio-kernel/dsp/Module.symvers
KBUILD_EXTRA_SYMBOLS +=$(OUT)/obj/vendor/qcom/opensource/audio-kernel/asoc/Module.symvers
-# If the module name is not "wlan", then the define MULTI_IF_NAME to be the
-# same a the QCA CHIP name. The host driver will then append MULTI_IF_NAME to
-# any string that must be unique for all instances of the driver on the system.
-# This allows multiple instances of the driver with different module names.
-# If the module name is wlan, leave MULTI_IF_NAME undefined and the code will
-# treat the driver as the primary driver.
-ifneq ($(MODNAME), qdsp6v2)
-CHIP_NAME ?= $(MODNAME)
-CDEFINES += -DMULTI_IF_NAME=\"$(CHIP_NAME)\"
endif
# Module information used by KBuild framework
diff --git a/dsp/codecs/Makefile b/dsp/codecs/Makefile
deleted file mode 100644
index f905219..0000000
--- a/dsp/codecs/Makefile
+++ /dev/null
@@ -1,5 +0,0 @@
-obj-$(CONFIG_MSM_QDSP6V2_CODECS) += aac_in.o qcelp_in.o evrc_in.o amrnb_in.o g711mlaw_in.o g711alaw_in.o audio_utils.o
-obj-$(CONFIG_MSM_QDSP6V2_CODECS) += audio_wma.o audio_wmapro.o audio_aac.o audio_multi_aac.o audio_alac.o audio_ape.o audio_utils_aio.o
-obj-$(CONFIG_MSM_QDSP6V2_CODECS) += q6audio_v2.o q6audio_v2_aio.o
-obj-$(CONFIG_MSM_QDSP6V2_CODECS) += audio_g711mlaw.o audio_g711alaw.o
-obj-$(CONFIG_MSM_QDSP6V2_CODECS) += audio_mp3.o audio_amrnb.o audio_amrwb.o audio_amrwbplus.o audio_evrc.o audio_qcelp.o amrwb_in.o audio_hwacc_effects.o
diff --git a/dsp/codecs/aac_in.c b/dsp/codecs/aac_in.c
index 5c07141..e10fbee 100644
--- a/dsp/codecs/aac_in.c
+++ b/dsp/codecs/aac_in.c
@@ -707,7 +707,7 @@
return misc_register(&audio_aac_in_misc);
}
-void __exit aac_in_exit(void)
+void aac_in_exit(void)
{
misc_deregister(&audio_aac_in_misc);
}
diff --git a/dsp/codecs/amrnb_in.c b/dsp/codecs/amrnb_in.c
index d9a019d..4e35860 100644
--- a/dsp/codecs/amrnb_in.c
+++ b/dsp/codecs/amrnb_in.c
@@ -399,7 +399,7 @@
return misc_register(&audio_amrnb_in_misc);
}
-void __exit amrnb_in_exit(void)
+void amrnb_in_exit(void)
{
misc_deregister(&audio_amrnb_in_misc);
}
diff --git a/dsp/codecs/amrwb_in.c b/dsp/codecs/amrwb_in.c
index d1d4ab7..ce9dc45 100644
--- a/dsp/codecs/amrwb_in.c
+++ b/dsp/codecs/amrwb_in.c
@@ -397,7 +397,7 @@
return misc_register(&audio_amrwb_in_misc);
}
-void __exit amrwb_in_exit(void)
+void amrwb_in_exit(void)
{
misc_deregister(&audio_amrwb_in_misc);
}
diff --git a/dsp/codecs/audio_aac.c b/dsp/codecs/audio_aac.c
index ea7506f..c742f72 100644
--- a/dsp/codecs/audio_aac.c
+++ b/dsp/codecs/audio_aac.c
@@ -473,7 +473,7 @@
return ret;
}
-void __exit audio_aac_exit(void)
+void audio_aac_exit(void)
{
mutex_destroy(&audio_aac_ws_mgr.ws_lock);
misc_deregister(&audio_aac_misc);
diff --git a/dsp/codecs/audio_alac.c b/dsp/codecs/audio_alac.c
index 50a0bf7..cfb3087 100644
--- a/dsp/codecs/audio_alac.c
+++ b/dsp/codecs/audio_alac.c
@@ -432,7 +432,7 @@
return ret;
}
-void __exit audio_alac_exit(void)
+void audio_alac_exit(void)
{
mutex_destroy(&audio_alac_ws_mgr.ws_lock);
misc_deregister(&audio_alac_misc);
diff --git a/dsp/codecs/audio_amrnb.c b/dsp/codecs/audio_amrnb.c
index 0417742..1b5dd94 100644
--- a/dsp/codecs/audio_amrnb.c
+++ b/dsp/codecs/audio_amrnb.c
@@ -223,7 +223,7 @@
return ret;
}
-void __exit audio_amrnb_exit(void)
+void audio_amrnb_exit(void)
{
mutex_destroy(&audio_amrnb_ws_mgr.ws_lock);
misc_deregister(&audio_amrnb_misc);
diff --git a/dsp/codecs/audio_amrwb.c b/dsp/codecs/audio_amrwb.c
index 091bee4..1408782 100644
--- a/dsp/codecs/audio_amrwb.c
+++ b/dsp/codecs/audio_amrwb.c
@@ -228,7 +228,7 @@
return ret;
}
-void __exit audio_amrwb_exit(void)
+void audio_amrwb_exit(void)
{
mutex_destroy(&audio_amrwb_ws_mgr.ws_lock);
misc_deregister(&audio_amrwb_misc);
diff --git a/dsp/codecs/audio_amrwbplus.c b/dsp/codecs/audio_amrwbplus.c
index 566aee7..9d6c118 100644
--- a/dsp/codecs/audio_amrwbplus.c
+++ b/dsp/codecs/audio_amrwbplus.c
@@ -394,7 +394,7 @@
return ret;
}
-void __exit audio_amrwbplus_exit(void)
+void audio_amrwbplus_exit(void)
{
mutex_destroy(&audio_amrwbplus_ws_mgr.ws_lock);
misc_deregister(&audio_amrwbplus_misc);
diff --git a/dsp/codecs/audio_ape.c b/dsp/codecs/audio_ape.c
index b11f83e..3df6347 100644
--- a/dsp/codecs/audio_ape.c
+++ b/dsp/codecs/audio_ape.c
@@ -356,7 +356,7 @@
return ret;
}
-void __exit audio_ape_exit(void)
+void audio_ape_exit(void)
{
mutex_destroy(&audio_ape_ws_mgr.ws_lock);
misc_deregister(&audio_ape_misc);
diff --git a/dsp/codecs/audio_evrc.c b/dsp/codecs/audio_evrc.c
index 78bbde6..6cddc9c 100644
--- a/dsp/codecs/audio_evrc.c
+++ b/dsp/codecs/audio_evrc.c
@@ -181,7 +181,7 @@
return ret;
}
-void __exit audio_evrc_exit(void)
+void audio_evrc_exit(void)
{
mutex_destroy(&audio_evrc_ws_mgr.ws_lock);
misc_deregister(&audio_evrc_misc);
diff --git a/dsp/codecs/audio_g711alaw.c b/dsp/codecs/audio_g711alaw.c
index a6e0a6e..6382616 100644
--- a/dsp/codecs/audio_g711alaw.c
+++ b/dsp/codecs/audio_g711alaw.c
@@ -387,7 +387,7 @@
return ret;
}
-void __exit audio_g711alaw_exit(void)
+void audio_g711alaw_exit(void)
{
mutex_destroy(&audio_g711_ws_mgr.ws_lock);
misc_deregister(&audio_g711alaw_misc);
diff --git a/dsp/codecs/audio_g711mlaw.c b/dsp/codecs/audio_g711mlaw.c
index 2a2598c..9994aab 100644
--- a/dsp/codecs/audio_g711mlaw.c
+++ b/dsp/codecs/audio_g711mlaw.c
@@ -386,7 +386,7 @@
return ret;
}
-void __exit audio_g711mlaw_exit(void)
+void audio_g711mlaw_exit(void)
{
mutex_destroy(&audio_g711_ws_mgr.ws_lock);
misc_deregister(&audio_g711mlaw_misc);
diff --git a/dsp/codecs/audio_hwacc_effects.c b/dsp/codecs/audio_hwacc_effects.c
index cd54b90..f66164b 100644
--- a/dsp/codecs/audio_hwacc_effects.c
+++ b/dsp/codecs/audio_hwacc_effects.c
@@ -772,7 +772,7 @@
return misc_register(&audio_effects_misc);
}
-void __exit audio_effects_exit(void)
+void audio_effects_exit(void)
{
misc_deregister(&audio_effects_misc);
}
diff --git a/dsp/codecs/audio_mp3.c b/dsp/codecs/audio_mp3.c
index 81e8486..4435f3e 100644
--- a/dsp/codecs/audio_mp3.c
+++ b/dsp/codecs/audio_mp3.c
@@ -185,7 +185,7 @@
return ret;
}
-void __exit audio_mp3_exit(void)
+void audio_mp3_exit(void)
{
mutex_destroy(&audio_mp3_ws_mgr.ws_lock);
misc_deregister(&audio_mp3_misc);
diff --git a/dsp/codecs/audio_multi_aac.c b/dsp/codecs/audio_multi_aac.c
index c3e616a..93b1f50 100644
--- a/dsp/codecs/audio_multi_aac.c
+++ b/dsp/codecs/audio_multi_aac.c
@@ -111,7 +111,14 @@
pr_err("cmd media format block failed\n");
break;
}
- rc = q6asm_set_encdec_chan_map(audio->ac, 2);
+
+ /* Fall back to the default number of channels
+ * if aac_cfg.ch_cfg is not between 1-6
+ */
+ if ((aac_cfg.ch_cfg == 0) || (aac_cfg.ch_cfg > 6))
+ aac_cfg.ch_cfg = 2;
+
+ rc = q6asm_set_encdec_chan_map(audio->ac, aac_cfg.ch_cfg);
if (rc < 0) {
pr_err("%s: cmd set encdec_chan_map failed\n",
__func__);
@@ -520,7 +527,7 @@
return ret;
}
-void __exit audio_multiaac_exit(void)
+void audio_multiaac_exit(void)
{
mutex_destroy(&audio_multiaac_ws_mgr.ws_lock);
misc_deregister(&audio_multiaac_misc);
diff --git a/dsp/codecs/audio_qcelp.c b/dsp/codecs/audio_qcelp.c
index 8690294..4b23bac 100644
--- a/dsp/codecs/audio_qcelp.c
+++ b/dsp/codecs/audio_qcelp.c
@@ -188,7 +188,7 @@
return ret;
}
-void __exit audio_qcelp_exit(void)
+void audio_qcelp_exit(void)
{
mutex_destroy(&audio_qcelp_ws_mgr.ws_lock);
misc_deregister(&audio_qcelp_misc);
diff --git a/dsp/codecs/audio_wma.c b/dsp/codecs/audio_wma.c
index 975dc0b..ef9c8c6 100644
--- a/dsp/codecs/audio_wma.c
+++ b/dsp/codecs/audio_wma.c
@@ -342,7 +342,7 @@
return ret;
}
-void __exit audio_wma_exit(void)
+void audio_wma_exit(void)
{
mutex_destroy(&audio_wma_ws_mgr.ws_lock);
misc_deregister(&audio_wma_misc);
diff --git a/dsp/codecs/audio_wmapro.c b/dsp/codecs/audio_wmapro.c
index 3ce4cdc..2182618 100644
--- a/dsp/codecs/audio_wmapro.c
+++ b/dsp/codecs/audio_wmapro.c
@@ -415,7 +415,7 @@
return ret;
}
-void __exit audio_wmapro_exit(void)
+void audio_wmapro_exit(void)
{
mutex_destroy(&audio_wmapro_ws_mgr.ws_lock);
misc_deregister(&audio_wmapro_misc);
diff --git a/dsp/codecs/evrc_in.c b/dsp/codecs/evrc_in.c
index 158ff6f..15f08e7 100644
--- a/dsp/codecs/evrc_in.c
+++ b/dsp/codecs/evrc_in.c
@@ -407,7 +407,7 @@
return misc_register(&audio_evrc_in_misc);
}
-void __exit evrc_in_exit(void)
+void evrc_in_exit(void)
{
misc_deregister(&audio_evrc_in_misc);
}
diff --git a/dsp/codecs/g711alaw_in.c b/dsp/codecs/g711alaw_in.c
index bd49bc9..c668b48 100644
--- a/dsp/codecs/g711alaw_in.c
+++ b/dsp/codecs/g711alaw_in.c
@@ -379,7 +379,7 @@
return misc_register(&audio_g711alaw_in_misc);
}
-void __exit g711alaw_in_exit(void)
+void g711alaw_in_exit(void)
{
misc_deregister(&audio_g711alaw_in_misc);
}
diff --git a/dsp/codecs/g711mlaw_in.c b/dsp/codecs/g711mlaw_in.c
index d646bd1..2f20c13 100644
--- a/dsp/codecs/g711mlaw_in.c
+++ b/dsp/codecs/g711mlaw_in.c
@@ -382,7 +382,7 @@
return misc_register(&audio_g711mlaw_in_misc);
}
-void __exit g711mlaw_in_exit(void)
+void g711mlaw_in_exit(void)
{
misc_deregister(&audio_g711mlaw_in_misc);
}
diff --git a/dsp/codecs/qcelp_in.c b/dsp/codecs/qcelp_in.c
index 050c95f..be09ea4 100644
--- a/dsp/codecs/qcelp_in.c
+++ b/dsp/codecs/qcelp_in.c
@@ -407,7 +407,7 @@
return misc_register(&audio_qcelp_in_misc);
}
-void __exit qcelp_in_exit(void)
+void qcelp_in_exit(void)
{
misc_deregister(&audio_qcelp_in_misc);
}
diff --git a/dsp/msm_audio_ion.c b/dsp/msm_audio_ion.c
index ca9505f..1138290 100644
--- a/dsp/msm_audio_ion.c
+++ b/dsp/msm_audio_ion.c
@@ -917,7 +917,7 @@
return platform_driver_register(&msm_audio_ion_driver);
}
-void __exit msm_audio_ion_exit(void)
+void msm_audio_ion_exit(void)
{
platform_driver_unregister(&msm_audio_ion_driver);
}
diff --git a/dsp/q6adm.c b/dsp/q6adm.c
index 77c2897..514af25 100644
--- a/dsp/q6adm.c
+++ b/dsp/q6adm.c
@@ -104,6 +104,7 @@
int num_ec_ref_rx_chans;
int ec_ref_rx_bit_width;
int ec_ref_rx_sampling_rate;
+ int lsm_port_id;
};
static struct adm_ctl this_adm;
@@ -2144,7 +2145,8 @@
cal_block = list_entry(ptr,
struct cal_block_data, list);
- if (cal_index == ADM_AUDPROC_CAL) {
+ if (cal_index == ADM_AUDPROC_CAL ||
+ cal_index == ADM_LSM_AUDPROC_CAL) {
audproc_cal_info = cal_block->cal_info;
if ((audproc_cal_info->path == path) &&
(cal_block->cal_data.size > 0))
@@ -2177,7 +2179,8 @@
cal_block = list_entry(ptr,
struct cal_block_data, list);
- if (cal_index == ADM_AUDPROC_CAL) {
+ if (cal_index == ADM_AUDPROC_CAL ||
+ cal_index == ADM_LSM_AUDPROC_CAL) {
audproc_cal_info = cal_block->cal_info;
if ((audproc_cal_info->path == path) &&
(audproc_cal_info->app_type == app_type) &&
@@ -2214,7 +2217,8 @@
cal_block = list_entry(ptr,
struct cal_block_data, list);
- if (cal_index == ADM_AUDPROC_CAL) {
+ if (cal_index == ADM_AUDPROC_CAL ||
+ cal_index == ADM_LSM_AUDPROC_CAL) {
audproc_cal_info = cal_block->cal_info;
if ((audproc_cal_info->path == path) &&
(audproc_cal_info->app_type == app_type) &&
@@ -2295,13 +2299,30 @@
return TX_DEVICE;
}
+/*
+ * Command to set LSM port ID
+ * which is used to send LSM cal
+ *
+ * @port_id: Port ID number to be set
+ *
+ */
+void adm_set_lsm_port_id(int port_id)
+{
+ this_adm.lsm_port_id = port_id;
+}
+EXPORT_SYMBOL(adm_set_lsm_port_id);
+
static void send_adm_cal(int port_id, int copp_idx, int path, int perf_mode,
int app_type, int acdb_id, int sample_rate)
{
pr_debug("%s: port id 0x%x copp_idx %d\n", __func__, port_id, copp_idx);
- send_adm_cal_type(ADM_AUDPROC_CAL, path, port_id, copp_idx, perf_mode,
- app_type, acdb_id, sample_rate);
+ if (port_id != this_adm.lsm_port_id)
+ send_adm_cal_type(ADM_AUDPROC_CAL, path, port_id, copp_idx,
+ perf_mode, app_type, acdb_id, sample_rate);
+ else
+ send_adm_cal_type(ADM_LSM_AUDPROC_CAL, path, port_id, copp_idx,
+ perf_mode, app_type, acdb_id, sample_rate);
send_adm_cal_type(ADM_AUDVOL_CAL, path, port_id, copp_idx, perf_mode,
app_type, acdb_id, sample_rate);
}
@@ -3447,6 +3468,9 @@
case ADM_AUDPROC_CAL_TYPE:
ret = ADM_AUDPROC_CAL;
break;
+ case ADM_LSM_AUDPROC_CAL_TYPE:
+ ret = ADM_LSM_AUDPROC_CAL;
+ break;
case ADM_AUDVOL_CAL_TYPE:
ret = ADM_AUDVOL_CAL;
break;
@@ -3654,6 +3678,12 @@
{adm_map_cal_data, adm_unmap_cal_data,
cal_utils_match_buf_num} },
+ {{ADM_LSM_AUDPROC_CAL_TYPE,
+ {adm_alloc_cal, adm_dealloc_cal, NULL,
+ adm_set_cal, NULL, NULL} },
+ {adm_map_cal_data, adm_unmap_cal_data,
+ cal_utils_match_buf_num} },
+
{{ADM_AUDVOL_CAL_TYPE,
{adm_alloc_cal, adm_dealloc_cal, NULL,
adm_set_cal, NULL, NULL} },
@@ -4460,7 +4490,7 @@
goto unlock;
}
- if (cal_index == ADM_AUDPROC_CAL) {
+ if (cal_index == ADM_AUDPROC_CAL || cal_index == ADM_LSM_AUDPROC_CAL) {
if (cal_block->cal_data.size > AUD_PROC_BLOCK_SIZE) {
pr_err("%s:audproc:invalid size exp/actual[%zd, %d]\n",
__func__, cal_block->cal_data.size, *size);
@@ -5246,7 +5276,7 @@
return 0;
}
-void __exit adm_exit(void)
+void adm_exit(void)
{
mutex_destroy(&dts_srs_lock);
adm_delete_cal_data();
diff --git a/dsp/q6afe.c b/dsp/q6afe.c
index 864ae4a..391a7f7 100644
--- a/dsp/q6afe.c
+++ b/dsp/q6afe.c
@@ -30,12 +30,14 @@
enum {
AFE_COMMON_RX_CAL = 0,
AFE_COMMON_TX_CAL,
+ AFE_LSM_TX_CAL,
AFE_AANC_CAL,
AFE_FB_SPKR_PROT_CAL,
AFE_HW_DELAY_CAL,
AFE_SIDETONE_CAL,
AFE_SIDETONE_IIR_CAL,
AFE_TOPOLOGY_CAL,
+ AFE_LSM_TOPOLOGY_CAL,
AFE_CUST_TOPOLOGY_CAL,
AFE_FB_SPKR_PROT_TH_VI_CAL,
AFE_FB_SPKR_PROT_EX_VI_CAL,
@@ -1396,14 +1398,15 @@
return NULL;
}
-static int afe_get_cal_topology_id(u16 port_id, u32 *topology_id)
+static int afe_get_cal_topology_id(u16 port_id, u32 *topology_id,
+ int cal_type_index)
{
int ret = 0;
struct cal_block_data *cal_block = NULL;
struct audio_cal_info_afe_top *afe_top_info = NULL;
- if (this_afe.cal_data[AFE_TOPOLOGY_CAL] == NULL) {
+ if (this_afe.cal_data[cal_type_index] == NULL) {
pr_err("%s: [AFE_TOPOLOGY_CAL] not initialized\n", __func__);
return -EINVAL;
}
@@ -1413,9 +1416,9 @@
}
*topology_id = 0;
- mutex_lock(&this_afe.cal_data[AFE_TOPOLOGY_CAL]->lock);
+ mutex_lock(&this_afe.cal_data[cal_type_index]->lock);
cal_block = afe_find_cal_topo_id_by_port(
- this_afe.cal_data[AFE_TOPOLOGY_CAL], port_id);
+ this_afe.cal_data[cal_type_index], port_id);
if (cal_block == NULL) {
pr_err("%s: [AFE_TOPOLOGY_CAL] not initialized for this port %d\n",
__func__, port_id);
@@ -1437,7 +1440,7 @@
__func__, port_id, afe_top_info->acdb_id,
afe_top_info->topology, ret);
unlock:
- mutex_unlock(&this_afe.cal_data[AFE_TOPOLOGY_CAL]->lock);
+ mutex_unlock(&this_afe.cal_data[cal_type_index]->lock);
return ret;
}
@@ -1455,7 +1458,12 @@
return -EINVAL;
}
- ret = afe_get_cal_topology_id(port_id, &topology_id);
+ ret = afe_get_cal_topology_id(port_id, &topology_id, AFE_TOPOLOGY_CAL);
+ if (ret < 0) {
+ pr_debug("%s: Check for LSM topology\n", __func__);
+ ret = afe_get_cal_topology_id(port_id, &topology_id,
+ AFE_LSM_TOPOLOGY_CAL);
+ }
if (ret || !topology_id) {
pr_debug("%s: AFE port[%d] get_cal_topology[%d] invalid!\n",
__func__, port_id, topology_id);
@@ -1572,7 +1580,7 @@
return cal_block;
}
-static void send_afe_cal_type(int cal_index, int port_id)
+static int send_afe_cal_type(int cal_index, int port_id)
{
struct cal_block_data *cal_block = NULL;
int ret;
@@ -1583,19 +1591,22 @@
if (this_afe.cal_data[cal_index] == NULL) {
pr_warn("%s: cal_index %d not allocated!\n",
__func__, cal_index);
+ ret = -EINVAL;
goto done;
}
if (afe_port_index < 0) {
pr_err("%s: Error getting AFE port index %d\n",
__func__, afe_port_index);
+ ret = -EINVAL;
goto done;
}
mutex_lock(&this_afe.cal_data[cal_index]->lock);
if (((cal_index == AFE_COMMON_RX_CAL) ||
- (cal_index == AFE_COMMON_TX_CAL)) &&
+ (cal_index == AFE_COMMON_TX_CAL) ||
+ (cal_index == AFE_LSM_TX_CAL)) &&
(this_afe.dev_acdb_id[afe_port_index] > 0))
cal_block = afe_find_cal(cal_index, port_id);
else
@@ -1604,6 +1615,7 @@
if (cal_block == NULL) {
pr_err("%s cal_block not found!!\n", __func__);
+ ret = -EINVAL;
goto unlock;
}
@@ -1613,6 +1625,7 @@
if (ret) {
pr_err("%s: Remap_cal_data failed for cal %d!\n",
__func__, cal_index);
+ ret = -EINVAL;
goto unlock;
}
ret = afe_send_cal_block(port_id, cal_block);
@@ -1622,19 +1635,23 @@
unlock:
mutex_unlock(&this_afe.cal_data[cal_index]->lock);
done:
- return;
+ return ret;
}
void afe_send_cal(u16 port_id)
{
+ int ret;
+
pr_debug("%s: port_id=0x%x\n", __func__, port_id);
if (afe_get_port_type(port_id) == MSM_AFE_PORT_TYPE_TX) {
afe_send_cal_spkr_prot_tx(port_id);
- send_afe_cal_type(AFE_COMMON_TX_CAL, port_id);
+ ret = send_afe_cal_type(AFE_COMMON_TX_CAL, port_id);
+ if (ret < 0)
+ send_afe_cal_type(AFE_LSM_TX_CAL, port_id);
} else if (afe_get_port_type(port_id) == MSM_AFE_PORT_TYPE_RX) {
- afe_send_cal_spkr_prot_rx(port_id);
send_afe_cal_type(AFE_COMMON_RX_CAL, port_id);
+ afe_send_cal_spkr_prot_rx(port_id);
}
}
@@ -2961,7 +2978,8 @@
static int q6afe_send_enc_config(u16 port_id,
union afe_enc_config_data *cfg, u32 format,
union afe_port_config afe_config,
- u16 afe_in_channels, u16 afe_in_bit_width)
+ u16 afe_in_channels, u16 afe_in_bit_width,
+ u32 scrambler_mode)
{
struct afe_audioif_config_command config;
int index;
@@ -2972,7 +2990,7 @@
pr_debug("%s:update DSP for enc format = %d\n", __func__, format);
if (format != ASM_MEDIA_FMT_SBC && format != ASM_MEDIA_FMT_AAC_V2 &&
format != ASM_MEDIA_FMT_APTX && format != ASM_MEDIA_FMT_APTX_HD &&
- format != ASM_MEDIA_FMT_CELT) {
+ format != ASM_MEDIA_FMT_CELT && format != ASM_MEDIA_FMT_LDAC) {
pr_err("%s:Unsuppported format Ignore AFE config\n", __func__);
return 0;
}
@@ -3059,6 +3077,20 @@
}
config.param.payload_size =
+ payload_size + sizeof(config.port.enc_set_scrambler_param);
+ pr_debug("%s:sending AFE_ENCODER_PARAM_ID_ENABLE_SCRAMBLING mode= %d to DSP payload = %d\n",
+ __func__, scrambler_mode, config.param.payload_size);
+ config.pdata.param_id = AFE_ENCODER_PARAM_ID_ENABLE_SCRAMBLING;
+ config.pdata.param_size = sizeof(config.port.enc_set_scrambler_param);
+ config.port.enc_set_scrambler_param.enable_scrambler = scrambler_mode;
+ ret = afe_apr_send_pkt(&config, &this_afe.wait[index]);
+ if (ret) {
+ pr_err("%s: AFE_ENCODER_PARAM_ID_ENABLE_SCRAMBLING for port 0x%x failed %d\n",
+ __func__, port_id, ret);
+ goto exit;
+ }
+
+ config.param.payload_size =
payload_size + sizeof(config.port.media_type);
config.pdata.param_size = sizeof(config.port.media_type);
@@ -3066,7 +3098,15 @@
config.pdata.module_id = AFE_MODULE_PORT;
config.pdata.param_id = AFE_PARAM_ID_PORT_MEDIA_TYPE;
config.port.media_type.minor_version = AFE_API_VERSION_PORT_MEDIA_TYPE;
- config.port.media_type.sample_rate = afe_config.slim_sch.sample_rate;
+ if (format == ASM_MEDIA_FMT_LDAC) {
+ config.port.media_type.sample_rate =
+ config.port.enc_blk_param.enc_blk_config.ldac_config.
+ custom_config.sample_rate;
+ } else {
+ config.port.media_type.sample_rate =
+ afe_config.slim_sch.sample_rate;
+ }
+
if (afe_in_bit_width)
config.port.media_type.bit_width = afe_in_bit_width;
else
@@ -3094,7 +3134,8 @@
static int __afe_port_start(u16 port_id, union afe_port_config *afe_config,
u32 rate, u16 afe_in_channels, u16 afe_in_bit_width,
- union afe_enc_config_data *cfg, u32 enc_format)
+ union afe_enc_config_data *cfg, u32 enc_format,
+ u32 scrambler_mode)
{
struct afe_audioif_config_command config;
int ret = 0;
@@ -3357,7 +3398,8 @@
__func__, enc_format);
ret = q6afe_send_enc_config(port_id, cfg, enc_format,
*afe_config, afe_in_channels,
- afe_in_bit_width);
+ afe_in_bit_width,
+ scrambler_mode);
if (ret) {
pr_err("%s: AFE encoder config for port 0x%x failed %d\n",
__func__, port_id, ret);
@@ -3410,7 +3452,7 @@
u32 rate)
{
return __afe_port_start(port_id, afe_config, rate,
- 0, 0, NULL, ASM_MEDIA_FMT_NONE);
+ 0, 0, NULL, ASM_MEDIA_FMT_NONE, 0);
}
EXPORT_SYMBOL(afe_port_start);
@@ -3433,7 +3475,8 @@
{
return __afe_port_start(port_id, afe_config, rate,
afe_in_channels, afe_in_bit_width,
- &enc_cfg->data, enc_cfg->format);
+ &enc_cfg->data, enc_cfg->format,
+ enc_cfg->scrambler_mode);
}
EXPORT_SYMBOL(afe_port_start_v2);
@@ -6888,6 +6931,9 @@
case AFE_COMMON_TX_CAL_TYPE:
ret = AFE_COMMON_TX_CAL;
break;
+ case AFE_LSM_TX_CAL_TYPE:
+ ret = AFE_LSM_TX_CAL;
+ break;
case AFE_AANC_CAL_TYPE:
ret = AFE_AANC_CAL;
break;
@@ -6906,6 +6952,9 @@
case AFE_TOPOLOGY_CAL_TYPE:
ret = AFE_TOPOLOGY_CAL;
break;
+ case AFE_LSM_TOPOLOGY_CAL_TYPE:
+ ret = AFE_LSM_TOPOLOGY_CAL;
+ break;
case AFE_CUST_TOPOLOGY_CAL_TYPE:
ret = AFE_CUST_TOPOLOGY_CAL;
break;
@@ -7408,6 +7457,12 @@
{afe_map_cal_data, afe_unmap_cal_data,
cal_utils_match_buf_num} },
+ {{AFE_LSM_TX_CAL_TYPE,
+ {afe_alloc_cal, afe_dealloc_cal, NULL,
+ afe_set_cal, NULL, NULL} },
+ {afe_map_cal_data, afe_unmap_cal_data,
+ cal_utils_match_buf_num} },
+
{{AFE_AANC_CAL_TYPE,
{afe_alloc_cal, afe_dealloc_cal, NULL,
afe_set_cal, NULL, NULL} },
@@ -7440,6 +7495,12 @@
{NULL, NULL,
cal_utils_match_buf_num} },
+ {{AFE_LSM_TOPOLOGY_CAL_TYPE,
+ {NULL, NULL, NULL,
+ afe_set_cal, NULL, NULL} },
+ {NULL, NULL,
+ cal_utils_match_buf_num} },
+
{{AFE_CUST_TOPOLOGY_CAL_TYPE,
{afe_alloc_cal, afe_dealloc_cal, NULL,
afe_set_cal, NULL, NULL} },
@@ -7576,7 +7637,7 @@
return 0;
}
-void __exit afe_exit(void)
+void afe_exit(void)
{
afe_delete_cal_data();
diff --git a/dsp/q6asm.c b/dsp/q6asm.c
index 4e988ee..caf7df1 100644
--- a/dsp/q6asm.c
+++ b/dsp/q6asm.c
@@ -91,8 +91,13 @@
};
static struct asm_mmap this_mmap;
+
+struct audio_session {
+ struct audio_client *ac;
+ spinlock_t session_lock;
+};
/* session id: 0 reserved */
-static struct audio_client *session[ASM_ACTIVE_STREAMS_ALLOWED + 1];
+static struct audio_session session[ASM_ACTIVE_STREAMS_ALLOWED + 1];
struct asm_buffer_node {
struct list_head list;
@@ -530,8 +535,8 @@
int n;
for (n = 1; n <= ASM_ACTIVE_STREAMS_ALLOWED; n++) {
- if (!session[n]) {
- session[n] = ac;
+ if (!(session[n].ac)) {
+ session[n].ac = ac;
return n;
}
}
@@ -539,25 +544,39 @@
return -ENOMEM;
}
-static bool q6asm_is_valid_audio_client(struct audio_client *ac)
+static int q6asm_get_session_id_from_audio_client(struct audio_client *ac)
{
int n;
for (n = 1; n <= ASM_ACTIVE_STREAMS_ALLOWED; n++) {
- if (session[n] == ac)
- return 1;
+ if (session[n].ac == ac)
+ return n;
}
return 0;
}
+static bool q6asm_is_valid_audio_client(struct audio_client *ac)
+{
+ return q6asm_get_session_id_from_audio_client(ac) ? 1 : 0;
+}
+
static void q6asm_session_free(struct audio_client *ac)
{
+ int session_id;
+
pr_debug("%s: sessionid[%d]\n", __func__, ac->session);
+ session_id = ac->session;
rtac_remove_popp_from_adm_devices(ac->session);
- session[ac->session] = 0;
+ spin_lock_bh(&(session[session_id].session_lock));
+ session[ac->session].ac = NULL;
ac->session = 0;
ac->perf_mode = LEGACY_PCM_MODE;
ac->fptr_cache_ops = NULL;
+ ac->cb = NULL;
+ ac->priv = NULL;
+ kfree(ac);
+ ac = NULL;
+ spin_unlock_bh(&(session[session_id].session_lock));
}
static uint32_t q6asm_get_next_buf(struct audio_client *ac,
@@ -1088,8 +1107,6 @@
pr_debug("%s: APR De-Register\n", __func__);
/*done:*/
- kfree(ac);
- ac = NULL;
mutex_unlock(&session_lock);
}
EXPORT_SYMBOL(q6asm_audio_client_free);
@@ -1252,6 +1269,7 @@
if (n <= 0) {
pr_err("%s: ASM Session alloc fail n=%d\n", __func__, n);
mutex_unlock(&session_lock);
+ kfree(ac);
goto fail_session;
}
ac->session = n;
@@ -1328,7 +1346,6 @@
fail_apr1:
q6asm_session_free(ac);
fail_session:
- kfree(ac);
return NULL;
}
EXPORT_SYMBOL(q6asm_audio_client_alloc);
@@ -1351,11 +1368,11 @@
goto err;
}
- if (!session[session_id]) {
+ if (!(session[session_id].ac)) {
pr_err("%s: session not active: %d\n", __func__, session_id);
goto err;
}
- return session[session_id];
+ return session[session_id].ac;
err:
return NULL;
}
@@ -1591,6 +1608,8 @@
struct audio_client *ac = NULL;
struct audio_port_data *port;
+ int session_id;
+
if (!data) {
pr_err("%s: Invalid CB\n", __func__);
return 0;
@@ -1632,12 +1651,20 @@
return 0;
}
asm_token.token = data->token;
- ac = q6asm_get_audio_client(asm_token._token.session_id);
+ session_id = asm_token._token.session_id;
+
+ if ((session_id > 0 && session_id <= ASM_ACTIVE_STREAMS_ALLOWED))
+ spin_lock(&(session[session_id].session_lock));
+
+ ac = q6asm_get_audio_client(session_id);
dir = q6asm_get_flag_from_token(&asm_token, ASM_DIRECTION_OFFSET);
if (!ac) {
pr_debug("%s: session[%d] already freed\n",
- __func__, asm_token._token.session_id);
+ __func__, session_id);
+ if ((session_id > 0 &&
+ session_id <= ASM_ACTIVE_STREAMS_ALLOWED))
+ spin_unlock(&(session[session_id].session_lock));
return 0;
}
@@ -1688,6 +1715,9 @@
__func__, payload[0]);
break;
}
+ if ((session_id > 0 &&
+ session_id <= ASM_ACTIVE_STREAMS_ALLOWED))
+ spin_unlock(&(session[session_id].session_lock));
return 0;
}
@@ -1722,6 +1752,9 @@
if (ac->cb)
ac->cb(data->opcode, data->token,
data->payload, ac->priv);
+ if ((session_id > 0 && session_id <= ASM_ACTIVE_STREAMS_ALLOWED))
+ spin_unlock(&(session[session_id].session_lock));
+
return 0;
}
@@ -1789,6 +1822,8 @@
struct msm_adsp_event_data *pp_event_package = NULL;
uint32_t payload_size = 0;
+ int session_id;
+
if (ac == NULL) {
pr_err("%s: ac NULL\n", __func__);
return -EINVAL;
@@ -1797,15 +1832,19 @@
pr_err("%s: data NULL\n", __func__);
return -EINVAL;
}
+
+ session_id = q6asm_get_session_id_from_audio_client(ac);
+ if (session_id <= 0 || session_id > ASM_ACTIVE_STREAMS_ALLOWED) {
+ pr_err("%s: Session ID is invalid, session = %d\n", __func__,
+ session_id);
+ return -EINVAL;
+ }
+ spin_lock(&(session[session_id].session_lock));
+
if (!q6asm_is_valid_audio_client(ac)) {
pr_err("%s: audio client pointer is invalid, ac = %pK\n",
__func__, ac);
- return -EINVAL;
- }
-
- if (ac->session <= 0 || ac->session > 8) {
- pr_err("%s: Session ID is invalid, session = %d\n", __func__,
- ac->session);
+ spin_unlock(&(session[session_id].session_lock));
return -EINVAL;
}
@@ -1818,7 +1857,9 @@
}
if (data->opcode == RESET_EVENTS) {
+ spin_unlock(&(session[session_id].session_lock));
mutex_lock(&ac->cmd_lock);
+ spin_lock(&(session[session_id].session_lock));
atomic_set(&ac->reset, 1);
if (ac->apr == NULL) {
ac->apr = ac->apr2;
@@ -1839,6 +1880,7 @@
wake_up(&ac->time_wait);
wake_up(&ac->cmd_wait);
wake_up(&ac->mem_wait);
+ spin_unlock(&(session[session_id].session_lock));
mutex_unlock(&ac->cmd_lock);
return 0;
}
@@ -1853,6 +1895,7 @@
(data->opcode != ASM_SESSION_EVENT_RX_UNDERFLOW)) {
if (payload == NULL) {
pr_err("%s: payload is null\n", __func__);
+ spin_unlock(&(session[session_id].session_lock));
return -EINVAL;
}
dev_vdbg(ac->dev, "%s: Payload = [0x%x] status[0x%x] opcode 0x%x\n",
@@ -1878,6 +1921,7 @@
ret = q6asm_is_valid_session(data, priv);
if (ret != 0) {
pr_err("%s: session invalid %d\n", __func__, ret);
+ spin_unlock(&(session[session_id].session_lock));
return ret;
}
case ASM_SESSION_CMD_SET_MTMX_STRTR_PARAMS_V2:
@@ -1917,6 +1961,8 @@
payload[1]);
wake_up(&ac->cmd_wait);
}
+ spin_unlock(
+ &(session[session_id].session_lock));
return 0;
}
if ((is_adsp_reg_event(payload[0]) >= 0) ||
@@ -1947,6 +1993,8 @@
atomic_set(&ac->mem_state, payload[1]);
wake_up(&ac->mem_wait);
}
+ spin_unlock(
+ &(session[session_id].session_lock));
return 0;
}
if (atomic_read(&ac->mem_state) && wakeup_flag) {
@@ -1994,6 +2042,8 @@
__func__, payload[0]);
break;
}
+
+ spin_unlock(&(session[session_id].session_lock));
return 0;
}
@@ -2008,6 +2058,8 @@
if (port->buf == NULL) {
pr_err("%s: Unexpected Write Done\n",
__func__);
+ spin_unlock(
+ &(session[session_id].session_lock));
return -EINVAL;
}
spin_lock_irqsave(&port->dsp_lock, dsp_flags);
@@ -2022,6 +2074,8 @@
__func__, payload[0], payload[1]);
spin_unlock_irqrestore(&port->dsp_lock,
dsp_flags);
+ spin_unlock(
+ &(session[session_id].session_lock));
return -EINVAL;
}
port->buf[buf_index].used = 1;
@@ -2092,6 +2146,8 @@
if (ac->io_mode & SYNC_IO_MODE) {
if (port->buf == NULL) {
pr_err("%s: Unexpected Write Done\n", __func__);
+ spin_unlock(
+ &(session[session_id].session_lock));
return -EINVAL;
}
spin_lock_irqsave(&port->dsp_lock, dsp_flags);
@@ -2166,8 +2222,10 @@
pr_debug("%s: ASM_STREAM_EVENT payload[0][0x%x] payload[1][0x%x]",
__func__, payload[0], payload[1]);
i = is_adsp_raise_event(data->opcode);
- if (i < 0)
+ if (i < 0) {
+ spin_unlock(&(session[session_id].session_lock));
return 0;
+ }
/* repack payload for asm_stream_pp_event
* package is composed of event type + size + actual payload
@@ -2176,8 +2234,10 @@
pp_event_package = kzalloc(payload_size
+ sizeof(struct msm_adsp_event_data),
GFP_ATOMIC);
- if (!pp_event_package)
+ if (!pp_event_package) {
+ spin_unlock(&(session[session_id].session_lock));
return -ENOMEM;
+ }
pp_event_package->event_type = i;
pp_event_package->payload_len = payload_size;
@@ -2186,6 +2246,7 @@
ac->cb(data->opcode, data->token,
(void *)pp_event_package, ac->priv);
kfree(pp_event_package);
+ spin_unlock(&(session[session_id].session_lock));
return 0;
case ASM_SESSION_CMDRSP_ADJUST_SESSION_CLOCK_V2:
pr_debug("%s: ASM_SESSION_CMDRSP_ADJUST_SESSION_CLOCK_V2 sesion %d status 0x%x msw %u lsw %u\n",
@@ -2211,7 +2272,7 @@
if (ac->cb)
ac->cb(data->opcode, data->token,
data->payload, ac->priv);
-
+ spin_unlock(&(session[session_id].session_lock));
return 0;
}
@@ -3541,7 +3602,6 @@
if (ac->port[dir].buf) {
pr_err("%s: Buffer already allocated\n", __func__);
rc = -EINVAL;
- mutex_unlock(&ac->cmd_lock);
goto done;
}
@@ -3564,7 +3624,6 @@
pr_err("%s: Audio ION alloc is failed, rc = %d\n", __func__,
rc);
kfree(buf_circ);
- mutex_unlock(&ac->cmd_lock);
goto done;
}
@@ -3590,8 +3649,8 @@
msm_audio_populate_upper_32_bits(buf_circ->phys);
open->map_region_circ_buf.mem_size_bytes = bytes_to_alloc;
- mutex_unlock(&ac->cmd_lock);
done:
+ mutex_unlock(&ac->cmd_lock);
return rc;
}
@@ -9866,7 +9925,7 @@
return -EINVAL;
}
- return ((struct apr_svc *)session[session_id]->apr)->id;
+ return ((struct apr_svc *)(session[session_id].ac)->apr)->id;
}
int q6asm_get_asm_topology(int session_id)
@@ -9877,12 +9936,12 @@
pr_err("%s: invalid session_id = %d\n", __func__, session_id);
goto done;
}
- if (session[session_id] == NULL) {
+ if (session[session_id].ac == NULL) {
pr_err("%s: session not created for session id = %d\n",
__func__, session_id);
goto done;
}
- topology = session[session_id]->topology;
+ topology = (session[session_id].ac)->topology;
done:
return topology;
}
@@ -9895,12 +9954,12 @@
pr_err("%s: invalid session_id = %d\n", __func__, session_id);
goto done;
}
- if (session[session_id] == NULL) {
+ if (session[session_id].ac == NULL) {
pr_err("%s: session not created for session id = %d\n",
__func__, session_id);
goto done;
}
- app_type = session[session_id]->app_type;
+ app_type = (session[session_id].ac)->app_type;
done:
return app_type;
}
@@ -10255,7 +10314,10 @@
pr_debug("%s:\n", __func__);
- memset(session, 0, sizeof(session));
+ memset(session, 0, sizeof(struct audio_session) *
+ (ASM_ACTIVE_STREAMS_ALLOWED + 1));
+ for (lcnt = 0; lcnt <= ASM_ACTIVE_STREAMS_ALLOWED; lcnt++)
+ spin_lock_init(&(session[lcnt].session_lock));
set_custom_topology = 1;
/*setup common client used for cal mem map */
@@ -10286,7 +10348,7 @@
return 0;
}
-void __exit q6asm_exit(void)
+void q6asm_exit(void)
{
q6asm_delete_cal_data();
}
diff --git a/dsp/q6core.c b/dsp/q6core.c
index b807862..5e09faa 100644
--- a/dsp/q6core.c
+++ b/dsp/q6core.c
@@ -1105,7 +1105,7 @@
return 0;
}
-void __exit core_exit(void)
+void core_exit(void)
{
mutex_destroy(&q6core_lcl.cmd_lock);
mutex_destroy(&q6core_lcl.ver_lock);
diff --git a/dsp/q6lsm.c b/dsp/q6lsm.c
index e34bff9..2a98dc7 100644
--- a/dsp/q6lsm.c
+++ b/dsp/q6lsm.c
@@ -2376,7 +2376,7 @@
return 0;
}
-void __exit q6lsm_exit(void)
+void q6lsm_exit(void)
{
lsm_delete_cal_data();
}
diff --git a/dsp/q6voice.c b/dsp/q6voice.c
index 985e959..d5f280e 100644
--- a/dsp/q6voice.c
+++ b/dsp/q6voice.c
@@ -36,6 +36,7 @@
#define CMD_STATUS_FAIL 1
#define NUM_CHANNELS_MONO 1
#define NUM_CHANNELS_STEREO 2
+#define NUM_CHANNELS_THREE 3
#define NUM_CHANNELS_QUAD 4
#define CVP_VERSION_2 2
#define GAIN_Q14_FORMAT(a) (a << 14)
@@ -8640,6 +8641,11 @@
v->dev_tx.channel_mapping[0] = PCM_CHANNEL_FL;
v->dev_tx.channel_mapping[1] = PCM_CHANNEL_FR;
} else if (v->dev_tx.no_of_channels ==
+ NUM_CHANNELS_THREE) {
+ v->dev_tx.channel_mapping[0] = PCM_CHANNEL_FL;
+ v->dev_tx.channel_mapping[1] = PCM_CHANNEL_FR;
+ v->dev_tx.channel_mapping[2] = PCM_CHANNEL_FC;
+ } else if (v->dev_tx.no_of_channels ==
NUM_CHANNELS_QUAD) {
v->dev_tx.channel_mapping[0] = PCM_CHANNEL_FL;
v->dev_tx.channel_mapping[1] = PCM_CHANNEL_FR;
@@ -9606,7 +9612,7 @@
}
-void __exit voice_exit(void)
+void voice_exit(void)
{
voice_delete_cal_data();
free_cal_map_table();
diff --git a/dsp/rtac.c b/dsp/rtac.c
index 806bbc5..43c69cc 100644
--- a/dsp/rtac.c
+++ b/dsp/rtac.c
@@ -1949,7 +1949,7 @@
return -ENOMEM;
}
-void __exit rtac_exit(void)
+void rtac_exit(void)
{
kzfree(rtac_adm_buffer);
kzfree(rtac_asm_buffer);
diff --git a/include/dsp/apr_audio-v2.h b/include/dsp/apr_audio-v2.h
index ad0aa44..4cef82e 100644
--- a/include/dsp/apr_audio-v2.h
+++ b/include/dsp/apr_audio-v2.h
@@ -3119,6 +3119,12 @@
#define AFE_ENCODER_PARAM_ID_ENC_FMT_ID 0x0001322B
/*
+ * Encoder scrambler parameter for the #AVS_MODULE_ID_ENCODER module.
+ * This parameter cannot be set runtime.
+ */
+#define AFE_ENCODER_PARAM_ID_ENABLE_SCRAMBLING 0x0001323C
+
+/*
* Data format to send compressed data
* is transmitted/received over Slimbus lines.
*/
@@ -3377,6 +3383,50 @@
struct asm_celt_specific_enc_cfg_t celt_specific_config;
} __packed;
+#define ASM_MEDIA_FMT_LDAC 0x00013224
+struct asm_ldac_specific_enc_cfg_t {
+ /*
+ * This is used to calculate the encoder output
+ * bytes per frame (i.e. bytes per packet).
+ * Bit rate also configures the EQMID.
+ * The min bit rate 303000 bps is calculated for
+ * 44.1 kHz and 88.2 KHz sampling frequencies with
+ * Mobile use Quality.
+ * The max bit rate of 990000 bps is calculated for
+ * 96kHz and 48 KHz with High Quality
+ * @Range(in bits per second)
+ * 303000 for Mobile use Quality
+ * 606000 for standard Quality
+ * 909000 for High Quality
+ */
+ uint32_t bit_rate;
+ /*
+ * The channel setting information for LDAC specification
+ * of Bluetooth A2DP which is determined by SRC and SNK
+ * devices in Bluetooth transmission.
+ * @Range:
+ * 0 for native mode
+ * 4 for mono
+ * 2 for dual channel
+ * 1 for stereo
+ */
+ uint16_t channel_mode;
+ /*
+ * Maximum Transmission Unit (MTU).
+ * The minimum MTU that a L2CAP implementation for LDAC shall
+ * support is 679 bytes, because LDAC is optimized with 2-DH5
+ * packet as its target.
+ * @Range : 679
+ * @Default: 679 for LDACBT_MTU_2DH5
+ */
+ uint16_t mtu;
+} __packed;
+
+struct asm_ldac_enc_cfg_t {
+ struct asm_custom_enc_cfg_t custom_config;
+ struct asm_ldac_specific_enc_cfg_t ldac_specific_config;
+} __packed;
+
struct afe_enc_fmt_id_param_t {
/*
* Supported values:
@@ -3447,10 +3497,12 @@
struct asm_custom_enc_cfg_t custom_config;
struct asm_celt_enc_cfg_t celt_config;
struct asm_aptx_enc_cfg_t aptx_config;
+ struct asm_ldac_enc_cfg_t ldac_config;
};
struct afe_enc_config {
u32 format;
+ u32 scrambler_mode;
union afe_enc_config_data data;
};
@@ -3474,6 +3526,18 @@
uint32_t enc_packetizer_id;
};
+/*
+ * Payload of the AVS_ENCODER_PARAM_ID_ENABLE_SCRAMBLING parameter.
+ */
+struct avs_enc_set_scrambler_param_t {
+ /*
+ * Supported values:
+ * 1 : enable scrambler
+ * 0 : disable scrambler
+ */
+ uint32_t enable_scrambler;
+};
+
union afe_port_config {
struct afe_param_id_pcm_cfg pcm;
struct afe_param_id_i2s_cfg i2s;
@@ -3492,6 +3556,7 @@
struct afe_port_media_type_t media_type;
struct afe_enc_cfg_blk_param_t enc_blk_param;
struct avs_enc_packetizer_id_param_t enc_pkt_id_param;
+ struct avs_enc_set_scrambler_param_t enc_set_scrambler_param;
} __packed;
struct afe_audioif_config_command_no_payload {
diff --git a/include/dsp/q6adm-v2.h b/include/dsp/q6adm-v2.h
index 6a6d3b2..19a844c 100644
--- a/include/dsp/q6adm-v2.h
+++ b/include/dsp/q6adm-v2.h
@@ -32,6 +32,7 @@
enum {
ADM_CUSTOM_TOP_CAL = 0,
ADM_AUDPROC_CAL,
+ ADM_LSM_AUDPROC_CAL,
ADM_AUDVOL_CAL,
ADM_RTAC_INFO_CAL,
ADM_RTAC_APR_CAL,
@@ -186,4 +187,5 @@
int channel_index);
void msm_dts_srs_acquire_lock(void);
void msm_dts_srs_release_lock(void);
+void adm_set_lsm_port_id(int port_id);
#endif /* __Q6_ADM_V2_H__ */
diff --git a/include/ipc/apr.h b/include/ipc/apr.h
index 4e5e3d8..6b4817e 100644
--- a/include/ipc/apr.h
+++ b/include/ipc/apr.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010-2016, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2010-2017, The Linux Foundation. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and
@@ -188,4 +188,6 @@
void apr_set_subsys_state(void);
const char *apr_get_lpass_subsys_name(void);
uint16_t apr_get_reset_domain(uint16_t proc);
+int apr_start_rx_rt(void *handle);
+int apr_end_rx_rt(void *handle);
#endif
diff --git a/include/ipc/apr_tal.h b/include/ipc/apr_tal.h
index fc1471d..aa53e21 100644
--- a/include/ipc/apr_tal.h
+++ b/include/ipc/apr_tal.h
@@ -74,7 +74,8 @@
int apr_tal_rx_intents_config(struct apr_svc_ch_dev *apr_ch,
int num_of_intents, uint32_t size);
int apr_tal_init(void);
-
+int apr_tal_start_rx_rt(struct apr_svc_ch_dev *apr_ch);
+int apr_tal_end_rx_rt(struct apr_svc_ch_dev *apr_ch);
struct apr_svc_ch_dev {
void *handle;
diff --git a/include/uapi/linux/msm_audio_calibration.h b/include/uapi/linux/msm_audio_calibration.h
index 29fdf8f..3b97ab2 100644
--- a/include/uapi/linux/msm_audio_calibration.h
+++ b/include/uapi/linux/msm_audio_calibration.h
@@ -99,6 +99,10 @@
AFE_FB_SPKR_PROT_TH_VI_CAL_TYPE,
AFE_FB_SPKR_PROT_EX_VI_CAL_TYPE,
AFE_SIDETONE_IIR_CAL_TYPE,
+ AFE_LSM_TOPOLOGY_CAL_TYPE,
+ AFE_LSM_TX_CAL_TYPE,
+ ADM_LSM_TOPOLOGY_CAL_TYPE,
+ ADM_LSM_AUDPROC_CAL_TYPE,
MAX_CAL_TYPES,
};
@@ -107,6 +111,12 @@
#define AFE_SIDETONE_IIR_CAL_TYPE AFE_SIDETONE_IIR_CAL_TYPE
+#define AFE_LSM_TOPOLOGY_CAL_TYPE AFE_LSM_TOPOLOGY_CAL_TYPE
+#define AFE_LSM_TX_CAL_TYPE AFE_LSM_TX_CAL_TYPE
+#define ADM_LSM_TOPOLOGY_CAL_TYPE ADM_LSM_TOPOLOGY_CAL_TYPE
+#define ADM_LSM_AUDPROC_CAL_TYPE ADM_LSM_AUDPROC_CAL_TYPE
+#define LSM_CAL_TYPES
+
#define TOPOLOGY_SPECIFIC_CHANNEL_INFO
#define MSM_SPKR_PROT_SPV3
diff --git a/ipc/Kbuild b/ipc/Kbuild
index b729f90..92760fb 100644
--- a/ipc/Kbuild
+++ b/ipc/Kbuild
@@ -1,25 +1,41 @@
# We can build either as part of a standalone Kernel build or as
# an external module. Determine which mechanism is being used
-KERNEL_BUILD := 0
+ifeq ($(MODNAME),)
+ KERNEL_BUILD := 1
+else
+ KERNEL_BUILD := 0
+endif
-TARGET_KERNEL_VERSION := 4.4
+TARGET_KERNEL_VERSION := 4.9
+
+# These are configurable via Kconfig for kernel-based builds
+# Need to explicitly configure for Android-based builds
+ifeq ($(CONFIG_ARCH_SDM845), y)
+ TARGET_KERNEL_VERSION := 4.9
+endif
+ifeq ($(CONFIG_ARCH_SDM670), y)
+ TARGET_KERNEL_VERSION := 4.9
+endif
+
+KDIR := $(TOP)/kernel/msm-$(TARGET_KERNEL_VERSION)
+
+ifeq ($(KERNEL_BUILD), 1)
+ AUDIO_ROOT := $(KDIR)/techpack/audio
+endif
ifeq ($(KERNEL_BUILD), 0)
- # These are configurable via Kconfig for kernel-based builds
- # Need to explicitly configure for Android-based builds
ifeq ($(CONFIG_ARCH_SDM845), y)
include $(AUDIO_ROOT)/config/sdm845auto.conf
export
- TARGET_KERNEL_VERSION := 4.9
+ INCS += -include $(AUDIO_ROOT)/config/sdm845autoconf.h
endif
ifeq ($(CONFIG_ARCH_SDM670), y)
include $(AUDIO_ROOT)/config/sdm670auto.conf
export
- TARGET_KERNEL_VERSION := 4.9
+ INCS += -include $(AUDIO_ROOT)/config/sdm670autoconf.h
endif
endif
-
# As per target team, build is done as follows:
# Defconfig : build with default flags
# Slub : defconfig + CONFIG_SLUB_DEBUG := y +
@@ -46,34 +62,27 @@
############ IPC ############
-ifeq ($(CONFIG_MSM_QDSP6_APRV2_GLINK), m)
+ifdef CONFIG_MSM_QDSP6_APRV2_GLINK
APRV_GLINK += apr.o
APRV_GLINK += apr_v2.o
APRV_GLINK += apr_tal_glink.o
endif
-ifeq ($(CONFIG_MSM_QDSP6_APRV3_GLINK), m)
+ifdef CONFIG_MSM_QDSP6_APRV3_GLINK
APRV_GLINK += apr.o
APRV_GLINK += apr_v3.o
APRV_GLINK += apr_tal_glink.o
endif
-ifeq ($(CONFIG_WCD_DSP_GLINK), m)
+ifdef CONFIG_WCD_DSP_GLINK
WDSP_GLINK += wcd-dsp-glink.o
endif
LINUX_INC += -Iinclude/linux
-INCS := $(COMMON_INC) \
+INCS += $(COMMON_INC) \
$(UAPI_INC)
-ifeq ($(CONFIG_ARCH_SDM845), y)
-INCS += -include $(AUDIO_ROOT)/config/sdm845autoconf.h
-endif
-ifeq ($(CONFIG_ARCH_SDM670), y)
-INCS += -include $(AUDIO_ROOT)/config/sdm670autoconf.h
-endif
-
EXTRA_CFLAGS += $(INCS)
@@ -89,6 +98,8 @@
KBUILD_CPPFLAGS += $(CDEFINES)
+ifeq ($(KERNEL_BUILD), 0)
+
HEADER_INSTALL_DIR := $(TOP)/kernel/msm-$(TARGET_KERNEL_VERSION)/scripts
UAPI_OUT := $(OUT)/obj/vendor/qcom/opensource/audio-kernel/include
$(shell $(HEADER_INSTALL_DIR)/headers_install.sh $(UAPI_OUT)/linux/ $(AUDIO_ROOT)/include/uapi/linux/ avtimer.h;)
@@ -118,6 +129,10 @@
$(shell $(HEADER_INSTALL_DIR)/headers_install.sh $(UAPI_OUT)/sound/ $(AUDIO_ROOT)/include/uapi/sound/ voice_params.h;)
$(shell $(HEADER_INSTALL_DIR)/headers_install.sh $(UAPI_OUT)/sound/ $(AUDIO_ROOT)/include/uapi/sound/ wcd-dsp-glink.h;)
+KBUILD_EXTRA_SYMBOLS +=$(OUT)/obj/vendor/qcom/opensource/audio-kernel/dsp/Module.symvers
+
+endif
+
# Currently, for versions of gcc which support it, the kernel Makefile
# is disabling the maybe-uninitialized warning. Re-enable it for the
# AUDIO driver. Note that we must use EXTRA_CFLAGS here so that it
@@ -141,9 +156,9 @@
CDEFINES += -DMULTI_IF_NAME=\"$(CHIP_NAME)\"
endif
-KBUILD_EXTRA_SYMBOLS +=$(OUT)/obj/vendor/qcom/opensource/audio-kernel/dsp/Module.symvers
# Module information used by KBuild framework
obj-$(CONFIG_MSM_QDSP6_APRV2_GLINK) += apr_dlkm.o
+obj-$(CONFIG_MSM_QDSP6_APRV3_GLINK) += apr_dlkm.o
apr_dlkm-y := $(APRV_GLINK)
obj-$(CONFIG_WCD_DSP_GLINK) += wglink_dlkm.o
diff --git a/ipc/Makefile b/ipc/Makefile
deleted file mode 100644
index 6938915..0000000
--- a/ipc/Makefile
+++ /dev/null
@@ -1,3 +0,0 @@
-obj-$(CONFIG_MSM_QDSP6_APRV2_GLINK) += apr.o apr_v2.o apr_tal_glink.o
-obj-$(CONFIG_MSM_QDSP6_APRV3_GLINK) += apr.o apr_v3.o apr_tal_glink.o
-obj-$(CONFIG_WCD_DSP_GLINK) += wcd-dsp-glink.o
diff --git a/ipc/apr.c b/ipc/apr.c
index dd2a63b..9f9cf91 100644
--- a/ipc/apr.c
+++ b/ipc/apr.c
@@ -717,9 +717,10 @@
}
temp_port = ((data.dest_port >> 8) * 8) + (data.dest_port & 0xFF);
- pr_debug("port = %d t_port = %d\n", data.src_port, temp_port);
- if (c_svc->port_cnt && c_svc->port_fn[temp_port])
- c_svc->port_fn[temp_port](&data, c_svc->port_priv[temp_port]);
+ if (((temp_port >= 0) && (temp_port < APR_MAX_PORTS))
+ && (c_svc->port_cnt && c_svc->port_fn[temp_port]))
+ c_svc->port_fn[temp_port](&data,
+ c_svc->port_priv[temp_port]);
else if (c_svc->fn)
c_svc->fn(&data, c_svc->priv);
else
@@ -774,6 +775,107 @@
}
/**
+ * apr_start_rx_rt - Clients call to vote for thread
+ * priority upgrade whenever needed.
+ *
+ * @handle: APR service handle
+ *
+ * Returns 0 on success or error otherwise.
+ */
+int apr_start_rx_rt(void *handle)
+{
+ int rc = 0;
+ struct apr_svc *svc = handle;
+ uint16_t dest_id = 0;
+ uint16_t client_id = 0;
+
+ if (!svc) {
+ pr_err("%s: Invalid APR handle\n", __func__);
+ return -EINVAL;
+ }
+
+ mutex_lock(&svc->m_lock);
+ dest_id = svc->dest_id;
+ client_id = svc->client_id;
+
+ if ((client_id >= APR_CLIENT_MAX) || (dest_id >= APR_DEST_MAX)) {
+ pr_err("%s: %s invalid. client_id = %u, dest_id = %u\n",
+ __func__,
+ client_id >= APR_CLIENT_MAX ? "Client ID" : "Dest ID",
+ client_id, dest_id);
+ rc = -EINVAL;
+ goto exit;
+ }
+
+ if (!client[dest_id][client_id].handle) {
+ pr_err("%s: Client handle is NULL\n", __func__);
+ rc = -EINVAL;
+ goto exit;
+ }
+
+ rc = apr_tal_start_rx_rt(client[dest_id][client_id].handle);
+ if (rc)
+ pr_err("%s: failed to set RT thread priority for APR RX. rc = %d\n",
+ __func__, rc);
+
+exit:
+ mutex_unlock(&svc->m_lock);
+ return rc;
+}
+EXPORT_SYMBOL(apr_start_rx_rt);
+
+/**
+ * apr_end_rx_rt - Clients call to unvote for thread
+ * priority upgrade (perviously voted with
+ * apr_start_rx_rt()).
+ *
+ * @handle: APR service handle
+ *
+ * Returns 0 on success or error otherwise.
+ */
+int apr_end_rx_rt(void *handle)
+{
+ int rc = 0;
+ struct apr_svc *svc = handle;
+ uint16_t dest_id = 0;
+ uint16_t client_id = 0;
+
+ if (!svc) {
+ pr_err("%s: Invalid APR handle\n", __func__);
+ return -EINVAL;
+ }
+
+ mutex_lock(&svc->m_lock);
+ dest_id = svc->dest_id;
+ client_id = svc->client_id;
+
+ if ((client_id >= APR_CLIENT_MAX) || (dest_id >= APR_DEST_MAX)) {
+ pr_err("%s: %s invalid. client_id = %u, dest_id = %u\n",
+ __func__,
+ client_id >= APR_CLIENT_MAX ? "Client ID" : "Dest ID",
+ client_id, dest_id);
+ rc = -EINVAL;
+ goto exit;
+ }
+
+ if (!client[dest_id][client_id].handle) {
+ pr_err("%s: Client handle is NULL\n", __func__);
+ rc = -EINVAL;
+ goto exit;
+ }
+
+ rc = apr_tal_end_rx_rt(client[dest_id][client_id].handle);
+ if (rc)
+ pr_err("%s: failed to reset RT thread priority for APR RX. rc = %d\n",
+ __func__, rc);
+
+exit:
+ mutex_unlock(&svc->m_lock);
+ return rc;
+}
+EXPORT_SYMBOL(apr_end_rx_rt);
+
+/**
* apr_deregister - Clients call to de-register
* from APR.
*
diff --git a/ipc/apr_tal_glink.c b/ipc/apr_tal_glink.c
index 3803dcb..6683348 100644
--- a/ipc/apr_tal_glink.c
+++ b/ipc/apr_tal_glink.c
@@ -357,6 +357,38 @@
return rc ? NULL : apr_ch;
}
+int apr_tal_start_rx_rt(struct apr_svc_ch_dev *apr_ch)
+{
+ int rc = 0;
+
+ if (!apr_ch || !apr_ch->handle) {
+ rc = -EINVAL;
+ goto exit;
+ }
+
+ mutex_lock(&apr_ch->m_lock);
+ rc = glink_start_rx_rt(apr_ch->handle);
+ mutex_unlock(&apr_ch->m_lock);
+exit:
+ return rc;
+}
+
+int apr_tal_end_rx_rt(struct apr_svc_ch_dev *apr_ch)
+{
+ int rc = 0;
+
+ if (!apr_ch || !apr_ch->handle) {
+ rc = -EINVAL;
+ goto exit;
+ }
+
+ mutex_lock(&apr_ch->m_lock);
+ rc = glink_end_rx_rt(apr_ch->handle);
+ mutex_unlock(&apr_ch->m_lock);
+exit:
+ return rc;
+}
+
int apr_tal_close(struct apr_svc_ch_dev *apr_ch)
{
int rc;
diff --git a/soc/Kbuild b/soc/Kbuild
index 45b77e9..c9cf31b 100644
--- a/soc/Kbuild
+++ b/soc/Kbuild
@@ -1,22 +1,31 @@
# We can build either as part of a standalone Kernel build or as
# an external module. Determine which mechanism is being used
-KERNEL_BUILD := 0
+ifeq ($(MODNAME),)
+ KERNEL_BUILD := 1
+else
+ KERNEL_BUILD := 0
+endif
-
-ifeq ($(KERNEL_BUILD), 0)
+ifeq ($(KERNEL_BUILD), 1)
# These are configurable via Kconfig for kernel-based builds
# Need to explicitly configure for Android-based builds
+ AUDIO_BLD_DIR := $(ANDROID_BUILD_TOP)/kernel/msm-4.9
+ AUDIO_ROOT := $(AUDIO_BLD_DIR)/techpack/audio
+endif
+
+ifeq ($(KERNEL_BUILD), 0)
ifeq ($(CONFIG_ARCH_SDM845), y)
include $(AUDIO_ROOT)/config/sdm845auto.conf
export
+ INCS += -include $(AUDIO_ROOT)/config/sdm845autoconf.h
endif
ifeq ($(CONFIG_ARCH_SDM670), y)
include $(AUDIO_ROOT)/config/sdm670auto.conf
export
+ INCS += -include $(AUDIO_ROOT)/config/sdm670autoconf.h
endif
endif
-
# As per target team, build is done as follows:
# Defconfig : build with default flags
# Slub : defconfig + CONFIG_SLUB_DEBUG := y +
@@ -44,37 +53,30 @@
############ SoC Modules ############
# for pinctrl WCD driver
-ifeq ($(CONFIG_PINCTRL_WCD), m)
+ifdef CONFIG_PINCTRL_WCD
PINCTRL_WCD_OBJS += pinctrl-wcd.o
endif
# for pinctrl LPI driver
-ifeq ($(CONFIG_PINCTRL_LPI), m)
+ifdef CONFIG_PINCTRL_LPI
PINCTRL_LPI_OBJS += pinctrl-lpi.o
endif
# for soundwire driver
-ifeq ($(CONFIG_SOUNDWIRE_WCD_CTRL), m)
+ifdef CONFIG_SOUNDWIRE_WCD_CTRL
SWR_CTRL_OBJS += swr-wcd-ctrl.o
endif
-ifeq ($(CONFIG_SOUNDWIRE), m)
+ifdef CONFIG_SOUNDWIRE
SWR_OBJS += regmap-swr.o
SWR_OBJS += soundwire.o
endif
LINUX_INC += -Iinclude/linux
-INCS := $(COMMON_INC) \
+INCS += $(COMMON_INC) \
$(UAPI_INC)
-ifeq ($(CONFIG_ARCH_SDM845), y)
-INCS += -include $(AUDIO_ROOT)/config/sdm845autoconf.h
-endif
-ifeq ($(CONFIG_ARCH_SDM670), y)
-INCS += -include $(AUDIO_ROOT)/config/sdm670autoconf.h
-endif
-
EXTRA_CFLAGS += $(INCS)
@@ -90,7 +92,10 @@
KBUILD_CPPFLAGS += $(CDEFINES)
+ifeq ($(KERNEL_BUILD), 0)
KBUILD_EXTRA_SYMBOLS +=$(OUT)/obj/vendor/qcom/opensource/audio-kernel/dsp/Module.symvers
+endif
+
# Currently, for versions of gcc which support it, the kernel Makefile
# is disabling the maybe-uninitialized warning. Re-enable it for the
# AUDIO driver. Note that we must use EXTRA_CFLAGS here so that it
diff --git a/soc/Makefile b/soc/Makefile
deleted file mode 100644
index c563e76..0000000
--- a/soc/Makefile
+++ /dev/null
@@ -1,6 +0,0 @@
-
-obj-$(CONFIG_REGMAP_SWR) += regmap-swr.o
-obj-$(CONFIG_PINCTRL_WCD) += pinctrl-wcd.o
-obj-$(CONFIG_PINCTRL_LPI) += pinctrl-lpi.o
-obj-$(CONFIG_SOUNDWIRE) += soundwire.o
-obj-$(CONFIG_SOUNDWIRE_WCD_CTRL) += swr-wcd-ctrl.o