Commit 93272e07d8539cddce9a2a17b7b0de1326957599
Committed by
David S. Miller
1 parent
0b545a6291
Exists in
smarc-l5.0.0_1.0.0-ga
and in
5 other branches
net: add micrel KSZ8873MLL switch support
this will allow to detect the link between the switch and the soc Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> Cc: netdev@vger.kernel.org Signed-off-by: David S. Miller <davem@davemloft.net>
Showing 2 changed files with 45 additions and 0 deletions Side-by-side Diff
drivers/net/phy/micrel.c
... | ... | @@ -127,6 +127,39 @@ |
127 | 127 | return 0; |
128 | 128 | } |
129 | 129 | |
130 | +#define KSZ8873MLL_GLOBAL_CONTROL_4 0x06 | |
131 | +#define KSZ8873MLL_GLOBAL_CONTROL_4_DUPLEX (1 << 6) | |
132 | +#define KSZ8873MLL_GLOBAL_CONTROL_4_SPEED (1 << 4) | |
133 | +int ksz8873mll_read_status(struct phy_device *phydev) | |
134 | +{ | |
135 | + int regval; | |
136 | + | |
137 | + /* dummy read */ | |
138 | + regval = phy_read(phydev, KSZ8873MLL_GLOBAL_CONTROL_4); | |
139 | + | |
140 | + regval = phy_read(phydev, KSZ8873MLL_GLOBAL_CONTROL_4); | |
141 | + | |
142 | + if (regval & KSZ8873MLL_GLOBAL_CONTROL_4_DUPLEX) | |
143 | + phydev->duplex = DUPLEX_HALF; | |
144 | + else | |
145 | + phydev->duplex = DUPLEX_FULL; | |
146 | + | |
147 | + if (regval & KSZ8873MLL_GLOBAL_CONTROL_4_SPEED) | |
148 | + phydev->speed = SPEED_10; | |
149 | + else | |
150 | + phydev->speed = SPEED_100; | |
151 | + | |
152 | + phydev->link = 1; | |
153 | + phydev->pause = phydev->asym_pause = 0; | |
154 | + | |
155 | + return 0; | |
156 | +} | |
157 | + | |
158 | +static int ksz8873mll_config_aneg(struct phy_device *phydev) | |
159 | +{ | |
160 | + return 0; | |
161 | +} | |
162 | + | |
130 | 163 | static struct phy_driver ksphy_driver[] = { |
131 | 164 | { |
132 | 165 | .phy_id = PHY_ID_KS8737, |
... | ... | @@ -204,6 +237,16 @@ |
204 | 237 | .ack_interrupt = kszphy_ack_interrupt, |
205 | 238 | .config_intr = ksz9021_config_intr, |
206 | 239 | .driver = { .owner = THIS_MODULE, }, |
240 | +}, { | |
241 | + .phy_id = PHY_ID_KSZ8873MLL, | |
242 | + .phy_id_mask = 0x00fffff0, | |
243 | + .name = "Micrel KSZ8873MLL Switch", | |
244 | + .features = (SUPPORTED_Pause | SUPPORTED_Asym_Pause), | |
245 | + .flags = PHY_HAS_MAGICANEG, | |
246 | + .config_init = kszphy_config_init, | |
247 | + .config_aneg = ksz8873mll_config_aneg, | |
248 | + .read_status = ksz8873mll_read_status, | |
249 | + .driver = { .owner = THIS_MODULE, }, | |
207 | 250 | } }; |
208 | 251 | |
209 | 252 | static int __init ksphy_init(void) |
... | ... | @@ -232,6 +275,7 @@ |
232 | 275 | { PHY_ID_KSZ8021, 0x00ffffff }, |
233 | 276 | { PHY_ID_KSZ8041, 0x00fffff0 }, |
234 | 277 | { PHY_ID_KSZ8051, 0x00fffff0 }, |
278 | + { PHY_ID_KSZ8873MLL, 0x00fffff0 }, | |
235 | 279 | { } |
236 | 280 | }; |
237 | 281 |
include/linux/micrel_phy.h