> -----Original Message----- > From: Neeraj Sanjay Kale <neeraj.sanjaykale@xxxxxxx> > Sent: Monday, August 4, 2025 6:30 PM > To: marcel@xxxxxxxxxxxx; luiz.dentz@xxxxxxxxx > Cc: linux-bluetooth@xxxxxxxxxxxxxxx; linux-kernel@xxxxxxxxxxxxxxx; > Amitkumar Karwar <amitkumar.karwar@xxxxxxx>; Sherry Sun > <sherry.sun@xxxxxxx>; Neeraj Sanjay Kale <neeraj.sanjaykale@xxxxxxx> > Subject: [PATCH v2] Bluetooth: btnxpuart: Uses threaded IRQ for host wakeup > handling > > This replaces devm_request_irq() with devm_request_threaded_irq(). > > On iMX93 11x11 EVK platform, the BT chip's BT_WAKE_OUT pin is connected > to an I2C GPIO expander instead of directly been connected to iMX GPIO. > > When I2C GPIO expander's (PCAL6524) host driver receives an interrupt on > it's INTR line, the driver's interrupt handler needs to query the interrupt > source with PCAL6524 first, and then call the actual interrupt handler, in this > case the IRQ handler in BTNXPUART. > > In order to handle interrupts when such I2C GPIO expanders are between the > host and interrupt source, devm_request_threaded_irq() is needed. > > This commit also removes the IRQF_TRIGGER_FALLING flag, to allow setting > the IRQ trigger type from the device tree setting instead of hardcoding in the > driver. > > Signed-off-by: Neeraj Sanjay Kale <neeraj.sanjaykale@xxxxxxx> Reviewed-by: Sherry Sun <sherry.sun@xxxxxxx> Best Regards Sherry > --- > v2: Add reason for removing IRQF_TRIGGER_FALLING in commit message. > (Sherry Sun) > --- > drivers/bluetooth/btnxpuart.c | 8 ++++---- > 1 file changed, 4 insertions(+), 4 deletions(-) > > diff --git a/drivers/bluetooth/btnxpuart.c b/drivers/bluetooth/btnxpuart.c > index 73a4a325c867..76e7f857fb7d 100644 > --- a/drivers/bluetooth/btnxpuart.c > +++ b/drivers/bluetooth/btnxpuart.c > @@ -543,10 +543,10 @@ static int ps_setup(struct hci_dev *hdev) > } > > if (psdata->wakeup_source) { > - ret = devm_request_irq(&serdev->dev, psdata->irq_handler, > - ps_host_wakeup_irq_handler, > - IRQF_ONESHOT | > IRQF_TRIGGER_FALLING, > - dev_name(&serdev->dev), nxpdev); > + ret = devm_request_threaded_irq(&serdev->dev, psdata- > >irq_handler, > + NULL, > ps_host_wakeup_irq_handler, > + IRQF_ONESHOT, > + dev_name(&serdev->dev), > nxpdev); > if (ret) > bt_dev_info(hdev, "error setting wakeup IRQ handler, > ignoring\n"); > disable_irq(psdata->irq_handler); > -- > 2.34.1