All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] can: Fix bug in suspend/resume
@ 2014-11-13  6:58 ` Kedareswara rao Appana
  0 siblings, 0 replies; 18+ messages in thread
From: Kedareswara rao Appana @ 2014-11-13  6:58 UTC (permalink / raw)
  To: wg, mkl, michal.simek, soren.brinkmann, grant.likely, robh+dt
  Cc: devicetree, netdev, linux-kernel, linux-can,
	Kedareswara rao Appana, linux-arm-kernel

When accessing the priv structure use container_of instead of dev_get_drvdata.
Enable the clocks in the suspend before accessing the registers of the CAN.

Signed-off-by: Kedareswara rao Appana <appanad@xilinx.com>
---
 drivers/net/can/xilinx_can.c |   20 ++++++++++++++++++--
 1 files changed, 18 insertions(+), 2 deletions(-)

diff --git a/drivers/net/can/xilinx_can.c b/drivers/net/can/xilinx_can.c
index 5e8b560..63ef645 100644
--- a/drivers/net/can/xilinx_can.c
+++ b/drivers/net/can/xilinx_can.c
@@ -972,15 +972,30 @@ static const struct net_device_ops xcan_netdev_ops = {
  */
 static int __maybe_unused xcan_suspend(struct device *dev)
 {
-	struct platform_device *pdev = dev_get_drvdata(dev);
+	struct platform_device *pdev = container_of(dev,
+			struct platform_device, dev);
 	struct net_device *ndev = platform_get_drvdata(pdev);
 	struct xcan_priv *priv = netdev_priv(ndev);
+	int ret;
 
 	if (netif_running(ndev)) {
 		netif_stop_queue(ndev);
 		netif_device_detach(ndev);
 	}
 
+	ret = clk_prepare_enable(priv->can_clk);
+	if (ret) {
+		dev_err(dev, "unable to enable device clock\n");
+		return ret;
+	}
+
+	ret = clk_prepare_enable(priv->bus_clk);
+	if (ret) {
+		dev_err(dev, "unable to enable bus clock\n");
+		clk_disable_unprepare(priv->can_clk);
+		return ret;
+	}
+
 	priv->write_reg(priv, XCAN_MSR_OFFSET, XCAN_MSR_SLEEP_MASK);
 	priv->can.state = CAN_STATE_SLEEPING;
 
@@ -999,7 +1014,8 @@ static int __maybe_unused xcan_suspend(struct device *dev)
  */
 static int __maybe_unused xcan_resume(struct device *dev)
 {
-	struct platform_device *pdev = dev_get_drvdata(dev);
+	struct platform_device *pdev = container_of(dev,
+			struct platform_device, dev);
 	struct net_device *ndev = platform_get_drvdata(pdev);
 	struct xcan_priv *priv = netdev_priv(ndev);
 	int ret;
-- 
1.7.4

^ permalink raw reply related	[flat|nested] 18+ messages in thread

end of thread, other threads:[~2014-11-13 12:03 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-11-13  6:58 [PATCH] can: Fix bug in suspend/resume Kedareswara rao Appana
2014-11-13  6:58 ` Kedareswara rao Appana
2014-11-13  6:58 ` Kedareswara rao Appana
2014-11-13  6:58 ` Kedareswara rao Appana
2014-11-13 10:15 ` Marc Kleine-Budde
2014-11-13 10:15   ` Marc Kleine-Budde
2014-11-13 10:46   ` Marc Kleine-Budde
2014-11-13 10:46     ` Marc Kleine-Budde
     [not found]     ` <54648BF4.60007-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>
2014-11-13 10:58       ` Appana Durga Kedareswara Rao
2014-11-13 10:58         ` Appana Durga Kedareswara Rao
2014-11-13 10:58         ` Appana Durga Kedareswara Rao
2014-11-13 11:32         ` Lothar Waßmann
2014-11-13 11:32           ` Lothar Waßmann
2014-11-13 12:03           ` Marc Kleine-Budde
2014-11-13 12:03             ` Marc Kleine-Budde
2014-11-13 11:01     ` Appana Durga Kedareswara Rao
2014-11-13 11:01       ` Appana Durga Kedareswara Rao
2014-11-13 11:01       ` Appana Durga Kedareswara Rao

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.