[PATCH can-next 10/13] can: gs_usb: gs_update_state(): set CAN_ERR_CNT if device sends CAN error counters
From: Marc Kleine-Budde
Date: Mon Jul 20 2026 - 10:25:33 EST
Some gs_usb compatible firmware send the CAN error counters in CAN error
frames, but doesn't set CAN_ERR_CNT in can_id.
Fixup the CAN error frame by setting CAN_ERR_CNT, if RX or TX error
counters are greater than 0.
Signed-off-by: Marc Kleine-Budde <mkl@xxxxxxxxxxxxxx>
---
drivers/net/can/usb/gs_usb.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/drivers/net/can/usb/gs_usb.c b/drivers/net/can/usb/gs_usb.c
index 2848cb1a75f0..186abc95c977 100644
--- a/drivers/net/can/usb/gs_usb.c
+++ b/drivers/net/can/usb/gs_usb.c
@@ -540,6 +540,10 @@ static void gs_update_state(struct gs_can *dev, struct can_frame *cf,
CAN_ERR_CRTL_RX_PASSIVE | CAN_ERR_CRTL_TX_PASSIVE |
CAN_ERR_CRTL_ACTIVE);
+ /* some firmware sends CAN error counters but doesn't set CAN_ERR_CNT, fixup */
+ if (cf->data[6] || cf->data[7])
+ cf->can_id |= CAN_ERR_CNT;
+
const enum can_state new_state = max(rx_state, tx_state);
if (new_state == dev->can.state)
--
2.53.0