FreeTel P.C30.2 and P.C30.3 may fail to report anything useful from
their EEPROM. They report correct nominal bitrate of 10300 MBd, but do
not report sfp_ct_passive nor sfp_ct_active in their ERPROM.

These modules can also operate at 1000baseX and 2500baseX.

Signed-off-by: Marek Behún <marek.be...@nic.cz>
Cc: Russell King <rmk+ker...@armlinux.org.uk>
---
 drivers/net/phy/sfp-bus.c | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

diff --git a/drivers/net/phy/sfp-bus.c b/drivers/net/phy/sfp-bus.c
index 6900c68260e0..f021709bedcc 100644
--- a/drivers/net/phy/sfp-bus.c
+++ b/drivers/net/phy/sfp-bus.c
@@ -44,6 +44,14 @@ static void sfp_quirk_2500basex(const struct sfp_eeprom_id 
*id,
        phylink_set(modes, 2500baseX_Full);
 }
 
+static void sfp_quirk_direct_attach_10g(const struct sfp_eeprom_id *id,
+                                       unsigned long *modes)
+{
+       phylink_set(modes, 10000baseCR_Full);
+       phylink_set(modes, 2500baseX_Full);
+       phylink_set(modes, 1000baseX_Full);
+}
+
 static const struct sfp_quirk sfp_quirks[] = {
        {
                // Alcatel Lucent G-010S-P can operate at 2500base-X, but
@@ -63,6 +71,18 @@ static const struct sfp_quirk sfp_quirks[] = {
                .vendor = "HUAWEI",
                .part = "MA5671A",
                .modes = sfp_quirk_2500basex,
+       }, {
+               // FreeTel P.C30.2 is a SFP+ direct attach that can operate at
+               // at 1000baseX, 2500baseX and 10000baseCR, but may report none
+               // of these in their EEPROM
+               .vendor = "FreeTel",
+               .part = "P.C30.2",
+               .modes = sfp_quirk_direct_attach_10g,
+       }, {
+               // same as previous
+               .vendor = "FreeTel",
+               .part = "P.C30.3",
+               .modes = sfp_quirk_direct_attach_10g,
        },
 };
 
-- 
2.24.1

Reply via email to