1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16#include <linux/init.h>
17#include <linux/of.h>
18#include <linux/of_irq.h>
19
20#include <defs.h>
21#include "debug.h"
22#include "core.h"
23#include "common.h"
24#include "of.h"
25
26void brcmf_of_probe(struct device *dev, enum brcmf_bus_type bus_type,
27 struct brcmf_mp_device *settings)
28{
29 struct brcmfmac_sdio_pd *sdio = &settings->bus.sdio;
30 struct device_node *np = dev->of_node;
31 int irq;
32 u32 irqf;
33 u32 val;
34
35 if (!np || bus_type != BRCMF_BUSTYPE_SDIO ||
36 !of_device_is_compatible(np, "brcm,bcm4329-fmac"))
37 return;
38
39 if (of_property_read_u32(np, "brcm,drive-strength", &val) == 0)
40 sdio->drive_strength = val;
41
42
43 if (!of_find_property(np, "interrupts", NULL))
44 return;
45
46 irq = irq_of_parse_and_map(np, 0);
47 if (!irq) {
48 brcmf_err("interrupt could not be mapped\n");
49 return;
50 }
51 irqf = irqd_get_trigger_type(irq_get_irq_data(irq));
52
53 sdio->oob_irq_supported = true;
54 sdio->oob_irq_nr = irq;
55 sdio->oob_irq_flags = irqf;
56}
57