From: Markus Schneider-Pargmann <msp@baylibre.com>
To: Chandrasekar Ramakrishnan <rcsekar@samsung.com>,
Marc Kleine-Budde <mkl@pengutronix.de>,
Vincent Mailhol <mailhol.vincent@wanadoo.fr>,
"David S . Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@google.com>,
Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
Rob Herring <robh@kernel.org>,
Krzysztof Kozlowski <krzysztof.kozlowski+dt@linaro.org>,
Conor Dooley <conor+dt@kernel.org>, Nishanth Menon <nm@ti.com>,
Vignesh Raghavendra <vigneshr@ti.com>,
Tero Kristo <kristo@kernel.org>
Cc: "Vibhore Vardhan" <vibhore@ti.com>,
"Kevin Hilman" <khilman@baylibre.com>,
"Dhruva Gole" <d-gole@ti.com>,
"Martin Hundebøll" <martin@geanix.com>,
"Simon Horman" <horms@kernel.org>,
linux-can@vger.kernel.org, netdev@vger.kernel.org,
devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-arm-kernel@lists.infradead.org,
"Markus Schneider-Pargmann" <msp@baylibre.com>
Subject: [PATCH 4/7] can: m_can: Support pinctrl wakeup state
Date: Thu, 23 May 2024 09:53:44 +0200 [thread overview]
Message-ID: <20240523075347.1282395-5-msp@baylibre.com> (raw)
In-Reply-To: <20240523075347.1282395-1-msp@baylibre.com>
am62 requires a wakeup flag being set in pinctrl when mcan pins acts as
a wakeup source. Add support to select the wakeup state if WOL is
enabled.
Signed-off-by: Markus Schneider-Pargmann <msp@baylibre.com>
---
drivers/net/can/m_can/m_can.c | 20 +++++++++++++++++++-
drivers/net/can/m_can/m_can.h | 4 ++++
2 files changed, 23 insertions(+), 1 deletion(-)
diff --git a/drivers/net/can/m_can/m_can.c b/drivers/net/can/m_can/m_can.c
index 80964e403a5e..c5585dc68f2f 100644
--- a/drivers/net/can/m_can/m_can.c
+++ b/drivers/net/can/m_can/m_can.c
@@ -2140,11 +2140,21 @@ static void m_can_get_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
static int m_can_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
{
struct m_can_classdev *cdev = netdev_priv(dev);
+ struct pinctrl_state *new_pinctrl_state = NULL;
+ bool wol_enable = !!wol->wolopts & WAKE_PHY;
if ((wol->wolopts & WAKE_PHY) != wol->wolopts)
return -EINVAL;
- device_set_wakeup_enable(cdev->dev, !!wol->wolopts & WAKE_PHY);
+ if (wol_enable)
+ new_pinctrl_state = cdev->pinctrl_state_wakeup;
+ else
+ new_pinctrl_state = cdev->pinctrl_state_default;
+
+ if (!IS_ERR_OR_NULL(new_pinctrl_state))
+ pinctrl_select_state(cdev->pinctrl, new_pinctrl_state);
+
+ device_set_wakeup_enable(cdev->dev, wol_enable);
return 0;
}
@@ -2309,6 +2319,14 @@ struct m_can_classdev *m_can_class_allocate_dev(struct device *dev,
SET_NETDEV_DEV(net_dev, dev);
m_can_of_parse_mram(class_dev, mram_config_vals);
+
+ class_dev->pinctrl = devm_pinctrl_get(dev);
+ if (!IS_ERR_OR_NULL(class_dev->pinctrl)) {
+ class_dev->pinctrl_state_default =
+ pinctrl_lookup_state(class_dev->pinctrl, "default");
+ class_dev->pinctrl_state_wakeup =
+ pinctrl_lookup_state(class_dev->pinctrl, "wakeup");
+ }
out:
return class_dev;
}
diff --git a/drivers/net/can/m_can/m_can.h b/drivers/net/can/m_can/m_can.h
index 3a9edc292593..bdfbba67b336 100644
--- a/drivers/net/can/m_can/m_can.h
+++ b/drivers/net/can/m_can/m_can.h
@@ -126,6 +126,10 @@ struct m_can_classdev {
struct mram_cfg mcfg[MRAM_CFG_NUM];
struct hrtimer hrtimer;
+
+ struct pinctrl *pinctrl;
+ struct pinctrl_state *pinctrl_state_default;
+ struct pinctrl_state *pinctrl_state_wakeup;
};
struct m_can_classdev *m_can_class_allocate_dev(struct device *dev, int sizeof_priv);
--
2.43.0
WARNING: multiple messages have this Message-ID (diff)
From: Markus Schneider-Pargmann <msp@baylibre.com>
To: Chandrasekar Ramakrishnan <rcsekar@samsung.com>,
Marc Kleine-Budde <mkl@pengutronix.de>,
Vincent Mailhol <mailhol.vincent@wanadoo.fr>,
"David S . Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@google.com>,
Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
Rob Herring <robh@kernel.org>,
Krzysztof Kozlowski <krzysztof.kozlowski+dt@linaro.org>,
Conor Dooley <conor+dt@kernel.org>, Nishanth Menon <nm@ti.com>,
Vignesh Raghavendra <vigneshr@ti.com>,
Tero Kristo <kristo@kernel.org>
Cc: "Vibhore Vardhan" <vibhore@ti.com>,
"Kevin Hilman" <khilman@baylibre.com>,
"Dhruva Gole" <d-gole@ti.com>,
"Martin Hundebøll" <martin@geanix.com>,
"Simon Horman" <horms@kernel.org>,
linux-can@vger.kernel.org, netdev@vger.kernel.org,
devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-arm-kernel@lists.infradead.org,
"Markus Schneider-Pargmann" <msp@baylibre.com>
Subject: [PATCH 4/7] can: m_can: Support pinctrl wakeup state
Date: Thu, 23 May 2024 09:53:44 +0200 [thread overview]
Message-ID: <20240523075347.1282395-5-msp@baylibre.com> (raw)
In-Reply-To: <20240523075347.1282395-1-msp@baylibre.com>
am62 requires a wakeup flag being set in pinctrl when mcan pins acts as
a wakeup source. Add support to select the wakeup state if WOL is
enabled.
Signed-off-by: Markus Schneider-Pargmann <msp@baylibre.com>
---
drivers/net/can/m_can/m_can.c | 20 +++++++++++++++++++-
drivers/net/can/m_can/m_can.h | 4 ++++
2 files changed, 23 insertions(+), 1 deletion(-)
diff --git a/drivers/net/can/m_can/m_can.c b/drivers/net/can/m_can/m_can.c
index 80964e403a5e..c5585dc68f2f 100644
--- a/drivers/net/can/m_can/m_can.c
+++ b/drivers/net/can/m_can/m_can.c
@@ -2140,11 +2140,21 @@ static void m_can_get_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
static int m_can_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
{
struct m_can_classdev *cdev = netdev_priv(dev);
+ struct pinctrl_state *new_pinctrl_state = NULL;
+ bool wol_enable = !!wol->wolopts & WAKE_PHY;
if ((wol->wolopts & WAKE_PHY) != wol->wolopts)
return -EINVAL;
- device_set_wakeup_enable(cdev->dev, !!wol->wolopts & WAKE_PHY);
+ if (wol_enable)
+ new_pinctrl_state = cdev->pinctrl_state_wakeup;
+ else
+ new_pinctrl_state = cdev->pinctrl_state_default;
+
+ if (!IS_ERR_OR_NULL(new_pinctrl_state))
+ pinctrl_select_state(cdev->pinctrl, new_pinctrl_state);
+
+ device_set_wakeup_enable(cdev->dev, wol_enable);
return 0;
}
@@ -2309,6 +2319,14 @@ struct m_can_classdev *m_can_class_allocate_dev(struct device *dev,
SET_NETDEV_DEV(net_dev, dev);
m_can_of_parse_mram(class_dev, mram_config_vals);
+
+ class_dev->pinctrl = devm_pinctrl_get(dev);
+ if (!IS_ERR_OR_NULL(class_dev->pinctrl)) {
+ class_dev->pinctrl_state_default =
+ pinctrl_lookup_state(class_dev->pinctrl, "default");
+ class_dev->pinctrl_state_wakeup =
+ pinctrl_lookup_state(class_dev->pinctrl, "wakeup");
+ }
out:
return class_dev;
}
diff --git a/drivers/net/can/m_can/m_can.h b/drivers/net/can/m_can/m_can.h
index 3a9edc292593..bdfbba67b336 100644
--- a/drivers/net/can/m_can/m_can.h
+++ b/drivers/net/can/m_can/m_can.h
@@ -126,6 +126,10 @@ struct m_can_classdev {
struct mram_cfg mcfg[MRAM_CFG_NUM];
struct hrtimer hrtimer;
+
+ struct pinctrl *pinctrl;
+ struct pinctrl_state *pinctrl_state_default;
+ struct pinctrl_state *pinctrl_state_wakeup;
};
struct m_can_classdev *m_can_class_allocate_dev(struct device *dev, int sizeof_priv);
--
2.43.0
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2024-05-23 7:54 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-05-23 7:53 [PATCH 0/7] can: m_can: Add am62 wakeup support Markus Schneider-Pargmann
2024-05-23 7:53 ` Markus Schneider-Pargmann
2024-05-23 7:53 ` [PATCH 1/7] dt-bindings: can: m_can: Add wakeup-source property Markus Schneider-Pargmann
2024-05-23 7:53 ` Markus Schneider-Pargmann
2024-05-25 15:52 ` Conor Dooley
2024-05-25 15:52 ` Conor Dooley
2024-05-23 7:53 ` [PATCH 2/7] dt-bindings: can: m_can: Add wakeup pinctrl state Markus Schneider-Pargmann
2024-05-23 7:53 ` Markus Schneider-Pargmann
2024-05-23 7:53 ` [PATCH 3/7] can: m_can: Map WoL to device_set_wakeup_enable Markus Schneider-Pargmann
2024-05-23 7:53 ` Markus Schneider-Pargmann
2024-06-20 12:26 ` Marc Kleine-Budde
2024-05-23 7:53 ` Markus Schneider-Pargmann [this message]
2024-05-23 7:53 ` [PATCH 4/7] can: m_can: Support pinctrl wakeup state Markus Schneider-Pargmann
2024-05-23 7:53 ` [PATCH 5/7] arm64: dts: ti: k3-am62: Mark mcu_mcan0/1 as wakeup-source Markus Schneider-Pargmann
2024-05-23 7:53 ` Markus Schneider-Pargmann
2024-05-23 7:53 ` [PATCH 6/7] arm64: dts: ti: k3-am62a-mcu: " Markus Schneider-Pargmann
2024-05-23 7:53 ` Markus Schneider-Pargmann
2024-05-23 7:53 ` [PATCH 7/7] arm64: dts: ti: k3-am62p-mcu: " Markus Schneider-Pargmann
2024-05-23 7:53 ` Markus Schneider-Pargmann
2024-05-24 5:48 ` Nishanth Menon
2024-05-24 5:48 ` Nishanth Menon
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240523075347.1282395-5-msp@baylibre.com \
--to=msp@baylibre.com \
--cc=conor+dt@kernel.org \
--cc=d-gole@ti.com \
--cc=davem@davemloft.net \
--cc=devicetree@vger.kernel.org \
--cc=edumazet@google.com \
--cc=horms@kernel.org \
--cc=khilman@baylibre.com \
--cc=kristo@kernel.org \
--cc=krzysztof.kozlowski+dt@linaro.org \
--cc=kuba@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-can@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mailhol.vincent@wanadoo.fr \
--cc=martin@geanix.com \
--cc=mkl@pengutronix.de \
--cc=netdev@vger.kernel.org \
--cc=nm@ti.com \
--cc=pabeni@redhat.com \
--cc=rcsekar@samsung.com \
--cc=robh@kernel.org \
--cc=vibhore@ti.com \
--cc=vigneshr@ti.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.