All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Amadeusz Sławiński" <amadeuszx.slawinski@linux.intel.com>
To: Syed Saba kareem <Syed.SabaKareem@amd.com>,
	broonie@kernel.org, alsa-devel@alsa-project.org
Cc: Sunil-kumar.Dommati@amd.com, Basavaraj.Hiregoudar@amd.com,
	Takashi Iwai <tiwai@suse.com>,
	Liam Girdwood <lgirdwood@gmail.com>,
	open list <linux-kernel@vger.kernel.org>,
	mario.limonciello@amd.com, Vijendar.Mukunda@amd.com
Subject: Re: [PATCH 04/13] ASoC: amd: add platform devices for acp6.2 pdm driver and dmic driver
Date: Fri, 12 Aug 2022 16:20:01 +0200	[thread overview]
Message-ID: <f55c444b-d1c7-9d61-1f0c-c6bfe32ca2db@linux.intel.com> (raw)
In-Reply-To: <20220812120731.788052-5-Syed.SabaKareem@amd.com>

On 8/12/2022 2:07 PM, Syed Saba kareem wrote:
> ACP6.2 IP has PDM decoder block.
> Create a platform device for it, so that the PDM platform driver
> can be bound to this device.
> Pass PCI resources like MMIO to this platform device.
> 
> Create a platform device for generic dmic codec driver.
> 
> Signed-off-by: Syed Saba Kareem <Syed.SabaKareem@amd.com>
> Signed-off-by: Vijendar Mukunda <Vijendar.Mukunda@amd.com>
> ---
>   sound/soc/amd/ps/acp62.h  | 23 +++++++++++
>   sound/soc/amd/ps/pci-ps.c | 83 ++++++++++++++++++++++++++++++++++++++-
>   2 files changed, 104 insertions(+), 2 deletions(-)
> 
> diff --git a/sound/soc/amd/ps/acp62.h b/sound/soc/amd/ps/acp62.h
> index 8e734f190b11..ab56e1f8c31b 100644
> --- a/sound/soc/amd/ps/acp62.h
> +++ b/sound/soc/amd/ps/acp62.h
> @@ -9,6 +9,10 @@
>   
>   #define ACP_DEVICE_ID 0x15E2
>   #define ACP62_PHY_BASE_ADDRESS 0x1240000
> +#define ACP6x_REG_START		0x1240000
> +#define ACP6x_REG_END		0x1250200
> +#define ACP6x_DEVS		2
> +#define ACP6x_PDM_MODE		1
>   
>   #define ACP_SOFT_RESET_SOFTRESET_AUDDONE_MASK	0x00010001
>   #define ACP_PGFSM_CNTL_POWER_ON_MASK	1
> @@ -22,6 +26,25 @@
>   #define ACP_ERROR_MASK 0x20000000
>   #define ACP_EXT_INTR_STAT_CLEAR_MASK 0xFFFFFFFF
>   
> +enum acp_config {
> +	ACP_CONFIG_0 = 0,
> +	ACP_CONFIG_1,
> +	ACP_CONFIG_2,
> +	ACP_CONFIG_3,
> +	ACP_CONFIG_4,
> +	ACP_CONFIG_5,
> +	ACP_CONFIG_6,
> +	ACP_CONFIG_7,
> +	ACP_CONFIG_8,
> +	ACP_CONFIG_9,
> +	ACP_CONFIG_10,
> +	ACP_CONFIG_11,
> +	ACP_CONFIG_12,
> +	ACP_CONFIG_13,
> +	ACP_CONFIG_14,
> +	ACP_CONFIG_15,
> +};
> +
>   static inline u32 acp62_readl(void __iomem *base_addr)
>   {
>   	return readl(base_addr - ACP62_PHY_BASE_ADDRESS);
> diff --git a/sound/soc/amd/ps/pci-ps.c b/sound/soc/amd/ps/pci-ps.c
> index 2014f415af15..94201f75427a 100644
> --- a/sound/soc/amd/ps/pci-ps.c
> +++ b/sound/soc/amd/ps/pci-ps.c
> @@ -9,11 +9,16 @@
>   #include <linux/module.h>
>   #include <linux/io.h>
>   #include <linux/delay.h>
> +#include <linux/platform_device.h>
> +#include <linux/acpi.h>
>   
>   #include "acp62.h"
>   
>   struct acp62_dev_data {
>   	void __iomem *acp62_base;
> +	struct resource *res;
> +	bool acp62_audio_mode;
> +	struct platform_device *pdev[ACP6x_DEVS];
>   };
>   
>   static int acp62_power_on(void __iomem *acp_base)
> @@ -117,8 +122,11 @@ static int snd_acp62_probe(struct pci_dev *pci,
>   			   const struct pci_device_id *pci_id)
>   {
>   	struct acp62_dev_data *adata;
> +	struct platform_device_info pdevinfo[ACP6x_DEVS];
> +	int index, ret;
> +	int val = 0x00;
> +	struct acpi_device *adev;
>   	u32 addr;
> -	int ret;
>   
>   	/* Pink Sardine device check */
>   	switch (pci->revision) {
> @@ -157,8 +165,75 @@ static int snd_acp62_probe(struct pci_dev *pci,
>   	ret = acp62_init(adata->acp62_base);
>   	if (ret)
>   		goto release_regions;
> +	val = acp62_readl(adata->acp62_base + ACP_PIN_CONFIG);
> +	switch (val) {
> +	case ACP_CONFIG_0:
> +	case ACP_CONFIG_1:
> +	case ACP_CONFIG_2:
> +	case ACP_CONFIG_3:
> +	case ACP_CONFIG_9:
> +	case ACP_CONFIG_15:
> +		dev_info(&pci->dev, "Audio Mode %d\n", val);
> +		break;
> +	default:
> +
> +		/* Checking DMIC hardware*/
> +		adev = acpi_find_child_device(ACPI_COMPANION(&pci->dev), 0x02, 0);
> +

You can probably remove one level of indentation in following code if 
you do:
		if (!adev)
			break;

> +		if (adev) {
> +			const union acpi_object *obj;
> +
> +			if (!acpi_dev_get_property(adev, "acp-audio-device-type",
> +						   ACPI_TYPE_INTEGER, &obj) &&
> +						   obj->integer.value == 2) {
> +				adata->res = devm_kzalloc(&pci->dev,
> +							  sizeof(struct resource), GFP_KERNEL);
> +
> +				if (!adata->res) {
> +					ret = -ENOMEM;
> +					goto de_init;
> +				}
> +
> +				adata->res->name = "acp_iomem";
> +				adata->res->flags = IORESOURCE_MEM;
> +				adata->res->start = addr;
> +				adata->res->end = addr + (ACP6x_REG_END - ACP6x_REG_START);
> +				adata->acp62_audio_mode = ACP6x_PDM_MODE;
>   
> +				memset(&pdevinfo, 0, sizeof(pdevinfo));
> +				pdevinfo[0].name = "acp_ps_pdm_dma";
> +				pdevinfo[0].id = 0;
> +				pdevinfo[0].parent = &pci->dev;
> +				pdevinfo[0].num_res = 1;
> +				pdevinfo[0].res = adata->res;
> +
> +				pdevinfo[1].name = "dmic-codec";
> +				pdevinfo[1].id = 0;
> +				pdevinfo[1].parent = &pci->dev;
> +
> +				for (index = 0; index < ACP6x_DEVS; index++) {
> +					adata->pdev[index] =
> +						platform_device_register_full(&pdevinfo[index]);
> +
> +					if (IS_ERR(adata->pdev[index])) {
> +						dev_err(&pci->dev,
> +							"cannot register %s device\n",
> +							 pdevinfo[index].name);
> +						ret = PTR_ERR(adata->pdev[index]);
> +						goto unregister_devs;
> +					}
> +				}
> +			}
> +		}
> +		break;
> +	}
>   	return 0;
> +unregister_devs:
> +	for (--index; index >= 0; index--)
> +		platform_device_unregister(adata->pdev[index]);
> +de_init:
> +	if (acp62_deinit(adata->acp62_base))
> +		dev_err(&pci->dev, "ACP de-init failed\n");
>   release_regions:
>   	pci_release_regions(pci);
>   disable_pci:
> @@ -170,9 +245,13 @@ static int snd_acp62_probe(struct pci_dev *pci,
>   static void snd_acp62_remove(struct pci_dev *pci)
>   {
>   	struct acp62_dev_data *adata;
> -	int ret;
> +	int ret, index;
>   
>   	adata = pci_get_drvdata(pci);
> +	if (adata->acp62_audio_mode == ACP6x_PDM_MODE) {
> +		for (index = 0; index < ACP6x_DEVS; index++)
> +			platform_device_unregister(adata->pdev[index]);
> +	}
>   	ret = acp62_deinit(adata->acp62_base);
>   	if (ret)
>   		dev_err(&pci->dev, "ACP de-init failed\n");


WARNING: multiple messages have this Message-ID (diff)
From: "Amadeusz Sławiński" <amadeuszx.slawinski@linux.intel.com>
To: Syed Saba kareem <Syed.SabaKareem@amd.com>,
	broonie@kernel.org, alsa-devel@alsa-project.org
Cc: Sunil-kumar.Dommati@amd.com,
	open list <linux-kernel@vger.kernel.org>,
	Basavaraj.Hiregoudar@amd.com, Takashi Iwai <tiwai@suse.com>,
	Liam Girdwood <lgirdwood@gmail.com>,
	mario.limonciello@amd.com, Vijendar.Mukunda@amd.com
Subject: Re: [PATCH 04/13] ASoC: amd: add platform devices for acp6.2 pdm driver and dmic driver
Date: Fri, 12 Aug 2022 16:20:01 +0200	[thread overview]
Message-ID: <f55c444b-d1c7-9d61-1f0c-c6bfe32ca2db@linux.intel.com> (raw)
In-Reply-To: <20220812120731.788052-5-Syed.SabaKareem@amd.com>

On 8/12/2022 2:07 PM, Syed Saba kareem wrote:
> ACP6.2 IP has PDM decoder block.
> Create a platform device for it, so that the PDM platform driver
> can be bound to this device.
> Pass PCI resources like MMIO to this platform device.
> 
> Create a platform device for generic dmic codec driver.
> 
> Signed-off-by: Syed Saba Kareem <Syed.SabaKareem@amd.com>
> Signed-off-by: Vijendar Mukunda <Vijendar.Mukunda@amd.com>
> ---
>   sound/soc/amd/ps/acp62.h  | 23 +++++++++++
>   sound/soc/amd/ps/pci-ps.c | 83 ++++++++++++++++++++++++++++++++++++++-
>   2 files changed, 104 insertions(+), 2 deletions(-)
> 
> diff --git a/sound/soc/amd/ps/acp62.h b/sound/soc/amd/ps/acp62.h
> index 8e734f190b11..ab56e1f8c31b 100644
> --- a/sound/soc/amd/ps/acp62.h
> +++ b/sound/soc/amd/ps/acp62.h
> @@ -9,6 +9,10 @@
>   
>   #define ACP_DEVICE_ID 0x15E2
>   #define ACP62_PHY_BASE_ADDRESS 0x1240000
> +#define ACP6x_REG_START		0x1240000
> +#define ACP6x_REG_END		0x1250200
> +#define ACP6x_DEVS		2
> +#define ACP6x_PDM_MODE		1
>   
>   #define ACP_SOFT_RESET_SOFTRESET_AUDDONE_MASK	0x00010001
>   #define ACP_PGFSM_CNTL_POWER_ON_MASK	1
> @@ -22,6 +26,25 @@
>   #define ACP_ERROR_MASK 0x20000000
>   #define ACP_EXT_INTR_STAT_CLEAR_MASK 0xFFFFFFFF
>   
> +enum acp_config {
> +	ACP_CONFIG_0 = 0,
> +	ACP_CONFIG_1,
> +	ACP_CONFIG_2,
> +	ACP_CONFIG_3,
> +	ACP_CONFIG_4,
> +	ACP_CONFIG_5,
> +	ACP_CONFIG_6,
> +	ACP_CONFIG_7,
> +	ACP_CONFIG_8,
> +	ACP_CONFIG_9,
> +	ACP_CONFIG_10,
> +	ACP_CONFIG_11,
> +	ACP_CONFIG_12,
> +	ACP_CONFIG_13,
> +	ACP_CONFIG_14,
> +	ACP_CONFIG_15,
> +};
> +
>   static inline u32 acp62_readl(void __iomem *base_addr)
>   {
>   	return readl(base_addr - ACP62_PHY_BASE_ADDRESS);
> diff --git a/sound/soc/amd/ps/pci-ps.c b/sound/soc/amd/ps/pci-ps.c
> index 2014f415af15..94201f75427a 100644
> --- a/sound/soc/amd/ps/pci-ps.c
> +++ b/sound/soc/amd/ps/pci-ps.c
> @@ -9,11 +9,16 @@
>   #include <linux/module.h>
>   #include <linux/io.h>
>   #include <linux/delay.h>
> +#include <linux/platform_device.h>
> +#include <linux/acpi.h>
>   
>   #include "acp62.h"
>   
>   struct acp62_dev_data {
>   	void __iomem *acp62_base;
> +	struct resource *res;
> +	bool acp62_audio_mode;
> +	struct platform_device *pdev[ACP6x_DEVS];
>   };
>   
>   static int acp62_power_on(void __iomem *acp_base)
> @@ -117,8 +122,11 @@ static int snd_acp62_probe(struct pci_dev *pci,
>   			   const struct pci_device_id *pci_id)
>   {
>   	struct acp62_dev_data *adata;
> +	struct platform_device_info pdevinfo[ACP6x_DEVS];
> +	int index, ret;
> +	int val = 0x00;
> +	struct acpi_device *adev;
>   	u32 addr;
> -	int ret;
>   
>   	/* Pink Sardine device check */
>   	switch (pci->revision) {
> @@ -157,8 +165,75 @@ static int snd_acp62_probe(struct pci_dev *pci,
>   	ret = acp62_init(adata->acp62_base);
>   	if (ret)
>   		goto release_regions;
> +	val = acp62_readl(adata->acp62_base + ACP_PIN_CONFIG);
> +	switch (val) {
> +	case ACP_CONFIG_0:
> +	case ACP_CONFIG_1:
> +	case ACP_CONFIG_2:
> +	case ACP_CONFIG_3:
> +	case ACP_CONFIG_9:
> +	case ACP_CONFIG_15:
> +		dev_info(&pci->dev, "Audio Mode %d\n", val);
> +		break;
> +	default:
> +
> +		/* Checking DMIC hardware*/
> +		adev = acpi_find_child_device(ACPI_COMPANION(&pci->dev), 0x02, 0);
> +

You can probably remove one level of indentation in following code if 
you do:
		if (!adev)
			break;

> +		if (adev) {
> +			const union acpi_object *obj;
> +
> +			if (!acpi_dev_get_property(adev, "acp-audio-device-type",
> +						   ACPI_TYPE_INTEGER, &obj) &&
> +						   obj->integer.value == 2) {
> +				adata->res = devm_kzalloc(&pci->dev,
> +							  sizeof(struct resource), GFP_KERNEL);
> +
> +				if (!adata->res) {
> +					ret = -ENOMEM;
> +					goto de_init;
> +				}
> +
> +				adata->res->name = "acp_iomem";
> +				adata->res->flags = IORESOURCE_MEM;
> +				adata->res->start = addr;
> +				adata->res->end = addr + (ACP6x_REG_END - ACP6x_REG_START);
> +				adata->acp62_audio_mode = ACP6x_PDM_MODE;
>   
> +				memset(&pdevinfo, 0, sizeof(pdevinfo));
> +				pdevinfo[0].name = "acp_ps_pdm_dma";
> +				pdevinfo[0].id = 0;
> +				pdevinfo[0].parent = &pci->dev;
> +				pdevinfo[0].num_res = 1;
> +				pdevinfo[0].res = adata->res;
> +
> +				pdevinfo[1].name = "dmic-codec";
> +				pdevinfo[1].id = 0;
> +				pdevinfo[1].parent = &pci->dev;
> +
> +				for (index = 0; index < ACP6x_DEVS; index++) {
> +					adata->pdev[index] =
> +						platform_device_register_full(&pdevinfo[index]);
> +
> +					if (IS_ERR(adata->pdev[index])) {
> +						dev_err(&pci->dev,
> +							"cannot register %s device\n",
> +							 pdevinfo[index].name);
> +						ret = PTR_ERR(adata->pdev[index]);
> +						goto unregister_devs;
> +					}
> +				}
> +			}
> +		}
> +		break;
> +	}
>   	return 0;
> +unregister_devs:
> +	for (--index; index >= 0; index--)
> +		platform_device_unregister(adata->pdev[index]);
> +de_init:
> +	if (acp62_deinit(adata->acp62_base))
> +		dev_err(&pci->dev, "ACP de-init failed\n");
>   release_regions:
>   	pci_release_regions(pci);
>   disable_pci:
> @@ -170,9 +245,13 @@ static int snd_acp62_probe(struct pci_dev *pci,
>   static void snd_acp62_remove(struct pci_dev *pci)
>   {
>   	struct acp62_dev_data *adata;
> -	int ret;
> +	int ret, index;
>   
>   	adata = pci_get_drvdata(pci);
> +	if (adata->acp62_audio_mode == ACP6x_PDM_MODE) {
> +		for (index = 0; index < ACP6x_DEVS; index++)
> +			platform_device_unregister(adata->pdev[index]);
> +	}
>   	ret = acp62_deinit(adata->acp62_base);
>   	if (ret)
>   		dev_err(&pci->dev, "ACP de-init failed\n");


  reply	other threads:[~2022-08-12 14:21 UTC|newest]

Thread overview: 53+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-08-12 12:07 [PATCH 00/13] Add Pink Sardine platform ASoC driver Syed Saba kareem
2022-08-12 12:07 ` [PATCH 01/13] ASoC: amd: add Pink Sardine platform ACP IP register header Syed Saba kareem
2022-08-12 12:07   ` Syed Saba kareem
2022-08-12 12:07 ` [PATCH 02/13] ASoC: amd: add Pink Sardine ACP PCI driver Syed Saba kareem
2022-08-12 12:07   ` Syed Saba kareem
2022-08-12 14:19   ` Amadeusz Sławiński
2022-08-12 14:19     ` Amadeusz Sławiński
2022-08-16  6:00     ` Syed Saba Kareem
2022-08-16  6:00       ` Syed Saba Kareem
2022-08-12 12:07 ` [PATCH 03/13] ASoC: amd: add acp6.2 init/de-init functions Syed Saba kareem
2022-08-12 12:07   ` Syed Saba kareem
2022-08-12 12:33   ` Mark Brown
2022-08-12 12:33     ` Mark Brown
2022-08-16  5:47     ` Syed Saba Kareem
2022-08-16  5:47       ` Syed Saba Kareem
2022-08-12 14:19   ` Amadeusz Sławiński
2022-08-12 14:19     ` Amadeusz Sławiński
2022-08-16  6:48     ` Syed Saba Kareem
2022-08-16  6:48       ` Syed Saba Kareem
2022-08-12 12:07 ` [PATCH 04/13] ASoC: amd: add platform devices for acp6.2 pdm driver and dmic driver Syed Saba kareem
2022-08-12 12:07   ` Syed Saba kareem
2022-08-12 14:20   ` Amadeusz Sławiński [this message]
2022-08-12 14:20     ` Amadeusz Sławiński
2022-08-16  6:49     ` Syed Saba Kareem
2022-08-16  6:49       ` Syed Saba Kareem
2022-08-12 12:07 ` [PATCH 05/13] ASoC: amd: add acp6.2 pdm platform driver Syed Saba kareem
2022-08-12 12:07   ` Syed Saba kareem
2022-08-12 14:20   ` Amadeusz Sławiński
2022-08-12 14:20     ` Amadeusz Sławiński
2022-08-16  6:50     ` Syed Saba Kareem
2022-08-12 12:07 ` [PATCH 06/13] ASoC: amd: add acp6.2 irq handler Syed Saba kareem
2022-08-12 12:07   ` Syed Saba kareem
2022-08-12 12:07 ` [PATCH 07/13] ASoC: amd: add acp6.2 pdm driver dma ops Syed Saba kareem
2022-08-12 12:07   ` Syed Saba kareem
2022-08-12 14:20   ` Amadeusz Sławiński
2022-08-16  7:02     ` Syed Saba Kareem
2022-08-16  7:02       ` Syed Saba Kareem
2022-08-12 12:07 ` [PATCH 08/13] ASoC: amd: add acp6.2 pci driver pm ops Syed Saba kareem
2022-08-12 12:07   ` Syed Saba kareem
2022-08-12 12:07 ` [PATCH 09/13] ASoC: amd: add acp6.2 pdm " Syed Saba kareem
2022-08-12 12:07   ` Syed Saba kareem
2022-08-12 12:07 ` [PATCH 10/13] ASoC: amd: enable Pink Sardine acp6.2 drivers build Syed Saba kareem
2022-08-12 12:07   ` Syed Saba kareem
2022-08-12 14:05   ` Mark Brown
2022-08-16  5:49     ` Syed Saba Kareem
2022-08-27 16:50     ` Syed Saba Kareem
2022-08-27 16:50       ` Syed Saba Kareem
2022-08-12 12:07 ` [PATCH 11/13] ASoC: amd: create platform device for acp6.2 machine driver Syed Saba kareem
2022-08-12 12:07   ` Syed Saba kareem
2022-08-12 12:07 ` [PATCH 12/13] ASoC: amd: add Pink Sardine machine driver using dmic Syed Saba kareem
2022-08-12 12:07   ` Syed Saba kareem
2022-08-12 12:07 ` [PATCH 13/13] ASoC: amd: enable Pink sardine platform machine driver build Syed Saba kareem
2022-08-12 12:07   ` Syed Saba kareem

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=f55c444b-d1c7-9d61-1f0c-c6bfe32ca2db@linux.intel.com \
    --to=amadeuszx.slawinski@linux.intel.com \
    --cc=Basavaraj.Hiregoudar@amd.com \
    --cc=Sunil-kumar.Dommati@amd.com \
    --cc=Syed.SabaKareem@amd.com \
    --cc=Vijendar.Mukunda@amd.com \
    --cc=alsa-devel@alsa-project.org \
    --cc=broonie@kernel.org \
    --cc=lgirdwood@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mario.limonciello@amd.com \
    --cc=tiwai@suse.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.