drivers/pinctrl/intel/pinctrl-denverton.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-)
The Denverton pinctrl device can be instantiated by the Intel LPC
driver as an MFD platform device named "denverton-pinctrl".
On affected systems the platform device does not carry the INTC3000
ACPI match data itself. As a result, intel_pinctrl_probe_by_hid()
fails to obtain the SoC data using device_get_match_data() and
returns -ENODATA.
This results in:
denverton-pinctrl denverton-pinctrl.0:
probe with driver denverton-pinctrl failed with error -61
Denverton has a single fixed intel_pinctrl_soc_data instance. Pass
dnv_soc_data directly to intel_pinctrl_probe() instead of requiring
firmware match data for the MFD-created platform device.
Tested on an Intel Atom C3000 system with LPC/eSPI device 8086:19dc.
Before this change the Denverton pinctrl driver failed to probe and
no Denverton GPIO controller was registered. After the change,
denverton-pinctrl.0 registers with pinmux and pinconf support and
exposes 154 GPIO lines.
Signed-off-by: Radek Válko <rvalko@lipicko.cz>
---
drivers/pinctrl/intel/pinctrl-denverton.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/drivers/pinctrl/intel/pinctrl-denverton.c b/drivers/pinctrl/intel/pinctrl-denverton.c
--- a/drivers/pinctrl/intel/pinctrl-denverton.c
+++ b/drivers/pinctrl/intel/pinctrl-denverton.c
@@ -250,6 +250,11 @@ static const struct intel_pinctrl_soc_data dnv_soc_data = {
.ncommunities = ARRAY_SIZE(dnv_communities),
};
+static int dnv_pinctrl_probe(struct platform_device *pdev)
+{
+ return intel_pinctrl_probe(pdev, &dnv_soc_data);
+}
+
static const struct acpi_device_id dnv_pinctrl_acpi_match[] = {
{ "INTC3000", (kernel_ulong_t)&dnv_soc_data },
{ }
@@ -263,7 +268,7 @@ static const struct platform_device_id dnv_pinctrl_platform_ids[] = {
MODULE_DEVICE_TABLE(platform, dnv_pinctrl_platform_ids);
static struct platform_driver dnv_pinctrl_driver = {
- .probe = intel_pinctrl_probe_by_hid,
+ .probe = dnv_pinctrl_probe,
.driver = {
.name = "denverton-pinctrl",
.acpi_match_table = dnv_pinctrl_acpi_match,
--
2.47.0
On Thu, Aug 27, 2026 at 08:42:58PM +0200, Radek Válko wrote: > The Denverton pinctrl device can be instantiated by the Intel LPC > driver as an MFD platform device named "denverton-pinctrl". > > On affected systems the platform device does not carry the INTC3000 > ACPI match data itself. As a result, intel_pinctrl_probe_by_hid() > fails to obtain the SoC data using device_get_match_data() and > returns -ENODATA. > > This results in: > > denverton-pinctrl denverton-pinctrl.0: > probe with driver denverton-pinctrl failed with error -61 > > Denverton has a single fixed intel_pinctrl_soc_data instance. Pass > dnv_soc_data directly to intel_pinctrl_probe() instead of requiring > firmware match data for the MFD-created platform device. > > Tested on an Intel Atom C3000 system with LPC/eSPI device 8086:19dc. > Before this change the Denverton pinctrl driver failed to probe and > no Denverton GPIO controller was registered. After the change, > denverton-pinctrl.0 registers with pinmux and pinconf support and > exposes 154 GPIO lines. Thanks for the report. Can you instead try to replace device_get_match_data() in intel_pinctrl_probe_by_hid() by intel_pinctrl_get_soc_data() in the way how it's done in intel_pinctrl_probe_by_uid()? -- With Best Regards, Andy Shevchenko
On Thu, Aug 27, 2026 at 09:52:40PM +0300, Andy Shevchenko wrote: > On Thu, Aug 27, 2026 at 08:42:58PM +0200, Radek Válko wrote: > > The Denverton pinctrl device can be instantiated by the Intel LPC > > driver as an MFD platform device named "denverton-pinctrl". > > > > On affected systems the platform device does not carry the INTC3000 > > ACPI match data itself. As a result, intel_pinctrl_probe_by_hid() > > fails to obtain the SoC data using device_get_match_data() and > > returns -ENODATA. > > > > This results in: > > > > denverton-pinctrl denverton-pinctrl.0: > > probe with driver denverton-pinctrl failed with error -61 > > > > Denverton has a single fixed intel_pinctrl_soc_data instance. Pass > > dnv_soc_data directly to intel_pinctrl_probe() instead of requiring > > firmware match data for the MFD-created platform device. > > > > Tested on an Intel Atom C3000 system with LPC/eSPI device 8086:19dc. > > Before this change the Denverton pinctrl driver failed to probe and > > no Denverton GPIO controller was registered. After the change, > > denverton-pinctrl.0 registers with pinmux and pinconf support and > > exposes 154 GPIO lines. > > Thanks for the report. > > Can you instead try to replace device_get_match_data() in > intel_pinctrl_probe_by_hid() by intel_pinctrl_get_soc_data() in the way how > it's done in intel_pinctrl_probe_by_uid()? Ah, it won't work as direct replacement. So, the intel_pinctrl_probe_by_hid() should be modified accordingly. I will send a formal patch tomorrow. -- With Best Regards, Andy Shevchenko
© 2016 - 2026 Red Hat, Inc.