All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] surface: aggregator: propagate -EPROBE_DEFER from ssam_irq_setup()
@ 2026-10-03  4:48 Janus
  2026-10-14 10:45 ` Ilpo Järvinen
  2026-10-24  5:49 ` [PATCH v2] " Wu Enqiang
  0 siblings, 2 replies; 8+ messages in thread
From: Janus @ 2026-10-03  4:48 UTC (permalink / raw)
  To: luzmaximilian; +Cc: platform-driver-x86, janus

From: janus <janussss@163.com>

gpiod_get() can fail with -EPROBE_DEFER when the GPIO controller
providing the "ssam_wakeup-int" GPIO has not been probed yet. The
current error path falls back to fwnode_irq_get(), which returns
-EINVAL because this device only declares GPIO resources. The probe
then fails hard and is never retried.

This leaves the SSAM controller down on devices like the Surface Pro 6
when probe ordering is unfavorable: dependent ACPI devices, e.g. the
battery with its _DEP on the SAN node, are never enumerated and battery
status is missing.

Return -EPROBE_DEFER directly so that the probe is deferred until the
GPIO controller becomes available

Signed-off-by: janus <janussss@163.com>
---
 drivers/platform/surface/aggregator/controller.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/platform/surface/aggregator/controller.c b/drivers/platform/surface/aggregator/controller.c
index 6a8430cb9..4f9f4595d 100644
--- a/drivers/platform/surface/aggregator/controller.c
+++ b/drivers/platform/surface/aggregator/controller.c
@@ -2755,6 +2755,8 @@ int ssam_irq_setup(struct ssam_controller *ctrl)
 
 	gpiod = gpiod_get(dev, "ssam_wakeup-int", GPIOD_ASIS);
 	if (IS_ERR(gpiod)) {
+		if (PTR_ERR(gpiod) == -EPROBE_DEFER)
+			return -EPROBE_DEFER;
 		irq = fwnode_irq_get(dev_fwnode(dev), 0);
 	} else {
 		irq = gpiod_to_irq(gpiod);
-- 
2.55.0


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH] surface: aggregator: propagate -EPROBE_DEFER from ssam_irq_setup()
  2026-10-03  4:48 [PATCH] surface: aggregator: propagate -EPROBE_DEFER from ssam_irq_setup() Janus
@ 2026-10-14 10:45 ` Ilpo Järvinen
  2026-10-23 19:28   ` Chris Simpson
  2026-10-24  5:49 ` [PATCH v2] " Wu Enqiang
  1 sibling, 1 reply; 8+ messages in thread
From: Ilpo Järvinen @ 2026-10-14 10:45 UTC (permalink / raw)
  To: Janus; +Cc: luzmaximilian, platform-driver-x86

On Sat, 3 Oct 2026, Janus wrote:

> From: janus <janussss@163.com>
> 
> gpiod_get() can fail with -EPROBE_DEFER when the GPIO controller
> providing the "ssam_wakeup-int" GPIO has not been probed yet. The
> current error path falls back to fwnode_irq_get(), which returns
> -EINVAL because this device only declares GPIO resources. The probe
> then fails hard and is never retried.
> 
> This leaves the SSAM controller down on devices like the Surface Pro 6
> when probe ordering is unfavorable: dependent ACPI devices, e.g. the
> battery with its _DEP on the SAN node, are never enumerated and battery
> status is missing.
> 
> Return -EPROBE_DEFER directly so that the probe is deferred until the
> GPIO controller becomes available

Missing .

> 
> Signed-off-by: janus <janussss@163.com>

Using e.g. just a first name in Signed-off is not enough. Use a name which 
you would use for signing off a paper document.

For more information about Signed-off-by tag, please see:
  Documentation/process/submitting-patches.rst

> ---
>  drivers/platform/surface/aggregator/controller.c | 2 ++
>  1 file changed, 2 insertions(+)
> 
> diff --git a/drivers/platform/surface/aggregator/controller.c b/drivers/platform/surface/aggregator/controller.c
> index 6a8430cb9..4f9f4595d 100644
> --- a/drivers/platform/surface/aggregator/controller.c
> +++ b/drivers/platform/surface/aggregator/controller.c
> @@ -2755,6 +2755,8 @@ int ssam_irq_setup(struct ssam_controller *ctrl)
>  
>  	gpiod = gpiod_get(dev, "ssam_wakeup-int", GPIOD_ASIS);
>  	if (IS_ERR(gpiod)) {
> +		if (PTR_ERR(gpiod) == -EPROBE_DEFER)
> +			return -EPROBE_DEFER;

This should just pass the same error on with return PTR_ERR(gpiod).

>  		irq = fwnode_irq_get(dev_fwnode(dev), 0);
>  	} else {
>  		irq = gpiod_to_irq(gpiod);
> 

-- 
 i.


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] surface: aggregator: propagate -EPROBE_DEFER from ssam_irq_setup()
  2026-10-14 10:45 ` Ilpo Järvinen
