can: gs_usb: gs_usb_set_phys_id(): return with error if identify is not supported
Until commit409c188c57
("can: tree-wide: advertise software timestamping capabilities") the ethtool_ops was only assigned for devices which support the GS_CAN_FEATURE_IDENTIFY feature. That commit assigns ethtool_ops unconditionally. This results on controllers without GS_CAN_FEATURE_IDENTIFY support for the following ethtool error: | $ ethtool -p can0 1 | Cannot identify NIC: Broken pipe Restore the correct error value by checking for GS_CAN_FEATURE_IDENTIFY in the gs_usb_set_phys_id() function. | $ ethtool -p can0 1 | Cannot identify NIC: Operation not supported While there use the variable "netdev" for the "struct net_device" pointer and "dev" for the "struct gs_can" pointer as in the rest of the driver. Fixes:409c188c57
("can: tree-wide: advertise software timestamping capabilities") Link: http://lore.kernel.org/all/20220818143853.2671854-1-mkl@pengutronix.de Cc: Vincent Mailhol <mailhol.vincent@wanadoo.fr> Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
This commit is contained in:
parent
5440428b3d
commit
0f2211f1cf
drivers/net/can/usb
|
@ -925,17 +925,21 @@ static int gs_usb_set_identify(struct net_device *netdev, bool do_identify)
|
|||
}
|
||||
|
||||
/* 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;
|
||||
|
@ -1072,9 +1076,10 @@ static struct gs_can *gs_make_candev(unsigned int channel,
|
|||
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);
|
||||
|
||||
|
|
Loading…
Reference in New Issue