diff options
author | Derek Chen <chenche@codeaurora.org> | 2019-03-14 10:26:41 -0700 |
---|---|---|
committer | Derek Chen <chenche@codeaurora.org> | 2019-07-19 14:36:00 -0700 |
commit | c8940293bfc99c77f302af2fedc866e93fa15785 (patch) | |
tree | 149d159d4a831c1dadb808f921ca075c1e9c55df | |
parent | f53de7f9fb98f4236ab7aed20960a74702cb966e (diff) | |
download | msm-extra-c8940293bfc99c77f302af2fedc866e93fa15785.tar.gz |
ASoC: msm: use snd event fwk for ssr on auto platform
Switch to use SND event FWK for SSR handling
instead of audio notifier on automotive platform.
Change-Id: I8d0b1ac8f09417a8b33a8e8141f7ae06e1195f54
Signed-off-by: Derek Chen <chenche@codeaurora.org>
-rw-r--r-- | Android.mk | 5 | ||||
-rw-r--r-- | asoc/sa8155.c | 132 | ||||
-rw-r--r-- | config/gvmauto.conf | 1 | ||||
-rw-r--r-- | config/gvmautoconf.h | 1 | ||||
-rw-r--r-- | config/sa8155auto.conf | 1 | ||||
-rw-r--r-- | config/sa8155autoconf.h | 1 | ||||
-rw-r--r-- | soc/Android.mk | 10 | ||||
-rw-r--r-- | soc/Kbuild | 17 |
8 files changed, 106 insertions, 62 deletions
@@ -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 @@ -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: |