diff options
Diffstat (limited to 'drivers/spi/spi-dw-mmio.c')
-rw-r--r-- | drivers/spi/spi-dw-mmio.c | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/drivers/spi/spi-dw-mmio.c b/drivers/spi/spi-dw-mmio.c index 1492f5ee9aaa..a5cba14ac3d2 100644 --- a/drivers/spi/spi-dw-mmio.c +++ b/drivers/spi/spi-dw-mmio.c | |||
@@ -16,6 +16,7 @@ | |||
16 | #include <linux/spi/spi.h> | 16 | #include <linux/spi/spi.h> |
17 | #include <linux/scatterlist.h> | 17 | #include <linux/scatterlist.h> |
18 | #include <linux/module.h> | 18 | #include <linux/module.h> |
19 | #include <linux/of_gpio.h> | ||
19 | 20 | ||
20 | #include "spi-dw.h" | 21 | #include "spi-dw.h" |
21 | 22 | ||
@@ -70,6 +71,27 @@ static int dw_spi_mmio_probe(struct platform_device *pdev) | |||
70 | dws->num_cs = 4; | 71 | dws->num_cs = 4; |
71 | dws->max_freq = clk_get_rate(dwsmmio->clk); | 72 | dws->max_freq = clk_get_rate(dwsmmio->clk); |
72 | 73 | ||
74 | if (pdev->dev.of_node) { | ||
75 | int i; | ||
76 | |||
77 | for (i = 0; i < dws->num_cs; i++) { | ||
78 | int cs_gpio = of_get_named_gpio(pdev->dev.of_node, | ||
79 | "cs-gpios", i); | ||
80 | |||
81 | if (cs_gpio == -EPROBE_DEFER) { | ||
82 | ret = cs_gpio; | ||
83 | goto out; | ||
84 | } | ||
85 | |||
86 | if (gpio_is_valid(cs_gpio)) { | ||
87 | ret = devm_gpio_request(&pdev->dev, cs_gpio, | ||
88 | dev_name(&pdev->dev)); | ||
89 | if (ret) | ||
90 | goto out; | ||
91 | } | ||
92 | } | ||
93 | } | ||
94 | |||
73 | ret = dw_spi_add_host(&pdev->dev, dws); | 95 | ret = dw_spi_add_host(&pdev->dev, dws); |
74 | if (ret) | 96 | if (ret) |
75 | goto out; | 97 | goto out; |