Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Unverified Commit 6e8fa4a4 authored by Michael Bestas's avatar Michael Bestas
Browse files

Merge tag 'LA.UM.9.14.r1-20700-LAHAINA.QSSI13.0' of...

Merge tag 'LA.UM.9.14.r1-20700-LAHAINA.QSSI13.0' of https://git.codelinaro.org/clo/la/platform/vendor/opensource/audio-kernel into android13-5.4-lahaina

"LA.UM.9.14.r1-20700-LAHAINA.QSSI13.0"

* tag 'LA.UM.9.14.r1-20700-LAHAINA.QSSI13.0' of https://git.codelinaro.org/clo/la/platform/vendor/opensource/audio-kernel:
  asoc: use virt_sndcard_ctl node for sndcard status update
  dsp : search cal block using path in asm
  asoc: audio reach kernel bringup on 8255 GVM
  ASoC: codecs: Deinitialize mbhc on codec remove
  asoc: Add kcontrol "QUAT_TDM_RX_7 Port Mixer TERT_TDM_TX_7"
  audio: Modified SSR handling after sub-system shutdown compltes
  asoc: remove error from function msm_pinctrl_mclk_enable

Change-Id: I3bad495ed1fe4ec8a3f7c2acb515c9acd96f31da
parents e621ebf5 3775ffed
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -186,7 +186,7 @@ ifdef CONFIG_SND_SOC_SA8155
	MACHINE_OBJS += sa8155.o
	MACHINE_OBJS += sa8155.o
endif
endif


# for gvmgh sound card driver
# for gvm sound card driver
ifdef CONFIG_SND_SOC_GVM_AUTO_SPF
ifdef CONFIG_SND_SOC_GVM_AUTO_SPF
    SPF_MACHINE_OBJS += gvm_auto_spf_dummy.o
    SPF_MACHINE_OBJS += gvm_auto_spf_dummy.o
endif
endif
+2 −0
Original line number Original line Diff line number Diff line
@@ -2961,6 +2961,8 @@ static void wcd937x_soc_codec_remove(struct snd_soc_component *component)
		wcd937x->register_notifier(wcd937x->handle,
		wcd937x->register_notifier(wcd937x->handle,
						&wcd937x->nblock,
						&wcd937x->nblock,
						false);
						false);
	wcd937x_mbhc_deinit(component);

	return;
	return;
}
}


+1 −0
Original line number Original line Diff line number Diff line
@@ -3961,6 +3961,7 @@ static void wcd938x_soc_codec_remove(struct snd_soc_component *component)
		wcd938x->register_notifier(wcd938x->handle,
		wcd938x->register_notifier(wcd938x->handle,
						&wcd938x->nblock,
						&wcd938x->nblock,
						false);
						false);
	wcd938x_mbhc_deinit(component);
}
}


static int wcd938x_soc_codec_suspend(struct snd_soc_component *component)
static int wcd938x_soc_codec_suspend(struct snd_soc_component *component)
+101 −62
Original line number Original line Diff line number Diff line
@@ -19,6 +19,7 @@
#include <linux/slab.h>
#include <linux/slab.h>
#include <linux/io.h>
#include <linux/io.h>
#include <linux/module.h>
#include <linux/module.h>
#include <linux/miscdevice.h>
#include <linux/input.h>
#include <linux/input.h>
#include <linux/of_device.h>
#include <linux/of_device.h>
#include <linux/pm_qos.h>
#include <linux/pm_qos.h>
@@ -30,8 +31,6 @@
#include <sound/info.h>
#include <sound/info.h>
#include <dsp/audio_notifier.h>
#include <dsp/audio_notifier.h>
#include "msm_dailink.h"
#include "msm_dailink.h"
#include <soc/qcom/subsystem_restart.h>
#include <soc/qcom/subsystem_notif.h>
#include <soc/qcom/boot_stats.h>
#include <soc/qcom/boot_stats.h>




