can: kvaser_usb: Add support for ethtool set_phys_id()

Add support for ethtool set_phys_id(), to physically locate devices by
flashing a LED on the device.

Reviewed-by: Vincent Mailhol <mailhol.vincent@wanadoo.fr>
Signed-off-by: Jimmy Assarsson <extja@kvaser.com>
Link: https://patch.msgid.link/20250725123452.41-3-extja@kvaser.com
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
This commit is contained in:
Jimmy Assarsson 2025-07-25 14:34:43 +02:00 committed by Marc Kleine-Budde
parent 478248f1bc
commit 3d7a3de9eb

View File

@ -753,6 +753,31 @@ static netdev_tx_t kvaser_usb_start_xmit(struct sk_buff *skb,
return ret;
}
static int kvaser_usb_set_phys_id(struct net_device *netdev,
enum ethtool_phys_id_state state)
{
struct kvaser_usb_net_priv *priv = netdev_priv(netdev);
const struct kvaser_usb_dev_ops *ops = priv->dev->driver_info->ops;
switch (state) {
case ETHTOOL_ID_ACTIVE:
return 3; /* 3 On/Off cycles per second */
case ETHTOOL_ID_ON:
return ops->dev_set_led(priv, KVASER_USB_LED_ON, 1000);
case ETHTOOL_ID_OFF:
return ops->dev_set_led(priv, KVASER_USB_LED_OFF, 1000);
case ETHTOOL_ID_INACTIVE:
/* Turn LED off and restore standard function after 1ms */
return ops->dev_set_led(priv, KVASER_USB_LED_OFF, 1);
default:
return -EINVAL;
}
}
static const struct net_device_ops kvaser_usb_netdev_ops = {
.ndo_open = kvaser_usb_open,
.ndo_stop = kvaser_usb_close,
@ -763,6 +788,7 @@ static const struct net_device_ops kvaser_usb_netdev_ops = {
static const struct ethtool_ops kvaser_usb_ethtool_ops = {
.get_ts_info = can_ethtool_op_get_ts_info_hwts,
.set_phys_id = kvaser_usb_set_phys_id,
};
static void kvaser_usb_remove_interfaces(struct kvaser_usb *dev)