[alsa-devel] [PATCH V2 2/2] ASoC: OMAP2+: Move McBSP, DMIC and McPDM to generic DMA DT binding

Peter Ujfalusi peter.ujfalusi at ti.com
Mon Mar 11 15:18:35 CET 2013


On 03/11/2013 08:50 AM, Sebastien Guiriec wrote:
> Update OMAP2+ driver in order to use OMAP DMA DT binding for OMAP2+.
> In case of DT boot snd_dmaengine_generic_pcm_open function is used.

Acked-by: Peter Ujfalusi <peter.ujfalusi at ti.com>

> 
> Signed-off-by: Sebastien Guiriec <s-guiriec at ti.com>
> ---
>  sound/soc/omap/mcbsp.c      |   26 ++++++++++++++++----------
>  sound/soc/omap/omap-dmic.c  |   15 +++++++++------
>  sound/soc/omap/omap-mcpdm.c |   22 ++++++++++++++--------
>  sound/soc/omap/omap-pcm.c   |   12 ++++++++++--
>  sound/soc/omap/omap-pcm.h   |    1 +
>  5 files changed, 50 insertions(+), 26 deletions(-)
> 
> diff --git a/sound/soc/omap/mcbsp.c b/sound/soc/omap/mcbsp.c
> index 285c836..16936493 100644
> --- a/sound/soc/omap/mcbsp.c
> +++ b/sound/soc/omap/mcbsp.c
> @@ -1012,24 +1012,30 @@ int omap_mcbsp_init(struct platform_device *pdev)
>  		}
>  	}
>  
> -	res = platform_get_resource_byname(pdev, IORESOURCE_DMA, "rx");
> -	if (!res) {
> -		dev_err(&pdev->dev, "invalid rx DMA channel\n");
> -		return -ENODEV;
> +	if (!pdev->dev.of_node) {
> +		res = platform_get_resource_byname(pdev, IORESOURCE_DMA, "rx");
> +		if (!res) {
> +			dev_err(&pdev->dev, "invalid rx DMA channel\n");
> +			return -ENODEV;
> +		}
> +		mcbsp->dma_data[1].dma_req = res->start;
>  	}
>  	/* RX DMA request number, and port address configuration */
>  	mcbsp->dma_data[1].name = "Audio Capture";
> -	mcbsp->dma_data[1].dma_req = res->start;
> +	mcbsp->dma_data[1].dma_name = "rx";
>  	mcbsp->dma_data[1].port_addr = omap_mcbsp_dma_reg_params(mcbsp, 1);
>  
> -	res = platform_get_resource_byname(pdev, IORESOURCE_DMA, "tx");
> -	if (!res) {
> -		dev_err(&pdev->dev, "invalid tx DMA channel\n");
> -		return -ENODEV;
> +	if (!pdev->dev.of_node) {
> +		res = platform_get_resource_byname(pdev, IORESOURCE_DMA, "tx");
> +		if (!res) {
> +			dev_err(&pdev->dev, "invalid tx DMA channel\n");
> +			return -ENODEV;
> +		}
> +		mcbsp->dma_data[0].dma_req = res->start;
>  	}
>  	/* TX DMA request number, and port address configuration */
>  	mcbsp->dma_data[0].name = "Audio Playback";
> -	mcbsp->dma_data[0].dma_req = res->start;
> +	mcbsp->dma_data[0].dma_name = "tx";
>  	mcbsp->dma_data[0].port_addr = omap_mcbsp_dma_reg_params(mcbsp, 0);
>  
>  	mcbsp->fclk = clk_get(&pdev->dev, "fck");
> diff --git a/sound/soc/omap/omap-dmic.c b/sound/soc/omap/omap-dmic.c
> index ba49ccd..8695b32 100644
> --- a/sound/soc/omap/omap-dmic.c
> +++ b/sound/soc/omap/omap-dmic.c
> @@ -62,6 +62,7 @@ struct omap_dmic {
>   */
>  static struct omap_pcm_dma_data omap_dmic_dai_dma_params = {
>  	.name		= "DMIC capture",
> +	.dma_name	= "up_link",
>  };
>  
>  static inline void omap_dmic_write(struct omap_dmic *dmic, u16 reg, u32 val)
> @@ -478,13 +479,15 @@ static int asoc_dmic_probe(struct platform_device *pdev)
>  	}
>  	omap_dmic_dai_dma_params.port_addr = res->start + OMAP_DMIC_DATA_REG;
>  
> -	res = platform_get_resource(pdev, IORESOURCE_DMA, 0);
> -	if (!res) {
> -		dev_err(dmic->dev, "invalid dma resource\n");
> -		ret = -ENODEV;
> -		goto err_put_clk;
> +	if (!pdev->dev.of_node) {
> +		res = platform_get_resource(pdev, IORESOURCE_DMA, 0);
> +		if (!res) {
> +			dev_err(dmic->dev, "invalid dma resource\n");
> +			ret = -ENODEV;
> +			goto err_put_clk;
> +		}
> +		omap_dmic_dai_dma_params.dma_req = res->start;
>  	}
> -	omap_dmic_dai_dma_params.dma_req = res->start;
>  
>  	res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "mpu");
>  	if (!res) {
> diff --git a/sound/soc/omap/omap-mcpdm.c b/sound/soc/omap/omap-mcpdm.c
> index 5ca11bd..f41bac8 100644
> --- a/sound/soc/omap/omap-mcpdm.c
> +++ b/sound/soc/omap/omap-mcpdm.c
> @@ -71,9 +71,11 @@ struct omap_mcpdm {
>  static struct omap_pcm_dma_data omap_mcpdm_dai_dma_params[] = {
>  	{
>  		.name = "Audio playback",
> +		.dma_name = "dn_link",
>  	},
>  	{
>  		.name = "Audio capture",
> +		.dma_name = "up_link",
>  	},
>  };
>  
> @@ -449,17 +451,21 @@ static int asoc_mcpdm_probe(struct platform_device *pdev)
>  	omap_mcpdm_dai_dma_params[0].port_addr = res->start + MCPDM_REG_DN_DATA;
>  	omap_mcpdm_dai_dma_params[1].port_addr = res->start + MCPDM_REG_UP_DATA;
>  
> -	res = platform_get_resource_byname(pdev, IORESOURCE_DMA, "dn_link");
> -	if (!res)
> -		return -ENODEV;
> +	if (!pdev->dev.of_node) {
> +		res = platform_get_resource_byname(pdev, IORESOURCE_DMA,
> +						   "dn_link");
> +		if (!res)
> +			return -ENODEV;
>  
> -	omap_mcpdm_dai_dma_params[0].dma_req = res->start;
> +		omap_mcpdm_dai_dma_params[0].dma_req = res->start;
>  
> -	res = platform_get_resource_byname(pdev, IORESOURCE_DMA, "up_link");
> -	if (!res)
> -		return -ENODEV;
> +		res = platform_get_resource_byname(pdev, IORESOURCE_DMA,
> +						   "up_link");
> +		if (!res)
> +			return -ENODEV;
>  
> -	omap_mcpdm_dai_dma_params[1].dma_req = res->start;
> +		omap_mcpdm_dai_dma_params[1].dma_req = res->start;
> +	}
>  
>  	res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "mpu");
>  	if (res == NULL)
> diff --git a/sound/soc/omap/omap-pcm.c b/sound/soc/omap/omap-pcm.c
> index c722c2e..df01a95 100644
> --- a/sound/soc/omap/omap-pcm.c
> +++ b/sound/soc/omap/omap-pcm.c
> @@ -176,13 +176,21 @@ static int omap_pcm_open(struct snd_pcm_substream *substream)
>  {
>  	struct snd_soc_pcm_runtime *rtd = substream->private_data;
>  	struct omap_pcm_dma_data *dma_data;
> +	int ret;
>  
>  	snd_soc_set_runtime_hwparams(substream, &omap_pcm_hardware);
>  
>  	dma_data = snd_soc_dai_get_dma_data(rtd->cpu_dai, substream);
>  
> -	return snd_dmaengine_pcm_open(substream, omap_dma_filter_fn,
> -				      &dma_data->dma_req);
> +	if (rtd->cpu_dai->dev->of_node)
> +		ret = snd_dmaengine_generic_pcm_open(substream,
> +						     rtd->cpu_dai->dev,
> +						     dma_data->dma_name);
> +	else
> +		ret = snd_dmaengine_pcm_open(substream, omap_dma_filter_fn,
> +					     &dma_data->dma_req);
> +
> +	return ret;
>  }
>  
>  static int omap_pcm_close(struct snd_pcm_substream *substream)
> diff --git a/sound/soc/omap/omap-pcm.h b/sound/soc/omap/omap-pcm.h
> index cabe74c..06faa38 100644
> --- a/sound/soc/omap/omap-pcm.h
> +++ b/sound/soc/omap/omap-pcm.h
> @@ -29,6 +29,7 @@ struct snd_pcm_substream;
>  
>  struct omap_pcm_dma_data {
>  	char		*name;		/* stream identifier */
> +	char		*dma_name;	/* DMA request name */
>  	int		dma_req;	/* DMA request line */
>  	unsigned long	port_addr;	/* transmit/receive register */
>  	void (*set_threshold)(struct snd_pcm_substream *substream);
> 


-- 
Péter


More information about the Alsa-devel mailing list