From patchwork Tue Aug 4 09:59:23 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Codrin Ciubotariu X-Patchwork-Id: 254110 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=-12.8 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED, 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 9F2DAC433E0 for ; Tue, 4 Aug 2020 10:00:24 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id A34562070A for ; Tue, 4 Aug 2020 10:00:24 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=microchip.com header.i=@microchip.com header.b="aoiA1nie" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729375AbgHDKAV (ORCPT ); Tue, 4 Aug 2020 06:00:21 -0400 Received: from esa3.microchip.iphmx.com ([68.232.153.233]:33043 "EHLO esa3.microchip.iphmx.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726844AbgHDKAU (ORCPT ); Tue, 4 Aug 2020 06:00:20 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=microchip.com; i=@microchip.com; q=dns/txt; s=mchp; t=1596535220; x=1628071220; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=9iPc+xgooR96zu6gZSvzswYQ4P1VQbTGDAAFAk2BvHg=; b=aoiA1niebva4yztk7RI0oQMzjB6ZFA7QivcPdNLphbtvLhWOxJw5kXbI gypa4+tmgK2c2YL827dB56SHil2Cr2AkJ7RcWWdOUvHeA85Gpq9pUtzf9 9RqRO+b7c9xew1W7gzRU7KKkHG3lQ1DTAd0bTqsPN4x82wwI+doHMsTZM ipq+2HUGDuu+Jihhe0GMBX8Ip854cMC6u0Yz+k2Z+nfDLFor7pTshXPii 3H+cyqdbvWYxxON/0erZfyiJ1mdu6ABpi5We4rmBOOZRyQWJg/B9x7Koy lNVy/0Wqsj5GEnNQ6fPGmyNVxSXN/teZbdySmYtqlnISCncsMTKlsvmp8 g==; IronPort-SDR: Tn2DDWu0R9LqOqTqxSOTUEklWa8eCPMV8mwo0EszfQ+p8hwxQDS7gntspOFg1uPIp+xScgDMyc jtgSewwVObKQcfuUVUjakGwcp++ZWmP7rrg6WivPklx5c4XVjksXTPj0VVv4gWC3vLJHTEOY3X S7cLV9QHLuw93jsvHNbv1U/nA3Nqg1g4Xq+s+Z0RiX1k1hK0k7gHHG1+OXD9sRXK7pvUASnM42 xONQPAS7mIztE2hmr+rCqkENMcinVwI5bWIhhCMQpCWcmK5vUHh3bc084sZArY5wleO3+nwJaN XqY= X-IronPort-AV: E=Sophos;i="5.75,433,1589266800"; d="scan'208";a="86620321" 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:00:19 -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:00:17 -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 02:59:46 -0700 From: Codrin Ciubotariu To: , , , CC: , , , , , , , Codrin Ciubotariu Subject: [PATCH 1/4] dt-binding: i2c: add generic properties for GPIO bus recovery Date: Tue, 4 Aug 2020 12:59:23 +0300 Message-ID: <20200804095926.205643-2-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 Sender: devicetree-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: devicetree@vger.kernel.org The I2C GPIO bus recovery properties consist of two GPIOS and one extra pinctrl state ("gpio" or "recovery"). "recovery" pinctrl state is considered deprecated and "gpio" should be used instead. Not all are mandatory for recovery. Signed-off-by: Codrin Ciubotariu --- Changes from RFC: - "recovery" pinctrl state marked as deprecated; updated description to reflect this; Documentation/devicetree/bindings/i2c/i2c.txt | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Documentation/devicetree/bindings/i2c/i2c.txt b/Documentation/devicetree/bindings/i2c/i2c.txt index 438ae123107e..150a67da633d 100644 --- a/Documentation/devicetree/bindings/i2c/i2c.txt +++ b/Documentation/devicetree/bindings/i2c/i2c.txt @@ -77,6 +77,16 @@ wants to support one of the below features, it should adapt these bindings. this information to detect a stalled bus more reliably, for example. Can not be combined with 'multi-master'. +- scl-gpios + specify the gpio related to SCL pin. Used for GPIO bus recovery. + +- sda-gpios + specify the gpio related to SDA pin. Optional for GPIO bus recovery. + +- pinctrl + add extra pinctrl to configure SCL/SDA pins to GPIO function for bus + recovery, call it "gpio" or "recovery"(deprecated) state + Required properties (per child device) -------------------------------------- From patchwork Tue Aug 4 09:59:25 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Codrin Ciubotariu X-Patchwork-Id: 254109 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=-12.8 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH, MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham 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 AD5D7C433DF for ; Tue, 4 Aug 2020 10:02:09 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id AA2312070A for ; Tue, 4 Aug 2020 10:02:09 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=microchip.com header.i=@microchip.com header.b="Oy0IlnFR" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729126AbgHDKCI (ORCPT ); Tue, 4 Aug 2020 06:02:08 -0400 Received: from esa3.microchip.iphmx.com ([68.232.153.233]:33258 "EHLO esa3.microchip.iphmx.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728034AbgHDKCH (ORCPT ); Tue, 4 Aug 2020 06:02:07 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=microchip.com; i=@microchip.com; q=dns/txt; s=mchp; t=1596535327; x=1628071327; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=2QQDoQ+rXHqAJ/jTJVuyzZWARBCmlwXj8iiuOYtPzTE=; b=Oy0IlnFRw+9dhPPqybJZKrWYYV3MNd6P2lWjN8Gp1kYi6Zt8OzykOf50 LY+Mg8uhstEzfG8pfiRAsqOQu+Jh8n0nioKCUh+cG5kGEK2wUIEJmAC+L T1G6O6sMx7m4yqLC6aNXHvenLlwhw+cV4qn3qQtRVlL92tpcq9XtgQfKC zMpSfhsW+11WDB9+ZNzIGxpnKLlv9/A6bwBwJSQWIQdxL/aNSMu/4teQT EWXYo+0bcLv9z9ILcWGHJpIKqte9c3Ug6xIS1BfCG1ZNBrqTgMyWFC1mJ pqvJ5u6vDg/pVgih0Ae96L3PFp7d4xZDtPIlLtpIRC7fCF1c38W04IQ0U Q==; 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: , , , CC: , , , , , , , Codrin Ciubotariu 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 Sender: devicetree-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: devicetree@vger.kernel.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);