dmaengine: omap-dma: Dynamically allocate memory for lch_map
On OMAP1 platforms we do not have 32 channels available. Allocate the lch_map based on the available channels. This way we are not going to have more visible channels then it is available on the platform. Signed-off-by: Peter Ujfalusi <peter.ujfalusi@ti.com> Signed-off-by: Vinod Koul <vinod.koul@intel.com>
This commit is contained in:
parent
b57ebe080c
commit
2d1a9a946f
|
@ -35,7 +35,7 @@ struct omap_dmadev {
|
||||||
unsigned dma_requests;
|
unsigned dma_requests;
|
||||||
spinlock_t irq_lock;
|
spinlock_t irq_lock;
|
||||||
uint32_t irq_enable_mask;
|
uint32_t irq_enable_mask;
|
||||||
struct omap_chan *lch_map[OMAP_SDMA_CHANNELS];
|
struct omap_chan **lch_map;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct omap_chan {
|
struct omap_chan {
|
||||||
|
@ -1223,16 +1223,24 @@ static int omap_dma_probe(struct platform_device *pdev)
|
||||||
spin_lock_init(&od->lock);
|
spin_lock_init(&od->lock);
|
||||||
spin_lock_init(&od->irq_lock);
|
spin_lock_init(&od->irq_lock);
|
||||||
|
|
||||||
od->dma_requests = OMAP_SDMA_REQUESTS;
|
if (!pdev->dev.of_node) {
|
||||||
if (pdev->dev.of_node && of_property_read_u32(pdev->dev.of_node,
|
od->dma_requests = od->plat->dma_attr->lch_count;
|
||||||
"dma-requests",
|
if (unlikely(!od->dma_requests))
|
||||||
&od->dma_requests)) {
|
od->dma_requests = OMAP_SDMA_REQUESTS;
|
||||||
|
} else if (of_property_read_u32(pdev->dev.of_node, "dma-requests",
|
||||||
|
&od->dma_requests)) {
|
||||||
dev_info(&pdev->dev,
|
dev_info(&pdev->dev,
|
||||||
"Missing dma-requests property, using %u.\n",
|
"Missing dma-requests property, using %u.\n",
|
||||||
OMAP_SDMA_REQUESTS);
|
OMAP_SDMA_REQUESTS);
|
||||||
|
od->dma_requests = OMAP_SDMA_REQUESTS;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < OMAP_SDMA_CHANNELS; i++) {
|
od->lch_map = devm_kcalloc(&pdev->dev, od->dma_requests,
|
||||||
|
sizeof(*od->lch_map), GFP_KERNEL);
|
||||||
|
if (!od->lch_map)
|
||||||
|
return -ENOMEM;
|
||||||
|
|
||||||
|
for (i = 0; i < od->dma_requests; i++) {
|
||||||
rc = omap_dma_chan_init(od);
|
rc = omap_dma_chan_init(od);
|
||||||
if (rc) {
|
if (rc) {
|
||||||
omap_dma_free(od);
|
omap_dma_free(od);
|
||||||
|
|
Loading…
Reference in New Issue