#define INCVALUE_82576_MASK            GENMASK(E1000_TIMINCA_16NS_SHIFT - 1, 0)
 #define INCVALUE_82576                 (16u << IGB_82576_TSYNC_SHIFT)
 #define IGB_NBITS_82580                        40
+#define IGB_82580_BASE_PERIOD          0x800000000
 
 static void igb_ptp_tx_hwtstamp(struct igb_adapter *adapter);
 static void igb_ptp_sdp_init(struct igb_adapter *adapter);
        struct igb_adapter *igb = container_of(ptp, struct igb_adapter,
                                               ptp_caps);
        struct e1000_hw *hw = &igb->hw;
-       int neg_adj = 0;
+       bool neg_adj;
        u64 rate;
        u32 inca;
 
-       if (scaled_ppm < 0) {
-               neg_adj = 1;
-               scaled_ppm = -scaled_ppm;
-       }
-       rate = scaled_ppm;
-       rate <<= 13;
-       rate = div_u64(rate, 15625);
+       neg_adj = diff_by_scaled_ppm(IGB_82580_BASE_PERIOD, scaled_ppm, &rate);
 
        inca = rate & INCVALUE_MASK;
        if (neg_adj)