All of lore.kernel.org
 help / color / mirror / Atom feed
From: Hans de Goede <hdegoede@redhat.com>
To: "Rafael J . Wysocki" <rjw@rjwysocki.net>,
	Mark Gross <markgross@kernel.org>,
	Andy Shevchenko <andy@infradead.org>,
	Wolfram Sang <wsa@the-dreams.de>,
	Mika Westerberg <mika.westerberg@linux.intel.com>,
	Daniel Scally <djrscally@gmail.com>,
	Laurent Pinchart <laurent.pinchart@ideasonboard.com>,
	Mauro Carvalho Chehab <mchehab@kernel.org>,
	Liam Girdwood <lgirdwood@gmail.com>,
	Mark Brown <broonie@kernel.org>,
	Michael Turquette <mturquette@baylibre.com>,
	Stephen Boyd <sboyd@kernel.org>
Cc: Hans de Goede <hdegoede@redhat.com>, Len Brown <lenb@kernel.org>,
	linux-acpi@vger.kernel.org, platform-driver-x86@vger.kernel.org,
	linux-kernel@vger.kernel.org, linux-i2c@vger.kernel.org,
	Sakari Ailus <sakari.ailus@linux.intel.com>,
	Kate Hsuan <hpa@redhat.com>,
	linux-media@vger.kernel.org, linux-clk@vger.kernel.org
Subject: [PATCH v4 11/11] platform/x86: int3472: Deal with probe ordering issues
Date: Mon, 25 Oct 2021 11:41:19 +0200	[thread overview]
Message-ID: <20211025094119.82967-12-hdegoede@redhat.com> (raw)
In-Reply-To: <20211025094119.82967-1-hdegoede@redhat.com>

The clk and regulator frameworks expect clk/regulator consumer-devices
to have info about the consumed clks/regulators described in the device's
fw_node.

To work around this info missing from the ACPI tables on devices where
the int3472 driver is used, the int3472 MFD-cell drivers attach info about
consumers to the clks/regulators when registering these.

This causes problems with the probe ordering wrt drivers for consumers
of these clks/regulators. Since the lookups are only registered when the
provider-driver binds, trying to get these clks/regulators before then
results in a -ENOENT error for clks and a dummy regulator for regulators.

All the sensor ACPI fw-nodes have a _DEP dependency on the INT3472 ACPI
fw-node, so to work around these probe ordering issues the ACPI core /
i2c-code does not instantiate the I2C-clients for any ACPI devices
which have a _DEP dependency on an INT3472 ACPI device until all
_DEP-s are met.

This relies on acpi_dev_clear_dependencies() getting called by the driver
for the _DEP-s when they are ready, add a acpi_dev_clear_dependencies()
call to the discrete.c probe code.

In the tps68470 case calling acpi_dev_clear_dependencies() is already done
by the acpi_gpiochip_add() call done by the driver for the GPIO MFD cell
(The GPIO cell is deliberately the last cell created to make sure the
clk + regulator cells are already instantiated when this happens).

However for proper probe ordering, the clk/regulator cells must not just
be instantiated the must be fully ready (the clks + regulators must be
registered with their subsystems).

Add MODULE_SOFTDEP dependencies for the clk and regulator drivers for
the instantiated MFD-cells so that these are loaded before us and so
that they bind immediately when the platform-devs are instantiated.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
---
Changes in v2:
- Only call acpi_dev_clear_dependencies() in the discrete.c case, for the
  tps68470 case this is already done by the acpi_gpiochip_add() for the
  GPIO MFD cell.
---
 drivers/platform/x86/intel/int3472/discrete.c | 1 +
 drivers/platform/x86/intel/int3472/tps68470.c | 6 ++++++
 2 files changed, 7 insertions(+)

diff --git a/drivers/platform/x86/intel/int3472/discrete.c b/drivers/platform/x86/intel/int3472/discrete.c
index ff2bdbb8722c..5b514fa01a97 100644
--- a/drivers/platform/x86/intel/int3472/discrete.c
+++ b/drivers/platform/x86/intel/int3472/discrete.c
@@ -380,6 +380,7 @@ static int skl_int3472_discrete_probe(struct platform_device *pdev)
 		return ret;
 	}
 
+	acpi_dev_clear_dependencies(adev);
 	return 0;
 }
 
diff --git a/drivers/platform/x86/intel/int3472/tps68470.c b/drivers/platform/x86/intel/int3472/tps68470.c
index 5b881d6f5943..fcd872804101 100644
--- a/drivers/platform/x86/intel/int3472/tps68470.c
+++ b/drivers/platform/x86/intel/int3472/tps68470.c
@@ -174,6 +174,11 @@ static int skl_int3472_tps68470_probe(struct i2c_client *client)
 		return device_type;
 	}
 
+	/*
+	 * No acpi_dev_clear_dependencies() here, since the acpi_gpiochip_add()
+	 * for the GPIO cell already does this.
+	 */
+
 	return ret;
 }
 
