diff options
author | Chen-Yu Tsai <wens@csie.org> | 2014-06-29 10:16:59 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2014-07-29 10:32:56 -0400 |
commit | 61f663dfc1a091c7c04fa73666af52a42aaa083f (patch) | |
tree | d2dce95f6fc55f8448fd0943d31821b43110ef55 /drivers/net/wireless | |
parent | 1217dda7cb2e93dc236cba4544239c586f391099 (diff) |
brcmfmac: add device tree support for SDIO devices
brcmfmac devices can use an out-of-band interrupt on a GPIO line.
Currently this is specified using platform data. Add support for
specifying out-of-band interrupt via device tree.
Signed-off-by: Chen-Yu Tsai <wens@csie.org>
[arend@broadcom.com: conditionalize more of-code, use driver debug routines]
Signed-off-by: Arend van Spriel <arend@broadcom.com>
[hdegoede@redhat.com: drop clk / reg_on gpio handling, as there is no consensus
on how to handle this yet]
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless')
-rw-r--r-- | drivers/net/wireless/brcm80211/brcmfmac/Makefile | 2 | ||||
-rw-r--r-- | drivers/net/wireless/brcm80211/brcmfmac/bcmsdh.c | 4 | ||||
-rw-r--r-- | drivers/net/wireless/brcm80211/brcmfmac/of.c | 56 | ||||
-rw-r--r-- | drivers/net/wireless/brcm80211/brcmfmac/of.h | 22 |
4 files changed, 84 insertions, 0 deletions
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/Makefile b/drivers/net/wireless/brcm80211/brcmfmac/Makefile index de0cff3df389..14e8a8d33520 100644 --- a/drivers/net/wireless/brcm80211/brcmfmac/Makefile +++ b/drivers/net/wireless/brcm80211/brcmfmac/Makefile | |||
@@ -46,3 +46,5 @@ brcmfmac-$(CONFIG_BRCMDBG) += \ | |||
46 | dhd_dbg.o | 46 | dhd_dbg.o |
47 | brcmfmac-$(CONFIG_BRCM_TRACING) += \ | 47 | brcmfmac-$(CONFIG_BRCM_TRACING) += \ |
48 | tracepoint.o | 48 | tracepoint.o |
49 | brcmfmac-$(CONFIG_OF) += \ | ||
50 | of.o | ||
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/bcmsdh.c b/drivers/net/wireless/brcm80211/brcmfmac/bcmsdh.c index f467cafe3e8f..dc2db47a1c73 100644 --- a/drivers/net/wireless/brcm80211/brcmfmac/bcmsdh.c +++ b/drivers/net/wireless/brcm80211/brcmfmac/bcmsdh.c | |||
@@ -42,6 +42,7 @@ | |||
42 | #include "dhd_bus.h" | 42 | #include "dhd_bus.h" |
43 | #include "dhd_dbg.h" | 43 | #include "dhd_dbg.h" |
44 | #include "sdio_host.h" | 44 | #include "sdio_host.h" |
45 | #include "of.h" | ||
45 | 46 | ||
46 | #define SDIOH_API_ACCESS_RETRY_LIMIT 2 | 47 | #define SDIOH_API_ACCESS_RETRY_LIMIT 2 |
47 | 48 | ||
@@ -1044,6 +1045,9 @@ static int brcmf_ops_sdio_probe(struct sdio_func *func, | |||
1044 | sdiodev->dev = &sdiodev->func[1]->dev; | 1045 | sdiodev->dev = &sdiodev->func[1]->dev; |
1045 | sdiodev->pdata = brcmfmac_sdio_pdata; | 1046 | sdiodev->pdata = brcmfmac_sdio_pdata; |
1046 | 1047 | ||
1048 | if (!sdiodev->pdata) | ||
1049 | brcmf_of_probe(sdiodev); | ||
1050 | |||
1047 | atomic_set(&sdiodev->suspend, false); | 1051 | atomic_set(&sdiodev->suspend, false); |
1048 | init_waitqueue_head(&sdiodev->request_word_wait); | 1052 | init_waitqueue_head(&sdiodev->request_word_wait); |
1049 | init_waitqueue_head(&sdiodev->request_buffer_wait); | 1053 | init_waitqueue_head(&sdiodev->request_buffer_wait); |
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/of.c b/drivers/net/wireless/brcm80211/brcmfmac/of.c new file mode 100644 index 000000000000..f05f5270fec1 --- /dev/null +++ b/drivers/net/wireless/brcm80211/brcmfmac/of.c | |||
@@ -0,0 +1,56 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2014 Broadcom Corporation | ||
3 | * | ||
4 | * Permission to use, copy, modify, and/or distribute this software for any | ||
5 | * purpose with or without fee is hereby granted, provided that the above | ||
6 | * copyright notice and this permission notice appear in all copies. | ||
7 | * | ||
8 | * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | ||
9 | * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | ||
10 | * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY | ||
11 | * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | ||
12 | * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION | ||
13 | * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN | ||
14 | * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | ||
15 | */ | ||
16 | #include <linux/init.h> | ||
17 | #include <linux/of.h> | ||
18 | #include <linux/of_irq.h> | ||
19 | #include <linux/mmc/card.h> | ||
20 | #include <linux/platform_data/brcmfmac-sdio.h> | ||
21 | #include <linux/mmc/sdio_func.h> | ||
22 | |||
23 | #include <defs.h> | ||
24 | #include "dhd_dbg.h" | ||
25 | #include "sdio_host.h" | ||
26 | |||
27 | void brcmf_of_probe(struct brcmf_sdio_dev *sdiodev) | ||
28 | { | ||
29 | struct device *dev = sdiodev->dev; | ||
30 | struct device_node *np = dev->of_node; | ||
31 | int irq; | ||
32 | u32 irqf; | ||
33 | u32 val; | ||
34 | |||
35 | if (!np || !of_device_is_compatible(np, "brcm,bcm4329-fmac")) | ||
36 | return; | ||
37 | |||
38 | sdiodev->pdata = devm_kzalloc(dev, sizeof(*sdiodev->pdata), GFP_KERNEL); | ||
39 | if (!sdiodev->pdata) | ||
40 | return; | ||
41 | |||
42 | irq = irq_of_parse_and_map(np, 0); | ||
43 | if (irq < 0) { | ||
44 | brcmf_err("interrupt could not be mapped: err=%d\n", irq); | ||
45 | devm_kfree(dev, sdiodev->pdata); | ||
46 | return; | ||
47 | } | ||
48 | irqf = irqd_get_trigger_type(irq_get_irq_data(irq)); | ||
49 | |||
50 | sdiodev->pdata->oob_irq_supported = true; | ||
51 | sdiodev->pdata->oob_irq_nr = irq; | ||
52 | sdiodev->pdata->oob_irq_flags = irqf; | ||
53 | |||
54 | if (of_property_read_u32(np, "brcm,drive-strength", &val) == 0) | ||
55 | sdiodev->pdata->drive_strength = val; | ||
56 | } | ||
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/of.h b/drivers/net/wireless/brcm80211/brcmfmac/of.h new file mode 100644 index 000000000000..5f7c3550deda --- /dev/null +++ b/drivers/net/wireless/brcm80211/brcmfmac/of.h | |||
@@ -0,0 +1,22 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2014 Broadcom Corporation | ||
3 | * | ||
4 | * Permission to use, copy, modify, and/or distribute this software for any | ||
5 | * purpose with or without fee is hereby granted, provided that the above | ||
6 | * copyright notice and this permission notice appear in all copies. | ||
7 | * | ||
8 | * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | ||
9 | * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | ||
10 | * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY | ||
11 | * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | ||
12 | * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION | ||
13 | * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN | ||
14 | * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | ||
15 | */ | ||
16 | #ifdef CONFIG_OF | ||
17 | void brcmf_of_probe(struct brcmf_sdio_dev *sdiodev); | ||
18 | #else | ||
19 | static void brcmf_of_probe(struct brcmf_sdio_dev *sdiodev) | ||
20 | { | ||
21 | } | ||
22 | #endif /* CONFIG_OF */ | ||