aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.14.71/1100-ASoC-AMD-add-ACP3.0-PCI-driver.patch
diff options
context:
space:
mode:
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.patch142
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
+