@@ -207,3 +212,4 @@ module_i2c_driver(int3472_tps68470);
 MODULE_DESCRIPTION("Intel SkyLake INT3472 ACPI TPS68470 Device Driver");
 MODULE_AUTHOR("Daniel Scally <djrscally@gmail.com>");
 MODULE_LICENSE("GPL v2");
+MODULE_SOFTDEP("pre: clk-tps68470 tps68470-regulator");
-- 
2.31.1


  parent reply	other threads:[~2021-10-25  9:43 UTC|newest]

Thread overview: 44+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-10-25  9:41 [PATCH v4 00/11] Add support for X86/ACPI camera sensor/PMIC setup with clk and regulator platform data Hans de Goede
2021-10-25  9:41 ` [PATCH v4 01/11] ACPI: delay enumeration of devices with a _DEP pointing to an INT3472 device Hans de Goede
2021-10-27 18:52   ` Rafael J. Wysocki
2021-11-01 11:16     ` Hans de Goede
2021-10-25  9:41 ` [PATCH v4 02/11] i2c: acpi: Use acpi_dev_ready_for_enumeration() helper Hans de Goede
2021-10-27 18:53   ` Rafael J. Wysocki
2021-10-25  9:41 ` [PATCH v4 03/11] platform_data: Add linux/platform_data/tps68470.h file Hans de Goede
2021-10-25  9:41 ` [PATCH v4 04/11] regulator: Introduce tps68470-regulator driver Hans de Goede
2021-10-25 11:11   ` Andy Shevchenko
2021-11-01 10:20     ` Hans de Goede
2021-10-26 12:53   ` kernel test robot
2021-10-26 12:53     ` kernel test robot
2021-10-27  7:41   ` kernel test robot
2021-10-27  7:41     ` kernel test robot
2021-10-28 16:23   ` Mark Brown
2021-11-09 12:14   ` Sakari Ailus
2021-11-09 12:29     ` Andy Shevchenko
2021-11-11 15:13     ` Hans de Goede
2021-10-25  9:41 ` [PATCH v4 05/11] clk: Introduce clk-tps68470 driver Hans de Goede
2021-10-25 11:24   ` Andy Shevchenko
2021-11-01 10:27     ` Hans de Goede
2021-11-01 10:42       ` Andy Shevchenko
2021-11-01 11:00         ` Hans de Goede
2021-11-01 11:11           ` Andy Shevchenko
2021-10-27 10:23   ` kernel test robot
2021-10-27 10:23     ` kernel test robot
2021-10-25  9:41 ` [PATCH v4 06/11] platform/x86: int3472: Enable I2c daisy chain Hans de Goede
2021-10-25  9:41 ` [PATCH v4 07/11] platform/x86: int3472: Split into 2 drivers Hans de Goede
2021-10-25  9:41 ` [PATCH v4 08/11] platform/x86: int3472: Add get_sensor_adev_and_name() helper Hans de Goede
2021-10-25 11:31   ` Andy Shevchenko
2021-11-01 10:31     ` Hans de Goede
2021-11-01 10:44       ` Andy Shevchenko
2021-11-01 10:46         ` Andy Shevchenko
2021-11-01 10:49           ` Hans de Goede
2021-11-01 10:51             ` Andy Shevchenko
2021-11-01 10:48         ` Hans de Goede
2021-10-25  9:41 ` [PATCH v4 09/11] platform/x86: int3472: Pass tps68470_clk_platform_data to the tps68470-regulator MFD-cell Hans de Goede
2021-10-25 11:33   ` Andy Shevchenko
2021-10-25  9:41 ` [PATCH v4 10/11] platform/x86: int3472: Pass tps68470_regulator_platform_data " Hans de Goede
2021-10-25 11:38   ` Andy Shevchenko
2021-11-01 11:31     ` Hans de Goede
2021-11-01 14:25       ` Andy Shevchenko
2021-10-25  9:41 ` Hans de Goede [this message]
2021-10-25 11:40   ` [PATCH v4 11/11] platform/x86: int3472: Deal with probe ordering issues Andy Shevchenko

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20211025094119.82967-12-hdegoede@redhat.com \
    --to=hdegoede@redhat.com \
    --cc=andy@infradead.org \
    --cc=broonie@kernel.org \
    --cc=djrscally@gmail.com \
    --cc=hpa@redhat.com \
    --cc=laurent.pinchart@ideasonboard.com \
    --cc=lenb@kernel.org \
    --cc=lgirdwood@gmail.com \
    --cc=linux-acpi@vger.kernel.org \
    --cc=linux-clk@vger.kernel.org \
    --cc=linux-i2c@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-media@vger.kernel.org \
    --cc=markgross@kernel.org \
    --cc=mchehab@kernel.org \
    --cc=mika.westerberg@linux.intel.com \
    --cc=mturquette@baylibre.com \
    --cc=platform-driver-x86@vger.kernel.org \
    --cc=rjw@rjwysocki.net \
    --cc=sakari.ailus@linux.intel.com \
    --cc=sboyd@kernel.org \
    --cc=wsa@the-dreams.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.