diff options
| author | Arnd Bergmann <arnd@arndb.de> | 2014-10-24 12:14:01 -0400 |
|---|---|---|
| committer | Olof Johansson <olof@lixom.net> | 2014-11-05 21:26:10 -0500 |
| commit | 5305e4d674ed5ec9bebd11d948affd411594d4cf (patch) | |
| tree | 86d5a7917409bc169bdfdbc4b9330faf90e5ae4c /drivers | |
| parent | ab699bc792ddbfbe022c67debf6c56d81ff67a80 (diff) | |
dma: edma: move device registration to platform code
The horrible split between the low-level part of the edma support
and the dmaengine front-end driver causes problems on multiplatform
kernels. This is an attempt to improve the situation slightly
by only registering the dmaengine devices that are actually
present.
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
[olof: add missing include of linux/dma-mapping.h]
Signed-off-by: Olof Johansson <olof@lixom.net>
Signed-off-by: Olof Johansson <olof@lixom.net>
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/dma/edma.c | 40 |
1 files changed, 1 insertions, 39 deletions
diff --git a/drivers/dma/edma.c b/drivers/dma/edma.c index 123f578d6dd3..4cfaaa5a49be 100644 --- a/drivers/dma/edma.c +++ b/drivers/dma/edma.c | |||
| @@ -1107,52 +1107,14 @@ bool edma_filter_fn(struct dma_chan *chan, void *param) | |||
| 1107 | } | 1107 | } |
| 1108 | EXPORT_SYMBOL(edma_filter_fn); | 1108 | EXPORT_SYMBOL(edma_filter_fn); |
| 1109 | 1109 | ||
| 1110 | static struct platform_device *pdev0, *pdev1; | ||
| 1111 | |||
| 1112 | static const struct platform_device_info edma_dev_info0 = { | ||
| 1113 | .name = "edma-dma-engine", | ||
| 1114 | .id = 0, | ||
| 1115 | .dma_mask = DMA_BIT_MASK(32), | ||
| 1116 | }; | ||
| 1117 | |||
| 1118 | static const struct platform_device_info edma_dev_info1 = { | ||
| 1119 | .name = "edma-dma-engine", | ||
| 1120 | .id = 1, | ||
| 1121 | .dma_mask = DMA_BIT_MASK(32), | ||
| 1122 | }; | ||
| 1123 | |||
| 1124 | static int edma_init(void) | 1110 | static int edma_init(void) |
| 1125 | { | 1111 | { |
| 1126 | int ret = platform_driver_register(&edma_driver); | 1112 | return platform_driver_register(&edma_driver); |
| 1127 | |||
| 1128 | if (ret == 0) { | ||
| 1129 | pdev0 = platform_device_register_full(&edma_dev_info0); | ||
| 1130 | if (IS_ERR(pdev0)) { | ||
| 1131 | platform_driver_unregister(&edma_driver); | ||
| 1132 | ret = PTR_ERR(pdev0); | ||
| 1133 | goto out; | ||
| 1134 | } | ||
| 1135 | } | ||
| 1136 | |||
| 1137 | if (!of_have_populated_dt() && EDMA_CTLRS == 2) { | ||
| 1138 | pdev1 = platform_device_register_full(&edma_dev_info1); | ||
| 1139 | if (IS_ERR(pdev1)) { | ||
| 1140 | platform_driver_unregister(&edma_driver); | ||
| 1141 | platform_device_unregister(pdev0); | ||
| 1142 | ret = PTR_ERR(pdev1); | ||
| 1143 | } | ||
| 1144 | } | ||
| 1145 | |||
| 1146 | out: | ||
| 1147 | return ret; | ||
| 1148 | } | 1113 | } |
| 1149 | subsys_initcall(edma_init); | 1114 | subsys_initcall(edma_init); |
| 1150 | 1115 | ||
| 1151 | static void __exit edma_exit(void) | 1116 | static void __exit edma_exit(void) |
| 1152 | { | 1117 | { |
| 1153 | platform_device_unregister(pdev0); | ||
| 1154 | if (pdev1) | ||
| 1155 | platform_device_unregister(pdev1); | ||
| 1156 | platform_driver_unregister(&edma_driver); | 1118 | platform_driver_unregister(&edma_driver); |
| 1157 | } | 1119 | } |
| 1158 | module_exit(edma_exit); | 1120 | module_exit(edma_exit); |
