.. | .. |
---|
| 1 | +// SPDX-License-Identifier: GPL-2.0+ |
---|
1 | 2 | /* |
---|
2 | 3 | * drivers/net/phy/lxt.c |
---|
3 | 4 | * |
---|
.. | .. |
---|
6 | 7 | * Author: Andy Fleming |
---|
7 | 8 | * |
---|
8 | 9 | * Copyright (c) 2004 Freescale Semiconductor, Inc. |
---|
9 | | - * |
---|
10 | | - * This program is free software; you can redistribute it and/or modify it |
---|
11 | | - * under the terms of the GNU General Public License as published by the |
---|
12 | | - * Free Software Foundation; either version 2 of the License, or (at your |
---|
13 | | - * option) any later version. |
---|
14 | | - * |
---|
15 | 10 | */ |
---|
16 | 11 | #include <linux/kernel.h> |
---|
17 | 12 | #include <linux/string.h> |
---|
.. | .. |
---|
177 | 172 | */ |
---|
178 | 173 | } while (lpa == adv && retry--); |
---|
179 | 174 | |
---|
180 | | - phydev->lp_advertising = mii_lpa_to_ethtool_lpa_t(lpa); |
---|
| 175 | + mii_lpa_to_linkmode_lpa_t(phydev->lp_advertising, lpa); |
---|
181 | 176 | |
---|
182 | 177 | lpa &= adv; |
---|
183 | 178 | |
---|
.. | .. |
---|
195 | 190 | phydev->duplex = DUPLEX_FULL; |
---|
196 | 191 | } |
---|
197 | 192 | |
---|
198 | | - if (phydev->duplex == DUPLEX_FULL) { |
---|
199 | | - phydev->pause = lpa & LPA_PAUSE_CAP ? 1 : 0; |
---|
200 | | - phydev->asym_pause = lpa & LPA_PAUSE_ASYM ? 1 : 0; |
---|
201 | | - } |
---|
| 193 | + phy_resolve_aneg_pause(phydev); |
---|
202 | 194 | } else { |
---|
203 | | - int bmcr = phy_read(phydev, MII_BMCR); |
---|
204 | | - |
---|
205 | | - if (bmcr < 0) |
---|
206 | | - return bmcr; |
---|
207 | | - |
---|
208 | | - if (bmcr & BMCR_FULLDPLX) |
---|
209 | | - phydev->duplex = DUPLEX_FULL; |
---|
210 | | - else |
---|
211 | | - phydev->duplex = DUPLEX_HALF; |
---|
212 | | - |
---|
213 | | - if (bmcr & BMCR_SPEED1000) |
---|
214 | | - phydev->speed = SPEED_1000; |
---|
215 | | - else if (bmcr & BMCR_SPEED100) |
---|
216 | | - phydev->speed = SPEED_100; |
---|
217 | | - else |
---|
218 | | - phydev->speed = SPEED_10; |
---|
| 195 | + err = genphy_read_status_fixed(phydev); |
---|
| 196 | + if (err < 0) |
---|
| 197 | + return err; |
---|
219 | 198 | |
---|
220 | 199 | phydev->pause = phydev->asym_pause = 0; |
---|
221 | | - phydev->lp_advertising = 0; |
---|
| 200 | + linkmode_zero(phydev->lp_advertising); |
---|
222 | 201 | } |
---|
223 | 202 | |
---|
224 | 203 | return 0; |
---|
.. | .. |
---|
239 | 218 | phy_write(phydev, MII_BMCR, val); |
---|
240 | 219 | /* Remember that the port is in fiber mode. */ |
---|
241 | 220 | phydev->priv = lxt973_probe; |
---|
| 221 | + phydev->port = PORT_FIBRE; |
---|
242 | 222 | } else { |
---|
243 | 223 | phydev->priv = NULL; |
---|
244 | 224 | } |
---|
.. | .. |
---|
256 | 236 | .phy_id = 0x78100000, |
---|
257 | 237 | .name = "LXT970", |
---|
258 | 238 | .phy_id_mask = 0xfffffff0, |
---|
259 | | - .features = PHY_BASIC_FEATURES, |
---|
260 | | - .flags = PHY_HAS_INTERRUPT, |
---|
| 239 | + /* PHY_BASIC_FEATURES */ |
---|
261 | 240 | .config_init = lxt970_config_init, |
---|
262 | 241 | .ack_interrupt = lxt970_ack_interrupt, |
---|
263 | 242 | .config_intr = lxt970_config_intr, |
---|
.. | .. |
---|
265 | 244 | .phy_id = 0x001378e0, |
---|
266 | 245 | .name = "LXT971", |
---|
267 | 246 | .phy_id_mask = 0xfffffff0, |
---|
268 | | - .features = PHY_BASIC_FEATURES, |
---|
269 | | - .flags = PHY_HAS_INTERRUPT, |
---|
| 247 | + /* PHY_BASIC_FEATURES */ |
---|
270 | 248 | .ack_interrupt = lxt971_ack_interrupt, |
---|
271 | 249 | .config_intr = lxt971_config_intr, |
---|
| 250 | + .suspend = genphy_suspend, |
---|
| 251 | + .resume = genphy_resume, |
---|
272 | 252 | }, { |
---|
273 | 253 | .phy_id = 0x00137a10, |
---|
274 | 254 | .name = "LXT973-A2", |
---|
275 | 255 | .phy_id_mask = 0xffffffff, |
---|
276 | | - .features = PHY_BASIC_FEATURES, |
---|
| 256 | + /* PHY_BASIC_FEATURES */ |
---|
277 | 257 | .flags = 0, |
---|
278 | 258 | .probe = lxt973_probe, |
---|
279 | 259 | .config_aneg = lxt973_config_aneg, |
---|
280 | 260 | .read_status = lxt973a2_read_status, |
---|
| 261 | + .suspend = genphy_suspend, |
---|
| 262 | + .resume = genphy_resume, |
---|
281 | 263 | }, { |
---|
282 | 264 | .phy_id = 0x00137a10, |
---|
283 | 265 | .name = "LXT973", |
---|
284 | 266 | .phy_id_mask = 0xfffffff0, |
---|
285 | | - .features = PHY_BASIC_FEATURES, |
---|
| 267 | + /* PHY_BASIC_FEATURES */ |
---|
286 | 268 | .flags = 0, |
---|
287 | 269 | .probe = lxt973_probe, |
---|
288 | 270 | .config_aneg = lxt973_config_aneg, |
---|
| 271 | + .suspend = genphy_suspend, |
---|
| 272 | + .resume = genphy_resume, |
---|
289 | 273 | } }; |
---|
290 | 274 | |
---|
291 | 275 | module_phy_driver(lxt97x_driver); |
---|