Commit 98a1b2d7 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull i2c fixes from Wolfram Sang:
 "I2C core fix replacing IS_ENABLED() with IS_REACHABLE()

  For host drivers, there are two fixes:

   - Tegra I2C Controller: Addresses a potential double-locking issue
     during probe. ACPI devices are not IRQ-safe when invoking runtime
     suspend and resume functions, so the irq_safe flag should not be
     set.

   - Qualcomm GENI I2C Controller: Fixes an oversight in the exit path
     of the runtime_resume() function, which was missed in the previous
     release"

* tag 'i2c-for-6.11-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux:
  i2c: tegra: Do not mark ACPI devices as irq safe
  i2c: Use IS_REACHABLE() for substituting empty ACPI functions
  i2c: qcom-geni: Add missing geni_icc_disable in geni_i2c_runtime_resume
parents df6cbc62 87cea484
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -986,8 +986,10 @@ static int __maybe_unused geni_i2c_runtime_resume(struct device *dev)
		return ret;

	ret = clk_prepare_enable(gi2c->core_clk);
	if (ret)
	if (ret) {
		geni_icc_disable(&gi2c->se);
		return ret;
	}

	ret = geni_se_resources_on(&gi2c->se);
	if (ret) {
+2 −2
Original line number Diff line number Diff line
@@ -1802,9 +1802,9 @@ static int tegra_i2c_probe(struct platform_device *pdev)
	 * domain.
	 *
	 * VI I2C device shouldn't be marked as IRQ-safe because VI I2C won't
	 * be used for atomic transfers.
	 * be used for atomic transfers. ACPI device is not IRQ safe also.
	 */
	if (!IS_VI(i2c_dev))
	if (!IS_VI(i2c_dev) && !has_acpi_companion(i2c_dev->dev))
		pm_runtime_irq_safe(i2c_dev->dev);

	pm_runtime_enable(i2c_dev->dev);
+1 −1
Original line number Diff line number Diff line
@@ -1066,7 +1066,7 @@ static inline int of_i2c_get_board_info(struct device *dev,
struct acpi_resource;
struct acpi_resource_i2c_serialbus;

#if IS_ENABLED(CONFIG_ACPI) && IS_ENABLED(CONFIG_I2C)
#if IS_REACHABLE(CONFIG_ACPI) && IS_REACHABLE(CONFIG_I2C)
bool i2c_acpi_get_i2c_resource(struct acpi_resource *ares,
			       struct acpi_resource_i2c_serialbus **i2c);
int i2c_acpi_client_count(struct acpi_device *adev);