}
 
 /* blink LED's for finding the this interface */
-static int gs_usb_set_phys_id(struct net_device *dev,
+static int gs_usb_set_phys_id(struct net_device *netdev,
                              enum ethtool_phys_id_state state)
 {
+       const struct gs_can *dev = netdev_priv(netdev);
        int rc = 0;
 
+       if (!(dev->feature & GS_CAN_FEATURE_IDENTIFY))
+               return -EOPNOTSUPP;
+
        switch (state) {
        case ETHTOOL_ID_ACTIVE:
-               rc = gs_usb_set_identify(dev, GS_CAN_IDENTIFY_ON);
+               rc = gs_usb_set_identify(netdev, GS_CAN_IDENTIFY_ON);
                break;
        case ETHTOOL_ID_INACTIVE:
-               rc = gs_usb_set_identify(dev, GS_CAN_IDENTIFY_OFF);
+               rc = gs_usb_set_identify(netdev, GS_CAN_IDENTIFY_OFF);
                break;
        default:
                break;
                dev->feature |= GS_CAN_FEATURE_REQ_USB_QUIRK_LPC546XX |
                        GS_CAN_FEATURE_QUIRK_BREQ_CANTACT_PRO;
 
-       if (le32_to_cpu(dconf->sw_version) > 1)
-               if (feature & GS_CAN_FEATURE_IDENTIFY)
-                       netdev->ethtool_ops = &gs_usb_ethtool_ops;
+       /* GS_CAN_FEATURE_IDENTIFY is only supported for sw_version > 1 */
+       if (!(le32_to_cpu(dconf->sw_version) > 1 &&
+             feature & GS_CAN_FEATURE_IDENTIFY))
+               dev->feature &= ~GS_CAN_FEATURE_IDENTIFY;
 
        kfree(bt_const);