@ 2026-10-23 19:28   ` Chris Simpson
  2026-10-26 10:42     ` Ilpo Järvinen
  0 siblings, 1 reply; 8+ messages in thread
From: Chris Simpson @ 2026-10-23 19:28 UTC (permalink / raw)
  To: ilpo.jarvinen; +Cc: janussss, luzmaximilian, platform-driver-x86

Hi,

Same failure here on a Surface Pro 9 (Tiger Lake, INTC1055 driven by
pinctrl_tigerlake as a module): whenever surface_aggregator is loaded from
the initramfs about 30 ms after /init, before udev has bound the GPIO
controller, probe ends with

  surface_serial_hub serial0-0: error -EINVAL: failed to setup IRQ

and is never retried, so Type Cover, battery and tablet-mode switch are
gone until a manual rebind. linux-surface has several reports of this
since v6.12 (linux-surface/linux-surface#2219, #1645, #2064, #2039), and
it is a regression from b27622f13172 ("platform/surface: Add OF support"),
which used to propagate the gpiod_get() error.

Janus, are you planning a v2? If not, below is a variant that follows
Ilpo's comment by using gpiod_get_optional(): only "no GPIO described"
falls back to fwnode_irq_get(), every other error including
-EPROBE_DEFER is passed on. I'm happy to send it properly (Fixes:
b27622f13172, Cc: stable, your patch credited), or to test your v2 on
the Pro 9 instead, whichever you prefer.

I've tested it on the Pro 9 (Fedora 43, 7.2.12 with the linux-surface
patches), with surface_aggregator forced into the initramfs. Unpatched,
the probe fails with the -EINVAL above and the Type Cover, battery and
tablet-mode switch are missing. Patched, the probe defers three times
and completes about 0.2 s later, with all of them present and the
device no longer listed in devices_deferred. Suspend/resume behaves as
on an unpatched kernel. The analysis and the diff were produced with an
AI coding assistant (Claude Code), and reviewed and tested by me.

Chris Simpson

--- a/drivers/platform/surface/aggregator/controller.c
+++ b/drivers/platform/surface/aggregator/controller.c
@@ -2753,12 +2753,20 @@
 	 */
 	const int irqf = IRQF_ONESHOT | IRQF_TRIGGER_RISING | IRQF_NO_AUTOEN;
 
