From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752258AbcI1FFh (ORCPT ); Wed, 28 Sep 2016 01:05:37 -0400 Received: from mail-db5eur01on0049.outbound.protection.outlook.com ([104.47.2.49]:42209 "EHLO EUR01-DB5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751002AbcI1FF1 (ORCPT ); Wed, 28 Sep 2016 01:05:27 -0400 From: Leo Li To: Stefan Agner , "wsa@the-dreams.de" CC: "linux-i2c@vger.kernel.org" , "u.kleine-koenig@pengutronix.de" , "linux-kernel@vger.kernel.org" Subject: RE: [PATCH] i2c: imx: defer probe if bus recovery GPIOs are not ready Thread-Topic: [PATCH] i2c: imx: defer probe if bus recovery GPIOs are not ready Thread-Index: AQHSGFTF+Z6jxGewzkWaJp3OJpNs5KCNqZSw Date: Tue, 27 Sep 2016 18:31:14 +0000 Message-ID: References: <20160927001858.11601-1-stefan@agner.ch> In-Reply-To: <20160927001858.11601-1-stefan@agner.ch> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=leoyang.li@nxp.com; x-originating-ip: [192.88.168.49] x-ms-office365-filtering-correlation-id: 04b67df7-b97d-4213-cff7-08d3e70476bc x-microsoft-exchange-diagnostics: 1;AM2PR04MB0772;7:TlLrwbBpDLrmPDj7+DXcoQK5qXKcYG9lcBvyuwavREjqi1jkHu7X8vlRIlOIdQ0IGGGePgBqVnXTRpceZ3NroYJGoclwd3Rxc+tgpGzmNJ1oK2/G5GL0VnB/7Ah7zqCw+dM5VZfw28+IrfsVkhEroDAEeW5kjIpU4PvPcGcVQlTe/v5vwm5ozlM0ckmasrW5yoikPFN1q5WPN9+6EoHeX5m6qPKDS7K/NDEDeA6h19aBVe5sL+6oCVyuh0xrHJevNBZW7YQ3np71uVeEOq6UOy+zCn+6wy1Km9fC6+wLpYDbNyJJRHZmSlX8jNj23UCk3+Iu61BoJiIAP8AKgwv+fQ== x-microsoft-antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:AM2PR04MB0772; x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:(9452136761055)(185117386973197); x-exchange-antispam-report-cfa-test: BCL:0;PCL:0;RULEID:(6040176)(601004)(2401047)(8121501046)(5005006)(10201501046)(3002001)(6055026);SRVR:AM2PR04MB0772;BCL:0;PCL:0;RULEID:;SRVR:AM2PR04MB0772; x-forefront-prvs: 007814487B x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(6009001)(7916002)(199003)(377454003)(13464003)(189002)(5001770100001)(7736002)(3846002)(102836003)(7846002)(305945005)(586003)(97736004)(76176999)(50986999)(81166006)(54356999)(68736007)(101416001)(86362001)(81156014)(2900100001)(19580405001)(8676002)(9686002)(11100500001)(4326007)(3280700002)(3660700001)(66066001)(6116002)(5002640100001)(33656002)(189998001)(2906002)(92566002)(74316002)(2501003)(105586002)(5660300001)(106116001)(2950100002)(76576001)(8936002)(106356001)(87936001)(19580395003)(7696004)(5250100002);DIR:OUT;SFP:1101;SCL:1;SRVR:AM2PR04MB0772;H:AM2PR04MB0770.eurprd04.prod.outlook.com;FPR:;SPF:None;PTR:InfoNoRecords;A:1;MX:1;LANG:en; spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-originalarrivaltime: 27 Sep 2016 18:31:14.5641 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM2PR04MB0772 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from quoted-printable to 8bit by mail.home.local id u8S55fRH012254 > -----Original Message----- > From: Stefan Agner [mailto:stefan@agner.ch] > Sent: Monday, September 26, 2016 7:19 PM > To: wsa@the-dreams.de > Cc: Leo Li ; linux-i2c@vger.kernel.org; u.kleine- > koenig@pengutronix.de; linux-kernel@vger.kernel.org; Stefan Agner > > Subject: [PATCH] i2c: imx: defer probe if bus recovery GPIOs are not ready > > Some SoC might load the GPIO driver after the I2C driver and > using the I2C bus recovery mechanism via GPIOs. In this case > it is crucial to defer probing if the GPIO request functions > do so, otherwise the I2C driver gets loaded without recovery > mechanisms enabled. > > Signed-off-by: Stefan Agner Acked-by: Li Yang > --- > This is an actual issue on NXP Vybrid devices on which the GPIO > driver gets loaded rather later. > > -- > Stefan > > drivers/i2c/busses/i2c-imx.c | 11 +++++++---- > 1 file changed, 7 insertions(+), 4 deletions(-) > > diff --git a/drivers/i2c/busses/i2c-imx.c b/drivers/i2c/busses/i2c-imx.c > index 592a8f2..47fc1f1 100644 > --- a/drivers/i2c/busses/i2c-imx.c > +++ b/drivers/i2c/busses/i2c-imx.c > @@ -1009,10 +1009,13 @@ static int i2c_imx_init_recovery_info(struct > imx_i2c_struct *i2c_imx, > rinfo->sda_gpio = of_get_named_gpio(pdev->dev.of_node, "sda-gpios", > 0); > rinfo->scl_gpio = of_get_named_gpio(pdev->dev.of_node, "scl-gpios", > 0); > > - if (!gpio_is_valid(rinfo->sda_gpio) || > - !gpio_is_valid(rinfo->scl_gpio) || > - IS_ERR(i2c_imx->pinctrl_pins_default) || > - IS_ERR(i2c_imx->pinctrl_pins_gpio)) { > + if (rinfo->sda_gpio == -EPROBE_DEFER || > + rinfo->scl_gpio == -EPROBE_DEFER) { > + return -EPROBE_DEFER; > + } else if (!gpio_is_valid(rinfo->sda_gpio) || > + !gpio_is_valid(rinfo->scl_gpio) || > + IS_ERR(i2c_imx->pinctrl_pins_default) || > + IS_ERR(i2c_imx->pinctrl_pins_gpio)) { > dev_dbg(&pdev->dev, "recovery information incomplete\n"); > return 0; > } > -- > 2.10.0