Skip to content

Commit

Permalink
can: c_can: Disable pins when CAN interface is down
Browse files Browse the repository at this point in the history
DRA7 CAN IP suffers from a problem which causes it to be prevented
from fully turning OFF (i.e. stuck in transition) if the module was
disabled while there was traffic on the CAN_RX line.

To work around this issue we select the SLEEP pin state by default
on probe and use the DEFAULT pin state on CAN up and back to the
SLEEP pin state on CAN down.

Signed-off-by: Roger Quadros <rogerq@ti.com>
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
  • Loading branch information
Roger Quadros authored and Marc Kleine-Budde committed Nov 17, 2014
1 parent 0741bfb commit 3973c52
Showing 1 changed file with 13 additions and 0 deletions.
13 changes: 13 additions & 0 deletions drivers/net/can/c_can/c_can.c
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
#include <linux/list.h>
#include <linux/io.h>
#include <linux/pm_runtime.h>
#include <linux/pinctrl/consumer.h>

#include <linux/can.h>
#include <linux/can/dev.h>
Expand Down Expand Up @@ -603,6 +604,8 @@ static int c_can_start(struct net_device *dev)

priv->can.state = CAN_STATE_ERROR_ACTIVE;

/* activate pins */
pinctrl_pm_select_default_state(dev->dev.parent);
return 0;
}

Expand All @@ -611,6 +614,9 @@ static void c_can_stop(struct net_device *dev)
struct c_can_priv *priv = netdev_priv(dev);

c_can_irq_control(priv, false);

/* deactivate pins */
pinctrl_pm_select_sleep_state(dev->dev.parent);
priv->can.state = CAN_STATE_STOPPED;
}

Expand Down Expand Up @@ -1244,6 +1250,13 @@ int register_c_can_dev(struct net_device *dev)
struct c_can_priv *priv = netdev_priv(dev);
int err;

/* Deactivate pins to prevent DRA7 DCAN IP from being
* stuck in transition when module is disabled.
* Pins are activated in c_can_start() and deactivated
* in c_can_stop()
*/
pinctrl_pm_select_sleep_state(dev->dev.parent);

c_can_pm_runtime_enable(priv);

dev->flags |= IFF_ECHO; /* we support local echo */
Expand Down

0 comments on commit 3973c52

Please sign in to comment.