Merge remote-tracking branch 'asoc/fix/omap' into asoc-linus
This commit is contained in:
@@ -1012,28 +1012,33 @@ int omap_mcbsp_init(struct platform_device *pdev)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
res = platform_get_resource_byname(pdev, IORESOURCE_DMA, "rx");
|
if (!pdev->dev.of_node) {
|
||||||
if (!res) {
|
|
||||||
dev_err(&pdev->dev, "invalid rx DMA channel\n");
|
|
||||||
return -ENODEV;
|
|
||||||
}
|
|
||||||
/* RX DMA request number, and port address configuration */
|
|
||||||
mcbsp->dma_req[1] = res->start;
|
|
||||||
mcbsp->dma_data[1].filter_data = &mcbsp->dma_req[1];
|
|
||||||
mcbsp->dma_data[1].addr = omap_mcbsp_dma_reg_params(mcbsp, 1);
|
|
||||||
mcbsp->dma_data[1].maxburst = 4;
|
|
||||||
|
|
||||||
res = platform_get_resource_byname(pdev, IORESOURCE_DMA, "tx");
|
res = platform_get_resource_byname(pdev, IORESOURCE_DMA, "tx");
|
||||||
if (!res) {
|
if (!res) {
|
||||||
dev_err(&pdev->dev, "invalid tx DMA channel\n");
|
dev_err(&pdev->dev, "invalid tx DMA channel\n");
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
}
|
}
|
||||||
/* TX DMA request number, and port address configuration */
|
|
||||||
mcbsp->dma_req[0] = res->start;
|
mcbsp->dma_req[0] = res->start;
|
||||||
mcbsp->dma_data[0].filter_data = &mcbsp->dma_req[0];
|
mcbsp->dma_data[0].filter_data = &mcbsp->dma_req[0];
|
||||||
|
|
||||||
|
res = platform_get_resource_byname(pdev, IORESOURCE_DMA, "rx");
|
||||||
|
if (!res) {
|
||||||
|
dev_err(&pdev->dev, "invalid rx DMA channel\n");
|
||||||
|
return -ENODEV;
|
||||||
|
}
|
||||||
|
mcbsp->dma_req[1] = res->start;
|
||||||
|
mcbsp->dma_data[1].filter_data = &mcbsp->dma_req[1];
|
||||||
|
} else {
|
||||||
|
mcbsp->dma_data[0].filter_data = "tx";
|
||||||
|
mcbsp->dma_data[1].filter_data = "rx";
|
||||||
|
}
|
||||||
|
|
||||||
mcbsp->dma_data[0].addr = omap_mcbsp_dma_reg_params(mcbsp, 0);
|
mcbsp->dma_data[0].addr = omap_mcbsp_dma_reg_params(mcbsp, 0);
|
||||||
mcbsp->dma_data[0].maxburst = 4;
|
mcbsp->dma_data[0].maxburst = 4;
|
||||||
|
|
||||||
|
mcbsp->dma_data[1].addr = omap_mcbsp_dma_reg_params(mcbsp, 1);
|
||||||
|
mcbsp->dma_data[1].maxburst = 4;
|
||||||
|
|
||||||
mcbsp->fclk = clk_get(&pdev->dev, "fck");
|
mcbsp->fclk = clk_get(&pdev->dev, "fck");
|
||||||
if (IS_ERR(mcbsp->fclk)) {
|
if (IS_ERR(mcbsp->fclk)) {
|
||||||
ret = PTR_ERR(mcbsp->fclk);
|
ret = PTR_ERR(mcbsp->fclk);
|
||||||
|
@@ -57,7 +57,6 @@ struct omap_dmic {
|
|||||||
struct mutex mutex;
|
struct mutex mutex;
|
||||||
|
|
||||||
struct snd_dmaengine_dai_dma_data dma_data;
|
struct snd_dmaengine_dai_dma_data dma_data;
|
||||||
unsigned int dma_req;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static inline void omap_dmic_write(struct omap_dmic *dmic, u16 reg, u32 val)
|
static inline void omap_dmic_write(struct omap_dmic *dmic, u16 reg, u32 val)
|
||||||
@@ -478,15 +477,7 @@ static int asoc_dmic_probe(struct platform_device *pdev)
|
|||||||
}
|
}
|
||||||
dmic->dma_data.addr = res->start + OMAP_DMIC_DATA_REG;
|
dmic->dma_data.addr = res->start + OMAP_DMIC_DATA_REG;
|
||||||
|
|
||||||
res = platform_get_resource(pdev, IORESOURCE_DMA, 0);
|
dmic->dma_data.filter_data = "up_link";
|
||||||
if (!res) {
|
|
||||||
dev_err(dmic->dev, "invalid dma resource\n");
|
|
||||||
ret = -ENODEV;
|
|
||||||
goto err_put_clk;
|
|
||||||
}
|
|
||||||
|
|
||||||
dmic->dma_req = res->start;
|
|
||||||
dmic->dma_data.filter_data = &dmic->dma_req;
|
|
||||||
|
|
||||||
res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "mpu");
|
res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "mpu");
|
||||||
if (!res) {
|
if (!res) {
|
||||||
|
@@ -66,7 +66,6 @@ struct omap_mcpdm {
|
|||||||
bool restart;
|
bool restart;
|
||||||
|
|
||||||
struct snd_dmaengine_dai_dma_data dma_data[2];
|
struct snd_dmaengine_dai_dma_data dma_data[2];
|
||||||
unsigned int dma_req[2];
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -477,19 +476,8 @@ static int asoc_mcpdm_probe(struct platform_device *pdev)
|
|||||||
mcpdm->dma_data[0].addr = res->start + MCPDM_REG_DN_DATA;
|
mcpdm->dma_data[0].addr = res->start + MCPDM_REG_DN_DATA;
|
||||||
mcpdm->dma_data[1].addr = res->start + MCPDM_REG_UP_DATA;
|
mcpdm->dma_data[1].addr = res->start + MCPDM_REG_UP_DATA;
|
||||||
|
|
||||||
res = platform_get_resource_byname(pdev, IORESOURCE_DMA, "dn_link");
|
mcpdm->dma_data[0].filter_data = "dn_link";
|
||||||
if (!res)
|
mcpdm->dma_data[1].filter_data = "up_link";
|
||||||
return -ENODEV;
|
|
||||||
|
|
||||||
mcpdm->dma_req[0] = res->start;
|
|
||||||
mcpdm->dma_data[0].filter_data = &mcpdm->dma_req[0];
|
|
||||||
|
|
||||||
res = platform_get_resource_byname(pdev, IORESOURCE_DMA, "up_link");
|
|
||||||
if (!res)
|
|
||||||
return -ENODEV;
|
|
||||||
|
|
||||||
mcpdm->dma_req[1] = res->start;
|
|
||||||
mcpdm->dma_data[1].filter_data = &mcpdm->dma_req[1];
|
|
||||||
|
|
||||||
res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "mpu");
|
res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "mpu");
|
||||||
if (res == NULL)
|
if (res == NULL)
|
||||||
|
@@ -113,15 +113,26 @@ static int omap_pcm_open(struct snd_pcm_substream *substream)
|
|||||||
{
|
{
|
||||||
struct snd_soc_pcm_runtime *rtd = substream->private_data;
|
struct snd_soc_pcm_runtime *rtd = substream->private_data;
|
||||||
struct snd_dmaengine_dai_dma_data *dma_data;
|
struct snd_dmaengine_dai_dma_data *dma_data;
|
||||||
|
int ret;
|
||||||
|
|
||||||
snd_soc_set_runtime_hwparams(substream, &omap_pcm_hardware);
|
snd_soc_set_runtime_hwparams(substream, &omap_pcm_hardware);
|
||||||
|
|
||||||
dma_data = snd_soc_dai_get_dma_data(rtd->cpu_dai, substream);
|
dma_data = snd_soc_dai_get_dma_data(rtd->cpu_dai, substream);
|
||||||
|
|
||||||
return snd_dmaengine_pcm_open_request_chan(substream,
|
/* DT boot: filter_data is the DMA name */
|
||||||
|
if (rtd->cpu_dai->dev->of_node) {
|
||||||
|
struct dma_chan *chan;
|
||||||
|
|
||||||
|
chan = dma_request_slave_channel(rtd->cpu_dai->dev,
|
||||||
|
dma_data->filter_data);
|
||||||
|
ret = snd_dmaengine_pcm_open(substream, chan);
|
||||||
|
} else {
|
||||||
|
ret = snd_dmaengine_pcm_open_request_chan(substream,
|
||||||
omap_dma_filter_fn,
|
omap_dma_filter_fn,
|
||||||
dma_data->filter_data);
|
dma_data->filter_data);
|
||||||
}
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
static int omap_pcm_mmap(struct snd_pcm_substream *substream,
|
static int omap_pcm_mmap(struct snd_pcm_substream *substream,
|
||||||
struct vm_area_struct *vma)
|
struct vm_area_struct *vma)
|
||||||
|
Reference in New Issue
Block a user