diff options
-rw-r--r-- | Documentation/devicetree/bindings/dma/ste-dma40.txt | 2 | ||||
-rw-r--r-- | drivers/dma/ste_dma40.c | 17 |
2 files changed, 18 insertions, 1 deletions
diff --git a/Documentation/devicetree/bindings/dma/ste-dma40.txt b/Documentation/devicetree/bindings/dma/ste-dma40.txt index aa272d866f6e..bea5b73a7390 100644 --- a/Documentation/devicetree/bindings/dma/ste-dma40.txt +++ b/Documentation/devicetree/bindings/dma/ste-dma40.txt | |||
@@ -11,6 +11,7 @@ Required properties: | |||
11 | Optional properties: | 11 | Optional properties: |
12 | - dma-channels: Number of channels supported by hardware - if not present | 12 | - dma-channels: Number of channels supported by hardware - if not present |
13 | the driver will attempt to obtain the information from H/W | 13 | the driver will attempt to obtain the information from H/W |
14 | - disabled-channels: Channels which can not be used | ||
14 | 15 | ||
15 | Example: | 16 | Example: |
16 | 17 | ||
@@ -23,6 +24,7 @@ Example: | |||
23 | 24 | ||
24 | #dma-cells = <2>; | 25 | #dma-cells = <2>; |
25 | memcpy-channels = <56 57 58 59 60>; | 26 | memcpy-channels = <56 57 58 59 60>; |
27 | disabled-channels = <12>; | ||
26 | dma-channels = <8>; | 28 | dma-channels = <8>; |
27 | }; | 29 | }; |
28 | 30 | ||
diff --git a/drivers/dma/ste_dma40.c b/drivers/dma/ste_dma40.c index 4e528dd30ad5..ffac8225ff54 100644 --- a/drivers/dma/ste_dma40.c +++ b/drivers/dma/ste_dma40.c | |||
@@ -3482,7 +3482,7 @@ static int __init d40_of_probe(struct platform_device *pdev, | |||
3482 | struct device_node *np) | 3482 | struct device_node *np) |
3483 | { | 3483 | { |
3484 | struct stedma40_platform_data *pdata; | 3484 | struct stedma40_platform_data *pdata; |
3485 | int num_phy = 0, num_memcpy = 0; | 3485 | int num_phy = 0, num_memcpy = 0, num_disabled = 0; |
3486 | const const __be32 *list; | 3486 | const const __be32 *list; |
3487 | 3487 | ||
3488 | pdata = devm_kzalloc(&pdev->dev, | 3488 | pdata = devm_kzalloc(&pdev->dev, |
@@ -3511,6 +3511,21 @@ static int __init d40_of_probe(struct platform_device *pdev, | |||
3511 | dma40_memcpy_channels, | 3511 | dma40_memcpy_channels, |
3512 | num_memcpy); | 3512 | num_memcpy); |
3513 | 3513 | ||
3514 | list = of_get_property(np, "disabled-channels", &num_disabled); | ||
3515 | num_disabled /= sizeof(*list); | ||
3516 | |||
3517 | if (num_disabled > STEDMA40_MAX_PHYS || num_disabled < 0) { | ||
3518 | d40_err(&pdev->dev, | ||
3519 | "Invalid number of disabled channels specified (%d)\n", | ||
3520 | num_disabled); | ||
3521 | return -EINVAL; | ||
3522 | } | ||
3523 | |||
3524 | of_property_read_u32_array(np, "disabled-channels", | ||
3525 | pdata->disabled_channels, | ||
3526 | num_disabled); | ||
3527 | pdata->disabled_channels[num_disabled] = -1; | ||
3528 | |||
3514 | pdev->dev.platform_data = pdata; | 3529 | pdev->dev.platform_data = pdata; |
3515 | 3530 | ||
3516 | return 0; | 3531 | return 0; |