All of lore.kernel.org
 help / color / mirror / Atom feed
From: Kendall Willis <k-willis@ti.com>
To: Dhruva Gole <d-gole@ti.com>,
	Markus Schneider-Pargmann <msp@baylibre.com>
Cc: Chandrasekar Ramakrishnan <rcsekar@samsung.com>,
	Marc Kleine-Budde <mkl@pengutronix.de>,
	Rob Herring <robh@kernel.org>,
	Krzysztof Kozlowski <krzk+dt@kernel.org>,
	Conor Dooley <conor+dt@kernel.org>,
	Vishal Mahaveer <vishalm@ti.com>,
	Kevin Hilman <khilman@baylibre.com>,
	Sebin Francis <sebin.francis@ti.com>,
	Akashdeep Kaur <a-kaur@ti.com>, Simon Horman <horms@kernel.org>,
	Vincent MAILHOL <mailhol.vincent@wanadoo.fr>,
	<linux-can@vger.kernel.org>, <devicetree@vger.kernel.org>,
	<linux-kernel@vger.kernel.org>
Subject: Re: [PATCH v9 4/4] can: m_can: Support pinctrl wakeup state
Date: Tue, 9 Sep 2025 13:57:55 -0500	[thread overview]
Message-ID: <ad567aed-3b8b-4ed4-bfee-e072a514558f@ti.com> (raw)
In-Reply-To: <20250904090523.4zglietnh3fvbhnr@lcpd911>

