@@ -280,53 +280,35 @@ extern int bcm_dma_chan_free(int channel)
280
280
}
281
281
EXPORT_SYMBOL_GPL (bcm_dma_chan_free );
282
282
283
- static int bcm_dmaman_probe (struct platform_device * pdev )
283
+ int bcm_dmaman_probe (struct platform_device * pdev , void __iomem * base ,
284
+ u32 chans_available )
284
285
{
285
286
struct device * dev = & pdev -> dev ;
286
287
struct vc_dmaman * dmaman ;
287
- struct resource * r ;
288
- void __iomem * dma_base ;
289
- uint32_t val ;
290
-
291
- if (!of_property_read_u32 (dev -> of_node ,
292
- "brcm,dma-channel-mask" , & val ))
293
- dmachans = val ;
294
- else if (dmachans == -1 )
295
- dmachans = DEFAULT_DMACHAN_BITMAP ;
296
288
297
289
dmaman = devm_kzalloc (dev , sizeof (* dmaman ), GFP_KERNEL );
298
290
if (!dmaman )
299
291
return - ENOMEM ;
300
292
301
293
mutex_init (& dmaman -> lock );
302
- r = platform_get_resource (pdev , IORESOURCE_MEM , 0 );
303
- dma_base = devm_ioremap_resource (dev , r );
304
- if (IS_ERR (dma_base ))
305
- return PTR_ERR (dma_base );
306
-
307
- vc_dmaman_init (dmaman , dma_base , dmachans );
294
+ vc_dmaman_init (dmaman , base , chans_available );
308
295
g_dmaman = dmaman ;
309
296
dmaman_dev = dev ;
310
297
311
298
dev_info (dev , "DMA legacy API manager at %p, dmachans=0x%x\n" ,
312
- dma_base , dmachans );
299
+ base , chans_available );
313
300
314
301
return 0 ;
315
302
}
303
+ EXPORT_SYMBOL (bcm_dmaman_probe );
316
304
317
- static int bcm_dmaman_remove (struct platform_device * pdev )
305
+ int bcm_dmaman_remove (struct platform_device * pdev )
318
306
{
319
307
dmaman_dev = NULL ;
320
308
321
309
return 0 ;
322
310
}
323
-
324
- #else /* CONFIG_DMA_BCM2708_LEGACY */
325
-
326
- static int bcm_dmaman_remove (struct platform_device * pdev )
327
- {
328
- return 0 ;
329
- }
311
+ EXPORT_SYMBOL (bcm_dmaman_remove );
330
312
331
313
#endif /* CONFIG_DMA_BCM2708_LEGACY */
332
314
@@ -1043,7 +1025,7 @@ static void bcm2835_dma_free(struct bcm2835_dmadev *od)
1043
1025
}
1044
1026
1045
1027
static const struct of_device_id bcm2835_dma_of_match [] = {
1046
- { .compatible = "brcm,bcm2835 -dma" , },
1028
+ { .compatible = "brcm,bcm2708 -dma" , },
1047
1029
{},
1048
1030
};
1049
1031
MODULE_DEVICE_TABLE (of , bcm2835_dma_of_match );
@@ -1067,11 +1049,9 @@ static struct dma_chan *bcm2835_dma_xlate(struct of_phandle_args *spec,
1067
1049
static int bcm2835_dma_probe (struct platform_device * pdev )
1068
1050
{
1069
1051
struct bcm2835_dmadev * od ;
1070
- #ifndef CONFIG_DMA_BCM2708_LEGACY
1071
1052
struct resource * res ;
1072
1053
void __iomem * base ;
1073
1054
uint32_t chans_available ;
1074
- #endif
1075
1055
int rc ;
1076
1056
int i ;
1077
1057
int irq ;
@@ -1088,6 +1068,11 @@ static int bcm2835_dma_probe(struct platform_device *pdev)
1088
1068
if (!pdev -> dev .dma_mask )
1089
1069
pdev -> dev .dma_mask = & pdev -> dev .coherent_dma_mask ;
1090
1070
1071
+ res = platform_get_resource (pdev , IORESOURCE_MEM , 0 );
1072
+ base = devm_ioremap_resource (& pdev -> dev , res );
1073
+ if (IS_ERR (base ))
1074
+ return PTR_ERR (base );
1075
+
1091
1076
#ifdef CONFIG_DMA_BCM2708_LEGACY
1092
1077
1093
1078
rc = dma_set_mask (& pdev -> dev , DMA_BIT_MASK (32 ));
@@ -1100,7 +1085,13 @@ static int bcm2835_dma_probe(struct platform_device *pdev)
1100
1085
if (!od )
1101
1086
return - ENOMEM ;
1102
1087
1103
- rc = bcm_dmaman_probe (pdev );
1088
+ if (!of_property_read_u32 (pdev -> dev .of_node ,
1089
+ "brcm,dma-channel-mask" , & chans_available ))
1090
+ dmachans = chans_available ;
1091
+ else if (dmachans == -1 )
1092
+ dmachans = DEFAULT_DMACHAN_BITMAP ;
1093
+
1094
+ rc = bcm_dmaman_probe (pdev , base , dmachans );
1104
1095
if (rc )
1105
1096
return rc ;
1106
1097
@@ -1174,15 +1165,8 @@ static int bcm2835_dma_probe(struct platform_device *pdev)
1174
1165
pdev -> dev .dma_parms = & od -> dma_parms ;
1175
1166
dma_set_max_seg_size (& pdev -> dev , 0x3FFFFFFF );
1176
1167
1177
-
1178
- res = platform_get_resource (pdev , IORESOURCE_MEM , 0 );
1179
- base = devm_ioremap_resource (& pdev -> dev , res );
1180
- if (IS_ERR (base ))
1181
- return PTR_ERR (base );
1182
-
1183
1168
od -> base = base ;
1184
1169
1185
-
1186
1170
dma_cap_set (DMA_SLAVE , od -> ddev .cap_mask );
1187
1171
dma_cap_set (DMA_PRIVATE , od -> ddev .cap_mask );
1188
1172
dma_cap_set (DMA_CYCLIC , od -> ddev .cap_mask );
0 commit comments