diff options
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.14.71/1100-ASoC-AMD-add-ACP3.0-PCI-driver.patch')
-rw-r--r-- | common/recipes-kernel/linux/linux-yocto-4.14.71/1100-ASoC-AMD-add-ACP3.0-PCI-driver.patch | 142 |
1 files changed, 142 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.14.71/1100-ASoC-AMD-add-ACP3.0-PCI-driver.patch b/common/recipes-kernel/linux/linux-yocto-4.14.71/1100-ASoC-AMD-add-ACP3.0-PCI-driver.patch new file mode 100644 index 00000000..73903e1c --- /dev/null +++ b/common/recipes-kernel/linux/linux-yocto-4.14.71/1100-ASoC-AMD-add-ACP3.0-PCI-driver.patch @@ -0,0 +1,142 @@ +From 2982cc86ba3f73a1ae0c205bb19d34fba69f0d39 Mon Sep 17 00:00:00 2001 +From: Maruthi Srinivas Bayyavarapu <Maruthi.Bayyavarapu@amd.com> +Date: Mon, 27 Mar 2017 14:25:49 +0530 +Subject: [PATCH 1100/4131] ASoC: AMD: add ACP3.0 PCI driver + +ACP 3.0 is a PCI audio device. This patch adds PCI driver to bind +to this device and get PCI resources. + +Signed-off-by: Maruthi Bayyavarapu <maruthi.bayyavarapu@amd.com> +Signed-off-by: Alex Deucher <alexander.deucher@amd.com> +--- + sound/soc/amd/raven/acp3x.h | 13 ++++++ + sound/soc/amd/raven/pci-acp3x.c | 97 +++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 110 insertions(+) + create mode 100644 sound/soc/amd/raven/acp3x.h + create mode 100644 sound/soc/amd/raven/pci-acp3x.c + +diff --git a/sound/soc/amd/raven/acp3x.h b/sound/soc/amd/raven/acp3x.h +new file mode 100644 +index 0000000..e9b4df0 +--- /dev/null ++++ b/sound/soc/amd/raven/acp3x.h +@@ -0,0 +1,13 @@ ++#include "chip_offset_byte.h" ++ ++#define ACP3x_PHY_BASE_ADDRESS 0x1240000 ++ ++static inline u32 rv_readl(void __iomem *base_addr) ++{ ++ return readl(base_addr - ACP3x_PHY_BASE_ADDRESS); ++} ++ ++static inline void rv_writel(u32 val, void __iomem *base_addr) ++{ ++ writel(val, base_addr - ACP3x_PHY_BASE_ADDRESS); ++} +diff --git a/sound/soc/amd/raven/pci-acp3x.c b/sound/soc/amd/raven/pci-acp3x.c +new file mode 100644 +index 0000000..204212b +--- /dev/null ++++ b/sound/soc/amd/raven/pci-acp3x.c +@@ -0,0 +1,97 @@ ++/* ++ * AMD ALSA SoC PCM Driver ++ * ++ * Copyright 2016 Advanced Micro Devices, Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify it ++ * under the terms and conditions of the GNU General Public License, ++ * version 2, as published by the Free Software Foundation. ++ * ++ * This program is distributed in the hope it will be useful, but WITHOUT ++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or ++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for ++ * more details. ++ */ ++ ++#include <linux/pci.h> ++#include <linux/module.h> ++ ++#include "acp3x.h" ++ ++struct acp3x_dev_data { ++ void __iomem *acp3x_base; ++}; ++ ++static int snd_acp3x_probe(struct pci_dev *pci, ++ const struct pci_device_id *pci_id) ++{ ++ int ret; ++ u32 addr; ++ struct acp3x_dev_data *adata; ++ ++ if (pci_enable_device(pci)) { ++ dev_err(&pci->dev, "pci_enable_device failed\n"); ++ return -ENODEV; ++ } ++ ++ ret = pci_request_regions(pci, "AMD ACP3x audio"); ++ if (ret < 0) { ++ dev_err(&pci->dev, "pci_request_regions failed\n"); ++ goto disable_pci; ++ } ++ ++ adata = devm_kzalloc(&pci->dev, sizeof(struct acp3x_dev_data), ++ GFP_KERNEL); ++ if (adata == NULL) { ++ ret = -ENOMEM; ++ goto release_regions; ++ } ++ ++ addr = pci_resource_start(pci, 0); ++ adata->acp3x_base = ioremap(addr, pci_resource_len(pci, 0)); ++ if (adata->acp3x_base == NULL) { ++ ret = -ENOMEM; ++ goto release_regions; ++ } ++ ++ pci_set_drvdata(pci, adata); ++ ++ return 0; ++ ++release_regions: ++ pci_release_regions(pci); ++disable_pci: ++ pci_disable_device(pci); ++ ++ return ret; ++} ++ ++static void snd_acp3x_remove(struct pci_dev *pci) ++{ ++ struct acp3x_dev_data *adata = pci_get_drvdata(pci); ++ ++ iounmap(adata->acp3x_base); ++ pci_release_regions(pci); ++ pci_disable_device(pci); ++} ++ ++static const struct pci_device_id snd_acp3x_ids[] = { ++ { PCI_DEVICE(PCI_VENDOR_ID_AMD, 0x15e2), ++ .class = PCI_CLASS_MULTIMEDIA_OTHER << 8, ++ .class_mask = 0xffffff }, ++ { 0, }, ++}; ++MODULE_DEVICE_TABLE(pci, snd_acp3x_ids); ++ ++static struct pci_driver acp3x_driver = { ++ .name = KBUILD_MODNAME, ++ .id_table = snd_acp3x_ids, ++ .probe = snd_acp3x_probe, ++ .remove = snd_acp3x_remove, ++}; ++ ++module_pci_driver(acp3x_driver); ++ ++MODULE_AUTHOR("Maruthi.Bayyavarapu@amd.com"); ++MODULE_DESCRIPTION("AMD ACP3x PCI driver"); ++MODULE_LICENSE("GPL v2"); +-- +2.7.4 + |