On 9/4/25 04:05, Dhruva Gole wrote:
> On Aug 20, 2025 at 14:42:28 +0200, Markus Schneider-Pargmann wrote:
>> am62 requires a wakeup flag being set in pinctrl when mcan pins acts as
> 
> Let's call it "TI AM62x SoC" or TI K3 SoCs? This commit goes into a driver so let's not assume
> everyone knows what am62 means ;)
> 
> Also nit: s/"mcan pins acts"/"mcan pins act"/
> 
>> 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 | 69 +++++++++++++++++++++++++++++++++++++++++--
>>   drivers/net/can/m_can/m_can.h |  3 ++
>>   2 files changed, 70 insertions(+), 2 deletions(-)
>>
>> diff --git a/drivers/net/can/m_can/m_can.c b/drivers/net/can/m_can/m_can.c
>> index e08fae5ddf5efa8345670dd50d50954ec5d52b29..a1fa4b2f6b6cc94e5e10259cca53bd931ab238c8 100644
>> --- a/drivers/net/can/m_can/m_can.c
>> +++ b/drivers/net/can/m_can/m_can.c
>> @@ -2249,7 +2249,26 @@ static int m_can_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
>>   		return ret;
>>   	}
>>   
>> +	if (!IS_ERR_OR_NULL(cdev->pinctrl_state_wakeup)) {
>> +		if (wol_enable)
>> +			ret = pinctrl_select_state(cdev->pinctrl, cdev->pinctrl_state_wakeup);
>> +		else
>> +			ret = pinctrl_pm_select_default_state(cdev->dev);
>> +
>> +		if (ret) {
>> +			netdev_err(cdev->net, "Failed to select pinctrl state %pE\n",
>> +				   ERR_PTR(ret));
>> +			goto err_wakeup_enable;
>> +		}
>> +	}
>> +
>>   	return 0;
>> +
>> +err_wakeup_enable:
>> +	/* Revert wakeup enable */
>> +	device_set_wakeup_enable(cdev->dev, !wol_enable);
>> +
>> +	return ret;
>>   }
>>   
>>   static const struct ethtool_ops m_can_ethtool_ops_coalescing = {
>> @@ -2377,6 +2396,42 @@ int m_can_class_get_clocks(struct m_can_classdev *cdev)
>>   }
>>   EXPORT_SYMBOL_GPL(m_can_class_get_clocks);
>>   
>> +static bool m_can_class_wakeup_pinctrl_enabled(struct m_can_classdev *class_dev)
>> +{
>> +	return device_may_wakeup(class_dev->dev) && class_dev->pinctrl_state_wakeup;
>> +}
>> +
>> +static int m_can_class_setup_optional_pinctrl(struct m_can_classdev *class_dev)
>> +{
>> +	struct device *dev = class_dev->dev;
>> +	int ret;
>> +
>> +	class_dev->pinctrl = devm_pinctrl_get(dev);
>> +	if (IS_ERR(class_dev->pinctrl)) {
>> +		ret = PTR_ERR(class_dev->pinctrl);
>> +		class_dev->pinctrl = NULL;
>> +
>> +		if (ret == -ENODEV)
>> +			return 0;
>> +
>> +		return dev_err_probe(dev, ret, "Failed to get pinctrl\n");
>> +	}
>> +
>> +	class_dev->pinctrl_state_wakeup =
>> +		pinctrl_lookup_state(class_dev->pinctrl, "wakeup");
>> +	if (IS_ERR(class_dev->pinctrl_state_wakeup)) {
>> +		ret = PTR_ERR(class_dev->pinctrl_state_wakeup);
>> +		class_dev->pinctrl_state_wakeup = NULL;
>> +
>> +		if (ret == -ENODEV)
>> +			return 0;
>> +
>> +		return dev_err_probe(dev, ret, "Failed to lookup pinctrl wakeup state\n");
>> +	}
>> +
>> +	return 0;
>> +}
>> +
>>   struct m_can_classdev *m_can_class_allocate_dev(struct device *dev,
>>   						int sizeof_priv)
>>   {
>> @@ -2418,7 +2473,15 @@ struct m_can_classdev *m_can_class_allocate_dev(struct device *dev,
>>   	m_can_of_parse_mram(class_dev, mram_config_vals);
>>   	spin_lock_init(&class_dev->tx_handling_spinlock);
>>   
>> +	ret = m_can_class_setup_optional_pinctrl(class_dev);
> 
> optional makes it sound a little confusing IMO, might make sense to call
> it something like m_can_class_configure_pinctrl or m_can_class_setup_wakeup_pinctrl

I agree it should be changed to something different. Maybe you could add 
a comment or add in the commit message denoting that configuring the 
pinctrl is optional?

> 
>> +	if (ret)
>> +		goto err_free_candev;
>> +
>>   	return class_dev;
>> +
>> +err_free_candev:
>> +	free_candev(net_dev);
>> +	return ERR_PTR(ret);
>>   }
>>   EXPORT_SYMBOL_GPL(m_can_class_allocate_dev);
>>   
>> @@ -2533,7 +2596,8 @@ int m_can_class_suspend(struct device *dev)
>>   		m_can_clk_stop(cdev);
>>   	}
>>   
>> -	pinctrl_pm_select_sleep_state(dev);
>> +	if (!m_can_class_wakeup_pinctrl_enabled(cdev))
>> +		pinctrl_pm_select_sleep_state(dev);
>>   
>>   	cdev->can.state = CAN_STATE_SLEEPING;
>>   
>> @@ -2547,7 +2611,8 @@ int m_can_class_resume(struct device *dev)
>>   	struct net_device *ndev = cdev->net;
>>   	int ret = 0;
>>   
>> -	pinctrl_pm_select_default_state(dev);
>> +	if (!m_can_class_wakeup_pinctrl_enabled(cdev))
>> +		pinctrl_pm_select_default_state(dev);
>>   
>>   	cdev->can.state = CAN_STATE_ERROR_ACTIVE;
>>   
>> diff --git a/drivers/net/can/m_can/m_can.h b/drivers/net/can/m_can/m_can.h
>> index bd4746c63af3f0a032910644dfd48a9ebb3a6168..583c7f1d005d61b3fc8587697388522993ff11a8 100644
>> --- a/drivers/net/can/m_can/m_can.h
>> +++ b/drivers/net/can/m_can/m_can.h
>> @@ -128,6 +128,9 @@ struct m_can_classdev {
>>   	struct mram_cfg mcfg[MRAM_CFG_NUM];
>>   
>>   	struct hrtimer hrtimer;
>> +
>> +	struct pinctrl *pinctrl;
>> +	struct pinctrl_state *pinctrl_state_wakeup;
>>   };
>>   
>>   struct m_can_classdev *m_can_class_allocate_dev(struct device *dev, int sizeof_priv);
>>
>> -- 
>> 2.50.1
>>
> 


      reply	other threads:[~2025-09-09 18:58 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-08-20 12:42 [PATCH v9 0/4] can: m_can: Add am62 wakeup support Markus Schneider-Pargmann
2025-08-20 12:42 ` [PATCH v9 1/4] dt-bindings: can: m_can: Add wakeup properties Markus Schneider-Pargmann
2025-08-22 14:35   ` Rob Herring
2025-08-27  8:04     ` Markus Schneider-Pargmann
2025-09-09  9:01       ` Markus Schneider-Pargmann
2025-09-02 19:59   ` Kendall Willis
2025-08-20 12:42 ` [PATCH v9 2/4] can: m_can: Map WoL to device_set_wakeup_enable Markus Schneider-Pargmann
2025-09-09 18:54   ` Kendall Willis
2025-08-20 12:42 ` [PATCH v9 3/4] can: m_can: Return ERR_PTR on error in allocation Markus Schneider-Pargmann
2025-09-04  9:08   ` Dhruva Gole
2025-09-09 18:53   ` Kendall Willis
2025-08-20 12:42 ` [PATCH v9 4/4] can: m_can: Support pinctrl wakeup state Markus Schneider-Pargmann
2025-09-04  9:05   ` Dhruva Gole
2025-09-09 18:57     ` Kendall Willis [this message]

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=ad567aed-3b8b-4ed4-bfee-e072a514558f@ti.com \
    --to=k-willis@ti.com \
    --cc=a-kaur@ti.com \
    --cc=conor+dt@kernel.org \
    --cc=d-gole@ti.com \
    --cc=devicetree@vger.kernel.org \
    --cc=horms@kernel.org \
    --cc=khilman@baylibre.com \
    --cc=krzk+dt@kernel.org \
    --cc=linux-can@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mailhol.vincent@wanadoo.fr \
    --cc=mkl@pengutronix.de \
    --cc=msp@baylibre.com \
    --cc=rcsekar@samsung.com \
    --cc=robh@kernel.org \
    --cc=sebin.francis@ti.com \
    --cc=vishalm@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.