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@xxxxxx> > > Signed-off-by: Sebastien Guiriec <s-guiriec@xxxxxx> > --- > 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 majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html