diff options
Diffstat (limited to 'meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/1110-ASoC-AMD-create-add-dummy-codec-and-machine-devices-.patch')
-rw-r--r-- | meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/1110-ASoC-AMD-create-add-dummy-codec-and-machine-devices-.patch | 360 |
1 files changed, 0 insertions, 360 deletions
diff --git a/meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/1110-ASoC-AMD-create-add-dummy-codec-and-machine-devices-.patch b/meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/1110-ASoC-AMD-create-add-dummy-codec-and-machine-devices-.patch deleted file mode 100644 index 65884322..00000000 --- a/meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/1110-ASoC-AMD-create-add-dummy-codec-and-machine-devices-.patch +++ /dev/null @@ -1,360 +0,0 @@ -From 75e335dc0329493b561602eba43490ba1e5d9b56 Mon Sep 17 00:00:00 2001 -From: Maruthi Srinivas Bayyavarapu <Maruthi.Bayyavarapu@amd.com> -Date: Thu, 30 Mar 2017 16:05:24 +0530 -Subject: [PATCH 1110/4131] ASoC: AMD: create/add dummy codec and machine - devices/drivers - -Dummy codec and machine devices are created so that ASoC based -soundcard can be created. Respective drivers which bound to -these devices are added. - -Signed-off-by: Maruthi Bayyavarapu <maruthi.bayyavarapu@amd.com> -Signed-off-by: Alex Deucher <alexander.deucher@amd.com> ---- - sound/soc/amd/raven/Makefile | 4 + - sound/soc/amd/raven/acp3x-dummy5102.c | 136 ++++++++++++++++++++++++++++++++++ - sound/soc/amd/raven/dummy-w5102.c | 102 +++++++++++++++++++++++++ - sound/soc/amd/raven/pci-acp3x.c | 34 ++++++++- - 4 files changed, 272 insertions(+), 4 deletions(-) - create mode 100644 sound/soc/amd/raven/acp3x-dummy5102.c - create mode 100644 sound/soc/amd/raven/dummy-w5102.c - -diff --git a/sound/soc/amd/raven/Makefile b/sound/soc/amd/raven/Makefile -index 8c03e6f..5db3afc 100644 ---- a/sound/soc/amd/raven/Makefile -+++ b/sound/soc/amd/raven/Makefile -@@ -1,4 +1,8 @@ - snd-pci-acp3x-objs := pci-acp3x.o - snd-acp3x-pcm-dma-objs := acp3x-pcm-dma.o -+snd-soc-dummy-w5102-objs := dummy-w5102.o -+snd-soc-acp3x-mach-objs := acp3x-dummy5102.o - obj-$(CONFIG_SND_SOC_AMD_ACP3x) += snd-pci-acp3x.o - obj-$(CONFIG_SND_SOC_AMD_ACP3x) += snd-acp3x-pcm-dma.o -+obj-$(CONFIG_SND_SOC_AMD_ACP3x) += snd-soc-dummy-w5102.o -+obj-$(CONFIG_SND_SOC_AMD_ACP3x) += snd-soc-acp3x-mach.o -diff --git a/sound/soc/amd/raven/acp3x-dummy5102.c b/sound/soc/amd/raven/acp3x-dummy5102.c -new file mode 100644 -index 0000000..3b2f509 ---- /dev/null -+++ b/sound/soc/amd/raven/acp3x-dummy5102.c -@@ -0,0 +1,136 @@ -+/* -+ * Machine driver for AMD ACP Audio engine using dummy codec -+ * -+ * Copyright 2016 Advanced Micro Devices, Inc. -+ * -+ * Permission is hereby granted, free of charge, to any person obtaining a -+ * copy of this software and associated documentation files (the "Software"), -+ * to deal in the Software without restriction, including without limitation -+ * the rights to use, copy, modify, merge, publish, distribute, sublicense, -+ * and/or sell copies of the Software, and to permit persons to whom the -+ * Software is furnished to do so, subject to the following conditions: -+ * -+ * The above copyright notice and this permission notice shall be included in -+ * all copies or substantial portions of the Software. -+ * -+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -+ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR -+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -+ * OTHER DEALINGS IN THE SOFTWARE. -+ * -+ * -+ */ -+ -+#include <sound/soc.h> -+#include <sound/soc-dapm.h> -+#include <linux/module.h> -+ -+static int acp3x_hw_params(struct snd_pcm_substream *substream, -+ struct snd_pcm_hw_params *params) -+ -+{ -+ return 0; -+} -+ -+static struct snd_soc_ops acp3x_wm5102_ops = { -+ .hw_params = acp3x_hw_params, -+}; -+ -+static int acp3x_init(struct snd_soc_pcm_runtime *rtd) -+{ -+ return 0; -+} -+ -+static struct snd_soc_dai_link acp3x_dai_w5102[] = { -+ { -+ .name = "RV-W5102-PLAY", -+ .stream_name = "Playback", -+ .platform_name = "acp3x_rv_i2s.0", -+ .cpu_dai_name = "acp3x_rv_i2s.0", -+ .codec_dai_name = "dummy_w5102_dai", -+ .codec_name = "dummy_w5102.0", -+ .dai_fmt = SND_SOC_DAIFMT_DSP_A /*SND_SOC_DAIFMT_I2S*/ | SND_SOC_DAIFMT_NB_NF -+ | SND_SOC_DAIFMT_CBM_CFM, -+ .ops = &acp3x_wm5102_ops, -+ .init = acp3x_init, -+ }, -+}; -+ -+static const struct snd_soc_dapm_widget acp3x_widgets[] = { -+ SND_SOC_DAPM_HP("Headphones", NULL), -+ SND_SOC_DAPM_MIC("Analog Mic", NULL), -+}; -+ -+static const struct snd_soc_dapm_route acp3x_audio_route[] = { -+ {"Headphones", NULL, "HPO L"}, -+ {"Headphones", NULL, "HPO R"}, -+ {"MIC1", NULL, "Analog Mic"}, -+}; -+ -+static struct snd_soc_card acp3x_card = { -+ .name = "acp3x", -+ .owner = THIS_MODULE, -+ .dai_link = acp3x_dai_w5102, -+ .num_links = 1, -+}; -+ -+static int acp3x_probe(struct platform_device *pdev) -+{ -+ int ret; -+ struct acp_wm5102 *machine = NULL; -+ struct snd_soc_card *card; -+ -+ card = &acp3x_card; -+ acp3x_card.dev = &pdev->dev; -+ -+ platform_set_drvdata(pdev, card); -+ snd_soc_card_set_drvdata(card, machine); -+ -+ ret = snd_soc_register_card(card); -+ if (ret) { -+ dev_err(&pdev->dev, -+ "snd_soc_register_card(%s) failed: %d\n", -+ acp3x_card.name, ret); -+ return ret; -+ } -+ return 0; -+} -+ -+static int acp3x_remove(struct platform_device *pdev) -+{ -+ struct snd_soc_card *card; -+ -+ card = platform_get_drvdata(pdev); -+ snd_soc_unregister_card(card); -+ -+ return 0; -+} -+ -+static struct platform_driver acp3x_mach_driver = { -+ .driver = { -+ .name = "acp3x_w5102_mach", -+ .pm = &snd_soc_pm_ops, -+ }, -+ .probe = acp3x_probe, -+ .remove = acp3x_remove, -+}; -+ -+static int __init acp3x_audio_init(void) -+{ -+ platform_driver_register(&acp3x_mach_driver); -+ return 0; -+} -+ -+static void __exit acp3x_audio_exit(void) -+{ -+ platform_driver_unregister(&acp3x_mach_driver); -+} -+ -+module_init(acp3x_audio_init); -+module_exit(acp3x_audio_exit); -+ -+MODULE_AUTHOR("Maruthi.Bayyavarapu@amd.com"); -+MODULE_LICENSE("GPL v2"); -diff --git a/sound/soc/amd/raven/dummy-w5102.c b/sound/soc/amd/raven/dummy-w5102.c -new file mode 100644 -index 0000000..3e09e32 ---- /dev/null -+++ b/sound/soc/amd/raven/dummy-w5102.c -@@ -0,0 +1,102 @@ -+/* -+ * dummy audio codec driver -+ * -+ * Copyright 2016 Advanced Micro Devices, Inc. -+ * -+ * Permission is hereby granted, free of charge, to any person obtaining a -+ * copy of this software and associated documentation files (the "Software"), -+ * to deal in the Software without restriction, including without limitation -+ * the rights to use, copy, modify, merge, publish, distribute, sublicense, -+ * and/or sell copies of the Software, and to permit persons to whom the -+ * Software is furnished to do so, subject to the following conditions: -+ * -+ * The above copyright notice and this permission notice shall be included in -+ * all copies or substantial portions of the Software. -+ * -+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -+ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR -+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -+ * OTHER DEALINGS IN THE SOFTWARE. -+ * -+ * -+ */ -+ -+#include <linux/module.h> -+#include <sound/soc.h> -+ -+#define W5102_RATES SNDRV_PCM_RATE_8000_96000 -+#define W5102_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | \ -+ SNDRV_PCM_FMTBIT_S32_LE | \ -+ SNDRV_PCM_FMTBIT_S24_LE) -+ -+static const struct snd_soc_dapm_widget w5102_widgets[] = { -+ SND_SOC_DAPM_OUTPUT("dummy-w5102-out"), -+ SND_SOC_DAPM_INPUT("dummy-w5102-in"), -+}; -+ -+static const struct snd_soc_dapm_route w5102_routes[] = { -+ { "dummy-w5102-out", NULL, "Playback" }, -+ { "Capture", NULL, "dummy-w5102-in" }, -+}; -+ -+static struct snd_soc_codec_driver soc_codec_w5102_dummy = { -+ .component_driver = { -+ .dapm_widgets = w5102_widgets, -+ .num_dapm_widgets = ARRAY_SIZE(w5102_widgets), -+ .dapm_routes = w5102_routes, -+ .num_dapm_routes = ARRAY_SIZE(w5102_routes), -+ }, -+}; -+ -+static struct snd_soc_dai_driver w5102_stub_dai = { -+ .name = "dummy_w5102_dai", -+ .playback = { -+ .stream_name = "Playback", -+ .channels_min = 2, -+ .channels_max = 2, -+ .rates = W5102_RATES, -+ .formats = W5102_FORMATS, -+ }, -+ .capture = { -+ .stream_name = "Capture", -+ .channels_min = 2, -+ .channels_max = 2, -+ .rates = W5102_RATES, -+ .formats = W5102_FORMATS, -+ }, -+ -+}; -+ -+static int dummy_w5102_probe(struct platform_device *pdev) -+{ -+ int ret; -+ -+ ret = snd_soc_register_codec(&pdev->dev, &soc_codec_w5102_dummy, -+ &w5102_stub_dai, 1); -+ return ret; -+} -+ -+static int dummy_w5102_remove(struct platform_device *pdev) -+{ -+ snd_soc_unregister_codec(&pdev->dev); -+ return 0; -+} -+ -+ -+static struct platform_driver dummy_w5102_driver = { -+ .probe = dummy_w5102_probe, -+ .remove = dummy_w5102_remove, -+ .driver = { -+ .name = "dummy_w5102", -+ .owner = THIS_MODULE, -+ }, -+}; -+ -+module_platform_driver(dummy_w5102_driver); -+ -+MODULE_DESCRIPTION("dummy-w5102 dummy codec driver"); -+MODULE_LICENSE("GPL v2"); -+MODULE_ALIAS("platform: dummy_w5102"); -diff --git a/sound/soc/amd/raven/pci-acp3x.c b/sound/soc/amd/raven/pci-acp3x.c -index a182013..5891c5b 100644 ---- a/sound/soc/amd/raven/pci-acp3x.c -+++ b/sound/soc/amd/raven/pci-acp3x.c -@@ -24,7 +24,7 @@ struct acp3x_dev_data { - void __iomem *acp3x_base; - bool acp3x_audio_mode; - struct resource *res; -- struct platform_device *pdev; -+ struct platform_device *pdev[3]; - }; - - static int snd_acp3x_probe(struct pci_dev *pci, -@@ -103,13 +103,30 @@ static int snd_acp3x_probe(struct pci_dev *pci, - pdevinfo.data = &irqflags; - pdevinfo.size_data = sizeof(irqflags); - -- adata->pdev = platform_device_register_full(&pdevinfo); -- if (adata->pdev == NULL) { -+ adata->pdev[0] = platform_device_register_full(&pdevinfo); -+ if (adata->pdev[0] == NULL) { - dev_err(&pci->dev, "cannot register %s device\n", - pdevinfo.name); - ret = -ENODEV; - goto unmap_mmio; - } -+ -+ /* create dummy codec device */ -+ adata->pdev[1] = platform_device_register_simple("dummy_w5102", -+ 0, NULL, 0); -+ if (IS_ERR(adata->pdev[1])) { -+ dev_err(&pci->dev, "Cannot register dummy_w5102\n"); -+ ret = -ENODEV; -+ goto unregister_pdev0; -+ } -+ /* create dummy mach device */ -+ adata->pdev[2] = platform_device_register_simple( -+ "acp3x_w5102_mach", 0, NULL, 0); -+ if (IS_ERR(adata->pdev[2])) { -+ dev_err(&pci->dev, "Cannot register acp3x_w5102_mach\n"); -+ ret = -ENODEV; -+ goto unregister_pdev1; -+ } - } else { - dev_err(&pci->dev, "Inavlid ACP audio mode : %d\n", val); - ret = -ENODEV; -@@ -118,6 +135,10 @@ static int snd_acp3x_probe(struct pci_dev *pci, - - return 0; - -+unregister_pdev1: -+ platform_device_unregister(adata->pdev[1]); -+unregister_pdev0: -+ platform_device_unregister(adata->pdev[0]); - unmap_mmio: - pci_disable_msi(pci); - iounmap(adata->acp3x_base); -@@ -131,9 +152,14 @@ static int snd_acp3x_probe(struct pci_dev *pci, - - static void snd_acp3x_remove(struct pci_dev *pci) - { -+ int i; - struct acp3x_dev_data *adata = pci_get_drvdata(pci); - -- platform_device_unregister(adata->pdev); -+ if (adata->acp3x_audio_mode == ACP3x_I2S_MODE) { -+ for (i = 2; i >= 0; i--) -+ platform_device_unregister(adata->pdev[i]); -+ } -+ - iounmap(adata->acp3x_base); - - pci_disable_msi(pci); --- -2.7.4 - |