summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Android.mk5
-rw-r--r--asoc/sa8155.c132
-rw-r--r--config/gvmauto.conf1
-rw-r--r--config/gvmautoconf.h1
-rw-r--r--config/sa8155auto.conf1
-rw-r--r--config/sa8155autoconf.h1
-rw-r--r--soc/Android.mk10
-rw-r--r--soc/Kbuild17
8 files changed, 106 insertions, 62 deletions
diff --git a/Android.mk b/Android.mk
index 835c670b..722c3ce3 100644
--- a/Android.mk
+++ b/Android.mk
@@ -17,6 +17,7 @@ include $(MY_LOCAL_PATH)/include/uapi/Android.mk
include $(MY_LOCAL_PATH)/ipc/Android.mk
include $(MY_LOCAL_PATH)/dsp/Android.mk
include $(MY_LOCAL_PATH)/dsp/codecs/Android.mk
+include $(MY_LOCAL_PATH)/soc/Android.mk
include $(MY_LOCAL_PATH)/asoc/Android.mk
include $(MY_LOCAL_PATH)/asoc/codecs/Android.mk
endif
@@ -30,10 +31,6 @@ include $(MY_LOCAL_PATH)/soc/Android.mk
endif
endif
-ifneq ($(TARGET_PRODUCT), $(filter $(TARGET_PRODUCT), msmnile_au msmnile_gvmq))
-include $(MY_LOCAL_PATH)/soc/Android.mk
-endif
-
ifeq ($(call is-board-platform-in-list,msmnile),true)
ifneq ($(TARGET_PRODUCT), $(filter $(TARGET_PRODUCT), msmnile_au msmnile_gvmq))
$(shell rm -rf $(PRODUCT_OUT)/obj/vendor/qcom/opensource/audio-kernel/asoc/codecs/aqt1000/Module.symvers)
diff --git a/asoc/sa8155.c b/asoc/sa8155.c
index 26b744b9..b655572f 100644
--- a/asoc/sa8155.c
+++ b/asoc/sa8155.c
@@ -45,6 +45,7 @@
#include <sound/pcm.h>
#include <sound/pcm_params.h>
#include <sound/info.h>
+#include <soc/snd_event.h>
#include <dsp/audio_notifier.h>
#include <dsp/q6afe-v2.h>
#include <dsp/q6core.h>
@@ -693,9 +694,6 @@ static SOC_ENUM_SINGLE_EXT_DECL(mi2s_tx_format, bit_format_text);
static SOC_ENUM_SINGLE_EXT_DECL(aux_pcm_rx_format, bit_format_text);
static SOC_ENUM_SINGLE_EXT_DECL(aux_pcm_tx_format, bit_format_text);
-static bool is_initial_boot = true;
-static struct platform_device *spdev;
-
static struct afe_clk_set mi2s_clk[MI2S_MAX] = {
{
AFE_API_VERSION_I2S_CONFIG,
@@ -7298,6 +7296,78 @@ static void msm_i2s_auxpcm_deinit(struct platform_device *pdev)
pdata->mi2s_intf_conf[count].msm_is_mi2s_master = 0;
}
}
+
+static int sa8155_ssr_enable(struct device *dev, void *data)
+{
+ struct platform_device *pdev = to_platform_device(dev);
+ struct snd_soc_card *card = platform_get_drvdata(pdev);
+ int ret = 0;
+
+ if (!card) {
+ dev_err(dev, "%s: card is NULL\n", __func__);
+ ret = -EINVAL;
+ goto err;
+ }
+
+ dev_dbg(dev, "%s: setting snd_card to ONLINE\n", __func__);
+ snd_soc_card_change_online_state(card, 1);
+
+err:
+ return ret;
+}
+
+static void sa8155_ssr_disable(struct device *dev, void *data)
+{
+ struct platform_device *pdev = to_platform_device(dev);
+ struct snd_soc_card *card = platform_get_drvdata(pdev);
+
+ if (!card) {
+ dev_err(dev, "%s: card is NULL\n", __func__);
+ return;
+ }
+
+ dev_dbg(dev, "%s: setting snd_card to OFFLINE\n", __func__);
+ snd_soc_card_change_online_state(card, 0);
+}
+
+static const struct snd_event_ops sa8155_ssr_ops = {
+ .enable = sa8155_ssr_enable,
+ .disable = sa8155_ssr_disable,
+};
+
+static int msm_audio_ssr_compare(struct device *dev, void *data)
+{
+ struct device_node *node = data;
+
+ dev_dbg(dev, "%s: dev->of_node = 0x%p, node = 0x%p\n",
+ __func__, dev->of_node, node);
+ return (dev->of_node && dev->of_node == node);
+}
+
+static int msm_audio_ssr_register(struct device *dev)
+{
+ struct device_node *np = dev->of_node;
+ struct snd_event_clients *ssr_clients = NULL;
+ struct device_node *node;
+ int ret;
+ int i;
+
+ for (i = 0; ; i++) {
+ node = of_parse_phandle(np, "qcom,msm_audio_ssr_devs", i);
+ if (!node)
+ break;
+ snd_event_mstr_add_client(&ssr_clients,
+ msm_audio_ssr_compare, node);
+ }
+
+ ret = snd_event_master_register(dev, &sa8155_ssr_ops,
+ ssr_clients, NULL);
+ if (!ret)
+ snd_event_notify(dev, SND_EVENT_UP);
+
+ return ret;
+}
+
static int msm_asoc_machine_probe(struct platform_device *pdev)
{
struct snd_soc_card *card;
@@ -7364,7 +7434,6 @@ static int msm_asoc_machine_probe(struct platform_device *pdev)
goto err;
}
dev_info(&pdev->dev, "Sound card %s registered\n", card->name);
- spdev = pdev;
/* Parse pinctrl info from devicetree */
ret = msm_get_pinctrl(pdev);
@@ -7379,6 +7448,11 @@ static int msm_asoc_machine_probe(struct platform_device *pdev)
msm_i2s_auxpcm_init(pdev);
+ ret = msm_audio_ssr_register(&pdev->dev);
+ if (ret)
+ pr_err("%s: Registration with SND event FWK failed ret = %d\n",
+ __func__, ret);
+
return 0;
err:
msm_release_pinctrl(pdev);
@@ -7407,58 +7481,9 @@ static struct platform_driver sa8155_asoc_machine_driver = {
.remove = msm_asoc_machine_remove,
};
-static int sa8155_notifier_service_cb(struct notifier_block *this,
- unsigned long opcode, void *ptr)
-{
- struct snd_soc_card *card = NULL;
-
- pr_debug("%s: Service opcode 0x%lx\n", __func__, opcode);
-
- switch (opcode) {
- case AUDIO_NOTIFIER_SERVICE_DOWN:
- if (!spdev)
- return -EINVAL;
- card = platform_get_drvdata(spdev);
- if (card == NULL){
- pr_err("%s: card is NULL\n",__func__);
- return -EINVAL;
- } else {
- pr_debug("%s: setting snd_card to OFFLINE\n", __func__);
- snd_soc_card_change_online_state(card, 0);
- }
- break;
- case AUDIO_NOTIFIER_SERVICE_UP:
- if (is_initial_boot) {
- is_initial_boot = false;
- break;
- }
- if (!spdev)
- return -EINVAL;
- card = platform_get_drvdata(spdev);
- if (card == NULL){
- pr_err("%s: card is NULL\n",__func__);
- return -EINVAL;
- } else {
- pr_debug("%s: setting snd_card to ONLINE\n", __func__);
- snd_soc_card_change_online_state(card, 1);
- }
- break;
- default:
- break;
- }
- return NOTIFY_OK;
-}
-
-static struct notifier_block service_nb = {
- .notifier_call = sa8155_notifier_service_cb,
- .priority = -INT_MAX,
-};
-
int __init sa8155_init(void)
{
pr_debug("%s\n", __func__);
- audio_notifier_register("sa8155", AUDIO_NOTIFIER_ADSP_DOMAIN,
- &service_nb);
return platform_driver_register(&sa8155_asoc_machine_driver);
}
@@ -7466,7 +7491,6 @@ void sa8155_exit(void)
{
pr_debug("%s\n", __func__);
platform_driver_unregister(&sa8155_asoc_machine_driver);
- audio_notifier_deregister("sa8155");
}
module_init(sa8155_init);
diff --git a/config/gvmauto.conf b/config/gvmauto.conf
index 9af76859..35b70b9f 100644
--- a/config/gvmauto.conf
+++ b/config/gvmauto.conf
@@ -12,3 +12,4 @@ CONFIG_DOLBY_LICENSE=m
CONFIG_SND_SOC_MSM_STUB=m
CONFIG_SND_SOC_MSM_HDMI_CODEC_RX=m
CONFIG_MSM_QDSP6V2_CODECS=m
+CONFIG_SND_EVENT=m
diff --git a/config/gvmautoconf.h b/config/gvmautoconf.h
index 0826a9ee..84a8f1df 100644
--- a/config/gvmautoconf.h
+++ b/config/gvmautoconf.h
@@ -24,3 +24,4 @@
#define CONFIG_SND_SOC_MSM_STUB 1
#define CONFIG_SND_SOC_MSM_HDMI_CODEC_RX 1
#define CONFIG_MSM_QDSP6V2_CODECS 1
+#define CONFIG_SND_EVENT 1
diff --git a/config/sa8155auto.conf b/config/sa8155auto.conf
index e551f77f..bf5b9cda 100644
--- a/config/sa8155auto.conf
+++ b/config/sa8155auto.conf
@@ -12,3 +12,4 @@ CONFIG_DOLBY_LICENSE=m
CONFIG_SND_SOC_MSM_STUB=m
CONFIG_SND_SOC_MSM_HDMI_CODEC_RX=m
CONFIG_MSM_QDSP6V2_CODECS=m
+CONFIG_SND_EVENT=m
diff --git a/config/sa8155autoconf.h b/config/sa8155autoconf.h
index 3f9eda2c..16745163 100644
--- a/config/sa8155autoconf.h
+++ b/config/sa8155autoconf.h
@@ -16,3 +16,4 @@
#define CONFIG_SND_SOC_MSM_STUB 1
#define CONFIG_SND_SOC_MSM_HDMI_CODEC_RX 1
#define CONFIG_MSM_QDSP6V2_CODECS 1
+#define CONFIG_SND_EVENT 1
diff --git a/soc/Android.mk b/soc/Android.mk
index 8698a56a..969c38f6 100644
--- a/soc/Android.mk
+++ b/soc/Android.mk
@@ -4,8 +4,12 @@
# Check if this driver needs be built for current target
ifeq ($(call is-board-platform,msmnile),true)
+ifeq ($(TARGET_PRODUCT), $(filter $(TARGET_PRODUCT), msmnile_au msmnile_gvmq))
+AUDIO_SELECT := CONFIG_SND_SOC_SA8155=m
+else
AUDIO_SELECT := CONFIG_SND_SOC_SM8150=m
endif
+endif
ifeq ($(call is-board-platform-in-list,$(MSMSTEPPE) $(TRINKET)),true)
AUDIO_SELECT := CONFIG_SND_SOC_SM6150=m
@@ -68,6 +72,7 @@ LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT)
include $(DLKM_DIR)/AndroidKernelModule.mk
endif
###########################################################
+ifneq ($(TARGET_PRODUCT), $(filter $(TARGET_PRODUCT), msmnile_au msmnile_gvmq))
include $(CLEAR_VARS)
LOCAL_MODULE := $(AUDIO_CHIPSET)_swr.ko
LOCAL_MODULE_KBUILD_NAME := swr_dlkm.ko
@@ -83,8 +88,10 @@ LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_DEBUG_ENABLE := true
LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT)
include $(DLKM_DIR)/AndroidKernelModule.mk
+endif
###########################################################
-ifeq ($(call is-board-platform-in-list, $(MSMSTEPPE) kona lito),true)
+ifeq ($(call is-board-platform-in-list,msmnile $(MSMSTEPPE) kona lito),true)
+ifneq ($(TARGET_PRODUCT), $(filter $(TARGET_PRODUCT), msmnile))
include $(CLEAR_VARS)
LOCAL_MODULE := $(AUDIO_CHIPSET)_snd_event.ko
LOCAL_MODULE_KBUILD_NAME := snd_event_dlkm.ko
@@ -93,6 +100,7 @@ LOCAL_MODULE_DEBUG_ENABLE := true
LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT)
include $(DLKM_DIR)/AndroidKernelModule.mk
endif
+endif
###########################################################
endif # DLKM check
diff --git a/soc/Kbuild b/soc/Kbuild
index a1944a15..3e7af122 100644
--- a/soc/Kbuild
+++ b/soc/Kbuild
@@ -15,9 +15,15 @@ endif
ifeq ($(KERNEL_BUILD), 0)
ifeq ($(CONFIG_ARCH_SM8150), y)
- include $(AUDIO_ROOT)/config/sm8150auto.conf
- export
- INCS += -include $(AUDIO_ROOT)/config/sm8150autoconf.h
+ ifdef CONFIG_SND_SOC_SA8155
+ include $(AUDIO_ROOT)/config/sa8155auto.conf
+ export
+ INCS += -include $(AUDIO_ROOT)/config/sa8155autoconf.h
+ else
+ include $(AUDIO_ROOT)/config/sm8150auto.conf
+ export
+ INCS += -include $(AUDIO_ROOT)/config/sm8150autoconf.h
+ endif
endif
ifeq ($(CONFIG_ARCH_KONA), y)
include $(AUDIO_ROOT)/config/konaauto.conf
@@ -48,6 +54,11 @@ ifeq ($(KERNEL_BUILD), 0)
export
INCS += -include $(AUDIO_ROOT)/config/qcs405autoconf.h
endif
+ ifeq ($(CONFIG_QTI_GVM), y)
+ include $(AUDIO_ROOT)/config/gvmauto.conf
+ export
+ INCS += -include $(AUDIO_ROOT)/config/gvmautoconf.h
+ endif
endif
# As per target team, build is done as follows: