| From fbaad9d636865fd524446399e06cfd065058902a Mon Sep 17 00:00:00 2001 |
| From: Jeroen Hofstee <jhofstee@victronenergy.com> |
| Date: Wed, 25 Sep 2019 08:58:45 +0000 |
| Subject: [PATCH] can: peak_usb: report bus recovery as well |
| |
| commit 128a1b87d3ceb2ba449d5aadb222fe22395adeb0 upstream. |
| |
| While the state changes are reported when the error counters increase |
| and decrease, there is no event when the bus recovers and the error |
| counters decrease again. So add those as well. |
| |
| Change the state going downward to be ERROR_PASSIVE -> ERROR_WARNING -> |
| ERROR_ACTIVE instead of directly to ERROR_ACTIVE again. |
| |
| Signed-off-by: Jeroen Hofstee <jhofstee@victronenergy.com> |
| Cc: Stephane Grosjean <s.grosjean@peak-system.com> |
| Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/drivers/net/can/usb/peak_usb/pcan_usb.c b/drivers/net/can/usb/peak_usb/pcan_usb.c |
| index d5eaebb0d4d1..5639f2aaed84 100644 |
| --- a/drivers/net/can/usb/peak_usb/pcan_usb.c |
| +++ b/drivers/net/can/usb/peak_usb/pcan_usb.c |
| @@ -436,8 +436,8 @@ static int pcan_usb_decode_error(struct pcan_usb_msg_context *mc, u8 n, |
| } |
| if ((n & PCAN_USB_ERROR_BUS_LIGHT) == 0) { |
| /* no error (back to active state) */ |
| - mc->pdev->dev.can.state = CAN_STATE_ERROR_ACTIVE; |
| - return 0; |
| + new_state = CAN_STATE_ERROR_ACTIVE; |
| + break; |
| } |
| break; |
| |
| @@ -460,9 +460,9 @@ static int pcan_usb_decode_error(struct pcan_usb_msg_context *mc, u8 n, |
| } |
| |
| if ((n & PCAN_USB_ERROR_BUS_HEAVY) == 0) { |
| - /* no error (back to active state) */ |
| - mc->pdev->dev.can.state = CAN_STATE_ERROR_ACTIVE; |
| - return 0; |
| + /* no error (back to warning state) */ |
| + new_state = CAN_STATE_ERROR_WARNING; |
| + break; |
| } |
| break; |
| |
| @@ -501,6 +501,11 @@ static int pcan_usb_decode_error(struct pcan_usb_msg_context *mc, u8 n, |
| mc->pdev->dev.can.can_stats.error_warning++; |
| break; |
| |
| + case CAN_STATE_ERROR_ACTIVE: |
| + cf->can_id |= CAN_ERR_CRTL; |
| + cf->data[1] = CAN_ERR_CRTL_ACTIVE; |
| + break; |
| + |
| default: |
| /* CAN_STATE_MAX (trick to handle other errors) */ |
| cf->can_id |= CAN_ERR_CRTL; |
| -- |
| 2.7.4 |
| |