@@ -361,6 +361,11 @@ static void sfp_fixup_ignore_tx_fault(struct sfp *sfp)
361
361
sfp -> state_ignore_mask |= SFP_F_TX_FAULT ;
362
362
}
363
363
364
+ static void sfp_fixup_ignore_hw (struct sfp * sfp , unsigned int mask )
365
+ {
366
+ sfp -> state_hw_mask &= ~mask ;
367
+ }
368
+
364
369
static void sfp_fixup_nokia (struct sfp * sfp )
365
370
{
366
371
sfp_fixup_long_startup (sfp );
@@ -409,7 +414,19 @@ static void sfp_fixup_halny_gsfp(struct sfp *sfp)
409
414
* these are possibly used for other purposes on this
410
415
* module, e.g. a serial port.
411
416
*/
412
- sfp -> state_hw_mask &= ~(SFP_F_TX_FAULT | SFP_F_LOS );
417
+ sfp_fixup_ignore_hw (sfp , SFP_F_TX_FAULT | SFP_F_LOS );
418
+ }
419
+
420
+ static void sfp_fixup_potron (struct sfp * sfp )
421
+ {
422
+ /*
423
+ * The TX_FAULT and LOS pins on this device are used for serial
424
+ * communication, so ignore them. Additionally, provide extra
425
+ * time for this device to fully start up.
426
+ */
427
+
428
+ sfp_fixup_long_startup (sfp );
429
+ sfp_fixup_ignore_hw (sfp , SFP_F_TX_FAULT | SFP_F_LOS );
413
430
}
414
431
415
432
static void sfp_fixup_rollball_cc (struct sfp * sfp )
@@ -512,6 +529,8 @@ static const struct sfp_quirk sfp_quirks[] = {
512
529
SFP_QUIRK_F ("Walsun" , "HXSX-ATRC-1" , sfp_fixup_fs_10gt ),
513
530
SFP_QUIRK_F ("Walsun" , "HXSX-ATRI-1" , sfp_fixup_fs_10gt ),
514
531
532
+ SFP_QUIRK_F ("YV" , "SFP+ONU-XGSPON" , sfp_fixup_potron ),
533
+
515
534
// OEM SFP-GE-T is a 1000Base-T module with broken TX_FAULT indicator
516
535
SFP_QUIRK_F ("OEM" , "SFP-GE-T" , sfp_fixup_ignore_tx_fault ),
517
536
0 commit comments