Re: [PATCH] nfc: nxp-nci: allow GPIOs to sleep

From: Ian Ray

Date: Fri Feb 20 2026 - 08:42:08 EST


On Fri, Feb 20, 2026 at 01:16:56PM +0000, Charalampos Mitrodimas wrote:
> CAUTION: This email originated from outside of GE HealthCare. Only open links or attachments if you trust the sender. Report suspicious emails using Outlook’s “Report” button.
>
> Ian Ray <ian.ray@xxxxxxxxxxxxxxxx> writes:
>
> > Allow the firmware and enable GPIOs to sleep.
> >
> > This fixes a `WARN_ON' and allows the driver to operate GPIOs which are
> > connected to I2C GPIO expanders.
> >
> > -- >8 --
> > kernel: WARNING: CPU: 3 PID: 2636 at drivers/gpio/gpiolib.c:3880 gpiod_set_value+0x88/0x98
> > -- >8 --
> >
> > Signed-off-by: Ian Ray <ian.ray@xxxxxxxxxxxxxxxx>
> > ---
> > drivers/nfc/nxp-nci/i2c.c | 4 ++--
> > 1 file changed, 2 insertions(+), 2 deletions(-)
> >
> > diff --git a/drivers/nfc/nxp-nci/i2c.c b/drivers/nfc/nxp-nci/i2c.c
> > index 6a5ce8ff91f0..b3d34433bd14 100644
> > --- a/drivers/nfc/nxp-nci/i2c.c
> > +++ b/drivers/nfc/nxp-nci/i2c.c
> > @@ -47,8 +47,8 @@ static int nxp_nci_i2c_set_mode(void *phy_id,
> > {
> > struct nxp_nci_i2c_phy *phy = (struct nxp_nci_i2c_phy *) phy_id;
> >
> > - gpiod_set_value(phy->gpiod_fw, (mode == NXP_NCI_MODE_FW) ? 1 : 0);
> > - gpiod_set_value(phy->gpiod_en, (mode != NXP_NCI_MODE_COLD) ? 1 : 0);
> > + gpiod_set_value_cansleep(phy->gpiod_fw, (mode == NXP_NCI_MODE_FW) ? 1 : 0);
> > + gpiod_set_value_cansleep(phy->gpiod_en, (mode != NXP_NCI_MODE_COLD) ? 1 : 0);
>
> Do we need a Fixes tag here?

I think we should, yes; sorry for overlooking that.

>
> AFAICT this was introduced in
>
> 6be88670fc59 ("NFC: nxp-nci_i2c: Add I2C support to NXP NCI driver")
>
> which used gpio_set_value() instead of gpio_set_value_cansleep() from
> the beginning (that is before transitioning to gpiod_* calls in
> 43201767b44c ("NFC: nxp-nci: Convert to use GPIO descriptor").
>
> This piece of code is present on active stable trees. So you also need
> to Cc stable?

Yes, you're right, thank you.

>
> Cheers,
> C. Mitrodimas
>
> > usleep_range(10000, 15000);
> >
> > if (mode == NXP_NCI_MODE_COLD)