@@ -324,7 +323,7 @@ static struct snd_soc_dai_link msm_common_dai_links[] = {
	},
	},
};
};


static struct snd_soc_dai_link msm_gvm8295_dai_links[] = {
static struct snd_soc_dai_link msm_gvm_auto_dai_links[] = {
	/* BackEnd DAI Links */
	/* BackEnd DAI Links */
	{
	{
	.name = "PRI_TDM_RX_0_DUMMY",
	.name = "PRI_TDM_RX_0_DUMMY",
@@ -467,6 +466,26 @@ static struct snd_soc_dai_link msm_gvm8295_dai_links[] = {
	SND_SOC_DAILINK_REG(sep_tdm_tx_0_dummy),
	SND_SOC_DAILINK_REG(sep_tdm_tx_0_dummy),
	},
	},
	{
	{
	.name = "OCT_TDM_RX_0_DUMMY",
	.stream_name = "TDM-LPAIF_WSA2-RX-PRIMARY",
	.dpcm_playback = 1,
	.trigger = {SND_SOC_DPCM_TRIGGER_POST,
				SND_SOC_DPCM_TRIGGER_POST},
	.ignore_suspend = 1,
	.ignore_pmdown_time = 1,
	SND_SOC_DAILINK_REG(oct_tdm_rx_0_dummy),
	},
	{
	.name = "OCT_TDM_TX_0_DUMMY",
	.stream_name = "TDM-LPAIF_WSA2-TX-PRIMARY",
	.dpcm_capture = 1,
	.trigger = {SND_SOC_DPCM_TRIGGER_POST,
				SND_SOC_DPCM_TRIGGER_POST},
	.ignore_suspend = 1,
	.ignore_pmdown_time = 1,
	SND_SOC_DAILINK_REG(oct_tdm_tx_0_dummy),
	},
	{
	.name = "HS_IF0_TDM_RX_0_DUMMY",
	.name = "HS_IF0_TDM_RX_0_DUMMY",
	.stream_name = "TDM-LPAIF_SDR-RX-PRIMARY",
	.stream_name = "TDM-LPAIF_SDR-RX-PRIMARY",
	.dpcm_playback = 1,
	.dpcm_playback = 1,
@@ -526,6 +545,46 @@ static struct snd_soc_dai_link msm_gvm8295_dai_links[] = {
	.ignore_pmdown_time = 1,
	.ignore_pmdown_time = 1,
	SND_SOC_DAILINK_REG(hs_if2_tdm_tx_0_dummy),
	SND_SOC_DAILINK_REG(hs_if2_tdm_tx_0_dummy),
	},
	},
	{
	.name = "HS_IF3_TDM_RX_0",
	.stream_name = "TDM-LPAIF_SDR-RX-QUATERNARY",
	.dpcm_playback = 1,
	.trigger = {SND_SOC_DPCM_TRIGGER_POST,
				SND_SOC_DPCM_TRIGGER_POST},
	.ignore_suspend = 1,
	.ignore_pmdown_time = 1,
	SND_SOC_DAILINK_REG(hs_if3_tdm_rx_0_dummy),
	},
	{
	.name = "HS_IF3_TDM_TX_0",
	.stream_name = "TDM-LPAIF_SDR-TX-QUATERNARY",
	.dpcm_capture = 1,
	.trigger = {SND_SOC_DPCM_TRIGGER_POST,
				SND_SOC_DPCM_TRIGGER_POST},
	.ignore_suspend = 1,
	.ignore_pmdown_time = 1,
	SND_SOC_DAILINK_REG(hs_if3_tdm_tx_0_dummy),
	},
	{
	.name = "HS_IF4_TDM_RX_0",
	.stream_name = "TDM-LPAIF_SDR-RX-QUINARY",
	.dpcm_playback = 1,
	.trigger = {SND_SOC_DPCM_TRIGGER_POST,
				SND_SOC_DPCM_TRIGGER_POST},
	.ignore_suspend = 1,
	.ignore_pmdown_time = 1,
	SND_SOC_DAILINK_REG(hs_if4_tdm_rx_0_dummy),
	},
	{
	.name = "HS_IF4_TDM_TX_0",
	.stream_name = "TDM-LPAIF_SDR-TX-QUINARY",
	.dpcm_capture = 1,
	.trigger = {SND_SOC_DPCM_TRIGGER_POST,
				SND_SOC_DPCM_TRIGGER_POST},
	.ignore_suspend = 1,
	.ignore_pmdown_time = 1,
	SND_SOC_DAILINK_REG(hs_if4_tdm_tx_0_dummy),
	},
};
};


static struct snd_soc_dai_link msm_talos_dai_links[] = {
static struct snd_soc_dai_link msm_talos_dai_links[] = {
@@ -632,17 +691,7 @@ static struct snd_soc_dai_link msm_talos_dai_links[] = {
	},
	},
};
};


struct snd_soc_card snd_soc_card_auto_hana_dummy_msm = {
struct snd_soc_card snd_soc_card_gvm_auto_dummy_msm;
	.name = "gvmauto-8155-snd-card",
};

struct snd_soc_card snd_soc_card_auto_talos_dummy_msm = {
	.name = "gvmauto-6155-snd-card",
};

struct snd_soc_card snd_soc_card_auto_makena_dummy_msm = {
	.name = "gvmauto-8295-snd-card",
};


static int msm_populate_dai_link_component_of_node(
static int msm_populate_dai_link_component_of_node(
					struct snd_soc_card *card)
					struct snd_soc_card *card)
@@ -751,21 +800,11 @@ static const struct of_device_id gvm_asoc_machine_of_match[] = {
		.data = "adp_star_codec"},
		.data = "adp_star_codec"},
	{},
	{},
};
};
static struct snd_soc_dai_link msm_auto_dai_links[
			 ARRAY_SIZE(msm_common_dai_links)];

