From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pl1-f178.google.com (mail-pl1-f178.google.com [209.85.214.178]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7C38E3D9029 for ; Fri, 14 Aug 2026 10:07:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.178 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786702076; cv=none; b=tnLEF+leJoTOOZH7METP+toMSmIkY4YhO4Ae/ggW1X73feSIqf9pu1QvVq3TQGOMFLCf+ZsGa4Vnxqc0jjZpOLwwyMi4p2j8OrRUSENDc7IoXjNh7FgEQHBNP6pQTkZkMmMp0SxH+yl5jJBAccfG+ZmyJLp9gH5zphXRMJyT6XA= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786702076; c=relaxed/simple; bh=fHvEGpLk2MRNJYnz+NoIq8PHpNOU4Mz9S3vE9ZvlegQ=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=E0ax08AtTT0aNDQ3hz7dJuN8bnzgmRH0wPpOr9zeJPDlqeWdHh8WvA2FVgl/egz1tmXC9QQ03QLBgu3Eev/t5HaO9KgRJZVKEKoenCwKuwowWoKgv6cT7Ku8aLv9V/HsL/mSzJGZmN3G194/E6zbFpiTJ6DX3TH4h7WgFg8WXYY= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=ezhUJP/D; arc=none smtp.client-ip=209.85.214.178 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="ezhUJP/D" Received: by mail-pl1-f178.google.com with SMTP id d9443c01a7336-2ce87c7e3bbso10832865ad.1 for ; Fri, 14 Aug 2026 03:07:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786702063; x=1787306863; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to:content-type; bh=17GpjZ9iDTHmCeh6FQtMXZ5sjTZjc7sv++Y5IXPlka4=; b=ezhUJP/D09wATb11dOOsFk/Gd6yI0E5nWUi3r982OE5oaPSa9VTT5tstZW2oV5HI2U fyPHOx/anOZGdpbz9RE92meoZOTo14DqPkfNDNQaJVA66VJXKhHZxOV5HH9CuFwKM+8K 08s83z+sFWrEY9gvhUKERaeWVL9vV83+iZu9/JnFlD8KJso7wLQaiRn2TyONtKzXdFMX /G3dVFKpz2K+JlOY6KK6mJcVAeKXBG82/XpezyLFRrb5wXDm6dqVLuBR9JUDJKjKmF7N pHs7yYvjcWagsf1HBHNaebQROJMf3EqQFs5+TmglwqYY55fS+MgEQHht2+Skly0Rr948 r8UQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786702063; x=1787306863; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=17GpjZ9iDTHmCeh6FQtMXZ5sjTZjc7sv++Y5IXPlka4=; b=dw5t3900zwChTC/iliSooEdTMv76chcftUv1THOEvxXf5nGkAhCDpt2c3khEvl0MQ2 x5gPpum2ywwNM6sHCmUm1BBG4iatoyDl6QIGEwA0Z/fuBNNcW8gcVcKBVv3Lih/HRHq5 vQfFoJQSvT4i268lSW8zX83xBhc05AMMCaXaakqI9W7tNxSW0Gvx2f21nXoH0oB92btL +YIo3UES043FQ5st8uyP/uxh1XZO1ahbjMCuBa1W493Ej/FWL3ZH1c8M6PysD1hdpsWC ubOmReubknILi6Jc8sgVjidOTZ/fF9tSeiw6+OjPpa/7NvYwZZJl4IUwEzNcFvnhHSbt Q8cQ== X-Forwarded-Encrypted: i=1; AHgh+RpYQTV4+fpCD73M/NIHtDj5TKjY0IHZQ+mKGS/cpQnpoGmsLAQvWNaMTAv5fcEG6f3+D/uxhb5P9NDB9FE=@vger.kernel.org X-Gm-Message-State: AOJu0YzlDe3JPOsJ2P4wjh/NucAIxs9ILBp1y5XNwV9jMVCJzznFvv40 Tk+HrgLJZCkbtmZN9FGYo6bwg8NOHzMJOQ43wq1AVqXlL3SsVwjCoWEr X-Gm-Gg: AR+sD11OkEqJeCQy+RxmfLFRThgFgr5Ps3hpQiSYYJo+7oWFONu/rmrCB8VmaGam/NF 920SdSJU2psJOhEO3VugThBSitOGSjbTWafmVXOdCOIpPQWcw4OE9GIhGEfUkfCvv1tDUrGt2wW DJ5aGg+uy2FLMgFR9L+giqS5ivkiLJJLLip4YcmrbRL658bwRxqWshqcUQavKWPxZJca0rBYL3T lhyxlA63pg5hOiFUL3ZCnkQYz+XPL3/D0e6BPptvbdp8Mw7JOkQGPrDR0/FPUJ3a5ZzCH2IEGHM lW+HzMfuXSNLO38++A4Yuu8mMJ/YZwGZ333EKV9n/pDqN2tnF9+5xD9P+U5AJl9ipXkX9NzXX4r SQ9ytPXsQoyM6p3zOBCYEWhzD6Gl3d5WEd99eLulh7diUaiJlgemnT/0S4M1Rd2FCGLNcOcvz1w atQ5VXd4vb5O+/MGgr31VNFw47cBDPNu/VI45ZIvW0ZHe5KVXW1TGCu9Tql46dCptShi3ah5Np5 QweGotIQQ/ajK2K0OCZ15BcwiL+Q7mSRahWohxE/8zEpqOYURulO6Y0PaSR1MUNavja/lBb8OC0 tHYC/M0+5N1Yip2AjRlNaI6P8tseVFEqVEYaJ/rS+VIq6PBX X-Received: by 2002:a05:6a20:4388:b0:3c1:fbf:1e2e with SMTP id adf61e73a8af0-3cc71abd254mr5461785637.10.1786702062996; Fri, 14 Aug 2026 03:07:42 -0700 (PDT) Received: from hardik-yoga.oryx-cobra.ts.net ([2401:4900:1c63:eba:8431:2d12:e0ed:5dd0]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-320d60ecdd0sm3323961eec.9.2026.08.14.03.07.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 14 Aug 2026 03:07:42 -0700 (PDT) From: Hardik Prakash To: linux-i2c@vger.kernel.org Cc: linux-gpio@vger.kernel.org, wsa@kernel.org, andriy.shevchenko@intel.com, mario.limonciello@amd.com, brgl@bgdev.pl, basavaraj.natikar@amd.com, linusw@kernel.org, nathan@kernel.org, chaitanya.kumar.borah@intel.com, andi.shyti@kernel.org, linux@leemhuis.info, regressions@leemhuis.info, linux-kernel@vger.kernel.org, Hardik Prakash Subject: [PATCH] Revert "i2c: designware: defer probe if child GpioInt controllers are not bound" Date: Fri, 14 Aug 2026 15:37:19 +0530 Message-ID: <20260814100719.9548-1-hardikprakash.official@gmail.com> X-Mailer: git-send-email 2.55.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit This reverts commit 0a4bb2abc3e56d7be6e69b050c88ba52c87e22bf. The reverted commit causes a regression on ThinkPad T14s Gen 4 (AMD): the touchpad's I2C controller fails with lost arbitration errors, because it delays i2c-designware's probe by roughly 500ms, which shifts the touchpad's first HID descriptor fetch into a window where the platform's embedded controller is still acting as a secondary I2C bus master. Debug tracing confirms the GpioInt dependency check itself behaves correctly (it defers appropriately and confirms the GPIO controller is bound); the arbitration failure happens roughly a second after the check passes, when i2c_hid_acpi's own probe attempts its first transaction. The original fix is still needed for the Lenovo Yoga 7 14AGP11 touchscreen race the commit addressed, but a corrected version will be resubmitted once the EC bus-mastering interaction is understood and handled properly, rather than reintroducing a different regression on more widely-used ThinkPad hardware in the meantime. Reported-by: Thorsten Leemhuis Closes: https://lore.kernel.org/all/b4a4eadb-282f-464c-843a-19d415a34d0c@leemhuis.info/ Signed-off-by: Hardik Prakash --- drivers/i2c/busses/i2c-designware-platdrv.c | 80 --------------------- 1 file changed, 80 deletions(-) diff --git a/drivers/i2c/busses/i2c-designware-platdrv.c b/drivers/i2c/busses/i2c-designware-platdrv.c index c8a203fff4d1..6d6e81242f74 100644 --- a/drivers/i2c/busses/i2c-designware-platdrv.c +++ b/drivers/i2c/busses/i2c-designware-platdrv.c @@ -8,14 +8,12 @@ * Copyright (C) 2007 MontaVista Software Inc. * Copyright (C) 2009 Provigent Ltd. */ -#include #include #include #include #include #include #include -#include #include #include #include @@ -132,80 +130,6 @@ static int i2c_dw_probe_lock_support(struct dw_i2c_dev *dev) return 0; } -#if defined(CONFIG_ACPI) && defined(CONFIG_GPIOLIB) -/* - * Check whether an ACPI GpioInt resource's referenced GPIO controller - * has finished probing. Resources with no named controller (resource - * source string) are skipped, since they can't be resolved to a - * struct device. - */ -static int check_gpioint_resource(struct acpi_resource *ares, void *data) -{ - struct acpi_resource_gpio *agpio; - struct acpi_device *gpio_adev; - struct device *gpio_dev; - acpi_handle handle; - acpi_status status; - - if (!acpi_gpio_get_irq_resource(ares, &agpio)) - return 1; /* not a GpioInt resource, skip */ - - if (!agpio->resource_source.string_length) - return 1; /* no named controller, skip */ - - status = acpi_get_handle(NULL, agpio->resource_source.string_ptr, &handle); - if (ACPI_FAILURE(status)) - return 1; - - gpio_adev = acpi_fetch_acpi_dev(handle); - if (!gpio_adev) - return 1; - - struct gpio_device *gdev __free(gpio_device_put) = - gpio_device_find_by_fwnode(acpi_fwnode_handle(gpio_adev)); - if (!gdev) - return -EPROBE_DEFER; /* controller not registered yet: abort walk */ - - gpio_dev = gpio_device_to_device(gdev)->parent; - - guard(device)(gpio_dev); - if (!device_is_bound(gpio_dev)) - return -EPROBE_DEFER; /* controller not bound yet: abort walk */ - - return 1; /* bound, skip adding to resource list, continue walk */ -} - -static int check_child_gpioint(struct acpi_device *adev, void *data) -{ - LIST_HEAD(res_list); - int ret; - - ret = acpi_dev_get_resources(adev, &res_list, check_gpioint_resource, NULL); - if (ret < 0) - return ret; - - acpi_dev_free_resource_list(&res_list); - - return 0; -} - -static int i2c_dw_check_gpio_dependencies(struct device *dev) -{ - struct acpi_device *adev; - - adev = ACPI_COMPANION(dev); - if (!adev) - return 0; - - return acpi_dev_for_each_child(adev, check_child_gpioint, NULL); -} -#else -static int i2c_dw_check_gpio_dependencies(struct device *dev) -{ - return 0; -} -#endif /* CONFIG_ACPI && CONFIG_GPIOLIB */ - static int dw_i2c_plat_probe(struct platform_device *pdev) { u32 flags = (uintptr_t)device_get_match_data(&pdev->dev); @@ -214,10 +138,6 @@ static int dw_i2c_plat_probe(struct platform_device *pdev) struct dw_i2c_dev *dev; int irq, ret; - ret = i2c_dw_check_gpio_dependencies(device); - if (ret) - return ret; - irq = platform_get_irq_optional(pdev, 0); if (irq == -ENXIO) flags |= ACCESS_POLLING; base-commit: 3d6d817622b0a9721e3cc404df3469171582be13 -- 2.55.0