Hi > 2026年7月8日 19:36,Bartosz Golaszewski <[email protected]> 写道: > > On Tue, 7 Jul 2026 23:16:31 +0200, Miao Wang via B4 Relay > <[email protected]> said: >> From: Miao Wang <[email protected]> >> >> The reset event of BMC is captured through GPIO. However, this driver >> bypasses the GPIO framework and directly accesses the GPIO controller >> through the fixed address. When the same GPIO controller is also >> exposed through ACPI and probed by the corresponding GPIO driver, >> there would be a conflict between the two drivers. >> >> This patch will try to find the GPIO through declared GPIO pin in the >> _CRS resources of the ACPI node. If no such delaration is found, the >> driver will fall back to search for the correct GPIO controller and pin >> according to the fixed address and pin number. A possible DSDT >> declaration for the GPIO pin might be as follows: >> >> Device (BMC0) { >> Name (_ADR, ...) // Match the PCI address of the BMC device >> // \_SB.GPO1 is the ACPI path of the GPIO controller >> Name (_CRS, ResourceTemplate () { >> GpioInt (Edge, ActiveLow, Exclusive, PullNone, 0, >> "\\_SB.GPO1", 0) { >> 14 // 14 is the GPIO pin number >> } >> } >> >> Signed-off-by: Miao Wang <[email protected]> >> --- >> drivers/mfd/ls2k-bmc-core.c | 162 >> +++++++++++++++++++++++++++++++------------- >> 1 file changed, 115 insertions(+), 47 deletions(-) >> >> diff --git a/drivers/mfd/ls2k-bmc-core.c b/drivers/mfd/ls2k-bmc-core.c >> index >> f87224105b3720cca97dcef089dad63fe57bc8c2..7187b2dfddc3acfb9fdf3cb3b4675299928dd03a >> 100644 >> --- a/drivers/mfd/ls2k-bmc-core.c >> +++ b/drivers/mfd/ls2k-bmc-core.c >> @@ -26,6 +26,9 @@ >> #include <linux/stop_machine.h> >> #include <linux/vt_kern.h> >> #include <linux/console.h> >> +#include <linux/gpio/consumer.h> >> +#include <linux/gpio/driver.h> >> +#include <linux/gpio.h> > > I've stopped here because this is a legacy header that must not be included > and none of the interfaces in it must be used, as per the - very loud - > comment > at the top of that file.
I fully understand using the legacy interface is deprecated. However, there seems no other way to obtain a gpio line description after a gpio device is found using gpio_device_find(). As the comment shows in the code below, the only place I use the legacy interface is: gdev = gpio_device_find(...); desc = gpio_device_get_desc(gdev, LS2K_BMC_RESET_GPIO); // XXX: might be better to use gpiod_request() legacy_gpio = desc_to_gpio(desc); devm_gpio_request_one(..., legacy_gpio, ...); return gpio_to_desc(legacy_gpio); I just borrowed the legacy gpio interface to request the irq description. I think that gpiod_request() should be better to be used here, but it is not an interface that is exposed. As a result, I post this patch as a PoC here to discuss and find a better way to achieve this. Cheers, Miao Wang _______________________________________________ Openipmi-developer mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/openipmi-developer