static struct snd_soc_dai_link msm_auto_talos_dai_links[
			 ARRAY_SIZE(msm_talos_dai_links)];

static struct snd_soc_dai_link msm_auto_gvm8295_dai_links[
			 ARRAY_SIZE(msm_gvm8295_dai_links)];


static struct snd_soc_card *populate_snd_card_dailinks(struct device *dev)
static struct snd_soc_card *populate_snd_card_dailinks(struct device *dev)
{
{
	struct snd_soc_card *card = NULL;
	struct snd_soc_card *card = NULL;
	struct snd_soc_dai_link *dailink;
	const struct of_device_id *match = NULL;
	int total_links;
	const struct of_device_id *match;


	match = of_match_node(gvm_asoc_machine_of_match, dev->of_node);
	match = of_match_node(gvm_asoc_machine_of_match, dev->of_node);
	if (!match) {
	if (!match) {
@@ -774,33 +813,17 @@ static struct snd_soc_card *populate_snd_card_dailinks(struct device *dev)
		return NULL;
		return NULL;
	}
	}


	if (!strcmp(match->compatible, "qcom,8155-spf-asoc-snd-adp-star")) {
	card = &snd_soc_card_gvm_auto_dummy_msm;
		card = &snd_soc_card_auto_hana_dummy_msm;
		total_links = ARRAY_SIZE(msm_common_dai_links);
		memcpy(msm_auto_dai_links,
			msm_common_dai_links,
			sizeof(msm_common_dai_links));


		dailink = msm_auto_dai_links;
	if (!strcmp(match->compatible, "qcom,8155-spf-asoc-snd-adp-star")) {
		card->dai_link = msm_common_dai_links;
		card->num_links = ARRAY_SIZE(msm_common_dai_links);
	} else if (!strcmp(match->compatible, "qcom,6155-spf-asoc-snd-adp-star")) {
	} else if (!strcmp(match->compatible, "qcom,6155-spf-asoc-snd-adp-star")) {
		card = &snd_soc_card_auto_talos_dummy_msm;
		card->dai_link = msm_talos_dai_links;
		total_links = ARRAY_SIZE(msm_talos_dai_links);
		card->num_links = ARRAY_SIZE(msm_talos_dai_links);
		memcpy(msm_auto_talos_dai_links,
			msm_talos_dai_links,
			sizeof(msm_talos_dai_links));
		dailink = msm_auto_talos_dai_links;
	} else if (!strcmp(match->compatible, "qcom,gvm-auto-spf-asoc-snd-adp-star")) {
	} else if (!strcmp(match->compatible, "qcom,gvm-auto-spf-asoc-snd-adp-star")) {
		card = &snd_soc_card_auto_makena_dummy_msm;
		card->dai_link = msm_gvm_auto_dai_links;
		total_links = ARRAY_SIZE(msm_gvm8295_dai_links);
		card->num_links = ARRAY_SIZE(msm_gvm_auto_dai_links);
		memcpy(msm_auto_gvm8295_dai_links,
			msm_gvm8295_dai_links,
			sizeof(msm_gvm8295_dai_links));
		dailink = msm_auto_gvm8295_dai_links;
	}

	if (card) {
		card->dai_link = dailink;
		card->num_links = total_links;
}
}


	return card;
	return card;
@@ -827,29 +850,42 @@ void msm_common_set_pdata(struct snd_soc_card *card,
	pdata->common_pdata = common_pdata;
	pdata->common_pdata = common_pdata;
}
}


static int auto_spf_dummy_ssr_cb(struct notifier_block *this,
#define AUTO_VIRT_SNDCARD_ONLINE 0
				unsigned long code,
#define AUTO_VIRT_SNDCARD_OFFLINE 1
				void *data)

static long virt_sndcard_ioctl(struct file *f,
			unsigned int cmd, unsigned long arg)
{
{
	int ret = 0;
	struct snd_soc_card *card = platform_get_drvdata(spdev);
	struct snd_soc_card *card = platform_get_drvdata(spdev);


	switch (code) {
	switch (cmd) {
	case SUBSYS_BEFORE_SHUTDOWN:
	case AUTO_VIRT_SNDCARD_OFFLINE:
		snd_soc_card_change_online_state(card, 0); // change sndcard status to OFFLINE
		snd_soc_card_change_online_state(card, 0); // change sndcard status to OFFLINE
		dev_info(&spdev->dev, "ssr restart, mark sndcard offline\n");
		dev_info(&spdev->dev, "ssr restart, mark sndcard offline\n");
	break;
	break;
	case SUBSYS_AFTER_POWERUP:
	case AUTO_VIRT_SNDCARD_ONLINE:
		snd_soc_card_change_online_state(card, 1); // change sndcard status to ONLINE
		snd_soc_card_change_online_state(card, 1); // change sndcard status to ONLINE
		dev_info(&spdev->dev, "ssr complete, mark sndcard online\n");
		dev_info(&spdev->dev, "ssr complete, mark sndcard online\n");
	break;
	break;
	default:
	default:
		pr_err("%s: ioctl not found\n", __func__);
		ret = -EFAULT;
	break;
	break;
	}
	}
	return 0;

	return ret;
}
}


static struct notifier_block auto_spf_dummy_ssr_notifier = {
static const struct file_operations virt_sndcard_ctl_fops = {
	.notifier_call = auto_spf_dummy_ssr_cb,
		.owner = THIS_MODULE,
		.unlocked_ioctl = virt_sndcard_ioctl,
};

static struct miscdevice virt_sndcard_ctl_misc = {
		.minor	= MISC_DYNAMIC_MINOR,
		.name	= "virt_sndcard_ctl",
		.fops	= &virt_sndcard_ctl_fops,
};
};


static int msm_asoc_machine_probe(struct platform_device *pdev)
static int msm_asoc_machine_probe(struct platform_device *pdev)
@@ -915,8 +951,11 @@ static int msm_asoc_machine_probe(struct platform_device *pdev)


