Started a rework initiated by Vincents remark about "You should not report the greatest of txerr and rxerr but the one which actually increased." Now setting CAN_ERR_CRTL_[RT]X_WARNING and CAN_ERR_CRTL_[RT]X_PASSIVE depending on REC and TEC Signed-off-by: Frank Jungclaus <frank.jungclaus@xxxxxx> --- drivers/net/can/usb/esd_usb.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/drivers/net/can/usb/esd_usb.c b/drivers/net/can/usb/esd_usb.c index 0a402a23d7ac..588caba1453b 100644 --- a/drivers/net/can/usb/esd_usb.c +++ b/drivers/net/can/usb/esd_usb.c @@ -304,11 +304,17 @@ static void esd_usb_rx_event(struct esd_usb_net_priv *priv, /* Store error in CAN protocol (location) in data[3] */ cf->data[3] = ecc & SJA1000_ECC_SEG; - if (priv->can.state == CAN_STATE_ERROR_WARNING || - priv->can.state == CAN_STATE_ERROR_PASSIVE) { - cf->data[1] = (txerr > rxerr) ? - CAN_ERR_CRTL_TX_PASSIVE : - CAN_ERR_CRTL_RX_PASSIVE; + /* Store error status of CAN-controller in data[1] */ + if (priv->can.state == CAN_STATE_ERROR_WARNING) { + if (txerr >= 96) + cf->data[1] |= CAN_ERR_CRTL_TX_WARNING; + if (rxerr >= 96) + cf->data[1] |= CAN_ERR_CRTL_RX_WARNING; + } else if (priv->can.state == CAN_STATE_ERROR_PASSIVE) { + if (txerr >= 128) + cf->data[1] |= CAN_ERR_CRTL_TX_PASSIVE; + if (rxerr >= 128) + cf->data[1] |= CAN_ERR_CRTL_RX_PASSIVE; } cf->data[6] = txerr; -- 2.25.1