drivers/platform/x86/x86-android-tablets/core.c | 35 +++++++++++++++----- drivers/platform/x86/x86-android-tablets/lenovo.c | 37 +++++++--------------- .../x86/x86-android-tablets/x86-android-tablets.h | 2 ++ 3 files changed, 40 insertions(+), 34 deletions(-)
When gpiolib dropped name-against-label matching in favor of firmware node
identity mapping, lookups referencing unattached software nodes (such as
arizona and gpio_crystalcove in x86-android-tablets) stopped working.
This series fixes the lookups and cleans up redundant software node
registrations on Lenovo tablets:
- Point Arizona GPIO property entries directly to the codec device software
node, which is attached to the parent device.
- Hold a device reference in gpio_secondary_fwnode_init() to ensure safety
during devres action teardown.
- Generalize gpio_secondary_fwnode_init() to accept a node group argument
and use it to attach crystalcove_gpiochip_node as a secondary firmware
node to INT33FD:00 on Lenovo Yoga Tab 2 models.
- Drop redundant swnode group registrations on Lenovo Yoga Tab 3 and
Yoga Tab 2 models where codec software nodes are already registered when
attached to their respective devices.
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
---
Dmitry Torokhov (6):
platform/x86: x86-android-tablets: fix Arizona GPIO swnode references
platform/x86: x86-android-tablets: hold device reference for secondary fwnode teardown
platform/x86: x86-android-tablets: pass node group to gpio_secondary_fwnode_init()
platform/x86: x86-android-tablets: add Crystal Cove GPIO swnode support
platform/x86: x86-android-tablets: drop redundant swnode group on YT3
platform/x86: x86-android-tablets: use shared battery swnode group on Yoga Tab 2
drivers/platform/x86/x86-android-tablets/core.c | 35 +++++++++++++++-----
drivers/platform/x86/x86-android-tablets/lenovo.c | 37 +++++++---------------
.../x86/x86-android-tablets/x86-android-tablets.h | 2 ++
3 files changed, 40 insertions(+), 34 deletions(-)
---
base-commit: f82a5da2f04960df9fb57489992d03dd5e64ec6f
change-id: 20260829-x86-android-lenovo-swnode-785f4e165eb2
Thanks.
--
Dmitry
On Sun, 30 Aug 2026 04:15:04 -0700, Dmitry Torokhov wrote:
> When gpiolib dropped name-against-label matching in favor of firmware node
> identity mapping, lookups referencing unattached software nodes (such as
> arizona and gpio_crystalcove in x86-android-tablets) stopped working.
>
> This series fixes the lookups and cleans up redundant software node
> registrations on Lenovo tablets:
> - Point Arizona GPIO property entries directly to the codec device software
> node, which is attached to the parent device.
> - Hold a device reference in gpio_secondary_fwnode_init() to ensure safety
> during devres action teardown.
> - Generalize gpio_secondary_fwnode_init() to accept a node group argument
> and use it to attach crystalcove_gpiochip_node as a secondary firmware
> node to INT33FD:00 on Lenovo Yoga Tab 2 models.
> - Drop redundant swnode group registrations on Lenovo Yoga Tab 3 and
> Yoga Tab 2 models where codec software nodes are already registered when
> attached to their respective devices.
>
> [...]
Thank you for your contribution, it has been applied to my local
review-ilpo-fixes branch. Note it will show up in the public
platform-drivers-x86/review-ilpo-fixes branch only once I've pushed my
local branch there, which might take a while.
The list of commits applied:
[1/6] platform/x86: x86-android-tablets: fix Arizona GPIO swnode references
commit: 355b6558dd7be049aff4f0d438b0128f91a982eb
[2/6] platform/x86: x86-android-tablets: hold device reference for secondary fwnode teardown
commit: 144113b0a70fa18033a747ee5db6803308f7688c
[3/6] platform/x86: x86-android-tablets: pass node group to gpio_secondary_fwnode_init()
commit: aab060ec969c3859b81f80f3444fd5a2edfc3cf5
[4/6] platform/x86: x86-android-tablets: add Crystal Cove GPIO swnode support
commit: 7872c625cd83a0247821cedd6c6f63938d4bddbc
[5/6] platform/x86: x86-android-tablets: drop redundant swnode group on YT3
commit: 74884436a53df0bbaf6d92d2922f643a4581b247
[6/6] platform/x86: x86-android-tablets: use shared battery swnode group on Yoga Tab 2
commit: 312fd3f3a85b89aa0d4fb5417043d640daa3732c
--
i.
Hi, On 30-Aug-26 13:15, Dmitry Torokhov wrote: > When gpiolib dropped name-against-label matching in favor of firmware node > identity mapping, lookups referencing unattached software nodes (such as > arizona and gpio_crystalcove in x86-android-tablets) stopped working. > > This series fixes the lookups and cleans up redundant software node > registrations on Lenovo tablets: > - Point Arizona GPIO property entries directly to the codec device software > node, which is attached to the parent device. > - Hold a device reference in gpio_secondary_fwnode_init() to ensure safety > during devres action teardown. > - Generalize gpio_secondary_fwnode_init() to accept a node group argument > and use it to attach crystalcove_gpiochip_node as a secondary firmware > node to INT33FD:00 on Lenovo Yoga Tab 2 models. > - Drop redundant swnode group registrations on Lenovo Yoga Tab 3 and > Yoga Tab 2 models where codec software nodes are already registered when > attached to their respective devices. > > Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com> My initial testing report of success on the Yoga Tab 3 was a false negative caused by me still running the older kernel. There was a generic bug in the new gpio_secondary_fwnode_init() helper which was causing all GPIO lookups for PROPERTY_ENTRY_GPIO() properties in the x86-android-tablets code to fail. I've send out a patch fixing this: https://lore.kernel.org/platform-driver-x86/20260831201157.36397-1-johannes.goede@oss.qualcomm.com/ Note that patch applies *on top of* this series. With that patch everything works fine on both a "Yoga Tablet 2 1380" as well as on a "Yoga Tab 3" which covers all types of GPIOS (BYT SoC, CHT SoC, CrystalCove PMIC, Arizona codec) used in the x86-android-tablets code. And the changes from this series look good to me too: Tested-by: Hans de Goede <johannes.goede@oss.qualcomm.com> # Yoga tab 2 1380, yt3 Reviewed-by: Hans de Goede <johannes.goede@oss.qualcomm.com> Regards, Hans > --- > Dmitry Torokhov (6): > platform/x86: x86-android-tablets: fix Arizona GPIO swnode references > platform/x86: x86-android-tablets: hold device reference for secondary fwnode teardown > platform/x86: x86-android-tablets: pass node group to gpio_secondary_fwnode_init() > platform/x86: x86-android-tablets: add Crystal Cove GPIO swnode support > platform/x86: x86-android-tablets: drop redundant swnode group on YT3 > platform/x86: x86-android-tablets: use shared battery swnode group on Yoga Tab 2 > > drivers/platform/x86/x86-android-tablets/core.c | 35 +++++++++++++++----- > drivers/platform/x86/x86-android-tablets/lenovo.c | 37 +++++++--------------- > .../x86/x86-android-tablets/x86-android-tablets.h | 2 ++ > 3 files changed, 40 insertions(+), 34 deletions(-) > --- > base-commit: f82a5da2f04960df9fb57489992d03dd5e64ec6f > change-id: 20260829-x86-android-lenovo-swnode-785f4e165eb2 > > Thanks. >
On Mon, Aug 31, 2026 at 10:17:41PM +0200, Hans de Goede wrote: > Hi, > > On 30-Aug-26 13:15, Dmitry Torokhov wrote: > > When gpiolib dropped name-against-label matching in favor of firmware node > > identity mapping, lookups referencing unattached software nodes (such as > > arizona and gpio_crystalcove in x86-android-tablets) stopped working. > > > > This series fixes the lookups and cleans up redundant software node > > registrations on Lenovo tablets: > > - Point Arizona GPIO property entries directly to the codec device software > > node, which is attached to the parent device. > > - Hold a device reference in gpio_secondary_fwnode_init() to ensure safety > > during devres action teardown. > > - Generalize gpio_secondary_fwnode_init() to accept a node group argument > > and use it to attach crystalcove_gpiochip_node as a secondary firmware > > node to INT33FD:00 on Lenovo Yoga Tab 2 models. > > - Drop redundant swnode group registrations on Lenovo Yoga Tab 3 and > > Yoga Tab 2 models where codec software nodes are already registered when > > attached to their respective devices. > > > > Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com> > > My initial testing report of success on the Yoga Tab 3 was a false negative > caused by me still running the older kernel. > > There was a generic bug in the new gpio_secondary_fwnode_init() helper > which was causing all GPIO lookups for PROPERTY_ENTRY_GPIO() properties > in the x86-android-tablets code to fail. > > I've send out a patch fixing this: > > https://lore.kernel.org/platform-driver-x86/20260831201157.36397-1-johannes.goede@oss.qualcomm.com/ > > Note that patch applies *on top of* this series. > > With that patch everything works fine on both a "Yoga Tablet 2 1380" as > well as on a "Yoga Tab 3" which covers all types of GPIOS (BYT SoC, > CHT SoC, CrystalCove PMIC, Arizona codec) used in the x86-android-tablets > code. > > And the changes from this series look good to me too: > > Tested-by: Hans de Goede <johannes.goede@oss.qualcomm.com> # Yoga tab 2 1380, yt3 > Reviewed-by: Hans de Goede <johannes.goede@oss.qualcomm.com> Will you apply everything yourself or will you let Ilpo do this? Thanks. -- Dmitry
Hi, On 31-Aug-26 22:37, Dmitry Torokhov wrote: > On Mon, Aug 31, 2026 at 10:17:41PM +0200, Hans de Goede wrote: >> Hi, >> >> On 30-Aug-26 13:15, Dmitry Torokhov wrote: >>> When gpiolib dropped name-against-label matching in favor of firmware node >>> identity mapping, lookups referencing unattached software nodes (such as >>> arizona and gpio_crystalcove in x86-android-tablets) stopped working. >>> >>> This series fixes the lookups and cleans up redundant software node >>> registrations on Lenovo tablets: >>> - Point Arizona GPIO property entries directly to the codec device software >>> node, which is attached to the parent device. >>> - Hold a device reference in gpio_secondary_fwnode_init() to ensure safety >>> during devres action teardown. >>> - Generalize gpio_secondary_fwnode_init() to accept a node group argument >>> and use it to attach crystalcove_gpiochip_node as a secondary firmware >>> node to INT33FD:00 on Lenovo Yoga Tab 2 models. >>> - Drop redundant swnode group registrations on Lenovo Yoga Tab 3 and >>> Yoga Tab 2 models where codec software nodes are already registered when >>> attached to their respective devices. >>> >>> Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com> >> >> My initial testing report of success on the Yoga Tab 3 was a false negative >> caused by me still running the older kernel. >> >> There was a generic bug in the new gpio_secondary_fwnode_init() helper >> which was causing all GPIO lookups for PROPERTY_ENTRY_GPIO() properties >> in the x86-android-tablets code to fail. >> >> I've send out a patch fixing this: >> >> https://lore.kernel.org/platform-driver-x86/20260831201157.36397-1-johannes.goede@oss.qualcomm.com/ >> >> Note that patch applies *on top of* this series. >> >> With that patch everything works fine on both a "Yoga Tablet 2 1380" as >> well as on a "Yoga Tab 3" which covers all types of GPIOS (BYT SoC, >> CHT SoC, CrystalCove PMIC, Arizona codec) used in the x86-android-tablets >> code. >> >> And the changes from this series look good to me too: >> >> Tested-by: Hans de Goede <johannes.goede@oss.qualcomm.com> # Yoga tab 2 1380, yt3 >> Reviewed-by: Hans de Goede <johannes.goede@oss.qualcomm.com> > > Will you apply everything yourself or will you let Ilpo do this? Ilpo is doing 99% of the pdx86 maintainer work these days, with me just hanging around as backup. So I think it is easier if Ilpo just applies this series himself. Ilpo: Note these are fixes (+ related cleanups) for a regression in 7.3-rc1 so these need to go to the fixes branch. And fixing the regression then requires this fix to be added on top: https://lore.kernel.org/platform-driver-x86/20260831201157.36397-1-johannes.goede@oss.qualcomm.com/ Note the order matters (to avoid conflicts) first this series, them my fix on top. Regards, Hans
Hi, On 30-Aug-26 1:15 PM, Dmitry Torokhov wrote: > When gpiolib dropped name-against-label matching in favor of firmware node > identity mapping, lookups referencing unattached software nodes (such as > arizona and gpio_crystalcove in x86-android-tablets) stopped working. > > This series fixes the lookups and cleans up redundant software node > registrations on Lenovo tablets: > - Point Arizona GPIO property entries directly to the codec device software > node, which is attached to the parent device. > - Hold a device reference in gpio_secondary_fwnode_init() to ensure safety > during devres action teardown. > - Generalize gpio_secondary_fwnode_init() to accept a node group argument > and use it to attach crystalcove_gpiochip_node as a secondary firmware > node to INT33FD:00 on Lenovo Yoga Tab 2 models. > - Drop redundant swnode group registrations on Lenovo Yoga Tab 3 and > Yoga Tab 2 models where codec software nodes are already registered when > attached to their respective devices. > > Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com> So I've given this a test on a Yoga Tablet 3 (yt3) tablet yesterday and there everything works. Then I also tested this on a Lenovo Yoga Tablet 2 1380 since the YT3 does not cover the crystal_cove GPIO case and there things do not work. It seems that trying to get the crystal_cove GPIOs indefinetely returns -EPROBE_DEFER. I'll try to debug thus further this evening. Regards, Hans > --- > Dmitry Torokhov (6): > platform/x86: x86-android-tablets: fix Arizona GPIO swnode references > platform/x86: x86-android-tablets: hold device reference for secondary fwnode teardown > platform/x86: x86-android-tablets: pass node group to gpio_secondary_fwnode_init() > platform/x86: x86-android-tablets: add Crystal Cove GPIO swnode support > platform/x86: x86-android-tablets: drop redundant swnode group on YT3 > platform/x86: x86-android-tablets: use shared battery swnode group on Yoga Tab 2 > > drivers/platform/x86/x86-android-tablets/core.c | 35 +++++++++++++++----- > drivers/platform/x86/x86-android-tablets/lenovo.c | 37 +++++++--------------- > .../x86/x86-android-tablets/x86-android-tablets.h | 2 ++ > 3 files changed, 40 insertions(+), 34 deletions(-) > --- > base-commit: f82a5da2f04960df9fb57489992d03dd5e64ec6f > change-id: 20260829-x86-android-lenovo-swnode-785f4e165eb2 > > Thanks. >
On Mon, Aug 31, 2026 at 11:42:06AM +0200, Hans de Goede wrote:
> Hi,
>
> On 30-Aug-26 1:15 PM, Dmitry Torokhov wrote:
> > When gpiolib dropped name-against-label matching in favor of firmware node
> > identity mapping, lookups referencing unattached software nodes (such as
> > arizona and gpio_crystalcove in x86-android-tablets) stopped working.
> >
> > This series fixes the lookups and cleans up redundant software node
> > registrations on Lenovo tablets:
> > - Point Arizona GPIO property entries directly to the codec device software
> > node, which is attached to the parent device.
> > - Hold a device reference in gpio_secondary_fwnode_init() to ensure safety
> > during devres action teardown.
> > - Generalize gpio_secondary_fwnode_init() to accept a node group argument
> > and use it to attach crystalcove_gpiochip_node as a secondary firmware
> > node to INT33FD:00 on Lenovo Yoga Tab 2 models.
> > - Drop redundant swnode group registrations on Lenovo Yoga Tab 3 and
> > Yoga Tab 2 models where codec software nodes are already registered when
> > attached to their respective devices.
> >
> > Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
>
> So I've given this a test on a Yoga Tablet 3 (yt3) tablet yesterday and
> there everything works.
>
> Then I also tested this on a Lenovo Yoga Tablet 2 1380 since the YT3 does
> not cover the crystal_cove GPIO case and there things do not work.
>
> It seems that trying to get the crystal_cove GPIOs indefinetely returns
> -EPROBE_DEFER. I'll try to debug thus further this evening.
I wonder if the patch below will help.
Thanks.
--
Dmitry
From 9376af2b6a9c91cd6a05969b583f40d451050988 Mon Sep 17 00:00:00 2001
From: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Date: Mon, 31 Aug 2026 04:59:24 -0700
Subject: [PATCH] gpio: crystalcove: add missing MODULE_ALIAS()
The crystalcove GPIO driver lacks a MODULE_ALIAS() to allow it to be
auto-loaded. This results in consumers indefinitely deferring their
probe with -EPROBE_DEFER (waiting for the GPIO controller to appear)
when it's compiled as a module, as it will never be loaded.
Fix this by adding the missing platform alias.
Fixes: 104fb1d5153c ("gpio: Add support for Intel Crystal Cove PMIC")
Assisted-by: LLM
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
---
drivers/gpio/gpio-crystalcove.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/gpio/gpio-crystalcove.c b/drivers/gpio/gpio-crystalcove.c
index 0fb5c06d0886..ab7fab5b9754 100644
--- a/drivers/gpio/gpio-crystalcove.c
+++ b/drivers/gpio/gpio-crystalcove.c
@@ -396,3 +396,4 @@ module_platform_driver(crystalcove_gpio_driver);
MODULE_AUTHOR("Yang, Bin <bin.yang@intel.com>");
MODULE_DESCRIPTION("Intel Crystal Cove GPIO Driver");
MODULE_LICENSE("GPL v2");
+MODULE_ALIAS("platform:crystal_cove_gpio");
--
2.55.0.897.gb25b4bd76c-goog
Hi Dmitry. On 31-Aug-26 14:47, Dmitry Torokhov wrote: > On Mon, Aug 31, 2026 at 11:42:06AM +0200, Hans de Goede wrote: >> Hi, >> >> On 30-Aug-26 1:15 PM, Dmitry Torokhov wrote: >>> When gpiolib dropped name-against-label matching in favor of firmware node >>> identity mapping, lookups referencing unattached software nodes (such as >>> arizona and gpio_crystalcove in x86-android-tablets) stopped working. >>> >>> This series fixes the lookups and cleans up redundant software node >>> registrations on Lenovo tablets: >>> - Point Arizona GPIO property entries directly to the codec device software >>> node, which is attached to the parent device. >>> - Hold a device reference in gpio_secondary_fwnode_init() to ensure safety >>> during devres action teardown. >>> - Generalize gpio_secondary_fwnode_init() to accept a node group argument >>> and use it to attach crystalcove_gpiochip_node as a secondary firmware >>> node to INT33FD:00 on Lenovo Yoga Tab 2 models. >>> - Drop redundant swnode group registrations on Lenovo Yoga Tab 3 and >>> Yoga Tab 2 models where codec software nodes are already registered when >>> attached to their respective devices. >>> >>> Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com> >> >> So I've given this a test on a Yoga Tablet 3 (yt3) tablet yesterday and >> there everything works. >> >> Then I also tested this on a Lenovo Yoga Tablet 2 1380 since the YT3 does >> not cover the crystal_cove GPIO case and there things do not work. >> >> It seems that trying to get the crystal_cove GPIOs indefinetely returns >> -EPROBE_DEFER. I'll try to debug thus further this evening. > > I wonder if the patch below will help. No that does not fix things since I've crystalcove_gpio builtin (1). Still a good catch though and worthwhile to send out as a standalone patch. Regards, Hans 1) The i915 driver uses CrystalCove PMIC GPIOs for panel on/off on some drivers and it cannot handle EPROBE_DEFER gracefully at the point where it is requesting the GPIOs. So this driver must be builtin for the i915 driver to work correctly on relevant models.
On 31-Aug-26 22:20, Hans de Goede wrote: > Hi Dmitry. > > On 31-Aug-26 14:47, Dmitry Torokhov wrote: >> On Mon, Aug 31, 2026 at 11:42:06AM +0200, Hans de Goede wrote: >>> Hi, >>> >>> On 30-Aug-26 1:15 PM, Dmitry Torokhov wrote: >>>> When gpiolib dropped name-against-label matching in favor of firmware node >>>> identity mapping, lookups referencing unattached software nodes (such as >>>> arizona and gpio_crystalcove in x86-android-tablets) stopped working. >>>> >>>> This series fixes the lookups and cleans up redundant software node >>>> registrations on Lenovo tablets: >>>> - Point Arizona GPIO property entries directly to the codec device software >>>> node, which is attached to the parent device. >>>> - Hold a device reference in gpio_secondary_fwnode_init() to ensure safety >>>> during devres action teardown. >>>> - Generalize gpio_secondary_fwnode_init() to accept a node group argument >>>> and use it to attach crystalcove_gpiochip_node as a secondary firmware >>>> node to INT33FD:00 on Lenovo Yoga Tab 2 models. >>>> - Drop redundant swnode group registrations on Lenovo Yoga Tab 3 and >>>> Yoga Tab 2 models where codec software nodes are already registered when >>>> attached to their respective devices. >>>> >>>> Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com> >>> >>> So I've given this a test on a Yoga Tablet 3 (yt3) tablet yesterday and >>> there everything works. >>> >>> Then I also tested this on a Lenovo Yoga Tablet 2 1380 since the YT3 does >>> not cover the crystal_cove GPIO case and there things do not work. >>> >>> It seems that trying to get the crystal_cove GPIOs indefinetely returns >>> -EPROBE_DEFER. I'll try to debug thus further this evening. >> >> I wonder if the patch below will help. > > No that does not fix things since I've crystalcove_gpio builtin (1). p.s. should have added: I did find the real problem and posted a follow up patch to be applied on top of this series fixing things: https://lore.kernel.org/platform-driver-x86/20260831201157.36397-1-johannes.goede@oss.qualcomm.com/ Regards, Hans
On Sun, Aug 30, 2026 at 04:15:04AM -0700, Dmitry Torokhov wrote: > When gpiolib dropped name-against-label matching in favor of firmware node > identity mapping, lookups referencing unattached software nodes (such as > arizona and gpio_crystalcove in x86-android-tablets) stopped working. > > This series fixes the lookups and cleans up redundant software node > registrations on Lenovo tablets: > - Point Arizona GPIO property entries directly to the codec device software > node, which is attached to the parent device. > - Hold a device reference in gpio_secondary_fwnode_init() to ensure safety > during devres action teardown. > - Generalize gpio_secondary_fwnode_init() to accept a node group argument > and use it to attach crystalcove_gpiochip_node as a secondary firmware > node to INT33FD:00 on Lenovo Yoga Tab 2 models. > - Drop redundant swnode group registrations on Lenovo Yoga Tab 3 and > Yoga Tab 2 models where codec software nodes are already registered when > attached to their respective devices. Nice series, thanks! Reviewed-by: Andy Shevchenko <andriy.shevchenko@intel.com> -- With Best Regards, Andy Shevchenko
On Sun, Aug 30, 2026 at 1:15 PM Dmitry Torokhov <dmitry.torokhov@gmail.com> wrote: > When gpiolib dropped name-against-label matching in favor of firmware node > identity mapping, lookups referencing unattached software nodes (such as > arizona and gpio_crystalcove in x86-android-tablets) stopped working. Ooops. The series look good to me. Reviewed-by: Linus Walleij <linusw@kernel.org> Yours, Linus Walleij
© 2016 - 2026 Red Hat, Inc.