@@ -360,6 +360,11 @@ static void sfp_fixup_ignore_tx_fault(struct sfp *sfp)
360360 sfp -> state_ignore_mask |= SFP_F_TX_FAULT ;
361361}
362362
363+ static void sfp_fixup_ignore_hw (struct sfp * sfp , unsigned int mask )
364+ {
365+ sfp -> state_hw_mask &= ~mask ;
366+ }
367+
363368static void sfp_fixup_nokia (struct sfp * sfp )
364369{
365370 sfp_fixup_long_startup (sfp );
@@ -408,7 +413,19 @@ static void sfp_fixup_halny_gsfp(struct sfp *sfp)
408413 * these are possibly used for other purposes on this
409414 * module, e.g. a serial port.
410415 */
411- sfp -> state_hw_mask &= ~(SFP_F_TX_FAULT | SFP_F_LOS );
416+ sfp_fixup_ignore_hw (sfp , SFP_F_TX_FAULT | SFP_F_LOS );
417+ }
418+
419+ static void sfp_fixup_potron (struct sfp * sfp )
420+ {
421+ /*
422+ * The TX_FAULT and LOS pins on this device are used for serial
423+ * communication, so ignore them. Additionally, provide extra
424+ * time for this device to fully start up.
425+ */
426+
427+ sfp_fixup_long_startup (sfp );
428+ sfp_fixup_ignore_hw (sfp , SFP_F_TX_FAULT | SFP_F_LOS );
412429}
413430
414431static void sfp_fixup_rollball_cc (struct sfp * sfp )
@@ -511,6 +528,8 @@ static const struct sfp_quirk sfp_quirks[] = {
511528 SFP_QUIRK_F ("Walsun" , "HXSX-ATRC-1" , sfp_fixup_fs_10gt ),
512529 SFP_QUIRK_F ("Walsun" , "HXSX-ATRI-1" , sfp_fixup_fs_10gt ),
513530
531+ SFP_QUIRK_F ("YV" , "SFP+ONU-XGSPON" , sfp_fixup_potron ),
532+
514533 // OEM SFP-GE-T is a 1000Base-T module with broken TX_FAULT indicator
515534 SFP_QUIRK_F ("OEM" , "SFP-GE-T" , sfp_fixup_ignore_tx_fault ),
516535
0 commit comments