-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
ASoC: amd: add Yellow Carp ACP PCI driver
ACP is a PCI audio device. This patch adds PCI driver to bind to this device and get PCI resources. Signed-off-by: Vijendar Mukunda <Vijendar.Mukunda@amd.com> Link: https://lore.kernel.org/r/20211018112044.1705805-3-Vijendar.Mukunda@amd.com Signed-off-by: Mark Brown <broonie@kernel.org>
- Loading branch information
Vijendar Mukunda
authored and
Mark Brown
committed
Oct 18, 2021
1 parent
53880e3
commit c62442b
Showing
2 changed files
with
111 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
/* SPDX-License-Identifier: GPL-2.0+ */ | ||
/* | ||
* AMD ALSA SoC PDM Driver | ||
* | ||
* Copyright (C) 2021 Advanced Micro Devices, Inc. All rights reserved. | ||
*/ | ||
|
||
#include "acp6x_chip_offset_byte.h" | ||
|
||
#define ACP_DEVICE_ID 0x15E2 | ||
#define ACP6x_PHY_BASE_ADDRESS 0x1240000 | ||
|
||
static inline u32 acp6x_readl(void __iomem *base_addr) | ||
{ | ||
return readl(base_addr - ACP6x_PHY_BASE_ADDRESS); | ||
} | ||
|
||
static inline void acp6x_writel(u32 val, void __iomem *base_addr) | ||
{ | ||
writel(val, base_addr - ACP6x_PHY_BASE_ADDRESS); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,90 @@ | ||
// SPDX-License-Identifier: GPL-2.0+ | ||
/* | ||
* AMD Yellow Carp ACP PCI Driver | ||
* | ||
* Copyright 2021 Advanced Micro Devices, Inc. | ||
*/ | ||
|
||
#include <linux/pci.h> | ||
#include <linux/module.h> | ||
#include <linux/io.h> | ||
|
||
#include "acp6x.h" | ||
|
||
struct acp6x_dev_data { | ||
void __iomem *acp6x_base; | ||
}; | ||
|
||
static int snd_acp6x_probe(struct pci_dev *pci, | ||
const struct pci_device_id *pci_id) | ||
{ | ||
struct acp6x_dev_data *adata; | ||
int ret; | ||
u32 addr; | ||
|
||
/* Yellow Carp device check */ | ||
if (pci->revision != 0x60) | ||
return -ENODEV; | ||
|
||
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 acp6x_dev_data), | ||
GFP_KERNEL); | ||
if (!adata) { | ||
ret = -ENOMEM; | ||
goto release_regions; | ||
} | ||
|
||
addr = pci_resource_start(pci, 0); | ||
adata->acp6x_base = devm_ioremap(&pci->dev, addr, | ||
pci_resource_len(pci, 0)); | ||
if (!adata->acp6x_base) { | ||
ret = -ENOMEM; | ||
goto release_regions; | ||
} | ||
pci_set_master(pci); | ||
pci_set_drvdata(pci, adata); | ||
return 0; | ||
release_regions: | ||
pci_release_regions(pci); | ||
disable_pci: | ||
pci_disable_device(pci); | ||
|
||
return ret; | ||
} | ||
|
||
static void snd_acp6x_remove(struct pci_dev *pci) | ||
{ | ||
pci_release_regions(pci); | ||
pci_disable_device(pci); | ||
} | ||
|
||
static const struct pci_device_id snd_acp6x_ids[] = { | ||
{ PCI_DEVICE(PCI_VENDOR_ID_AMD, ACP_DEVICE_ID), | ||
.class = PCI_CLASS_MULTIMEDIA_OTHER << 8, | ||
.class_mask = 0xffffff }, | ||
{ 0, }, | ||
}; | ||
MODULE_DEVICE_TABLE(pci, snd_acp6x_ids); | ||
|
||
static struct pci_driver yc_acp6x_driver = { | ||
.name = KBUILD_MODNAME, | ||
.id_table = snd_acp6x_ids, | ||
.probe = snd_acp6x_probe, | ||
.remove = snd_acp6x_remove, | ||
}; | ||
|
||
module_pci_driver(yc_acp6x_driver); | ||
|
||
MODULE_AUTHOR("Vijendar.Mukunda@amd.com"); | ||
MODULE_DESCRIPTION("AMD ACP Yellow Carp PCI driver"); | ||
MODULE_LICENSE("GPL v2"); |