-	gpiod = gpiod_get(dev, "ssam_wakeup-int", GPIOD_ASIS);
-	if (IS_ERR(gpiod)) {
-		irq = fwnode_irq_get(dev_fwnode(dev), 0);
-	} else {
+	/*
+	 * Only fall back to the fwnode IRQ if no wakeup GPIO is described
+	 * at all. Any other error, in particular -EPROBE_DEFER while the
+	 * GPIO controller has not been registered yet, must reach the probe.
+	 */
+	gpiod = gpiod_get_optional(dev, "ssam_wakeup-int", GPIOD_ASIS);
+	if (IS_ERR(gpiod))
+		return PTR_ERR(gpiod);
+
+	if (gpiod) {
 		irq = gpiod_to_irq(gpiod);
 		gpiod_put(gpiod);
+	} else {
+		irq = fwnode_irq_get(dev_fwnode(dev), 0);
 	}
 
 	if (irq < 0)

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PATCH v2] surface: aggregator: propagate -EPROBE_DEFER from ssam_irq_setup()
  2026-10-03  4:48 [PATCH] surface: aggregator: propagate -EPROBE_DEFER from ssam_irq_setup() Janus
  2026-10-14 10:45 ` Ilpo Järvinen
@ 2026-10-24  5:49 ` Wu Enqiang
  1 sibling, 0 replies; 8+ messages in thread
From: Wu Enqiang @ 2026-10-24  5:49 UTC (permalink / raw)
  To: luzmaximilian
  Cc: platform-driver-x86, ilpo.jarvinen, chris, Wu Enqiang, stable

gpiod_get() can fail with -EPROBE_DEFER when the GPIO controller
providing the "ssam_wakeup-int" GPIO has not been probed yet. The
current error path falls back to fwnode_irq_get(), which returns
-EINVAL because this device only declares GPIO resources. The probe
then fails hard and is never retried.

This has been reported across various Surface devices since v6.12,
including the Pro 6 and Pro 9 that were used to reproduce it. With
the SSAM controller down, dependent ACPI devices, e.g. the battery
with its _DEP on the SAN node, are never enumerated and battery
status is missing.

Use gpiod_get_optional() and propagate errors to the caller so that
probing is deferred until the GPIO controller becomes available. Only
when no wakeup GPIO is described at all, fall back to fwnode_irq_get().

