diff options
author | Alexander Popov <a13xp0p0v88@gmail.com> | 2014-06-25 06:53:00 -0400 |
---|---|---|
committer | Vinod Koul <vinod.koul@intel.com> | 2014-07-25 14:51:42 -0400 |
commit | ec1f0c96669a23f898c25a30a5319baebf3f0677 (patch) | |
tree | a7925a89fbdd31b1888eea02d5b11a0973e71c28 | |
parent | 16369efb1f6006ec79babe53f388eed431533596 (diff) |
dmaengine: mpc512x: register for device tree channel lookup
Register the controller for device tree based lookup of DMA channels
(non-fatal for backwards compatibility with older device trees) and
provide the '#dma-cells' property in the shared mpc5121.dtsi file
Signed-off-by: Alexander Popov <a13xp0p0v88@gmail.com>
Signed-off-by: Vinod Koul <vinod.koul@intel.com>
-rw-r--r-- | arch/powerpc/boot/dts/mpc5121.dtsi | 1 | ||||
-rw-r--r-- | drivers/dma/mpc512x_dma.c | 13 |
2 files changed, 13 insertions, 1 deletions
diff --git a/arch/powerpc/boot/dts/mpc5121.dtsi b/arch/powerpc/boot/dts/mpc5121.dtsi index 2c0e1552d20b..7f9d14f5c4da 100644 --- a/arch/powerpc/boot/dts/mpc5121.dtsi +++ b/arch/powerpc/boot/dts/mpc5121.dtsi | |||
@@ -498,6 +498,7 @@ | |||
498 | compatible = "fsl,mpc5121-dma"; | 498 | compatible = "fsl,mpc5121-dma"; |
499 | reg = <0x14000 0x1800>; | 499 | reg = <0x14000 0x1800>; |
500 | interrupts = <65 0x8>; | 500 | interrupts = <65 0x8>; |
501 | #dma-cells = <1>; | ||
501 | }; | 502 | }; |
502 | }; | 503 | }; |
503 | 504 | ||
diff --git a/drivers/dma/mpc512x_dma.c b/drivers/dma/mpc512x_dma.c index 2ad43738ac8b..881db2bcb48b 100644 --- a/drivers/dma/mpc512x_dma.c +++ b/drivers/dma/mpc512x_dma.c | |||
@@ -53,6 +53,7 @@ | |||
53 | #include <linux/of_address.h> | 53 | #include <linux/of_address.h> |
54 | #include <linux/of_device.h> | 54 | #include <linux/of_device.h> |
55 | #include <linux/of_irq.h> | 55 | #include <linux/of_irq.h> |
56 | #include <linux/of_dma.h> | ||
56 | #include <linux/of_platform.h> | 57 | #include <linux/of_platform.h> |
57 | 58 | ||
58 | #include <linux/random.h> | 59 | #include <linux/random.h> |
@@ -1036,7 +1037,15 @@ static int mpc_dma_probe(struct platform_device *op) | |||
1036 | if (retval) | 1037 | if (retval) |
1037 | goto err_free2; | 1038 | goto err_free2; |
1038 | 1039 | ||
1039 | return retval; | 1040 | /* Register with OF helpers for DMA lookups (nonfatal) */ |
1041 | if (dev->of_node) { | ||
1042 | retval = of_dma_controller_register(dev->of_node, | ||
1043 | of_dma_xlate_by_chan_id, mdma); | ||
1044 | if (retval) | ||
1045 | dev_warn(dev, "Could not register for OF lookup\n"); | ||
1046 | } | ||
1047 | |||
1048 | return 0; | ||
1040 | 1049 | ||
1041 | err_free2: | 1050 | err_free2: |
1042 | if (mdma->is_mpc8308) | 1051 | if (mdma->is_mpc8308) |
@@ -1057,6 +1066,8 @@ static int mpc_dma_remove(struct platform_device *op) | |||
1057 | struct device *dev = &op->dev; | 1066 | struct device *dev = &op->dev; |
1058 | struct mpc_dma *mdma = dev_get_drvdata(dev); | 1067 | struct mpc_dma *mdma = dev_get_drvdata(dev); |
1059 | 1068 | ||
1069 | if (dev->of_node) | ||
1070 | of_dma_controller_free(dev->of_node); | ||
1060 | dma_async_device_unregister(&mdma->dma); | 1071 | dma_async_device_unregister(&mdma->dma); |
1061 | if (mdma->is_mpc8308) { | 1072 | if (mdma->is_mpc8308) { |
1062 | free_irq(mdma->irq2, mdma); | 1073 | free_irq(mdma->irq2, mdma); |