diff options
author | norly <ny-git@enpas.org> | 2022-03-12 21:49:49 +0100 |
---|---|---|
committer | norly <ny-git@enpas.org> | 2022-03-12 21:49:49 +0100 |
commit | d4ca631269f4042835bb9cab60ea5c0b433a449d (patch) | |
tree | 3a9b82d512683a1ec982817ff027df68f6745b70 /module | |
parent | 106a464ba0d7f1bf9e60d36d6d5b53b6bd1fd9f6 (diff) |
Rework elm327_hw_failure()
Using es58x as a rough template
Diffstat (limited to 'module')
-rw-r--r-- | module/elmcan.c | 19 |
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 */ |