realtek: sfp: add mdio bus only for sfps with a phy
authorBjørn Mork <bjorn@mork.no>
Wed, 5 Feb 2025 07:37:51 +0000 (08:37 +0100)
committerSander Vanheule <sander@svanheule.net>
Tue, 25 Feb 2025 19:53:30 +0000 (20:53 +0100)
The SMBus patch broke the logic and caused the driver to always
register an mdio bus, regardless of the sfp.  Restore original
logic.

Signed-off-by: Bjørn Mork <bjorn@mork.no>
Link: https://github.com/openwrt/openwrt/pull/17950
Signed-off-by: Sander Vanheule <sander@svanheule.net>
target/linux/realtek/patches-6.6/714-net-phy-sfp-add-support-for-SMBus.patch

index 76e2d765069b5544517c4a41289a975da7bff7fa..cb9a1da7e63645397ab1692bda52d882b91a56ff 100644 (file)
@@ -107,21 +107,20 @@ Signed-off-by: Antoine Tenart <antoine.tenart@bootlin.com>
  static void sfp_i2c_mdiobus_destroy(struct sfp *sfp)
  {
        mdiobus_unregister(sfp->i2c_mii);
-@@ -1871,8 +1948,15 @@ static void sfp_sm_fault(struct sfp *sfp
+@@ -1875,9 +1952,15 @@ static void sfp_sm_fault(struct sfp *sfp
  
  static int sfp_sm_add_mdio_bus(struct sfp *sfp)
  {
 -      if (sfp->mdio_protocol != MDIO_I2C_NONE)
--              return sfp_i2c_mdiobus_create(sfp);
-+      if (i2c_check_functionality(sfp->i2c, I2C_FUNC_I2C)) {
-+              if (sfp->mdio_protocol != MDIO_I2C_NONE)
-+                      return sfp_i2c_mdiobus_create(sfp);
-+
++      if (sfp->mdio_protocol == MDIO_I2C_NONE)
 +              return 0;
-+      }
 +
++      if (i2c_check_functionality(sfp->i2c, I2C_FUNC_I2C))
+               return sfp_i2c_mdiobus_create(sfp);
 +      if (i2c_check_functionality(sfp->i2c, I2C_FUNC_SMBUS_BYTE_DATA))
 +              return sfp_sm_mdiobus_create(sfp);
++
        return 0;
  }