* [PATCH v2 0/2] platform/x86: meraki-mx100: create and use real software node links
@ 2026-02-18 10:48 Bartosz Golaszewski
2026-02-18 10:48 ` [PATCH v2 1/2] mfd: lpc_ich: expose the GPIO controller cell's software node Bartosz Golaszewski
2026-02-18 10:48 ` [PATCH v2 2/2] platform/x86: meraki-mx100: use real software node references Bartosz Golaszewski
0 siblings, 2 replies; 8+ messages in thread
From: Bartosz Golaszewski @ 2026-02-18 10:48 UTC (permalink / raw)
To: Peter Tyser, Lee Jones, Hans de Goede, Ilpo Järvinen,
Dmitry Torokhov, Andy Shevchenko, Greg Kroah-Hartman
Cc: linux-kernel, platform-driver-x86, brgl, Bartosz Golaszewski
Meraki-mx100 is one of the GPIOLIB users that abuses the software node
API by setting up a dummy software node without any logical link to the
GPIO controller it wants to use and uses the fact that the GPIO core
matches the controller's label against the swnode's name to make the
lookup work.
We want to remove this behavior from GPIOLIB in favor of actual matching
of firmware nodes but that would break this user. This series creates
a real software node in the MFD driver and references it from the meraki
driver.
This can be done in two patches and stay bisectable as the software
nodes, despite having the same name, will have different parents so
there are no kobject issues.
Merging: this should probably be acked by Hans or Ilpo and go through
the MFD tree for v7.1.
Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
---
Changes in v2:
- Use a namespace for the exported software node
- Link to v1: https://patch.msgid.link/20260213-meraki-swnodes-v1-0-8e032693456c@oss.qualcomm.com
---
Bartosz Golaszewski (2):
mfd: lpc_ich: expose the GPIO controller cell's software node
platform/x86: meraki-mx100: use real software node references
drivers/mfd/lpc_ich.c | 7 +++++++
drivers/platform/x86/meraki-mx100.c | 41 ++++++++++++++++---------------------
include/linux/mfd/lpc_ich.h | 2 ++
3 files changed, 27 insertions(+), 23 deletions(-)
---
base-commit: fe9e3edb6a215515d1148d32a5c445c5bdd7916f
change-id: 20260213-meraki-swnodes-44430d8178b4
Best regards,
--
Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
^ permalink raw reply [flat|nested] 8+ messages in thread* [PATCH v2 1/2] mfd: lpc_ich: expose the GPIO controller cell's software node 2026-02-18 10:48 [PATCH v2 0/2] platform/x86: meraki-mx100: create and use real software node links Bartosz Golaszewski @ 2026-02-18 10:48 ` Bartosz Golaszewski 2026-03-06 12:53 ` (subset) " Lee Jones 2026-02-18 10:48 ` [PATCH v2 2/2] platform/x86: meraki-mx100: use real software node references Bartosz Golaszewski 1 sibling, 1 reply; 8+ messages in thread From: Bartosz Golaszewski @ 2026-02-18 10:48 UTC (permalink / raw) To: Peter Tyser, Lee Jones, Hans de Goede, Ilpo Järvinen, Dmitry Torokhov, Andy Shevchenko, Greg Kroah-Hartman Cc: linux-kernel, platform-driver-x86, brgl, Bartosz Golaszewski One of the users of this driver - meraki-mx100 - abuses the software node API by setting up a dummy software node without any logical link to this GPIO controller and uses the fact that the GPIO core matches the controller's label against the swnode's name to make the lookup work. We want to remove this behavior from GPIOLIB in favor of actual matching of firmware nodes but that would break this user. To facilitate that: create a software node for the GPIO controller cell and expose its address in the provided MFD header. Acked-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com> --- drivers/mfd/lpc_ich.c | 7 +++++++ include/linux/mfd/lpc_ich.h | 2 ++ 2 files changed, 9 insertions(+) diff --git a/drivers/mfd/lpc_ich.c b/drivers/mfd/lpc_ich.c index 4b7d0cb9340f1ac51bf3845427ba1dee8cad5667..5a3d79f339dd23994aee615c2dd6ef637e3c14a4 100644 --- a/drivers/mfd/lpc_ich.c +++ b/drivers/mfd/lpc_ich.c @@ -45,6 +45,7 @@ #include <linux/acpi.h> #include <linux/pci.h> #include <linux/pinctrl/pinctrl.h> +#include <linux/property.h> #include <linux/mfd/core.h> #include <linux/mfd/lpc_ich.h> #include <linux/platform_data/itco_wdt.h> @@ -125,11 +126,17 @@ static struct mfd_cell lpc_ich_wdt_cell = { .ignore_resource_conflicts = true, }; +const struct software_node lpc_ich_gpio_swnode = { + .name = "gpio_ich", +}; +EXPORT_SYMBOL_NS(lpc_ich_gpio_swnode, "LPC_ICH"); + static struct mfd_cell lpc_ich_gpio_cell = { .name = "gpio_ich", .num_resources = ARRAY_SIZE(gpio_ich_res), .resources = gpio_ich_res, .ignore_resource_conflicts = true, + .swnode = &lpc_ich_gpio_swnode, }; #define INTEL_GPIO_RESOURCE_SIZE 0x1000 diff --git a/include/linux/mfd/lpc_ich.h b/include/linux/mfd/lpc_ich.h index 1fbda1f8967db41ba3bacd331e5d18dfa8ebca3c..1819aa743c5c9aa1ac51710bbdbbefab50670ebe 100644 --- a/include/linux/mfd/lpc_ich.h +++ b/include/linux/mfd/lpc_ich.h @@ -37,4 +37,6 @@ struct lpc_ich_info { u8 use_gpio; }; +extern const struct software_node lpc_ich_gpio_swnode; + #endif -- 2.47.3 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: (subset) [PATCH v2 1/2] mfd: lpc_ich: expose the GPIO controller cell's software node 2026-02-18 10:48 ` [PATCH v2 1/2] mfd: lpc_ich: expose the GPIO controller cell's software node Bartosz Golaszewski @ 2026-03-06 12:53 ` Lee Jones 2026-03-06 13:34 ` Bartosz Golaszewski 0 siblings, 1 reply; 8+ messages in thread From: Lee Jones @ 2026-03-06 12:53 UTC (permalink / raw) To: Peter Tyser, Lee Jones, Hans de Goede, Ilpo Järvinen, Dmitry Torokhov, Andy Shevchenko, Greg Kroah-Hartman, Bartosz Golaszewski Cc: linux-kernel, platform-driver-x86, brgl On Wed, 18 Feb 2026 11:48:01 +0100, Bartosz Golaszewski wrote: > One of the users of this driver - meraki-mx100 - abuses the software > node API by setting up a dummy software node without any logical link to > this GPIO controller and uses the fact that the GPIO core matches the > controller's label against the swnode's name to make the lookup work. > > We want to remove this behavior from GPIOLIB in favor of actual matching > of firmware nodes but that would break this user. To facilitate that: > create a software node for the GPIO controller cell and expose its > address in the provided MFD header. > > [...] Applied, thanks! [1/2] mfd: lpc_ich: expose the GPIO controller cell's software node commit: a64ee7d8ddd6e04d82c06238a238b7877cbc35fc -- Lee Jones [李琼斯] ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: (subset) [PATCH v2 1/2] mfd: lpc_ich: expose the GPIO controller cell's software node 2026-03-06 12:53 ` (subset) " Lee Jones @ 2026-03-06 13:34 ` Bartosz Golaszewski 2026-03-09 9:55 ` Lee Jones 0 siblings, 1 reply; 8+ messages in thread From: Bartosz Golaszewski @ 2026-03-06 13:34 UTC (permalink / raw) To: Lee Jones Cc: Peter Tyser, Hans de Goede, Ilpo Järvinen, Dmitry Torokhov, Andy Shevchenko, Greg Kroah-Hartman, Bartosz Golaszewski, linux-kernel, platform-driver-x86 On Fri, Mar 6, 2026 at 1:53 PM Lee Jones <lee@kernel.org> wrote: > > On Wed, 18 Feb 2026 11:48:01 +0100, Bartosz Golaszewski wrote: > > One of the users of this driver - meraki-mx100 - abuses the software > > node API by setting up a dummy software node without any logical link to > > this GPIO controller and uses the fact that the GPIO core matches the > > controller's label against the swnode's name to make the lookup work. > > > > We want to remove this behavior from GPIOLIB in favor of actual matching > > of firmware nodes but that would break this user. To facilitate that: > > create a software node for the GPIO controller cell and expose its > > address in the provided MFD header. > > > > [...] > > Applied, thanks! > > [1/2] mfd: lpc_ich: expose the GPIO controller cell's software node > commit: a64ee7d8ddd6e04d82c06238a238b7877cbc35fc > > -- > Lee Jones [李琼斯] > Hi Lee! Can you pick up patch 2/2 as well as per Ilpo's response and Ack? Bart ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: (subset) [PATCH v2 1/2] mfd: lpc_ich: expose the GPIO controller cell's software node 2026-03-06 13:34 ` Bartosz Golaszewski @ 2026-03-09 9:55 ` Lee Jones 2026-03-09 10:05 ` Bartosz Golaszewski 0 siblings, 1 reply; 8+ messages in thread From: Lee Jones @ 2026-03-09 9:55 UTC (permalink / raw) To: Bartosz Golaszewski Cc: Peter Tyser, Hans de Goede, Ilpo Järvinen, Dmitry Torokhov, Andy Shevchenko, Greg Kroah-Hartman, Bartosz Golaszewski, linux-kernel, platform-driver-x86 On Fri, 06 Mar 2026, Bartosz Golaszewski wrote: > On Fri, Mar 6, 2026 at 1:53 PM Lee Jones <lee@kernel.org> wrote: > > > > On Wed, 18 Feb 2026 11:48:01 +0100, Bartosz Golaszewski wrote: > > > One of the users of this driver - meraki-mx100 - abuses the software > > > node API by setting up a dummy software node without any logical link to > > > this GPIO controller and uses the fact that the GPIO core matches the > > > controller's label against the swnode's name to make the lookup work. > > > > > > We want to remove this behavior from GPIOLIB in favor of actual matching > > > of firmware nodes but that would break this user. To facilitate that: > > > create a software node for the GPIO controller cell and expose its > > > address in the provided MFD header. > > > > > > [...] > > > > Applied, thanks! > > > > [1/2] mfd: lpc_ich: expose the GPIO controller cell's software node > > commit: a64ee7d8ddd6e04d82c06238a238b7877cbc35fc > > > > -- > > Lee Jones [李琼斯] > > > > Hi Lee! > > Can you pick up patch 2/2 as well as per Ilpo's response and Ack? Are there dependencies between the two patches? -- Lee Jones [李琼斯] ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: (subset) [PATCH v2 1/2] mfd: lpc_ich: expose the GPIO controller cell's software node 2026-03-09 9:55 ` Lee Jones @ 2026-03-09 10:05 ` Bartosz Golaszewski 0 siblings, 0 replies; 8+ messages in thread From: Bartosz Golaszewski @ 2026-03-09 10:05 UTC (permalink / raw) To: Lee Jones Cc: Peter Tyser, Hans de Goede, Ilpo Järvinen, Dmitry Torokhov, Andy Shevchenko, Greg Kroah-Hartman, Bartosz Golaszewski, linux-kernel, platform-driver-x86 On Mon, Mar 9, 2026 at 10:55 AM Lee Jones <lee@kernel.org> wrote: > > On Fri, 06 Mar 2026, Bartosz Golaszewski wrote: > > > On Fri, Mar 6, 2026 at 1:53 PM Lee Jones <lee@kernel.org> wrote: > > > > > > On Wed, 18 Feb 2026 11:48:01 +0100, Bartosz Golaszewski wrote: > > > > One of the users of this driver - meraki-mx100 - abuses the software > > > > node API by setting up a dummy software node without any logical link to > > > > this GPIO controller and uses the fact that the GPIO core matches the > > > > controller's label against the swnode's name to make the lookup work. > > > > > > > > We want to remove this behavior from GPIOLIB in favor of actual matching > > > > of firmware nodes but that would break this user. To facilitate that: > > > > create a software node for the GPIO controller cell and expose its > > > > address in the provided MFD header. > > > > > > > > [...] > > > > > > Applied, thanks! > > > > > > [1/2] mfd: lpc_ich: expose the GPIO controller cell's software node > > > commit: a64ee7d8ddd6e04d82c06238a238b7877cbc35fc > > > > > > -- > > > Lee Jones [李琼斯] > > > > > > > Hi Lee! > > > > Can you pick up patch 2/2 as well as per Ilpo's response and Ack? > > Are there dependencies between the two patches? > Yes, patch 2 needs to see the symbol exported in patch 1. Bartosz ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH v2 2/2] platform/x86: meraki-mx100: use real software node references 2026-02-18 10:48 [PATCH v2 0/2] platform/x86: meraki-mx100: create and use real software node links Bartosz Golaszewski 2026-02-18 10:48 ` [PATCH v2 1/2] mfd: lpc_ich: expose the GPIO controller cell's software node Bartosz Golaszewski @ 2026-02-18 10:48 ` Bartosz Golaszewski 2026-02-23 14:16 ` Ilpo Järvinen 1 sibling, 1 reply; 8+ messages in thread From: Bartosz Golaszewski @ 2026-02-18 10:48 UTC (permalink / raw) To: Peter Tyser, Lee Jones, Hans de Goede, Ilpo Järvinen, Dmitry Torokhov, Andy Shevchenko, Greg Kroah-Hartman Cc: linux-kernel, platform-driver-x86, brgl, Bartosz Golaszewski The lpc_ich MFD driver now exposes the software node associated with the its GPIO controller cell. Remove the dummy software node from the meraki-mx100 driver and reference the real one instead. Acked-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com> --- drivers/platform/x86/meraki-mx100.c | 41 ++++++++++++++++--------------------- 1 file changed, 18 insertions(+), 23 deletions(-) diff --git a/drivers/platform/x86/meraki-mx100.c b/drivers/platform/x86/meraki-mx100.c index 8c5276d98512390effcc9f2258a6061684420d11..9f4caa1f3a923164eeaf31765a4e83c874cff181 100644 --- a/drivers/platform/x86/meraki-mx100.c +++ b/drivers/platform/x86/meraki-mx100.c @@ -20,16 +20,11 @@ #include <linux/input-event-codes.h> #include <linux/io.h> #include <linux/kernel.h> +#include <linux/mfd/lpc_ich.h> #include <linux/module.h> #include <linux/platform_device.h> #include <linux/property.h> -#define TINK_GPIO_DRIVER_NAME "gpio_ich" - -static const struct software_node gpio_ich_node = { - .name = TINK_GPIO_DRIVER_NAME, -}; - /* LEDs */ static const struct software_node tink_gpio_leds_node = { .name = "meraki-mx100-leds", @@ -38,7 +33,7 @@ static const struct software_node tink_gpio_leds_node = { static const struct property_entry tink_internet_led_props[] = { PROPERTY_ENTRY_STRING("label", "mx100:green:internet"), PROPERTY_ENTRY_STRING("linux,default-trigger", "default-on"), - PROPERTY_ENTRY_GPIO("gpios", &gpio_ich_node, 11, GPIO_ACTIVE_LOW), + PROPERTY_ENTRY_GPIO("gpios", &lpc_ich_gpio_swnode, 11, GPIO_ACTIVE_LOW), { } }; @@ -50,7 +45,7 @@ static const struct software_node tink_internet_led_node = { static const struct property_entry tink_lan2_led_props[] = { PROPERTY_ENTRY_STRING("label", "mx100:green:lan2"), - PROPERTY_ENTRY_GPIO("gpios", &gpio_ich_node, 18, GPIO_ACTIVE_HIGH), + PROPERTY_ENTRY_GPIO("gpios", &lpc_ich_gpio_swnode, 18, GPIO_ACTIVE_HIGH), { } }; @@ -62,7 +57,7 @@ static const struct software_node tink_lan2_led_node = { static const struct property_entry tink_lan3_led_props[] = { PROPERTY_ENTRY_STRING("label", "mx100:green:lan3"), - PROPERTY_ENTRY_GPIO("gpios", &gpio_ich_node, 20, GPIO_ACTIVE_HIGH), + PROPERTY_ENTRY_GPIO("gpios", &lpc_ich_gpio_swnode, 20, GPIO_ACTIVE_HIGH), { } }; @@ -74,7 +69,7 @@ static const struct software_node tink_lan3_led_node = { static const struct property_entry tink_lan4_led_props[] = { PROPERTY_ENTRY_STRING("label", "mx100:green:lan4"), - PROPERTY_ENTRY_GPIO("gpios", &gpio_ich_node, 22, GPIO_ACTIVE_HIGH), + PROPERTY_ENTRY_GPIO("gpios", &lpc_ich_gpio_swnode, 22, GPIO_ACTIVE_HIGH), { } }; @@ -86,7 +81,7 @@ static const struct software_node tink_lan4_led_node = { static const struct property_entry tink_lan5_led_props[] = { PROPERTY_ENTRY_STRING("label", "mx100:green:lan5"), - PROPERTY_ENTRY_GPIO("gpios", &gpio_ich_node, 23, GPIO_ACTIVE_HIGH), + PROPERTY_ENTRY_GPIO("gpios", &lpc_ich_gpio_swnode, 23, GPIO_ACTIVE_HIGH), { } }; @@ -98,7 +93,7 @@ static const struct software_node tink_lan5_led_node = { static const struct property_entry tink_lan6_led_props[] = { PROPERTY_ENTRY_STRING("label", "mx100:green:lan6"), - PROPERTY_ENTRY_GPIO("gpios", &gpio_ich_node, 32, GPIO_ACTIVE_HIGH), + PROPERTY_ENTRY_GPIO("gpios", &lpc_ich_gpio_swnode, 32, GPIO_ACTIVE_HIGH), { } }; @@ -110,7 +105,7 @@ static const struct software_node tink_lan6_led_node = { static const struct property_entry tink_lan7_led_props[] = { PROPERTY_ENTRY_STRING("label", "mx100:green:lan7"), - PROPERTY_ENTRY_GPIO("gpios", &gpio_ich_node, 34, GPIO_ACTIVE_HIGH), + PROPERTY_ENTRY_GPIO("gpios", &lpc_ich_gpio_swnode, 34, GPIO_ACTIVE_HIGH), { } }; @@ -122,7 +117,7 @@ static const struct software_node tink_lan7_led_node = { static const struct property_entry tink_lan8_led_props[] = { PROPERTY_ENTRY_STRING("label", "mx100:green:lan8"), - PROPERTY_ENTRY_GPIO("gpios", &gpio_ich_node, 35, GPIO_ACTIVE_HIGH), + PROPERTY_ENTRY_GPIO("gpios", &lpc_ich_gpio_swnode, 35, GPIO_ACTIVE_HIGH), { } }; @@ -134,7 +129,7 @@ static const struct software_node tink_lan8_led_node = { static const struct property_entry tink_lan9_led_props[] = { PROPERTY_ENTRY_STRING("label", "mx100:green:lan9"), - PROPERTY_ENTRY_GPIO("gpios", &gpio_ich_node, 36, GPIO_ACTIVE_HIGH), + PROPERTY_ENTRY_GPIO("gpios", &lpc_ich_gpio_swnode, 36, GPIO_ACTIVE_HIGH), { } }; @@ -146,7 +141,7 @@ static const struct software_node tink_lan9_led_node = { static const struct property_entry tink_lan10_led_props[] = { PROPERTY_ENTRY_STRING("label", "mx100:green:lan10"), - PROPERTY_ENTRY_GPIO("gpios", &gpio_ich_node, 37, GPIO_ACTIVE_HIGH), + PROPERTY_ENTRY_GPIO("gpios", &lpc_ich_gpio_swnode, 37, GPIO_ACTIVE_HIGH), { } }; @@ -158,7 +153,7 @@ static const struct software_node tink_lan10_led_node = { static const struct property_entry tink_lan11_led_props[] = { PROPERTY_ENTRY_STRING("label", "mx100:green:lan11"), - PROPERTY_ENTRY_GPIO("gpios", &gpio_ich_node, 48, GPIO_ACTIVE_HIGH), + PROPERTY_ENTRY_GPIO("gpios", &lpc_ich_gpio_swnode, 48, GPIO_ACTIVE_HIGH), { } }; @@ -170,7 +165,7 @@ static const struct software_node tink_lan11_led_node = { static const struct property_entry tink_ha_green_led_props[] = { PROPERTY_ENTRY_STRING("label", "mx100:green:ha"), - PROPERTY_ENTRY_GPIO("gpios", &gpio_ich_node, 16, GPIO_ACTIVE_LOW), + PROPERTY_ENTRY_GPIO("gpios", &lpc_ich_gpio_swnode, 16, GPIO_ACTIVE_LOW), { } }; @@ -182,7 +177,7 @@ static const struct software_node tink_ha_green_led_node = { static const struct property_entry tink_ha_orange_led_props[] = { PROPERTY_ENTRY_STRING("label", "mx100:orange:ha"), - PROPERTY_ENTRY_GPIO("gpios", &gpio_ich_node, 7, GPIO_ACTIVE_LOW), + PROPERTY_ENTRY_GPIO("gpios", &lpc_ich_gpio_swnode, 7, GPIO_ACTIVE_LOW), { } }; @@ -194,7 +189,7 @@ static const struct software_node tink_ha_orange_led_node = { static const struct property_entry tink_usb_green_led_props[] = { PROPERTY_ENTRY_STRING("label", "mx100:green:usb"), - PROPERTY_ENTRY_GPIO("gpios", &gpio_ich_node, 21, GPIO_ACTIVE_LOW), + PROPERTY_ENTRY_GPIO("gpios", &lpc_ich_gpio_swnode, 21, GPIO_ACTIVE_LOW), { } }; @@ -206,7 +201,7 @@ static const struct software_node tink_usb_green_led_node = { static const struct property_entry tink_usb_orange_led_props[] = { PROPERTY_ENTRY_STRING("label", "mx100:orange:usb"), - PROPERTY_ENTRY_GPIO("gpios", &gpio_ich_node, 19, GPIO_ACTIVE_LOW), + PROPERTY_ENTRY_GPIO("gpios", &lpc_ich_gpio_swnode, 19, GPIO_ACTIVE_LOW), { } }; @@ -230,7 +225,7 @@ static const struct software_node tink_gpio_keys_node = { static const struct property_entry tink_reset_key_props[] = { PROPERTY_ENTRY_U32("linux,code", KEY_RESTART), PROPERTY_ENTRY_STRING("label", "Reset"), - PROPERTY_ENTRY_GPIO("gpios", &gpio_ich_node, 60, GPIO_ACTIVE_LOW), + PROPERTY_ENTRY_GPIO("gpios", &lpc_ich_gpio_swnode, 60, GPIO_ACTIVE_LOW), PROPERTY_ENTRY_U32("linux,input-type", EV_KEY), PROPERTY_ENTRY_U32("debounce-interval", 100), { } @@ -243,7 +238,6 @@ static const struct software_node tink_reset_key_node = { }; static const struct software_node *tink_swnodes[] = { - &gpio_ich_node, /* LEDs nodes */ &tink_gpio_leds_node, &tink_internet_led_node, @@ -348,3 +342,4 @@ MODULE_AUTHOR("Chris Blake <chrisrblake93@gmail.com>"); MODULE_DESCRIPTION("Cisco Meraki MX100 Platform Driver"); MODULE_LICENSE("GPL"); MODULE_ALIAS("platform:meraki-mx100"); +MODULE_IMPORT_NS("LPC_ICH"); -- 2.47.3 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH v2 2/2] platform/x86: meraki-mx100: use real software node references 2026-02-18 10:48 ` [PATCH v2 2/2] platform/x86: meraki-mx100: use real software node references Bartosz Golaszewski @ 2026-02-23 14:16 ` Ilpo Järvinen 0 siblings, 0 replies; 8+ messages in thread From: Ilpo Järvinen @ 2026-02-23 14:16 UTC (permalink / raw) To: Bartosz Golaszewski Cc: Peter Tyser, Lee Jones, Hans de Goede, Dmitry Torokhov, Andy Shevchenko, Greg Kroah-Hartman, LKML, platform-driver-x86, brgl [-- Attachment #1: Type: text/plain, Size: 8257 bytes --] On Wed, 18 Feb 2026, Bartosz Golaszewski wrote: > The lpc_ich MFD driver now exposes the software node associated with the > its GPIO controller cell. Remove the dummy software node from the > meraki-mx100 driver and reference the real one instead. > > Acked-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> > Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com> For merging through mfd tree, Acked-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com> -- i. > --- > drivers/platform/x86/meraki-mx100.c | 41 ++++++++++++++++--------------------- > 1 file changed, 18 insertions(+), 23 deletions(-) > > diff --git a/drivers/platform/x86/meraki-mx100.c b/drivers/platform/x86/meraki-mx100.c > index 8c5276d98512390effcc9f2258a6061684420d11..9f4caa1f3a923164eeaf31765a4e83c874cff181 100644 > --- a/drivers/platform/x86/meraki-mx100.c > +++ b/drivers/platform/x86/meraki-mx100.c > @@ -20,16 +20,11 @@ > #include <linux/input-event-codes.h> > #include <linux/io.h> > #include <linux/kernel.h> > +#include <linux/mfd/lpc_ich.h> > #include <linux/module.h> > #include <linux/platform_device.h> > #include <linux/property.h> > > -#define TINK_GPIO_DRIVER_NAME "gpio_ich" > - > -static const struct software_node gpio_ich_node = { > - .name = TINK_GPIO_DRIVER_NAME, > -}; > - > /* LEDs */ > static const struct software_node tink_gpio_leds_node = { > .name = "meraki-mx100-leds", > @@ -38,7 +33,7 @@ static const struct software_node tink_gpio_leds_node = { > static const struct property_entry tink_internet_led_props[] = { > PROPERTY_ENTRY_STRING("label", "mx100:green:internet"), > PROPERTY_ENTRY_STRING("linux,default-trigger", "default-on"), > - PROPERTY_ENTRY_GPIO("gpios", &gpio_ich_node, 11, GPIO_ACTIVE_LOW), > + PROPERTY_ENTRY_GPIO("gpios", &lpc_ich_gpio_swnode, 11, GPIO_ACTIVE_LOW), > { } > }; > > @@ -50,7 +45,7 @@ static const struct software_node tink_internet_led_node = { > > static const struct property_entry tink_lan2_led_props[] = { > PROPERTY_ENTRY_STRING("label", "mx100:green:lan2"), > - PROPERTY_ENTRY_GPIO("gpios", &gpio_ich_node, 18, GPIO_ACTIVE_HIGH), > + PROPERTY_ENTRY_GPIO("gpios", &lpc_ich_gpio_swnode, 18, GPIO_ACTIVE_HIGH), > { } > }; > > @@ -62,7 +57,7 @@ static const struct software_node tink_lan2_led_node = { > > static const struct property_entry tink_lan3_led_props[] = { > PROPERTY_ENTRY_STRING("label", "mx100:green:lan3"), > - PROPERTY_ENTRY_GPIO("gpios", &gpio_ich_node, 20, GPIO_ACTIVE_HIGH), > + PROPERTY_ENTRY_GPIO("gpios", &lpc_ich_gpio_swnode, 20, GPIO_ACTIVE_HIGH), > { } > }; > > @@ -74,7 +69,7 @@ static const struct software_node tink_lan3_led_node = { > > static const struct property_entry tink_lan4_led_props[] = { > PROPERTY_ENTRY_STRING("label", "mx100:green:lan4"), > - PROPERTY_ENTRY_GPIO("gpios", &gpio_ich_node, 22, GPIO_ACTIVE_HIGH), > + PROPERTY_ENTRY_GPIO("gpios", &lpc_ich_gpio_swnode, 22, GPIO_ACTIVE_HIGH), > { } > }; > > @@ -86,7 +81,7 @@ static const struct software_node tink_lan4_led_node = { > > static const struct property_entry tink_lan5_led_props[] = { > PROPERTY_ENTRY_STRING("label", "mx100:green:lan5"), > - PROPERTY_ENTRY_GPIO("gpios", &gpio_ich_node, 23, GPIO_ACTIVE_HIGH), > + PROPERTY_ENTRY_GPIO("gpios", &lpc_ich_gpio_swnode, 23, GPIO_ACTIVE_HIGH), > { } > }; > > @@ -98,7 +93,7 @@ static const struct software_node tink_lan5_led_node = { > > static const struct property_entry tink_lan6_led_props[] = { > PROPERTY_ENTRY_STRING("label", "mx100:green:lan6"), > - PROPERTY_ENTRY_GPIO("gpios", &gpio_ich_node, 32, GPIO_ACTIVE_HIGH), > + PROPERTY_ENTRY_GPIO("gpios", &lpc_ich_gpio_swnode, 32, GPIO_ACTIVE_HIGH), > { } > }; > > @@ -110,7 +105,7 @@ static const struct software_node tink_lan6_led_node = { > > static const struct property_entry tink_lan7_led_props[] = { > PROPERTY_ENTRY_STRING("label", "mx100:green:lan7"), > - PROPERTY_ENTRY_GPIO("gpios", &gpio_ich_node, 34, GPIO_ACTIVE_HIGH), > + PROPERTY_ENTRY_GPIO("gpios", &lpc_ich_gpio_swnode, 34, GPIO_ACTIVE_HIGH), > { } > }; > > @@ -122,7 +117,7 @@ static const struct software_node tink_lan7_led_node = { > > static const struct property_entry tink_lan8_led_props[] = { > PROPERTY_ENTRY_STRING("label", "mx100:green:lan8"), > - PROPERTY_ENTRY_GPIO("gpios", &gpio_ich_node, 35, GPIO_ACTIVE_HIGH), > + PROPERTY_ENTRY_GPIO("gpios", &lpc_ich_gpio_swnode, 35, GPIO_ACTIVE_HIGH), > { } > }; > > @@ -134,7 +129,7 @@ static const struct software_node tink_lan8_led_node = { > > static const struct property_entry tink_lan9_led_props[] = { > PROPERTY_ENTRY_STRING("label", "mx100:green:lan9"), > - PROPERTY_ENTRY_GPIO("gpios", &gpio_ich_node, 36, GPIO_ACTIVE_HIGH), > + PROPERTY_ENTRY_GPIO("gpios", &lpc_ich_gpio_swnode, 36, GPIO_ACTIVE_HIGH), > { } > }; > > @@ -146,7 +141,7 @@ static const struct software_node tink_lan9_led_node = { > > static const struct property_entry tink_lan10_led_props[] = { > PROPERTY_ENTRY_STRING("label", "mx100:green:lan10"), > - PROPERTY_ENTRY_GPIO("gpios", &gpio_ich_node, 37, GPIO_ACTIVE_HIGH), > + PROPERTY_ENTRY_GPIO("gpios", &lpc_ich_gpio_swnode, 37, GPIO_ACTIVE_HIGH), > { } > }; > > @@ -158,7 +153,7 @@ static const struct software_node tink_lan10_led_node = { > > static const struct property_entry tink_lan11_led_props[] = { > PROPERTY_ENTRY_STRING("label", "mx100:green:lan11"), > - PROPERTY_ENTRY_GPIO("gpios", &gpio_ich_node, 48, GPIO_ACTIVE_HIGH), > + PROPERTY_ENTRY_GPIO("gpios", &lpc_ich_gpio_swnode, 48, GPIO_ACTIVE_HIGH), > { } > }; > > @@ -170,7 +165,7 @@ static const struct software_node tink_lan11_led_node = { > > static const struct property_entry tink_ha_green_led_props[] = { > PROPERTY_ENTRY_STRING("label", "mx100:green:ha"), > - PROPERTY_ENTRY_GPIO("gpios", &gpio_ich_node, 16, GPIO_ACTIVE_LOW), > + PROPERTY_ENTRY_GPIO("gpios", &lpc_ich_gpio_swnode, 16, GPIO_ACTIVE_LOW), > { } > }; > > @@ -182,7 +177,7 @@ static const struct software_node tink_ha_green_led_node = { > > static const struct property_entry tink_ha_orange_led_props[] = { > PROPERTY_ENTRY_STRING("label", "mx100:orange:ha"), > - PROPERTY_ENTRY_GPIO("gpios", &gpio_ich_node, 7, GPIO_ACTIVE_LOW), > + PROPERTY_ENTRY_GPIO("gpios", &lpc_ich_gpio_swnode, 7, GPIO_ACTIVE_LOW), > { } > }; > > @@ -194,7 +189,7 @@ static const struct software_node tink_ha_orange_led_node = { > > static const struct property_entry tink_usb_green_led_props[] = { > PROPERTY_ENTRY_STRING("label", "mx100:green:usb"), > - PROPERTY_ENTRY_GPIO("gpios", &gpio_ich_node, 21, GPIO_ACTIVE_LOW), > + PROPERTY_ENTRY_GPIO("gpios", &lpc_ich_gpio_swnode, 21, GPIO_ACTIVE_LOW), > { } > }; > > @@ -206,7 +201,7 @@ static const struct software_node tink_usb_green_led_node = { > > static const struct property_entry tink_usb_orange_led_props[] = { > PROPERTY_ENTRY_STRING("label", "mx100:orange:usb"), > - PROPERTY_ENTRY_GPIO("gpios", &gpio_ich_node, 19, GPIO_ACTIVE_LOW), > + PROPERTY_ENTRY_GPIO("gpios", &lpc_ich_gpio_swnode, 19, GPIO_ACTIVE_LOW), > { } > }; > > @@ -230,7 +225,7 @@ static const struct software_node tink_gpio_keys_node = { > static const struct property_entry tink_reset_key_props[] = { > PROPERTY_ENTRY_U32("linux,code", KEY_RESTART), > PROPERTY_ENTRY_STRING("label", "Reset"), > - PROPERTY_ENTRY_GPIO("gpios", &gpio_ich_node, 60, GPIO_ACTIVE_LOW), > + PROPERTY_ENTRY_GPIO("gpios", &lpc_ich_gpio_swnode, 60, GPIO_ACTIVE_LOW), > PROPERTY_ENTRY_U32("linux,input-type", EV_KEY), > PROPERTY_ENTRY_U32("debounce-interval", 100), > { } > @@ -243,7 +238,6 @@ static const struct software_node tink_reset_key_node = { > }; > > static const struct software_node *tink_swnodes[] = { > - &gpio_ich_node, > /* LEDs nodes */ > &tink_gpio_leds_node, > &tink_internet_led_node, > @@ -348,3 +342,4 @@ MODULE_AUTHOR("Chris Blake <chrisrblake93@gmail.com>"); > MODULE_DESCRIPTION("Cisco Meraki MX100 Platform Driver"); > MODULE_LICENSE("GPL"); > MODULE_ALIAS("platform:meraki-mx100"); > +MODULE_IMPORT_NS("LPC_ICH"); > > ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2026-03-09 10:06 UTC | newest] Thread overview: 8+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2026-02-18 10:48 [PATCH v2 0/2] platform/x86: meraki-mx100: create and use real software node links Bartosz Golaszewski 2026-02-18 10:48 ` [PATCH v2 1/2] mfd: lpc_ich: expose the GPIO controller cell's software node Bartosz Golaszewski 2026-03-06 12:53 ` (subset) " Lee Jones 2026-03-06 13:34 ` Bartosz Golaszewski 2026-03-09 9:55 ` Lee Jones 2026-03-09 10:05 ` Bartosz Golaszewski 2026-02-18 10:48 ` [PATCH v2 2/2] platform/x86: meraki-mx100: use real software node references Bartosz Golaszewski 2026-02-23 14:16 ` Ilpo Järvinen
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.