hc
2024-05-14 bedbef8ad3e75a304af6361af235302bcc61d06b
kernel/drivers/net/phy/lxt.c
....@@ -1,3 +1,4 @@
1
+// SPDX-License-Identifier: GPL-2.0+
12 /*
23 * drivers/net/phy/lxt.c
34 *
....@@ -6,12 +7,6 @@
67 * Author: Andy Fleming
78 *
89 * 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
- *
1510 */
1611 #include <linux/kernel.h>
1712 #include <linux/string.h>
....@@ -177,7 +172,7 @@
177172 */
178173 } while (lpa == adv && retry--);
179174
180
- phydev->lp_advertising = mii_lpa_to_ethtool_lpa_t(lpa);
175
+ mii_lpa_to_linkmode_lpa_t(phydev->lp_advertising, lpa);
181176
182177 lpa &= adv;
183178
....@@ -195,30 +190,14 @@
195190 phydev->duplex = DUPLEX_FULL;
196191 }
197192
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);
202194 } 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;
219198
220199 phydev->pause = phydev->asym_pause = 0;
221
- phydev->lp_advertising = 0;
200
+ linkmode_zero(phydev->lp_advertising);
222201 }
223202
224203 return 0;
....@@ -239,6 +218,7 @@
239218 phy_write(phydev, MII_BMCR, val);
240219 /* Remember that the port is in fiber mode. */
241220 phydev->priv = lxt973_probe;
221
+ phydev->port = PORT_FIBRE;
242222 } else {
243223 phydev->priv = NULL;
244224 }
....@@ -256,8 +236,7 @@
256236 .phy_id = 0x78100000,
257237 .name = "LXT970",
258238 .phy_id_mask = 0xfffffff0,
259
- .features = PHY_BASIC_FEATURES,
260
- .flags = PHY_HAS_INTERRUPT,
239
+ /* PHY_BASIC_FEATURES */
261240 .config_init = lxt970_config_init,
262241 .ack_interrupt = lxt970_ack_interrupt,
263242 .config_intr = lxt970_config_intr,
....@@ -265,27 +244,32 @@
265244 .phy_id = 0x001378e0,
266245 .name = "LXT971",
267246 .phy_id_mask = 0xfffffff0,
268
- .features = PHY_BASIC_FEATURES,
269
- .flags = PHY_HAS_INTERRUPT,
247
+ /* PHY_BASIC_FEATURES */
270248 .ack_interrupt = lxt971_ack_interrupt,
271249 .config_intr = lxt971_config_intr,
250
+ .suspend = genphy_suspend,
251
+ .resume = genphy_resume,
272252 }, {
273253 .phy_id = 0x00137a10,
274254 .name = "LXT973-A2",
275255 .phy_id_mask = 0xffffffff,
276
- .features = PHY_BASIC_FEATURES,
256
+ /* PHY_BASIC_FEATURES */
277257 .flags = 0,
278258 .probe = lxt973_probe,
279259 .config_aneg = lxt973_config_aneg,
280260 .read_status = lxt973a2_read_status,
261
+ .suspend = genphy_suspend,
262
+ .resume = genphy_resume,
281263 }, {
282264 .phy_id = 0x00137a10,
283265 .name = "LXT973",
284266 .phy_id_mask = 0xfffffff0,
285
- .features = PHY_BASIC_FEATURES,
267
+ /* PHY_BASIC_FEATURES */
286268 .flags = 0,
287269 .probe = lxt973_probe,
288270 .config_aneg = lxt973_config_aneg,
271
+ .suspend = genphy_suspend,
272
+ .resume = genphy_resume,
289273 } };
290274
291275 module_phy_driver(lxt97x_driver);