[PATCH can-next 10/13] can: gs_usb: gs_update_state(): set CAN_ERR_CNT if device sends CAN error counters
Marc Kleine-Budde <[email protected]> Mon, 20 Jul 2026 15:48:11 +0200
| Newsgroups | org.kernel.vger.linux-can,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <[email protected]> |
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 <[email protected]> --- 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