Commit 73930eb3 authored by Shawn Guo's avatar Shawn Guo

dma: imx-dma: retrieve MEM and IRQ from resources

Retrieve MEM and IRQ from resources rather than directly using the
value by including machine header.
Signed-off-by: default avatarShawn Guo <shawn.guo@linaro.org>
Acked-by: default avatarSascha Hauer <s.hauer@pengutronix.de>
Acked-by: default avatarArnd Bergmann <arnd@arndb.de>
Cc: Vinod Koul <vinod.koul@linux.intel.com>
parent 04bbd8ef
...@@ -329,7 +329,8 @@ struct platform_device *__init imx_add_spi_imx( ...@@ -329,7 +329,8 @@ struct platform_device *__init imx_add_spi_imx(
const struct imx_spi_imx_data *data, const struct imx_spi_imx_data *data,
const struct spi_imx_master *pdata); const struct spi_imx_master *pdata);
struct platform_device *imx_add_imx_dma(void); struct platform_device *imx_add_imx_dma(resource_size_t iobase,
int irq, int irq_err);
struct platform_device *imx_add_imx_sdma(char *name, struct platform_device *imx_add_imx_sdma(char *name,
resource_size_t iobase, int irq, struct sdma_platform_data *pdata); resource_size_t iobase, int irq, struct sdma_platform_data *pdata);
......
...@@ -8,10 +8,27 @@ ...@@ -8,10 +8,27 @@
*/ */
#include "devices-common.h" #include "devices-common.h"
struct platform_device __init __maybe_unused *imx_add_imx_dma(void) struct platform_device __init __maybe_unused *imx_add_imx_dma(
resource_size_t iobase, int irq, int irq_err)
{ {
struct resource res[] = {
{
.start = iobase,
.end = iobase + SZ_4K - 1,
.flags = IORESOURCE_MEM,
}, {
.start = irq,
.end = irq,
.flags = IORESOURCE_IRQ,
}, {
.start = irq_err,
.end = irq_err,
.flags = IORESOURCE_IRQ,
},
};
return platform_device_register_resndata(&mxc_ahb_bus, return platform_device_register_resndata(&mxc_ahb_bus,
"imx-dma", -1, NULL, 0, NULL, 0); "imx-dma", -1, res, ARRAY_SIZE(res), NULL, 0);
} }
struct platform_device __init __maybe_unused *imx_add_imx_sdma(char *name, struct platform_device __init __maybe_unused *imx_add_imx_sdma(char *name,
......
...@@ -25,6 +25,7 @@ ...@@ -25,6 +25,7 @@
#include <mach/hardware.h> #include <mach/hardware.h>
#include "common.h" #include "common.h"
#include "devices/devices-common.h"
#include "iomux-v1.h" #include "iomux-v1.h"
static struct map_desc imx_io_desc[] __initdata = { static struct map_desc imx_io_desc[] __initdata = {
...@@ -59,5 +60,6 @@ void __init imx1_soc_init(void) ...@@ -59,5 +60,6 @@ void __init imx1_soc_init(void)
MX1_GPIO_INT_PORTC, 0); MX1_GPIO_INT_PORTC, 0);
mxc_register_gpio("imx1-gpio", 3, MX1_GPIO4_BASE_ADDR, SZ_256, mxc_register_gpio("imx1-gpio", 3, MX1_GPIO4_BASE_ADDR, SZ_256,
MX1_GPIO_INT_PORTD, 0); MX1_GPIO_INT_PORTD, 0);
imx_add_imx_dma(MX1_DMA_BASE_ADDR, MX1_DMA_INT, MX1_DMA_ERR);
pinctrl_provide_dummies(); pinctrl_provide_dummies();
} }
...@@ -90,7 +90,7 @@ void __init imx21_soc_init(void) ...@@ -90,7 +90,7 @@ void __init imx21_soc_init(void)
mxc_register_gpio("imx21-gpio", 5, MX21_GPIO6_BASE_ADDR, SZ_256, MX21_INT_GPIO, 0); mxc_register_gpio("imx21-gpio", 5, MX21_GPIO6_BASE_ADDR, SZ_256, MX21_INT_GPIO, 0);
pinctrl_provide_dummies(); pinctrl_provide_dummies();
imx_add_imx_dma(); imx_add_imx_dma(MX21_DMA_BASE_ADDR, MX21_INT_DMACH0, 0); /* No ERR irq */
platform_device_register_simple("imx21-audmux", 0, imx21_audmux_res, platform_device_register_simple("imx21-audmux", 0, imx21_audmux_res,
ARRAY_SIZE(imx21_audmux_res)); ARRAY_SIZE(imx21_audmux_res));
} }
...@@ -91,7 +91,7 @@ void __init imx27_soc_init(void) ...@@ -91,7 +91,7 @@ void __init imx27_soc_init(void)
mxc_register_gpio("imx21-gpio", 5, MX27_GPIO6_BASE_ADDR, SZ_256, MX27_INT_GPIO, 0); mxc_register_gpio("imx21-gpio", 5, MX27_GPIO6_BASE_ADDR, SZ_256, MX27_INT_GPIO, 0);
pinctrl_provide_dummies(); pinctrl_provide_dummies();
imx_add_imx_dma(); imx_add_imx_dma(MX27_DMA_BASE_ADDR, MX27_INT_DMACH0, 0); /* No ERR irq */
/* imx27 has the imx21 type audmux */ /* imx27 has the imx21 type audmux */
platform_device_register_simple("imx21-audmux", 0, imx27_audmux_res, platform_device_register_simple("imx21-audmux", 0, imx27_audmux_res,
ARRAY_SIZE(imx27_audmux_res)); ARRAY_SIZE(imx27_audmux_res));
......
...@@ -959,23 +959,22 @@ static void imxdma_issue_pending(struct dma_chan *chan) ...@@ -959,23 +959,22 @@ static void imxdma_issue_pending(struct dma_chan *chan)
static int __init imxdma_probe(struct platform_device *pdev) static int __init imxdma_probe(struct platform_device *pdev)
{ {
struct imxdma_engine *imxdma; struct imxdma_engine *imxdma;
struct resource *res;
int ret, i; int ret, i;
int irq, irq_err;
imxdma = devm_kzalloc(&pdev->dev, sizeof(*imxdma), GFP_KERNEL); imxdma = devm_kzalloc(&pdev->dev, sizeof(*imxdma), GFP_KERNEL);
if (!imxdma) if (!imxdma)
return -ENOMEM; return -ENOMEM;
if (cpu_is_mx1()) { res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
imxdma->base = MX1_IO_ADDRESS(MX1_DMA_BASE_ADDR); imxdma->base = devm_request_and_ioremap(&pdev->dev, res);
} else if (cpu_is_mx21()) { if (!imxdma->base)
imxdma->base = MX21_IO_ADDRESS(MX21_DMA_BASE_ADDR); return -EADDRNOTAVAIL;
} else if (cpu_is_mx27()) {
imxdma->base = MX27_IO_ADDRESS(MX27_DMA_BASE_ADDR); irq = platform_get_irq(pdev, 0);
} else { if (irq < 0)
kfree(imxdma); return irq;
return 0;
}
imxdma->dma_ipg = devm_clk_get(&pdev->dev, "ipg"); imxdma->dma_ipg = devm_clk_get(&pdev->dev, "ipg");
if (IS_ERR(imxdma->dma_ipg)) if (IS_ERR(imxdma->dma_ipg))
...@@ -992,14 +991,20 @@ static int __init imxdma_probe(struct platform_device *pdev) ...@@ -992,14 +991,20 @@ static int __init imxdma_probe(struct platform_device *pdev)
imx_dmav1_writel(imxdma, DCR_DRST, DMA_DCR); imx_dmav1_writel(imxdma, DCR_DRST, DMA_DCR);
if (cpu_is_mx1()) { if (cpu_is_mx1()) {
ret = devm_request_irq(&pdev->dev, MX1_DMA_INT, ret = devm_request_irq(&pdev->dev, irq,
dma_irq_handler, 0, "DMA", imxdma); dma_irq_handler, 0, "DMA", imxdma);
if (ret) { if (ret) {
dev_warn(imxdma->dev, "Can't register IRQ for DMA\n"); dev_warn(imxdma->dev, "Can't register IRQ for DMA\n");
goto err; goto err;
} }
ret = devm_request_irq(&pdev->dev, MX1_DMA_ERR, irq_err = platform_get_irq(pdev, 1);
if (irq_err < 0) {
ret = irq_err;
goto err;
}
ret = devm_request_irq(&pdev->dev, irq_err,
imxdma_err_handler, 0, "DMA", imxdma); imxdma_err_handler, 0, "DMA", imxdma);
if (ret) { if (ret) {
dev_warn(imxdma->dev, "Can't register ERRIRQ for DMA\n"); dev_warn(imxdma->dev, "Can't register ERRIRQ for DMA\n");
...@@ -1034,12 +1039,12 @@ static int __init imxdma_probe(struct platform_device *pdev) ...@@ -1034,12 +1039,12 @@ static int __init imxdma_probe(struct platform_device *pdev)
struct imxdma_channel *imxdmac = &imxdma->channel[i]; struct imxdma_channel *imxdmac = &imxdma->channel[i];
if (cpu_is_mx21() || cpu_is_mx27()) { if (cpu_is_mx21() || cpu_is_mx27()) {
ret = devm_request_irq(&pdev->dev, MX2x_INT_DMACH0 + i, ret = devm_request_irq(&pdev->dev, irq + i,
dma_irq_handler, 0, "DMA", imxdma); dma_irq_handler, 0, "DMA", imxdma);
if (ret) { if (ret) {
dev_warn(imxdma->dev, "Can't register IRQ %d " dev_warn(imxdma->dev, "Can't register IRQ %d "
"for DMA channel %d\n", "for DMA channel %d\n",
MX2x_INT_DMACH0 + i, i); irq + i, i);
goto err; goto err;
} }
init_timer(&imxdmac->watchdog); init_timer(&imxdmac->watchdog);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment