summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorViktor Babrian <babrian.viktor@renyi.mta.hu>2015-01-18 20:01:40 +0100
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2015-02-05 22:36:09 -0800
commit793332a4439c431437b26ebcdef7833f46464d06 (patch)
tree4f91ef1f459006be922f870feba217925f84aee4 /drivers
parent427a5746b4215b154efb85b07781799b79f8958c (diff)
can: c_can: end pending transmission on network stop (ifdown)
commit 7ffd7b4e169d619e66928fe5d997723f2c6f1056 upstream. Put controller into init mode in network stop to end pending transmissions. The issue is observed in cases when transmitted frame is not acked. Signed-off-by: Viktor Babrian <babrian.viktor@renyi.mta.hu> Cc: linux-stable <stable@vger.kernel.org> Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/net/can/c_can/c_can.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/drivers/net/can/c_can/c_can.c b/drivers/net/can/c_can/c_can.c
index 8e78bb48f5a4..60285820f7b4 100644
--- a/drivers/net/can/c_can/c_can.c
+++ b/drivers/net/can/c_can/c_can.c
@@ -611,6 +611,10 @@ static void c_can_stop(struct net_device *dev)
struct c_can_priv *priv = netdev_priv(dev);
c_can_irq_control(priv, false);
+
+ /* put ctrl to init on stop to end ongoing transmission */
+ priv->write_reg(priv, C_CAN_CTRL_REG, CONTROL_INIT);
+
priv->can.state = CAN_STATE_STOPPED;
}