From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-13.0 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id D93C7C433E0 for ; Tue, 4 Aug 2020 10:03:25 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id CBA4222B40 for ; Tue, 4 Aug 2020 10:03:25 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="v/jb5+h7"; dkim=fail reason="signature verification failed" (2048-bit key) header.d=microchip.com header.i=@microchip.com header.b="GtX6oL+Q" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org CBA4222B40 Authentication-Results: mail.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=microchip.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To:Message-ID:Date: Subject:To:From:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=sydDaPpLdun1jAYIhs5ckH6oL8yIgDOVCLycNtaK8WQ=; b=v/jb5+h74va5+gJjxuXSO2cMn ufFiu6q1qv5GgQIrIfri9owWwmeoQkI28WbWAFj+Yy/N8D+Oo5gti15yTd6Q4496TAjGsMiXAN9Fb MiZUaddGpntO4ZKH3g+5vPgSNPqDnil0x7e6BVzZF+p2qqIdJcZXhB6RParSrQlBjJllJzomAQ0kx 7M6Gj8TDC6MbUP/fh5r1vU87C+5wWyyrSKedqJsnFRoVkc3FJcOsN0Dvx+11mWSplYkpbOASJFAo4 F1wfWhBddhM8Yrdj4fbymqrFolc+dhgKYqYwmWvHgLCCgJZK351VNcs3e7lhzMU3G+fHVscapeF0p oG7UClY0g==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1k2tls-0004TO-9w; Tue, 04 Aug 2020 10:02:12 +0000 Received: from esa3.microchip.iphmx.com ([68.232.153.233]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1k2tlo-0004Rh-5X for linux-arm-kernel@lists.infradead.org; Tue, 04 Aug 2020 10:02:09 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=microchip.com; i=@microchip.com; q=dns/txt; s=mchp; t=1596535328; x=1628071328; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=2QQDoQ+rXHqAJ/jTJVuyzZWARBCmlwXj8iiuOYtPzTE=; b=GtX6oL+QjCwXwz+29tFQsEqvldYBTSrlRkVQCGFqQhoez4usu4320PCD LvD01EyttdQvaTkbTDIKDcy3GOlQ2cnbPe10fZHoHmK62uoJWeo7gd+En DGrCf69QgCcLtEf+P7UGcTKNrMedd0VvYo83liUqcCn+fWsExM7yILL8f tk2d1NTCYsjOs+A3pxFvyiHESMyiHmQzu4LsCjkMvbBR8A10BgckvCIjy uA+/8qvKNUahNQiIK3F7f19tCKx7ArLJmHz4QXJ9NMWDgyEC+5kvW+aaA dMsccIQYWFihfdxYO3i0mOTwwQlJvyWM51TU8KwaHe/rk4guO04qTePi7 g==; IronPort-SDR: ddqle0Lzj7PH1UgxkECezH1kBLn0RgGKentPyLD9rwkpe5YpcRr+/nj1fKE+8sa7Ns5eojhvGI nnOuxQeQ1YHfy5pTL/Y0RHRjxqtthOsX3ejqOBrvgUl3JITt0OEobMMvbPwXRA/pnD3sI8afWc zA6tVTBnxwzt4tJ1sdvLi0krO0fsB3J4ObHS68J8ObeUD/S+UOySkt3eIrN9yLPm33cT6ygfcb YokG7fHcg3+DPcjxifGFacbRaIoije/IpScGw3Zl/NaL0DwMQvHWl4DZJStfVD4zArSVRQWJyM MQs= X-IronPort-AV: E=Sophos;i="5.75,433,1589266800"; d="scan'208";a="86620572" Received: from smtpout.microchip.com (HELO email.microchip.com) ([198.175.253.82]) by esa3.microchip.iphmx.com with ESMTP/TLS/AES256-SHA256; 04 Aug 2020 03:02:07 -0700 Received: from chn-vm-ex02.mchp-main.com (10.10.87.72) by chn-vm-ex02.mchp-main.com (10.10.87.72) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1979.3; Tue, 4 Aug 2020 03:02:04 -0700 Received: from rob-ult-m19940.microchip.com (10.10.115.15) by chn-vm-ex02.mchp-main.com (10.10.85.144) with Microsoft SMTP Server id 15.1.1979.3 via Frontend Transport; Tue, 4 Aug 2020 03:01:21 -0700 From: Codrin Ciubotariu To: , , , Subject: [PATCH 3/4] i2c: core: treat EPROBE_DEFER when acquiring SCL/SDA GPIOs Date: Tue, 4 Aug 2020 12:59:25 +0300 Message-ID: <20200804095926.205643-4-codrin.ciubotariu@microchip.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200804095926.205643-1-codrin.ciubotariu@microchip.com> References: <20200804095926.205643-1-codrin.ciubotariu@microchip.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200804_060208_368689_27989377 X-CRM114-Status: GOOD ( 14.34 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: kamel.bouhara@bootlin.com, alexandre.belloni@bootlin.com, linux@armlinux.org.uk, wsa@kernel.org, ludovic.desroches@microchip.com, robh+dt@kernel.org, Codrin Ciubotariu Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Even if I2C bus GPIO recovery is optional, devm_gpiod_get() can return -EPROBE_DEFER, so we should at least treat that. This ends up with i2c_register_adapter() to be able to return -EPROBE_DEFER. Signed-off-by: Codrin Ciubotariu --- Changes from RFC: - return -EINVAL if i2c_init_recovery() doesn't have the complete information; - 'else if' added when checking if i2c_generic_scl_recovery() is used; - moved i2c_init_recovery() before class-link creation; class-link cleanup removed; - moved debug print when the adapter is probed after call to i2c_init_recovery(); drivers/i2c/i2c-core-base.c | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/drivers/i2c/i2c-core-base.c b/drivers/i2c/i2c-core-base.c index cf0c5eb152e1..99dbaead269e 100644 --- a/drivers/i2c/i2c-core-base.c +++ b/drivers/i2c/i2c-core-base.c @@ -375,15 +375,16 @@ static int i2c_gpio_init_recovery(struct i2c_adapter *adap) return i2c_gpio_init_generic_recovery(adap); } -static void i2c_init_recovery(struct i2c_adapter *adap) +static int i2c_init_recovery(struct i2c_adapter *adap) { struct i2c_bus_recovery_info *bri = adap->bus_recovery_info; char *err_str; if (!bri) - return; + return 0; - i2c_gpio_init_recovery(adap); + if (i2c_gpio_init_recovery(adap) == -EPROBE_DEFER) + return -EPROBE_DEFER; if (!bri->recover_bus) { err_str = "no recover_bus() found"; @@ -399,10 +400,7 @@ static void i2c_init_recovery(struct i2c_adapter *adap) if (gpiod_get_direction(bri->sda_gpiod) == 0) bri->set_sda = set_sda_gpio_value; } - return; - } - - if (bri->recover_bus == i2c_generic_scl_recovery) { + } else if (bri->recover_bus == i2c_generic_scl_recovery) { /* Generic SCL recovery */ if (!bri->set_scl || !bri->get_scl) { err_str = "no {get|set}_scl() found"; @@ -414,10 +412,12 @@ static void i2c_init_recovery(struct i2c_adapter *adap) } } - return; + return 0; err: dev_err(&adap->dev, "Not using recovery: %s\n", err_str); adap->bus_recovery_info = NULL; + + return -EINVAL; } static int i2c_smbus_host_notify_to_irq(const struct i2c_client *client) @@ -1444,12 +1444,16 @@ static int i2c_register_adapter(struct i2c_adapter *adap) if (res) goto out_reg; - dev_dbg(&adap->dev, "adapter [%s] registered\n", adap->name); - pm_runtime_no_callbacks(&adap->dev); pm_suspend_ignore_children(&adap->dev, true); pm_runtime_enable(&adap->dev); + res = i2c_init_recovery(adap); + if (res == -EPROBE_DEFER) + goto out_reg; + + dev_dbg(&adap->dev, "adapter [%s] registered\n", adap->name); + #ifdef CONFIG_I2C_COMPAT res = class_compat_create_link(i2c_adapter_compat_class, &adap->dev, adap->dev.parent); @@ -1458,8 +1462,6 @@ static int i2c_register_adapter(struct i2c_adapter *adap) "Failed to create compatibility class link\n"); #endif - i2c_init_recovery(adap); - /* create pre-declared device nodes */ of_i2c_register_devices(adap); i2c_acpi_register_devices(adap); -- 2.25.1 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel