Unverified Commit 005859a2 authored by Mark Brown's avatar Mark Brown
Browse files

ASoC: amd: Add support for ACP7.0 & ACP7.1

Merge series from Vijendar Mukunda <Vijendar.Mukunda@amd.com>:

This patch series includes the below changes
	- Refactor existing ACP6.3 platform ACP PCI driver, SoundWire
	  DMA driver code.
	- Add Audio IO support for ACP7.0 and ACP7.1 platforms for
	SoundWire IO and ACP PDM controller combination.
	- Add SoundWire generic machine driver changes for legacy stack
	(No DSP enabled) for ACP7.0 & ACP7.1 platforms.
	- Add SoundWire machines for ACP7.0 & ACP7.1 platforms.
parents f98d4200 4bb5b6f1
Loading
Loading
Loading
Loading
+5 −5
Original line number Diff line number Diff line
@@ -161,15 +161,15 @@ config SND_SOC_AMD_SOUNDWIRE
	  If unsure select "N".

config SND_SOC_AMD_PS
        tristate "AMD Audio Coprocessor-v6.3 Pink Sardine support"
        tristate "AMD Audio Coprocessor-v6.3/v7.0/v7.1 support"
	select SND_SOC_AMD_SOUNDWIRE_LINK_BASELINE
	select SND_SOC_ACPI_AMD_MATCH
        depends on X86 && PCI && ACPI
        help
          This option enables Audio Coprocessor i.e ACP v6.3 support on
          AMD Pink sardine platform. By enabling this flag build will be
          triggered for ACP PCI driver, ACP PDM DMA driver, ACP SoundWire
          DMA driver.
	  This option enables Audio Coprocessor i.e ACP6.3/ACP7.0/ACP7.1
	  variants support. By enabling this flag build will be triggered
	  for ACP PCI driver, ACP PDM DMA driver, ACP SoundWire DMA
	  driver.
          Say m if you have such a device.
          If unsure select "N".

+1 −0
Original line number Diff line number Diff line
@@ -156,6 +156,7 @@ config SND_SOC_AMD_LEGACY_SDW_MACH
	select SND_SOC_RT712_SDCA_SDW
	select SND_SOC_RT712_SDCA_DMIC_SDW
	select SND_SOC_RT1316_SDW
	select SND_SOC_RT1320_SDW
	select SND_SOC_RT715_SDW
	select SND_SOC_RT715_SDCA_SDW
	select SND_SOC_RT722_SDCA_SDW
+1 −1
Original line number Diff line number Diff line
@@ -22,7 +22,7 @@ snd-acp70-y := acp70.o
snd-acp-mach-y     := acp-mach-common.o
snd-acp-legacy-mach-y     := acp-legacy-mach.o acp3x-es83xx/acp3x-es83xx.o
snd-acp-sof-mach-y     := acp-sof-mach.o
snd-soc-acpi-amd-match-y := amd-acp63-acpi-match.o
snd-soc-acpi-amd-match-y := amd-acp63-acpi-match.o amd-acp70-acpi-match.o
snd-acp-sdw-mach-y     := acp-sdw-mach-common.o
snd-acp-sdw-sof-mach-y += acp-sdw-sof-mach.o
snd-acp-sdw-legacy-mach-y += acp-sdw-legacy-mach.o
+45 −0
Original line number Diff line number Diff line
@@ -28,6 +28,8 @@ static void log_quirks(struct device *dev)
			SOC_JACK_JDSRC(soc_sdw_quirk));
	if (soc_sdw_quirk & ASOC_SDW_ACP_DMIC)
		dev_dbg(dev, "quirk SOC_SDW_ACP_DMIC enabled\n");
	if (soc_sdw_quirk & ASOC_SDW_CODEC_SPKR)
		dev_dbg(dev, "quirk ASOC_SDW_CODEC_SPKR enabled\n");
}

