return 0;
 }
 
+int efx_ethtool_get_ts_info(struct net_device *net_dev,
+                           struct ethtool_ts_info *ts_info)
+{
+       struct efx_nic *efx = netdev_priv(net_dev);
+
+       /* Software capabilities */
+       ts_info->so_timestamping = (SOF_TIMESTAMPING_RX_SOFTWARE |
+                                   SOF_TIMESTAMPING_SOFTWARE);
+       ts_info->phc_index = -1;
+
+       efx_ptp_get_ts_info(efx, ts_info);
+       return 0;
+}
+
 static int efx_ethtool_get_module_eeprom(struct net_device *net_dev,
                                         struct ethtool_eeprom *ee,
                                         u8 *data)
        .get_rxfh_indir_size    = efx_ethtool_get_rxfh_indir_size,
        .get_rxfh_indir         = efx_ethtool_get_rxfh_indir,
        .set_rxfh_indir         = efx_ethtool_set_rxfh_indir,
-       .get_ts_info            = efx_ptp_get_ts_info,
+       .get_ts_info            = efx_ethtool_get_ts_info,
        .get_module_info        = efx_ethtool_get_module_info,
        .get_module_eeprom      = efx_ethtool_get_module_eeprom,
 };
 
 struct ethtool_ts_info;
 extern void efx_ptp_probe(struct efx_nic *efx);
 extern int efx_ptp_ioctl(struct efx_nic *efx, struct ifreq *ifr, int cmd);
-extern int efx_ptp_get_ts_info(struct net_device *net_dev,
-                              struct ethtool_ts_info *ts_info);
+extern void efx_ptp_get_ts_info(struct efx_nic *efx,
+                               struct ethtool_ts_info *ts_info);
 extern bool efx_ptp_is_ptp_tx(struct efx_nic *efx, struct sk_buff *skb);
 extern int efx_ptp_tx(struct efx_nic *efx, struct sk_buff *skb);
 extern void efx_ptp_event(struct efx_nic *efx, efx_qword_t *ev);
 
        return 0;
 }
 
-int
-efx_ptp_get_ts_info(struct net_device *net_dev, struct ethtool_ts_info *ts_info)
+void efx_ptp_get_ts_info(struct efx_nic *efx, struct ethtool_ts_info *ts_info)
 {
-       struct efx_nic *efx = netdev_priv(net_dev);
        struct efx_ptp_data *ptp = efx->ptp_data;
 
        if (!ptp)
-               return -EOPNOTSUPP;
+               return;
 
-       ts_info->so_timestamping = (SOF_TIMESTAMPING_TX_HARDWARE |
-                                   SOF_TIMESTAMPING_RX_HARDWARE |
-                                   SOF_TIMESTAMPING_RAW_HARDWARE);
+       ts_info->so_timestamping |= (SOF_TIMESTAMPING_TX_HARDWARE |
+                                    SOF_TIMESTAMPING_RX_HARDWARE |
+                                    SOF_TIMESTAMPING_RAW_HARDWARE);
        ts_info->phc_index = ptp_clock_index(ptp->phc_clock);
        ts_info->tx_types = 1 << HWTSTAMP_TX_OFF | 1 << HWTSTAMP_TX_ON;
        ts_info->rx_filters = (1 << HWTSTAMP_FILTER_NONE |
                               1 << HWTSTAMP_FILTER_PTP_V2_L4_EVENT |
                               1 << HWTSTAMP_FILTER_PTP_V2_L4_SYNC |
                               1 << HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ);
-       return 0;
 }
 
 int efx_ptp_ioctl(struct efx_nic *efx, struct ifreq *ifr, int cmd)