Re: [PATCH] usb: typec: fusb302: Switch to threaded IRQ handler

From: Heikki Krogerus

Date: Thu Mar 12 2026 - 05:11:50 EST


Adding Hans and Yongbo,

Wed, Mar 11, 2026 at 06:57:12PM +0400, Alexey Charkov wrote:
> FUSB302 fails to probe with -EINVAL if its interrupt line is connected via
> an I2C GPIO expander, such as TI TCA6416.
>
> Switch the interrupt handler to a threaded one, which also works behind
> such GPIO expanders.
>
> Cc: stable@xxxxxxxxxxxxxxx
> Fixes: 309b6341d557 ("usb: typec: fusb302: Revert incorrect threaded irq fix")
> Signed-off-by: Alexey Charkov <alchark@xxxxxxxxxxx>
> ---
> drivers/usb/typec/tcpm/fusb302.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/usb/typec/tcpm/fusb302.c b/drivers/usb/typec/tcpm/fusb302.c
> index 19ff8217818e..4f1f24737051 100644
> --- a/drivers/usb/typec/tcpm/fusb302.c
> +++ b/drivers/usb/typec/tcpm/fusb302.c
> @@ -1755,8 +1755,8 @@ static int fusb302_probe(struct i2c_client *client)
> goto destroy_workqueue;
> }
>
> - ret = request_irq(chip->gpio_int_n_irq, fusb302_irq_intn,
> - IRQF_TRIGGER_LOW, "fsc_interrupt_int_n", chip);
> + ret = request_threaded_irq(chip->gpio_int_n_irq, NULL, fusb302_irq_intn,
> + IRQF_TRIGGER_LOW, "fsc_interrupt_int_n", chip);
> if (ret < 0) {
> dev_err(dev, "cannot request IRQ for GPIO Int_N, ret=%d", ret);
> goto tcpm_unregister_port;

While this looks okay to me, since this is now being changed back and
forth, let's look at it a bit more carefully.

Sebastian, Yongbo and Hans. I would really appreciate if you could
check this, and give you ack if it's okay.

Br,

--
heikki