From 1105bd2897152a8c6861a09faed56cf2fdbfdddb Mon Sep 17 00:00:00 2001 From: John Crispin Date: Wed, 3 Apr 2013 09:58:33 +0000 Subject: add OF support to rtl8367b driver Signed-off-by: John Crispin SVN-Revision: 36159 --- .../linux/generic/files/drivers/net/phy/rtl8367b.c | 56 +++++++++++++++++++--- 1 file changed, 50 insertions(+), 6 deletions(-) (limited to 'target/linux') diff --git a/target/linux/generic/files/drivers/net/phy/rtl8367b.c b/target/linux/generic/files/drivers/net/phy/rtl8367b.c index c70a14486f6..5775fa4e98f 100644 --- a/target/linux/generic/files/drivers/net/phy/rtl8367b.c +++ b/target/linux/generic/files/drivers/net/phy/rtl8367b.c @@ -862,6 +862,40 @@ static int rtl8367b_extif_init(struct rtl8366_smi *smi, int id, return 0; } +#ifdef CONFIG_OF +static int rtl8367b_extif_init_of(struct rtl8366_smi *smi, int id, const char *name) +{ + struct rtl8367_extif_config *cfg; + const __be32 *prop; + int size; + + prop = of_get_property(smi->parent->of_node, name, &size); + if (!prop || size != (9 * sizeof(*prop))) + return 0; + + cfg = kzalloc(sizeof(struct rtl8367_extif_config), GFP_KERNEL); + if (!cfg) + return -1; + + cfg->txdelay = be32_to_cpup(prop++); + cfg->rxdelay = be32_to_cpup(prop++); + cfg->mode = be32_to_cpup(prop++); + cfg->ability.force_mode = be32_to_cpup(prop++); + cfg->ability.txpause = be32_to_cpup(prop++); + cfg->ability.rxpause = be32_to_cpup(prop++); + cfg->ability.link = be32_to_cpup(prop++); + cfg->ability.duplex = be32_to_cpup(prop++); + cfg->ability.speed = be32_to_cpup(prop++); + + return rtl8367b_extif_init(smi, id, cfg); +} +#else +static int rtl8367b_extif_init_of(struct rtl8366_smi *smi, int id, const char *name) +{ + return -1; +} +#endif + static int rtl8367b_setup(struct rtl8366_smi *smi) { struct rtl8367_platform_data *pdata; @@ -875,13 +909,23 @@ static int rtl8367b_setup(struct rtl8366_smi *smi) return err; /* initialize external interfaces */ - err = rtl8367b_extif_init(smi, 0, pdata->extif0_cfg); - if (err) - return err; + if (smi->parent->of_node) { + err = rtl8367b_extif_init_of(smi, 0, "realtek,extif0"); + if (err) + return err; - err = rtl8367b_extif_init(smi, 1, pdata->extif1_cfg); - if (err) - return err; + err = rtl8367b_extif_init_of(smi, 1, "realtek,extif1"); + if (err) + return err; + } else { + err = rtl8367b_extif_init(smi, 0, pdata->extif0_cfg); + if (err) + return err; + + err = rtl8367b_extif_init(smi, 1, pdata->extif1_cfg); + if (err) + return err; + } /* set maximum packet length to 1536 bytes */ REG_RMW(smi, RTL8367B_SWC0_REG, RTL8367B_SWC0_MAX_LENGTH_MASK, -- cgit v1.2.3 rm>
blob: b5a73fef708d84b735e70c39dd4a58df96e35c61 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86