diff options
Diffstat (limited to 'drivers/net/can/rcar')
| -rw-r--r-- | drivers/net/can/rcar/rcar_can.c | 20 | 
1 files changed, 12 insertions, 8 deletions
| diff --git a/drivers/net/can/rcar/rcar_can.c b/drivers/net/can/rcar/rcar_can.c index 00e4533c8bdd..8999ec9455ec 100644 --- a/drivers/net/can/rcar/rcar_can.c +++ b/drivers/net/can/rcar/rcar_can.c @@ -846,10 +846,12 @@ static int __maybe_unused rcar_can_suspend(struct device *dev)  	struct rcar_can_priv *priv = netdev_priv(ndev);  	u16 ctlr; -	if (netif_running(ndev)) { -		netif_stop_queue(ndev); -		netif_device_detach(ndev); -	} +	if (!netif_running(ndev)) +		return 0; + +	netif_stop_queue(ndev); +	netif_device_detach(ndev); +  	ctlr = readw(&priv->regs->ctlr);  	ctlr |= RCAR_CAN_CTLR_CANM_HALT;  	writew(ctlr, &priv->regs->ctlr); @@ -868,6 +870,9 @@ static int __maybe_unused rcar_can_resume(struct device *dev)  	u16 ctlr;  	int err; +	if (!netif_running(ndev)) +		return 0; +  	err = clk_enable(priv->clk);  	if (err) {  		netdev_err(ndev, "clk_enable() failed, error %d\n", err); @@ -881,10 +886,9 @@ static int __maybe_unused rcar_can_resume(struct device *dev)  	writew(ctlr, &priv->regs->ctlr);  	priv->can.state = CAN_STATE_ERROR_ACTIVE; -	if (netif_running(ndev)) { -		netif_device_attach(ndev); -		netif_start_queue(ndev); -	} +	netif_device_attach(ndev); +	netif_start_queue(ndev); +  	return 0;  } |