[PATCH] pinctrl: denverton: Fix probe of MFD-created platform device

Radek Válko <[email protected]>
Newsgroups org.kernel.vger.linux-gpio,org.kernel.vger.linux-kernel
Message-ID <[email protected]>
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 <[email protected]>
---
 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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.