	spdev = pdev;
	spdev = pdev;


	subsys_notif_register_notifier("adsp", &auto_spf_dummy_ssr_notifier);
	ret = misc_register(&virt_sndcard_ctl_misc);
	dev_info(&pdev->dev, "Audio driver register for SSR complete\n");
	if (ret) {
		pr_err("Audio virtual sndcard ctrl register fail, ret=%d\n", ret);
	}
	dev_info(&pdev->dev, "Audio virtual sndcard ctrl register complete\n");


	return 0;
	return 0;
err:
err:
@@ -926,7 +965,7 @@ static int msm_asoc_machine_probe(struct platform_device *pdev)


static int msm_asoc_machine_remove(struct platform_device *pdev)
static int msm_asoc_machine_remove(struct platform_device *pdev)
{
{

	misc_deregister(&virt_sndcard_ctl_misc);
	return 0;
	return 0;
}
}


+6 −0
Original line number Original line Diff line number Diff line
@@ -14416,6 +14416,11 @@ static const struct snd_kcontrol_new quat_tdm_rx_3_port_mixer_controls[] = {
};
};
static const struct snd_kcontrol_new quat_tdm_rx_7_port_mixer_controls[] = {
static const struct snd_kcontrol_new quat_tdm_rx_7_port_mixer_controls[] = {
	SOC_DOUBLE_EXT("TERT_TDM_TX_7", SND_SOC_NOPM,
		MSM_BACKEND_DAI_QUAT_TDM_RX_7,
		MSM_BACKEND_DAI_TERT_TDM_TX_7, 1, 0,
		msm_routing_get_port_mixer,
		msm_routing_put_port_mixer),
	SOC_DOUBLE_EXT("QUAT_TDM_TX_7", SND_SOC_NOPM,
	SOC_DOUBLE_EXT("QUAT_TDM_TX_7", SND_SOC_NOPM,
		MSM_BACKEND_DAI_QUAT_TDM_RX_7,
		MSM_BACKEND_DAI_QUAT_TDM_RX_7,
		MSM_BACKEND_DAI_QUAT_TDM_TX_7, 1, 0,
		MSM_BACKEND_DAI_QUAT_TDM_TX_7, 1, 0,
@@ -29209,6 +29214,7 @@ static const struct snd_soc_dapm_route intercon_tdm[] = {
	{"QUAT_TDM_RX_3 Port Mixer", "SEN_TDM_TX_3", "SEN_TDM_TX_3"},
	{"QUAT_TDM_RX_3 Port Mixer", "SEN_TDM_TX_3", "SEN_TDM_TX_3"},
	{"QUAT_TDM_RX_3", NULL, "QUAT_TDM_RX_3 Port Mixer"},
	{"QUAT_TDM_RX_3", NULL, "QUAT_TDM_RX_3 Port Mixer"},
	{"QUAT_TDM_RX_7 Port Mixer", "TERT_TDM_TX_7", "TERT_TDM_TX_7"},
	{"QUAT_TDM_RX_7 Port Mixer", "QUAT_TDM_TX_7", "QUAT_TDM_TX_7"},
	{"QUAT_TDM_RX_7 Port Mixer", "QUAT_TDM_TX_7", "QUAT_TDM_TX_7"},
	{"QUAT_TDM_RX_7 Port Mixer", "QUIN_TDM_TX_7", "QUIN_TDM_TX_7"},
	{"QUAT_TDM_RX_7 Port Mixer", "QUIN_TDM_TX_7", "QUIN_TDM_TX_7"},
	{"QUAT_TDM_RX_7", NULL, "QUAT_TDM_RX_7 Port Mixer"},
	{"QUAT_TDM_RX_7", NULL, "QUAT_TDM_RX_7 Port Mixer"},
Loading