[PATCH 1/3] pinctrl: airoha: limit GPIO interrupts to interrupt-capable pins
Ahmed Naseef
naseefkm at gmail.com
Mon Aug 17 22:17:24 PDT 2026
> > +{
> > + struct airoha_pinctrl *pinctrl = gpiochip_get_data(gc);
> > + unsigned int num_irq_pins = pinctrl->num_irq_pins;
> > +
> > + if (num_irq_pins < ngpios)
> > + bitmap_clear(valid_mask, num_irq_pins, ngpios - num_irq_pins);
> > +}
>
> I'm not sure if there is something that gives a sane error log if this
> trigger. Maybe make it explicit?
>
> Either way:
> Reviewed-by: Benjamin Larsson <benjamin.larsson at genexis.eu>
Nothing logs the limit itself, the -ENXIO only surfaces at the consumer.
However Most of the gpio_irq_chip::init_valid_mask implementations in the
tree log nothing at all. Only pinctrl-baytrail does, and not for the valid
range.
Happy to make it explicit if you prefer, at probe:
if (pinctrl->num_irq_pins < AIROHA_NUM_PINS)
dev_dbg(dev, "GPIO%u and above cannot be used as interrupts\n",
pinctrl->num_irq_pins);
Thanks for the review!
Linus, since the merge window is open. Is this still worth taking for v7.3, or
would you rather it soaked in for v7.4? 2/3 has no DT ack yet either.
Ahmed
>
> > +
> > static int airoha_pinctrl_add_gpiochip(struct airoha_pinctrl *pinctrl,
> > struct platform_device *pdev)
> > {
> > @@ -362,6 +383,7 @@ static int airoha_pinctrl_add_gpiochip(struct airoha_pinctrl *pinctrl,
> > girq->default_type = IRQ_TYPE_NONE;
> > girq->handler = handle_bad_irq;
> > + girq->init_valid_mask = airoha_gpio_init_valid_mask;
> > gpio_irq_chip_set_chip(girq, &airoha_gpio_irq_chip);
> > irq = platform_get_irq(pdev, 0);
> > @@ -848,6 +870,7 @@ int airoha_pinctrl_probe(struct platform_device *pdev)
> > pinctrl->grps = data->grps;
> > pinctrl->funcs = data->funcs;
> > pinctrl->confs_info = data->confs_info;
> > + pinctrl->num_irq_pins = data->num_irq_pins;
> > err = pinctrl_enable(pinctrl->ctrl);
> > if (err)
> > diff --git a/drivers/pinctrl/airoha/pinctrl-an7563.c b/drivers/pinctrl/airoha/pinctrl-an7563.c
> > index 40cbbe90cc46..f011c6c9ccce 100644
> > --- a/drivers/pinctrl/airoha/pinctrl-an7563.c
> > +++ b/drivers/pinctrl/airoha/pinctrl-an7563.c
> > @@ -1069,6 +1069,7 @@ static const struct airoha_pinctrl_match_data pinctrl_match_data = {
> > .num_grps = ARRAY_SIZE(pinctrl_groups),
> > .funcs = pinctrl_funcs,
> > .num_funcs = ARRAY_SIZE(pinctrl_funcs),
> > + .num_irq_pins = AIROHA_NUM_PINS,
> > .confs_info = {
> > [AIROHA_PINCTRL_CONFS_PULLUP] = {
> > .confs = pinctrl_pullup_conf,
> > diff --git a/drivers/pinctrl/airoha/pinctrl-an7581.c b/drivers/pinctrl/airoha/pinctrl-an7581.c
> > index 2fcf88106e11..bfb777594811 100644
> > --- a/drivers/pinctrl/airoha/pinctrl-an7581.c
> > +++ b/drivers/pinctrl/airoha/pinctrl-an7581.c
> > @@ -1441,6 +1441,7 @@ static const struct airoha_pinctrl_match_data pinctrl_match_data = {
> > .num_grps = ARRAY_SIZE(pinctrl_groups),
> > .funcs = pinctrl_funcs,
> > .num_funcs = ARRAY_SIZE(pinctrl_funcs),
> > + .num_irq_pins = AIROHA_NUM_PINS,
> > .confs_info = {
> > [AIROHA_PINCTRL_CONFS_PULLUP] = {
> > .confs = pinctrl_pullup_conf,
> > diff --git a/drivers/pinctrl/airoha/pinctrl-an7583.c b/drivers/pinctrl/airoha/pinctrl-an7583.c
> > index 2c3a75c35915..1cd0f442ddc1 100644
> > --- a/drivers/pinctrl/airoha/pinctrl-an7583.c
> > +++ b/drivers/pinctrl/airoha/pinctrl-an7583.c
> > @@ -1471,6 +1471,7 @@ static const struct airoha_pinctrl_match_data pinctrl_match_data = {
> > .num_grps = ARRAY_SIZE(pinctrl_groups),
> > .funcs = pinctrl_funcs,
> > .num_funcs = ARRAY_SIZE(pinctrl_funcs),
> > + .num_irq_pins = AIROHA_NUM_PINS,
> > .confs_info = {
> > [AIROHA_PINCTRL_CONFS_PULLUP] = {
> > .confs = pinctrl_pullup_conf,
> > diff --git a/drivers/pinctrl/airoha/pinctrl-en7523.c b/drivers/pinctrl/airoha/pinctrl-en7523.c
> > index 5aa39bacf460..b0c5e60f0aeb 100644
> > --- a/drivers/pinctrl/airoha/pinctrl-en7523.c
> > +++ b/drivers/pinctrl/airoha/pinctrl-en7523.c
> > @@ -1113,6 +1113,7 @@ static const struct airoha_pinctrl_match_data pinctrl_match_data = {
> > .num_grps = ARRAY_SIZE(pinctrl_groups),
> > .funcs = pinctrl_funcs,
> > .num_funcs = ARRAY_SIZE(pinctrl_funcs),
> > + .num_irq_pins = AIROHA_NUM_PINS,
> > .confs_info = {
> > [AIROHA_PINCTRL_CONFS_PULLUP] = {
> > .confs = pinctrl_pullup_conf,
More information about the Linux-mediatek
mailing list