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=-14.1 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED 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 51EA9C433B4 for ; Fri, 21 May 2021 06:48:13 +0000 (UTC) Received: from desiato.infradead.org (desiato.infradead.org [90.155.92.199]) (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 B12776135C for ; Fri, 21 May 2021 06:48:12 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org B12776135C Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=nxp.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=desiato.20200630; h=Sender:Content-Transfer-Encoding :Content-Type:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:MIME-Version:In-Reply-To:References:Message-ID:Date: Subject:CC:To:From:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=Rhrr8P6jzDP+JnrC4gSpKnQSIS5k8oFQ2JUA7ANj8bk=; b=rSPIaapL8fR5Zzn7LSVSSjmN5C PfGdwe/IHklsJOnbLZf0nnqIDrxe4XUCE4wyGkmV1v+ZPnqUvXIJtq3d+SORe4/A8PBMKc3s8bqDa rRWJqkWcfEpS8JAN0OpamgheHwDhbqdLKtpD/nVHPdLmwuS+gmrJaAQ8yrw4+Iec/vYeucVds63pE Bnb0AFTw7co5x3UanpnyTVtqpWKhA4G8sva9Zp3fZR4lzBGf4SMB9DMc85VJG7ue/tZ34sgA36jQX 8j8BtbLurUedyg3FF5WWL0E+1GWR/dqbltDMCdMag+WlELDlrg0H7rwjA+RsDf1bVvGMvTV5bHUKL DoidKwWg==; Received: from localhost ([::1] helo=desiato.infradead.org) by desiato.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1ljyuH-0043Oq-DU; Fri, 21 May 2021 06:45:16 +0000 Received: from bombadil.infradead.org ([2607:7c80:54:e::133]) by desiato.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1ljyts-0043Fw-8x for linux-arm-kernel@desiato.infradead.org; Fri, 21 May 2021 06:44:48 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=bombadil.20210309; h=MIME-Version: Content-Transfer-Encoding:Content-Type:In-Reply-To:References:Message-ID:Date :Subject:CC:To:From:Sender:Reply-To:Content-ID:Content-Description; bh=Ag9/GHQYGGFtOx2+XjmQ78c3troJzS/h6a5GLGSHw70=; b=jdU9Bjq/emC5I2ElMA/rxFkRnM mNvCu3jb+HeFG3kSfqUkUVhr5OFoonJgL1avufriOI67Tg4GSp/3b6nckHFx/rtL7vc0Z7d9vWs7J 90qbsaJEKFyGqeJzi1AvkTRNveXhFwAfvjNuty6/+qLJGAP2Uu8nZbnOJAuryHR382uBo9UUigR4b AMPi4Yd619wkt+ihPxrOZy7ATOyqU8Bwu66bHq3vOZF7zGi8/q7Iaw0a3KWRA9N9hjQrBmyd+RD3z +FrY+k022NmoFcIlrYiBfwz40idAUd9d87a7uz4WmNTvmYSd0PCeHqxAHHo8jck8yizJttl+9//cz KxQ+HWjg==; Received: from mail-vi1eur05on2082.outbound.protection.outlook.com ([40.107.21.82] helo=EUR05-VI1-obe.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.94 #2 (Red Hat Linux)) id 1ljytp-00GstE-5b for linux-arm-kernel@lists.infradead.org; Fri, 21 May 2021 06:44:46 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ZIXYG4YLK9UArWI0fI3rC8B4AbhrmWimbTepLAMqz6kmQwEwRDsrMc2H140tKsdTDLZW4HjWz0M5RvsSR641qi5Lrn9hhwXICTgg1V9q7r8MT9rI8rdenZBYN3ZTpHo8LOlYfdJ6S+hZRrrhjNrnBNORW9lqPrwpFPByWro/B0B0EE2ae/yEXDv4v06vc1i7q2RR4cb0I6G6mryGyGSH5uZgJIqtfvXY0W+ixlTkLIJgP4HGnxFVAF5MZ5r7tJWGHu2ZXFbsOsAOT8Ael1hlHq1yYFkSHe1emR02Wak42eGTDseTBAe0oS7GT3UPWL3N6sNYRVuA8ghTSIxeovB8xw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Ag9/GHQYGGFtOx2+XjmQ78c3troJzS/h6a5GLGSHw70=; b=fQGPsSh9yaFIQ8QPLmz8Iy2xFb5dQ+VOhaDp8ZOVEwcl/UqblMUZAUZSzuR4YR5O6oVZ48LK5zIR3O28IVl9BtaFMtHEVMlZkRffxHVSi90kimbczFaVjplwJg+PsYogM8JZU0A2RGyWVQoTlcm25kdJYi7F4ri9utMfJcuLAVQ6XJ5j3adm5n7jmbVtDhRjUcUwr21kJMSJJTTl/QhAhrS3P7kPOeXnlTMeULZdrU9O+i8n7A5BlNYFIseccpjn3/81Wk6YNFkJ3Cp6Gs37VO3AiW2qNFcU7eA6JRzAcBNVNAk0Z319yJ+M4YiGrQJ/SG1Bc635Lt5SO+Wg6H9IXQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Ag9/GHQYGGFtOx2+XjmQ78c3troJzS/h6a5GLGSHw70=; b=iNBvB6dGUZOI+XAH4257EeJybpGQSHC5+GhOLnIh2LqcE5vdi3qkxKfHx8yPClbNaaceQRWkv05cccX3Tia7svAODCFCpLQEgo8OoXkIQZvkJFi9LBePfmAKix+DiXwU4YFpElegHc1xv8sDCDt8T45EiqOEboct3I54Pdmz0Ts= Received: from AM6PR04MB4966.eurprd04.prod.outlook.com (2603:10a6:20b:2::14) by AM6PR04MB4904.eurprd04.prod.outlook.com (2603:10a6:20b:c::25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4150.23; Fri, 21 May 2021 06:44:41 +0000 Received: from AM6PR04MB4966.eurprd04.prod.outlook.com ([fe80::b10a:ad0:a6f5:db9b]) by AM6PR04MB4966.eurprd04.prod.outlook.com ([fe80::b10a:ad0:a6f5:db9b%2]) with mapi id 15.20.4129.034; Fri, 21 May 2021 06:44:41 +0000 From: Aisheng Dong To: Clark Wang , "robh+dt@kernel.org" , "shawnguo@kernel.org" , "s.hauer@pengutronix.de" , "festevam@gmail.com" CC: "kernel@pengutronix.de" , dl-linux-imx , "linux-i2c@vger.kernel.org" , "devicetree@vger.kernel.org" , "linux-arm-kernel@lists.infradead.org" , "linux-kernel@vger.kernel.org" Subject: RE: [PATCH V2 10/18] i2c: imx-lpi2c: add bus recovery feature Thread-Topic: [PATCH V2 10/18] i2c: imx-lpi2c: add bus recovery feature Thread-Index: AQHXKtitagEo1eB4tUWUGDOwtXI616rtw6/w Date: Fri, 21 May 2021 06:44:40 +0000 Message-ID: References: <20210406113306.2633595-1-xiaoning.wang@nxp.com> <20210406113306.2633595-11-xiaoning.wang@nxp.com> In-Reply-To: <20210406113306.2633595-11-xiaoning.wang@nxp.com> Accept-Language: zh-CN, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: nxp.com; dkim=none (message not signed) header.d=none;nxp.com; dmarc=none action=none header.from=nxp.com; x-originating-ip: [119.31.174.67] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 24f6a72d-824d-4078-5185-08d91c23e92f x-ms-traffictypediagnostic: AM6PR04MB4904: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:6108; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: CcO5dIU5NO5GTL/kbUCJbFl/5iBoPnWxRxOImKqCz3miQBAgrO0Pz265nYMJnKqK+4LfKzAis2AQ5SnalkDJU+vyIhRfo8TFyuNmJkmkw6nt+8VFelu7EQMr/5mP3yPzyvQ//hsqFlvH1euCGqGhC3qKjVrG6guJgOXwRJ+I8NN4wTRqMAFNBilw8eaU3MEXyZkPycuA6yfq2oenFIbEE8AQG3G90O2MDMp/unEEJlEfv/xGjzJGZo7tQspprj8I5wp4vEgyvwEE4blKK3ImPuYCXvPyRGHlx8k96eKV1vZBIh6YyqYI4/mbhzxysFowgP68sBsH6QAXkDhBMRIVLhuqJM0sWEs1LTBrha4n3JigmPlKYFTVw0ZujnKIbLgOAaqbU0jU5O528jqkMgbd71BPXYpKVSWOFJpckwUYjWwL1B+oIXyLFZo/NVpNmNYbDK0i2JGByzkRBxYmpiZnTC5tu0h5xJLBn4G93n5Q3B5emdns6GX9yEQzCp267bh0cV5nVbbr/g6IMZ+oaNgq/BCERlQS6HmO8mBaC/IftVj+zCS+ZuBx84UBkkBIvDrEjoQsuaH8m1LnZX3CHEI5u1l2E55ouxQ3cGwWwAPEqeY= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM6PR04MB4966.eurprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(376002)(346002)(396003)(136003)(366004)(39860400002)(316002)(186003)(66556008)(8676002)(66946007)(76116006)(8936002)(66476007)(9686003)(110136005)(54906003)(4326008)(33656002)(2906002)(86362001)(6506007)(66446008)(7696005)(64756008)(5660300002)(478600001)(38100700002)(44832011)(52536014)(26005)(122000001)(55016002)(71200400001); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata: =?utf-8?B?R0NKZzhrL2ZNcVhhcFpLZ1UvdnovMitsVCtiTHlqZDBMdzNYNUNsMktNdVI1?= =?utf-8?B?bXdHeVdOWitJazEvVkZJRkticFZ5ZnpaRk1tZmZlMktpdkM0dDBtOXVaK0tq?= =?utf-8?B?OHRnVUI5L285UXZCRTVDdGxYMlphOTkybHBtZGtMUElRY3JLNllJZDR0RG0y?= =?utf-8?B?VFpkMDJ0aUplSVA3N3ZPenU5ekpXbE92ZExQWEpjT2p2Qm4vYWR3cHVQM2I0?= =?utf-8?B?N0pzZzBaaFB2R0swUWRsVFFnWjVCaXlBcWZpR0gxbW5IRUJ2U1hJK2wwZWdE?= =?utf-8?B?aHhmQzhGa0hNNDFyUTRRR0pIZEprTUR0UDBUVnY2SDkrSlg3UmRjR00rcnA3?= =?utf-8?B?K3p0VkZScnhrdXBZNHg1dllzRWs1NElvZklPbDNwcGZYTVA5OC9MNDVrWlRt?= =?utf-8?B?TlJRVE82MThnaFlFU1FjbE5FalhkcUV6a3FkdnFWV2RMcWQ0L2NGRVlhZUsv?= =?utf-8?B?Szc4UVlmK2JITFB0cHg4aFU4NnI5Ukt3cGhiMFZCWTYwWktjdHBCR3VWUDla?= =?utf-8?B?K0ZZZTJubEptWmlhRTFZeHRXek93T3FFZE1nMzhDeE1kNWo5Rk5QNVB1UmJI?= =?utf-8?B?WTVmWk1VN0FuY1A4M2ZpamFrVnFsUHUzcDkxSGpCbEtPeEc4R3labkpwNXEr?= =?utf-8?B?Z0N4dkdpMkd2YVBibGJrNEpwZnc0WFNhQ3BjV3Y5THFZS2lrTFY5V0Ywekdu?= =?utf-8?B?Rzg1WGF0WEg4UVdCSHZIM2pKMTYvK2tTZldnUXVGazVuRWd3K09sR1UxdTli?= =?utf-8?B?VThqWVBKbDlzWFoxQW5ZWmsrZE9kQjRBQTFETlZWclpFMDVWM1lMNk5VZngr?= =?utf-8?B?U0VCcUpIUWRNTVJNSUh2YW14Rk9zU29xWDhiK3BBemJRQ0xrV1YxRklmTm8z?= =?utf-8?B?b05BYThBOVZ1c3BWVForWm9aRWZxb1hqb3VFN0I2SW9hM2lZdGllQ1RPWGFa?= =?utf-8?B?c2V2T3ExTlo0bXZSbjU3VFdsWmFUV2IzQUlNajlib0owTGJMcEF0Rk1ISElQ?= =?utf-8?B?U2hqUmgzd3h1WXNFV01BTldUNjExSldEVGNPTEhscWwxR0RMMkx3cXdNOVFr?= =?utf-8?B?RnVCYzZqMDdUWExSL05PaW56eUpCcDhiUTFDWWJlTG1qM3BVaDM1MTIrS25m?= =?utf-8?B?SjVqZldSc1JGSzZNQTFLRzJkeEdDOGJ4bHhLaFJVRldac3FpNjgvbWgwMnVr?= =?utf-8?B?V2tCcU16Q2RWT2wrVnJKbXk2RDZ6Z2RjMnVHeUM4ejdzNjFxUmZTK3BwT3hZ?= =?utf-8?B?K1pMQzUxdjU2Ny9NanExZWFlbGs2YVlwM2pOU1EvY09hbWp2MTNrY2U2MHdj?= =?utf-8?B?UW11c00zcHVkRmtWaXRPc2JvOWJoYTdqTS9kMENpdEUwZE10bS9md1pKemNO?= =?utf-8?B?Wkp4bDk1NWpjK3ZjVkRiRXpBcXpkUzhTWHVtNDU1TlgveEFKRlRIUytCMk8z?= =?utf-8?B?MGo5VTNiZ0RGTThibk51VzZhS1BRS2haT0JuWHQrd3JPbHJKdDY0MVhETnpW?= =?utf-8?B?OUZUS0Jxc2FyeWZ2Vk92eFRSRmZTRCtCanNSZCs3NmFQOElVamZWbWlVRFEv?= =?utf-8?B?blpNa21xd1F0aUVka2pOcitpY3oxN2lCQVZVeFhPa3lJNTAybk9Tb2lOMjBV?= =?utf-8?B?VFZDZnFVNUZ0NTFPZnBBY0NRb2l2L09NQStUVzJoMkM5bGFoQzBLMDhnUEJG?= =?utf-8?B?bUh4bnNsWFlueWpDSkxXWTVlYjYwQTB5S0N5dG5Rc3pmVDVRbEhPb2crc045?= =?utf-8?Q?QcAd/rB0Q/U8bVV23l9IMnQweWSX6K11q5bS+S/?= MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: AM6PR04MB4966.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 24f6a72d-824d-4078-5185-08d91c23e92f X-MS-Exchange-CrossTenant-originalarrivaltime: 21 May 2021 06:44:41.0121 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: Drp7289SPyc6I4+q2DFyfhJFbncbkvFj1KOc2Hn23RE8IHO+DYS3ApT1sqTGYYlP4rVbEP4sHKkAshtQMURK8w== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR04MB4904 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210520_234445_391011_BB45EAB0 X-CRM114-Status: GOOD ( 27.93 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , 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 > From: Clark Wang > Sent: Tuesday, April 6, 2021 7:33 PM > > Add bus recovery feature for LPI2C. > Need add gpio pinctrl, scl-gpios and sda-gpios configuration in dts. > > Signed-off-by: Clark Wang > --- > V2 changes: > - No change. Add dt-bindings in the next patch. Dt binding patch should be sent before driver change > --- > drivers/i2c/busses/i2c-imx-lpi2c.c | 83 ++++++++++++++++++++++++++++++ > 1 file changed, 83 insertions(+) > > diff --git a/drivers/i2c/busses/i2c-imx-lpi2c.c > b/drivers/i2c/busses/i2c-imx-lpi2c.c > index 77ceb743b282..77dd6ee5a4a8 100644 > --- a/drivers/i2c/busses/i2c-imx-lpi2c.c > +++ b/drivers/i2c/busses/i2c-imx-lpi2c.c > @@ -18,6 +18,7 @@ > #include > #include > #include > +#include > #include > #include > #include > @@ -108,6 +109,11 @@ struct lpi2c_imx_struct { > unsigned int txfifosize; > unsigned int rxfifosize; > enum lpi2c_imx_mode mode; > + > + struct i2c_bus_recovery_info rinfo; > + struct pinctrl *pinctrl; > + struct pinctrl_state *pinctrl_pins_default; > + struct pinctrl_state *pinctrl_pins_gpio; > }; > > static void lpi2c_imx_intctrl(struct lpi2c_imx_struct *lpi2c_imx, @@ -135,6 > +141,8 @@ static int lpi2c_imx_bus_busy(struct lpi2c_imx_struct *lpi2c_imx) > > if (time_after(jiffies, orig_jiffies + msecs_to_jiffies(500))) { > dev_dbg(&lpi2c_imx->adapter.dev, "bus not work\n"); > + if (lpi2c_imx->adapter.bus_recovery_info) > + i2c_recover_bus(&lpi2c_imx->adapter); > return -ETIMEDOUT; > } > schedule(); > @@ -192,6 +200,8 @@ static void lpi2c_imx_stop(struct lpi2c_imx_struct > *lpi2c_imx) > > if (time_after(jiffies, orig_jiffies + msecs_to_jiffies(500))) { > dev_dbg(&lpi2c_imx->adapter.dev, "stop timeout\n"); > + if (lpi2c_imx->adapter.bus_recovery_info) > + i2c_recover_bus(&lpi2c_imx->adapter); > break; > } > schedule(); > @@ -329,6 +339,8 @@ static int lpi2c_imx_txfifo_empty(struct > lpi2c_imx_struct *lpi2c_imx) > > if (time_after(jiffies, orig_jiffies + msecs_to_jiffies(500))) { > dev_dbg(&lpi2c_imx->adapter.dev, "txfifo empty timeout\n"); > + if (lpi2c_imx->adapter.bus_recovery_info) > + i2c_recover_bus(&lpi2c_imx->adapter); > return -ETIMEDOUT; > } > schedule(); > @@ -528,6 +540,71 @@ static irqreturn_t lpi2c_imx_isr(int irq, void *dev_id) > return IRQ_HANDLED; > } > > +static void lpi2c_imx_prepare_recovery(struct i2c_adapter *adap) { > + struct lpi2c_imx_struct *lpi2c_imx; > + > + lpi2c_imx = container_of(adap, struct lpi2c_imx_struct, adapter); > + > + pinctrl_select_state(lpi2c_imx->pinctrl, > +lpi2c_imx->pinctrl_pins_gpio); } > + > +static void lpi2c_imx_unprepare_recovery(struct i2c_adapter *adap) { > + struct lpi2c_imx_struct *lpi2c_imx; > + > + lpi2c_imx = container_of(adap, struct lpi2c_imx_struct, adapter); > + > + pinctrl_select_state(lpi2c_imx->pinctrl, > +lpi2c_imx->pinctrl_pins_default); } > + > +/* > + * We switch SCL and SDA to their GPIO function and do some bitbanging > + * for bus recovery. These alternative pinmux settings can be > + * described in the device tree by a separate pinctrl state "gpio". If > + * this is missing this is not a big problem, the only implication is > + * that we can't do bus recovery. > + */ > +static int lpi2c_imx_init_recovery_info(struct lpi2c_imx_struct *lpi2c_imx, > + struct platform_device *pdev) > +{ > + struct i2c_bus_recovery_info *rinfo = &lpi2c_imx->rinfo; > + > + lpi2c_imx->pinctrl = devm_pinctrl_get(&pdev->dev); > + if (!lpi2c_imx->pinctrl || IS_ERR(lpi2c_imx->pinctrl)) { > + dev_info(&pdev->dev, "can't get pinctrl, bus recovery not > supported\n"); > + return PTR_ERR(lpi2c_imx->pinctrl); > + } > + > + lpi2c_imx->pinctrl_pins_default = pinctrl_lookup_state(lpi2c_imx->pinctrl, > + PINCTRL_STATE_DEFAULT); > + lpi2c_imx->pinctrl_pins_gpio = pinctrl_lookup_state(lpi2c_imx->pinctrl, > + "gpio"); > + rinfo->sda_gpiod = devm_gpiod_get(&pdev->dev, "sda", GPIOD_IN); > + rinfo->scl_gpiod = devm_gpiod_get(&pdev->dev, "scl", > +GPIOD_OUT_HIGH_OPEN_DRAIN); > + > + if (PTR_ERR(rinfo->sda_gpiod) == -EPROBE_DEFER || > + PTR_ERR(rinfo->scl_gpiod) == -EPROBE_DEFER) { > + return -EPROBE_DEFER; > + } else if (IS_ERR(rinfo->sda_gpiod) || > + IS_ERR(rinfo->scl_gpiod) || > + IS_ERR(lpi2c_imx->pinctrl_pins_default) || > + IS_ERR(lpi2c_imx->pinctrl_pins_gpio)) { > + dev_dbg(&pdev->dev, "recovery information incomplete\n"); > + return 0; > + } > + > + dev_info(&pdev->dev, "using scl%s for recovery\n", > + rinfo->sda_gpiod ? ",sda" : ""); > + > + rinfo->prepare_recovery = lpi2c_imx_prepare_recovery; > + rinfo->unprepare_recovery = lpi2c_imx_unprepare_recovery; > + rinfo->recover_bus = i2c_generic_scl_recovery; > + lpi2c_imx->adapter.bus_recovery_info = rinfo; > + > + return 0; > +} > + > static u32 lpi2c_imx_func(struct i2c_adapter *adapter) { > return I2C_FUNC_I2C | I2C_FUNC_SMBUS_EMUL | @@ -632,6 +709,12 > @@ static int lpi2c_imx_probe(struct platform_device *pdev) > lpi2c_imx->txfifosize = 1 << (temp & 0x0f); > lpi2c_imx->rxfifosize = 1 << ((temp >> 8) & 0x0f); > > + /* Init optional bus recovery function */ > + ret = lpi2c_imx_init_recovery_info(lpi2c_imx, pdev); > + /* Give it another chance if pinctrl used is not ready yet */ > + if (ret == -EPROBE_DEFER) > + goto rpm_disable; > + > ret = i2c_add_adapter(&lpi2c_imx->adapter); > if (ret) > goto rpm_disable; > -- > 2.25.1 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel