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 <[email protected]>

> 
> Signed-off-by: Sebastien Guiriec <[email protected]>
> ---
>  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
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to