static int soc_sdw_quirk_cb(const struct dmi_system_id *id)
@@ -45,6 +47,38 @@ static const struct dmi_system_id soc_sdw_quirk_table[] = {
		},
		.driver_data = (void *)RT711_JD2,
	},
	{
		.callback = soc_sdw_quirk_cb,
		.matches = {
			DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc"),
			DMI_EXACT_MATCH(DMI_PRODUCT_SKU, "0D80"),
		},
		.driver_data = (void *)(ASOC_SDW_CODEC_SPKR),
	},
	{
		.callback = soc_sdw_quirk_cb,
		.matches = {
			DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc"),
			DMI_EXACT_MATCH(DMI_PRODUCT_SKU, "0D81"),
		},
		.driver_data = (void *)(ASOC_SDW_CODEC_SPKR),
	},
	{
		.callback = soc_sdw_quirk_cb,
		.matches = {
			DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc"),
			DMI_EXACT_MATCH(DMI_PRODUCT_SKU, "0D82"),
		},
		.driver_data = (void *)(ASOC_SDW_CODEC_SPKR),
	},
	{
		.callback = soc_sdw_quirk_cb,
		.matches = {
			DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc"),
			DMI_EXACT_MATCH(DMI_PRODUCT_SKU, "0D83"),
		},
		.driver_data = (void *)(ASOC_SDW_CODEC_SPKR),
	},
	{}
};

@@ -122,6 +156,13 @@ static int create_sdw_dailink(struct snd_soc_card *card,
			if (ret)
				return ret;
			break;
		case ACP70_PCI_REV:
		case ACP71_PCI_REV:
			ret = get_acp70_cpu_pin_id(ffs(soc_end->link_mask - 1),
						   *be_id, &cpu_pin_id, dev);
			if (ret)
				return ret;
			break;
		default:
			return -EINVAL;
		}
@@ -221,6 +262,8 @@ static int create_sdw_dailinks(struct snd_soc_card *card,

	switch (amd_ctx->acp_rev) {
	case ACP63_PCI_REV:
	case ACP70_PCI_REV:
	case ACP71_PCI_REV:
		sdw_platform_component->name = "amd_ps_sdw_dma.0";
		break;
	default:
@@ -266,6 +309,8 @@ static int create_dmic_dailinks(struct snd_soc_card *card,

	switch (amd_ctx->acp_rev) {
	case ACP63_PCI_REV:
	case ACP70_PCI_REV:
	case ACP71_PCI_REV:
		pdm_cpu->name = "acp_ps_pdm_dma.0";
		pdm_platform->name = "acp_ps_pdm_dma.0";
		break;
+34 −0
Original line number Diff line number Diff line
@@ -59,6 +59,40 @@ int get_acp63_cpu_pin_id(u32 sdw_link_id, int be_id, int *cpu_pin_id, struct dev
}
EXPORT_SYMBOL_NS_GPL(get_acp63_cpu_pin_id, "SND_SOC_AMD_SDW_MACH");

int get_acp70_cpu_pin_id(u32 sdw_link_id, int be_id, int *cpu_pin_id, struct device *dev)
{
	switch (sdw_link_id) {
	case AMD_SDW0:
	case AMD_SDW1:
		switch (be_id) {
		case SOC_SDW_JACK_OUT_DAI_ID:
			*cpu_pin_id = ACP70_SW_AUDIO0_TX;
			break;
		case SOC_SDW_JACK_IN_DAI_ID:
			*cpu_pin_id = ACP70_SW_AUDIO0_RX;
			break;
		case SOC_SDW_AMP_OUT_DAI_ID:
			*cpu_pin_id = ACP70_SW_AUDIO1_TX;
			break;
		case SOC_SDW_AMP_IN_DAI_ID:
			*cpu_pin_id = ACP70_SW_AUDIO1_RX;
			break;
		case SOC_SDW_DMIC_DAI_ID:
			*cpu_pin_id = ACP70_SW_AUDIO2_RX;
			break;
		default:
			dev_err(dev, "Invalid be id:%d\n", be_id);
			return -EINVAL;
		}
		break;
	default:
		return -EINVAL;
	}
	dev_dbg(dev, "sdw_link_id:%d, be_id:%d, cpu_pin_id:%d\n", sdw_link_id, be_id, *cpu_pin_id);
	return 0;
}
EXPORT_SYMBOL_NS_GPL(get_acp70_cpu_pin_id, "SND_SOC_AMD_SDW_MACH");

MODULE_DESCRIPTION("AMD SoundWire Common Machine driver");
MODULE_AUTHOR("Vijendar Mukunda <Vijendar.Mukunda@amd.com>");
MODULE_LICENSE("GPL");
Loading