Fixes: b27622f13172 ("platform/surface: Add OF support")
Reported-by: Chris Simpson <chris@nilk.net>
Link: https://lore.kernel.org/platform-driver-x86/d0bb21cc-6d3c-4526-8204-2511da51a6ac@nilk.net
Link: https://github.com/linux-surface/linux-surface/issues/2219
Tested-by: Chris Simpson <chris@nilk.net>
Tested-by: Wu Enqiang <janussss@163.com>
Cc: stable@vger.kernel.org
Signed-off-by: Wu Enqiang <janussss@163.com>
---
v2:
 * Per Ilpo's comment, pass any gpiod_get_optional() error on directly
   instead of special-casing -EPROBE_DEFER; keep the fwnode_irq_get()
   fallback only for the "no GPIO described" (NULL) case. Suggested by
   Ilpo Järvinen and matching the variant Chris Simpson tested on a
   Surface Pro 9.
 * Add missing final period (Ilpo Järvinen).
 * Use full name in Signed-off-by (Ilpo Järvinen).
 * Add Reported-by/Tested-by for Chris Simpson, and Fixes:/Cc: stable
   for the v6.12 regression he identified.
 * Note the reports span various Surface devices (linux-surface
   #2219, #1645, #2064, #2039); the Pro 6/Pro 9 are just the ones
   used to reproduce.
 * Tested on a Surface Pro 6: probe no longer fails with the -EINVAL
   "failed to setup IRQ" in dmesg, and battery plus dependent ACPI
   devices are enumerated again.
---
 drivers/platform/surface/aggregator/controller.c | 16 ++++++++++++----
 1 file changed, 12 insertions(+), 4 deletions(-)

diff --git a/drivers/platform/surface/aggregator/controller.c b/drivers/platform/surface/aggregator/controller.c
index 6a8430cb9..8846d22c6 100644
--- a/drivers/platform/surface/aggregator/controller.c
+++ b/drivers/platform/surface/aggregator/controller.c
@@ -2753,12 +2753,20 @@ int ssam_irq_setup(struct ssam_controller *ctrl)
 	 */
 	const int irqf = IRQF_ONESHOT | IRQF_TRIGGER_RISING | IRQF_NO_AUTOEN;
 
-	gpiod = gpiod_get(dev, "ssam_wakeup-int", GPIOD_ASIS);
-	if (IS_ERR(gpiod)) {
-		irq = fwnode_irq_get(dev_fwnode(dev), 0);
-	} else {
+	/*
+	 * Only fall back to the fwnode IRQ if no wakeup GPIO is described
+	 * at all. Any other error, in particular -EPROBE_DEFER while the
+	 * GPIO controller has not been registered yet, must reach the probe.
+	 */
+	gpiod = gpiod_get_optional(dev, "ssam_wakeup-int", GPIOD_ASIS);
+	if (IS_ERR(gpiod))
+		return PTR_ERR(gpiod);
+
+	if (gpiod) {
 		irq = gpiod_to_irq(gpiod);
 		gpiod_put(gpiod);
+	} else {
+		irq = fwnode_irq_get(dev_fwnode(dev), 0);
 	}
 
 	if (irq < 0)
-- 
2.55.0


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH] surface: aggregator: propagate -EPROBE_DEFER from ssam_irq_setup()
  2026-10-23 19:28   ` Chris Simpson
@ 2026-10-26 10:42     ` Ilpo Järvinen
  2026-10-26 18:23       ` Andy Shevchenko
  2026-10-26 18:35       ` Chris Simpson
  0 siblings, 2 replies; 8+ messages in thread
From: Ilpo Järvinen @ 2026-10-26 10:42 UTC (permalink / raw)
  To: Chris Simpson, Konrad Dybcio, Hans de Goede, Andy Shevchenko
  Cc: janussss, luzmaximilian, platform-driver-x86

+ Konrad, Hans, Andy.

On Fri, 23 Oct 2026, Chris Simpson wrote:

> Hi,
> 
> Same failure here on a Surface Pro 9 (Tiger Lake, INTC1055 driven by
> pinctrl_tigerlake as a module): whenever surface_aggregator is loaded from
> the initramfs about 30 ms after /init, before udev has bound the GPIO
> controller, probe ends with
> 
>   surface_serial_hub serial0-0: error -EINVAL: failed to setup IRQ
> 
> and is never retried, so Type Cover, battery and tablet-mode switch are
> gone until a manual rebind. linux-surface has several reports of this
> since v6.12 (linux-surface/linux-surface#2219, #1645, #2064, #2039), and
> it is a regression from b27622f13172 ("platform/surface: Add OF support"),
> which used to propagate the gpiod_get() error.
> 
> Janus, are you planning a v2? If not, below is a variant that follows
> Ilpo's comment by using gpiod_get_optional(): only "no GPIO described"
> falls back to fwnode_irq_get(), every other error including
> -EPROBE_DEFER is passed on. I'm happy to send it properly (Fixes:
> b27622f13172, Cc: stable, your patch credited), or to test your v2 on
> the Pro 9 instead, whichever you prefer.
> 
> I've tested it on the Pro 9 (Fedora 43, 7.2.12 with the linux-surface
> patches), with surface_aggregator forced into the initramfs. Unpatched,
> the probe fails with the -EINVAL above and the Type Cover, battery and
> tablet-mode switch are missing. Patched, the probe defers three times
> and completes about 0.2 s later, with all of them present and the
> device no longer listed in devices_deferred. Suspend/resume behaves as
> on an unpatched kernel. The analysis and the diff were produced with an
> AI coding assistant (Claude Code), and reviewed and tested by me.
> 
> Chris Simpson
> 
> --- a/drivers/platform/surface/aggregator/controller.c
> +++ b/drivers/platform/surface/aggregator/controller.c
> @@ -2753,12 +2753,20 @@
>  	 */
>  	const int irqf = IRQF_ONESHOT | IRQF_TRIGGER_RISING | IRQF_NO_AUTOEN;
>  
> -	gpiod = gpiod_get(dev, "ssam_wakeup-int", GPIOD_ASIS);
> -	if (IS_ERR(gpiod)) {
> -		irq = fwnode_irq_get(dev_fwnode(dev), 0);
> -	} else {
> +	/*
> +	 * Only fall back to the fwnode IRQ if no wakeup GPIO is described
> +	 * at all. Any other error, in particular -EPROBE_DEFER while the
> +	 * GPIO controller has not been registered yet, must reach the probe.
> +	 */
> +	gpiod = gpiod_get_optional(dev, "ssam_wakeup-int", GPIOD_ASIS);
> +	if (IS_ERR(gpiod))
> +		return PTR_ERR(gpiod);
> +
> +	if (gpiod) {
>  		irq = gpiod_to_irq(gpiod);
>  		gpiod_put(gpiod);
> +	} else {
> +		irq = fwnode_irq_get(dev_fwnode(dev), 0);

Hi,

I have to admit this was not exactly what I meant (I only meant to not 
use -Exx literal in the return statement), but now that I see this v2, 
I'm not saying your approach is wrong either (I'm left unsure).

Are there some legimate cases where error other than -EDEFER_PROBE should 
end up into this else like it previously did? The return on error was 
removed by b27622f13172 ("platform/surface: Add OF support") so I assume 
there was some good reason for that but the commit message isn't helpful 
at all... :-(

Konrad, you did that change, can you explain the reason why the return was 
removed from the error path?

-- 
 i.


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] surface: aggregator: propagate -EPROBE_DEFER from ssam_irq_setup()
  2026-10-26 10:42     ` Ilpo Järvinen
@ 2026-10-26 18:23       ` Andy Shevchenko
  2026-10-26 18:35       ` Chris Simpson
  1 sibling, 0 replies; 8+ messages in thread
From: Andy Shevchenko @ 2026-10-26 18:23 UTC (permalink / raw)
  To: Ilpo Järvinen
  Cc: Chris Simpson, Konrad Dybcio, Hans de Goede, janussss,
	luzmaximilian, platform-driver-x86

On Mon, Oct 26, 2026 at 12:42:01PM +0200, Ilpo Järvinen wrote:
> On Fri, 23 Oct 2026, Chris Simpson wrote:

> > Same failure here on a Surface Pro 9 (Tiger Lake, INTC1055 driven by
> > pinctrl_tigerlake as a module): whenever surface_aggregator is loaded from
> > the initramfs about 30 ms after /init, before udev has bound the GPIO
> > controller, probe ends with
> > 
> >   surface_serial_hub serial0-0: error -EINVAL: failed to setup IRQ
> > 
> > and is never retried, so Type Cover, battery and tablet-mode switch are
> > gone until a manual rebind. linux-surface has several reports of this
> > since v6.12 (linux-surface/linux-surface#2219, #1645, #2064, #2039), and
> > it is a regression from b27622f13172 ("platform/surface: Add OF support"),
> > which used to propagate the gpiod_get() error.
> > 
> > Janus, are you planning a v2? If not, below is a variant that follows
> > Ilpo's comment by using gpiod_get_optional(): only "no GPIO described"
> > falls back to fwnode_irq_get(), every other error including
> > -EPROBE_DEFER is passed on. I'm happy to send it properly (Fixes:
> > b27622f13172, Cc: stable, your patch credited), or to test your v2 on
> > the Pro 9 instead, whichever you prefer.
> > 
> > I've tested it on the Pro 9 (Fedora 43, 7.2.12 with the linux-surface
> > patches), with surface_aggregator forced into the initramfs. Unpatched,
> > the probe fails with the -EINVAL above and the Type Cover, battery and
> > tablet-mode switch are missing. Patched, the probe defers three times
> > and completes about 0.2 s later, with all of them present and the
> > device no longer listed in devices_deferred. Suspend/resume behaves as
> > on an unpatched kernel. The analysis and the diff were produced with an
> > AI coding assistant (Claude Code), and reviewed and tested by me.
> > 
> > Chris Simpson
> > 
> > --- a/drivers/platform/surface/aggregator/controller.c
> > +++ b/drivers/platform/surface/aggregator/controller.c
> > @@ -2753,12 +2753,20 @@
> >  	 */
> >  	const int irqf = IRQF_ONESHOT | IRQF_TRIGGER_RISING | IRQF_NO_AUTOEN;
> >  
> > -	gpiod = gpiod_get(dev, "ssam_wakeup-int", GPIOD_ASIS);
> > -	if (IS_ERR(gpiod)) {
> > -		irq = fwnode_irq_get(dev_fwnode(dev), 0);
> > -	} else {
> > +	/*
> > +	 * Only fall back to the fwnode IRQ if no wakeup GPIO is described
> > +	 * at all. Any other error, in particular -EPROBE_DEFER while the
> > +	 * GPIO controller has not been registered yet, must reach the probe.
> > +	 */
> > +	gpiod = gpiod_get_optional(dev, "ssam_wakeup-int", GPIOD_ASIS);
> > +	if (IS_ERR(gpiod))
> > +		return PTR_ERR(gpiod);
> > +
> > +	if (gpiod) {
> >  		irq = gpiod_to_irq(gpiod);
> >  		gpiod_put(gpiod);
> > +	} else {
> > +		irq = fwnode_irq_get(dev_fwnode(dev), 0);
> 
> I have to admit this was not exactly what I meant (I only meant to not 
> use -Exx literal in the return statement), but now that I see this v2, 
> I'm not saying your approach is wrong either (I'm left unsure).
> 
> Are there some legimate cases where error other than -EDEFER_PROBE should 
> end up into this else like it previously did? The return on error was 
> removed by b27622f13172 ("platform/surface: Add OF support") so I assume 
> there was some good reason for that but the commit message isn't helpful 
> at all... :-(
> 
> Konrad, you did that change, can you explain the reason why the return was 
> removed from the error path?

Looking from the code perspective I agree that the patch above seems relevant
and correct, we need to propagate all error codes in case GPIO is present,
but can't be retrieved for some reason. I would implement it a bit differently,
but it's another story.

-- 
With Best Regards,
Andy Shevchenko



^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] surface: aggregator: propagate -EPROBE_DEFER from ssam_irq_setup()
  2026-10-26 10:42     ` Ilpo Järvinen
  2026-10-26 18:23       ` Andy Shevchenko
@ 2026-10-26 18:35       ` Chris Simpson
  2026-10-26 18:40         ` Ilpo Järvinen
  1 sibling, 1 reply; 8+ messages in thread
From: Chris Simpson @ 2026-10-26 18:35 UTC (permalink / raw)
  To: Ilpo Järvinen, Konrad Dybcio, Hans de Goede, Andy Shevchenko
  Cc: janussss, luzmaximilian, platform-driver-x86

Hi Ilpo,

> Are there some legimate cases where error other than -EDEFER_PROBE should
> end up into this else like it previously did?

Two corrections to my earlier mail first. The Surface Pro 9 here is
Alder Lake (i7-1255U), not Tiger Lake; its GPIO controller, INTC1055,
is handled by pinctrl-tigerlake, which is where my mix-up came from.
And "follows Ilpo's comment" was my misreading of your review: the
gpiod_get_optional() idea was mine, sorry for attributing it to you
(v2's "Suggested by Ilpo" comes from that too).

On the question, I couldn't find such a case:

- DT: microsoft,surface-sam.yaml requires "interrupts" and has
  additionalProperties: false, and the in-tree DTS files
  (sc8280xp-microsoft-arcata, x1e80100-microsoft-romulus,
  x1-microsoft-denali, x1p42100-microsoft-sp12in) all use
  interrupts-extended. So on DT gpiod_get() returns -ENOENT, which
  gpiod_get_optional() turns into NULL, and v2 still takes the
  fwnode_irq_get() path.

- ACPI: fwnode_irq_get() ends up in acpi_irq_get(), which only looks at
  Interrupt()/IRQ() resources, not GpioInt(). On the Pro 9 (UEFI
  22.107.143) the MSHW0084 _CRS has UartSerialBusV2 plus GpioInt and
  GpioIo on pin 174 of INTC1055, and no Interrupt() or IRQ(), and the
  Surface Laptop 4 tables in linux-surface#2219 have the same layout.
  So on these two machines the fallback can only turn -EPROBE_DEFER, or
  a real GPIO error, into -EINVAL; for -EPROBE_DEFER that is the probe
  failure v2 fixes.

What I can't tell is whether Konrad had another case in mind, or whether
some other Surface model has a plain Interrupt() there; I've only looked
at these two. I'm happy to test any variant on the Pro 9. As before, I
did the analysis with Claude Code.

Chris Simpson

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] surface: aggregator: propagate -EPROBE_DEFER from ssam_irq_setup()
  2026-10-26 18:35       ` Chris Simpson
@ 2026-10-26 18:40         ` Ilpo Järvinen
  0 siblings, 0 replies; 8+ messages in thread
From: Ilpo Järvinen @ 2026-10-26 18:40 UTC (permalink / raw)
  To: Chris Simpson
  Cc: Konrad Dybcio, Hans de Goede, Andy Shevchenko, janussss,
	luzmaximilian, platform-driver-x86

On Mon, 26 Oct 2026, Chris Simpson wrote:

> Hi Ilpo,
> 
> > Are there some legimate cases where error other than -EDEFER_PROBE should
> > end up into this else like it previously did?
> 
> Two corrections to my earlier mail first. The Surface Pro 9 here is
> Alder Lake (i7-1255U), not Tiger Lake; its GPIO controller, INTC1055,
> is handled by pinctrl-tigerlake, which is where my mix-up came from.
> And "follows Ilpo's comment" was my misreading of your review: the
> gpiod_get_optional() idea was mine, sorry for attributing it to you
> (v2's "Suggested by Ilpo" comes from that too).

Np. The end result seems better even if there was misread which triggered 
that. At least sometimes misreading ends up being useful. :-)

--
 i.

> On the question, I couldn't find such a case:
> 
> - DT: microsoft,surface-sam.yaml requires "interrupts" and has
>   additionalProperties: false, and the in-tree DTS files
>   (sc8280xp-microsoft-arcata, x1e80100-microsoft-romulus,
>   x1-microsoft-denali, x1p42100-microsoft-sp12in) all use
>   interrupts-extended. So on DT gpiod_get() returns -ENOENT, which
>   gpiod_get_optional() turns into NULL, and v2 still takes the
>   fwnode_irq_get() path.
> 
> - ACPI: fwnode_irq_get() ends up in acpi_irq_get(), which only looks at
>   Interrupt()/IRQ() resources, not GpioInt(). On the Pro 9 (UEFI
>   22.107.143) the MSHW0084 _CRS has UartSerialBusV2 plus GpioInt and
>   GpioIo on pin 174 of INTC1055, and no Interrupt() or IRQ(), and the
>   Surface Laptop 4 tables in linux-surface#2219 have the same layout.
>   So on these two machines the fallback can only turn -EPROBE_DEFER, or
>   a real GPIO error, into -EINVAL; for -EPROBE_DEFER that is the probe
>   failure v2 fixes.
> 
> What I can't tell is whether Konrad had another case in mind, or whether
> some other Surface model has a plain Interrupt() there; I've only looked
> at these two. I'm happy to test any variant on the Pro 9. As before, I
> did the analysis with Claude Code.
> 
> Chris Simpson
> 

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2026-10-26 18:40 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-10-03  4:48 [PATCH] surface: aggregator: propagate -EPROBE_DEFER from ssam_irq_setup() Janus
2026-10-14 10:45 ` Ilpo Järvinen
2026-10-23 19:28   ` Chris Simpson
2026-10-26 10:42     ` Ilpo Järvinen
2026-10-26 18:23       ` Andy Shevchenko
2026-10-26 18:35       ` Chris Simpson
2026-10-26 18:40         ` Ilpo Järvinen
2026-10-24  5:49 ` [PATCH v2] " Wu Enqiang

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.