summaryrefslogtreecommitdiff
path: root/module
diff options
context:
space:
mode:
authornorly <ny-git@enpas.org>2022-03-12 21:49:49 +0100
committernorly <ny-git@enpas.org>2022-03-12 21:49:49 +0100
commitd4ca631269f4042835bb9cab60ea5c0b433a449d (patch)
tree3a9b82d512683a1ec982817ff027df68f6745b70 /module
parent106a464ba0d7f1bf9e60d36d6d5b53b6bd1fd9f6 (diff)
Rework elm327_hw_failure()
Using es58x as a rough template
Diffstat (limited to 'module')
-rw-r--r--module/elmcan.c19
1 files changed, 10 insertions, 9 deletions
diff --git a/module/elmcan.c b/module/elmcan.c
index 01ff896..198ef51 100644
--- a/module/elmcan.c
+++ b/module/elmcan.c
@@ -319,20 +319,21 @@ static inline void elm327_hw_failure(struct elmcan *elm)
struct can_frame *frame;
struct sk_buff *skb;
+ elm->hw_failure = true;
+
+ elm->can.can_stats.bus_off++;
+ netif_stop_queue(elm->dev);
+ elm->can.state = CAN_STATE_BUS_OFF;
+ can_bus_off(elm->dev);
+
+ netdev_err(elm->dev, "ELM327 misbehaved. Blocking further communication.\n");
+
skb = alloc_can_err_skb(elm->dev, &frame);
if (!skb)
return;
- frame->data[5] = 'R';
- frame->data[6] = 'I';
- frame->data[7] = 'P';
-
+ frame->can_id |= CAN_ERR_BUSOFF;
elm327_feed_frame_to_netdev(elm, skb);
-
- netdev_err(elm->dev, "ELM327 misbehaved. Blocking further communication.\n");
-
- elm->hw_failure = true;
- can_bus_off(elm->dev);
}
/* Compare a buffer to a fixed string */