linux-can.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Marc Kleine-Budde <mkl@pengutronix.de>
To: netdev@vger.kernel.org
Cc: davem@davemloft.net, kuba@kernel.org, linux-can@vger.kernel.org,
	kernel@pengutronix.de,
	"Markus Schneider-Pargmann (TI.com)" <msp@baylibre.com>,
	Vincent Mailhol <mailhol.vincent@wanadoo.fr>,
	Kendall Willis <k-willis@ti.com>,
	Marc Kleine-Budde <mkl@pengutronix.de>
Subject: [PATCH net-next 04/13] can: m_can: Map WoL to device_set_wakeup_enable
Date: Fri, 17 Oct 2025 17:04:12 +0200	[thread overview]
Message-ID: <20251017150819.1415685-5-mkl@pengutronix.de> (raw)
In-Reply-To: <20251017150819.1415685-1-mkl@pengutronix.de>

From: "Markus Schneider-Pargmann (TI.com)" <msp@baylibre.com>

In some devices the pins of the m_can module can act as a wakeup source.
This patch helps do that by connecting the PHY_WAKE WoL option to
device_set_wakeup_enable. By marking this device as being wakeup
enabled, this setting can be used by platform code to decide which
sleep or poweroff mode to use.

Also this prepares the driver for the next patch in which the pinctrl
settings are changed depending on the desired wakeup source.

Reviewed-by: Vincent Mailhol <mailhol.vincent@wanadoo.fr>
Reviewed-by: Kendall Willis <k-willis@ti.com>
Signed-off-by: Markus Schneider-Pargmann (TI.com) <msp@baylibre.com>
Link: https://patch.msgid.link/20251001-topic-mcan-wakeup-source-v6-12-v10-2-4ab508ac5d1e@baylibre.com
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
---
 drivers/net/can/m_can/m_can.c | 37 +++++++++++++++++++++++++++++++++++
 1 file changed, 37 insertions(+)

diff --git a/drivers/net/can/m_can/m_can.c b/drivers/net/can/m_can/m_can.c
index 873f5991fc5a..f00bdec3246a 100644
--- a/drivers/net/can/m_can/m_can.c
+++ b/drivers/net/can/m_can/m_can.c
@@ -2238,6 +2238,36 @@ static int m_can_set_coalesce(struct net_device *dev,
 	return 0;
 }
 
+static void m_can_get_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
+{
+	struct m_can_classdev *cdev = netdev_priv(dev);
+
+	wol->supported = device_can_wakeup(cdev->dev) ? WAKE_PHY : 0;
+	wol->wolopts = device_may_wakeup(cdev->dev) ? WAKE_PHY : 0;
+}
+
+static int m_can_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
+{
+	struct m_can_classdev *cdev = netdev_priv(dev);
+	bool wol_enable = !!(wol->wolopts & WAKE_PHY);
+	int ret;
+
+	if (wol->wolopts & ~WAKE_PHY)
+		return -EINVAL;
+
+	if (wol_enable == device_may_wakeup(cdev->dev))
+		return 0;
+
+	ret = device_set_wakeup_enable(cdev->dev, wol_enable);
+	if (ret) {
+		netdev_err(cdev->net, "Failed to set wakeup enable %pE\n",
+			   ERR_PTR(ret));
+		return ret;
+	}
+
+	return 0;
+}
+
 static const struct ethtool_ops m_can_ethtool_ops_coalescing = {
 	.supported_coalesce_params = ETHTOOL_COALESCE_RX_USECS_IRQ |
 		ETHTOOL_COALESCE_RX_MAX_FRAMES_IRQ |
@@ -2247,10 +2277,14 @@ static const struct ethtool_ops m_can_ethtool_ops_coalescing = {
 	.get_ts_info = ethtool_op_get_ts_info,
 	.get_coalesce = m_can_get_coalesce,
 	.set_coalesce = m_can_set_coalesce,
+	.get_wol = m_can_get_wol,
+	.set_wol = m_can_set_wol,
 };
 
 static const struct ethtool_ops m_can_ethtool_ops = {
 	.get_ts_info = ethtool_op_get_ts_info,
+	.get_wol = m_can_get_wol,
+	.set_wol = m_can_set_wol,
 };
 
 static int register_m_can_dev(struct m_can_classdev *cdev)
@@ -2377,6 +2411,9 @@ struct m_can_classdev *m_can_class_allocate_dev(struct device *dev,
 		goto out;
 	}
 
+	if (dev->of_node && of_property_read_bool(dev->of_node, "wakeup-source"))
+		device_set_wakeup_capable(dev, true);
+
 	/* Get TX FIFO size
 	 * Defines the total amount of echo buffers for loopback
 	 */
-- 
2.51.0


  parent reply	other threads:[~2025-10-17 15:08 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-10-17 15:04 [PATCH net-next 0/13] pull-request: can-next 2025-10-17 Marc Kleine-Budde
2025-10-17 15:04 ` [PATCH net-next 01/13] can: m_can: add support for optional reset Marc Kleine-Budde
2025-10-21  1:50   ` patchwork-bot+netdevbpf
2025-10-17 15:04 ` [PATCH net-next 02/13] can: treewide: remove can_change_mtu() Marc Kleine-Budde
2025-10-17 15:04 ` [PATCH net-next 03/13] dt-bindings: can: m_can: Add wakeup properties Marc Kleine-Budde
2025-10-17 15:04 ` Marc Kleine-Budde [this message]
2025-10-17 15:04 ` [PATCH net-next 05/13] can: m_can: Return ERR_PTR on error in allocation Marc Kleine-Budde
2025-10-17 15:04 ` [PATCH net-next 06/13] can: m_can: Support pinctrl wakeup state Marc Kleine-Budde
2025-10-17 15:04 ` [PATCH net-next 07/13] can: m_can: m_can_init_ram(): make static Marc Kleine-Budde
2025-10-17 15:04 ` [PATCH net-next 08/13] can: m_can: hrtimer_callback(): rename to m_can_polling_timer() Marc Kleine-Budde
2025-10-17 15:04 ` [PATCH net-next 09/13] net: m_can: convert dev_{dbg,info,err} -> netdev_{dbg,info,err} Marc Kleine-Budde
2025-10-17 15:04 ` [PATCH net-next 10/13] can: m_can: m_can_interrupt_enable(): use m_can_write() instead of open coding it Marc Kleine-Budde
2025-10-17 15:04 ` [PATCH net-next 11/13] can: m_can: m_can_class_register(): remove error message in case devm_kzalloc() fails Marc Kleine-Budde
2025-10-17 15:04 ` [PATCH net-next 12/13] can: m_can: m_can_tx_submit(): remove unneeded sanity checks Marc Kleine-Budde
2025-10-17 15:04 ` [PATCH net-next 13/13] can: m_can: m_can_get_berr_counter(): don't wake up controller if interface is down Marc Kleine-Budde

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=20251017150819.1415685-5-mkl@pengutronix.de \
    --to=mkl@pengutronix.de \
    --cc=davem@davemloft.net \
    --cc=k-willis@ti.com \
    --cc=kernel@pengutronix.de \
    --cc=kuba@kernel.org \
    --cc=linux-can@vger.kernel.org \
    --cc=mailhol.vincent@wanadoo.fr \
    --cc=msp@baylibre.com \
    --cc=netdev@vger.kernel.org \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).