From patchwork Sun Nov 29 09:47:15 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Harm Berntsen X-Patchwork-Id: 1407800 X-Patchwork-Delegate: hs@denx.de Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=85.214.62.61; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=nedap.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=nedap.com header.i=@nedap.com header.a=rsa-sha256 header.s=selector2 header.b=W9Sm7L2n; dkim-atps=neutral Received: from phobos.denx.de (phobos.denx.de [85.214.62.61]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4CkNnX4Yrhz9sRR for ; Sun, 29 Nov 2020 20:47:28 +1100 (AEDT) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 7D63D8273B; Sun, 29 Nov 2020 10:47:21 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=nedap.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (1024-bit key; unprotected) header.d=nedap.com header.i=@nedap.com header.b="W9Sm7L2n"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id CFE7482753; Sun, 29 Nov 2020 10:47:19 +0100 (CET) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-1.7 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FORGED_SPF_HELO,RCVD_IN_DNSWL_LOW, SPF_HELO_PASS autolearn=no autolearn_force=no version=3.4.2 Received: from EUR04-DB3-obe.outbound.protection.outlook.com (mail-db3eur04on0727.outbound.protection.outlook.com [IPv6:2a01:111:f400:fe0c::727]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id E692F82738 for ; Sun, 29 Nov 2020 10:47:16 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=nedap.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=harm.berntsen@nedap.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=F2kGmo9JyjHCu3LVazBDLGj1uZv5Zos8SJOfGHbMCca506LM+iyqLjgANS8zDnWBAq2I8O0lGLHD5XZVOz+0DVHCkByGCcBvV9QBapvSbj4tKh4RCZqE4TtlWQ6FaL7x2yXn6I36yXlwZ+4bOKTjzE+jAfTigiaj1XoFjMpCDpnVmmdE2SoLSE62g2vp7yRkRm427n4N8XBic9K4uU6H1lqLrx4aAn9vVKci1fKH4N6WiW8kPKYBPncPZ4CcbEJyGzp0ID5pJu54HlQDpies0RjfuoGyKMM0VhgDMUC7m0zq4Bs26FlnCDWzPJc3gGjHHA4kq+CPfQjiQ/+XVDit6w== 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=vy2u8uMF8PpLeG6eY3WqZQyf+X0opgC2q2o9X6jTtTQ=; b=gT3JKZ06l8P7YLO/9wndOxJcJXRjFK6KWcMH3CNavbxLBtcFqtZto/WwMfe6H5d0DFOgasA9YMw4ksxCGW45r3jdHe0a4ip913YjkthmhTU6yN+gk+iNEMHSydsamRn21Jb3KM8yVqC02nYDYslcUJQfO9zMREzNFElOUR86tSzO28FTARPgZe8wx5ZQ8dcLFwl2YGH8dbB04suwX1mp7G3UsZz+pAD5ixrajPsVSa54KzIrAV7c8X2+8DPPYZf7w6c+eN+95Ia58IGflt+HmhDsrt7oS2ODJsX0pb32vHwQPxZ4rgLOnBBunZfme0Sm6TyfNVqpst/8N9HVI6XItQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nedap.com; dmarc=pass action=none header.from=nedap.com; dkim=pass header.d=nedap.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nedap.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=vy2u8uMF8PpLeG6eY3WqZQyf+X0opgC2q2o9X6jTtTQ=; b=W9Sm7L2nYeHk4tS/mA7MnKYomD/qmq7X7eCaVZ+KJjV8BDdvYyKTRxGgENNSWAYa3LEiF8IgYuxzX4zhYoXPenQSwoa/PDqVEuCP50bnPZk7LVj0Dbr+rTBm7OtnrRjkYWwI3jzuN0q+Fhe3iwtYf4/8ChrL19FygkvfgIgpWq0= Received: from AM8PR10MB4034.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:20b:1e7::20) by AM0PR10MB3457.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:20b:154::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3611.20; Sun, 29 Nov 2020 09:47:15 +0000 Received: from AM8PR10MB4034.EURPRD10.PROD.OUTLOOK.COM ([fe80::55ca:7cf8:c2b9:1671]) by AM8PR10MB4034.EURPRD10.PROD.OUTLOOK.COM ([fe80::55ca:7cf8:c2b9:1671%7]) with mapi id 15.20.3611.025; Sun, 29 Nov 2020 09:47:15 +0000 From: Harm Berntsen To: "u-boot@lists.denx.de" CC: "hs@denx.de" , "patrick.delaunay@st.com" Subject: i2c: i2c-gpio: Fix GPIO output Thread-Topic: i2c: i2c-gpio: Fix GPIO output Thread-Index: AQHWxjSeuVOj7RFd9ESzsIsVEfXk1A== Date: Sun, 29 Nov 2020 09:47:15 +0000 Message-ID: <6fd4b2942c49075a1e96e6f24dc13f38d6c6721d.camel@nedap.com> Accept-Language: en-GB, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: lists.denx.de; dkim=none (message not signed) header.d=none;lists.denx.de; dmarc=none action=none header.from=nedap.com; x-originating-ip: [162.247.73.192] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: c4bb065e-abdf-4bbe-4c45-08d8944bc12a x-ms-traffictypediagnostic: AM0PR10MB3457: x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:274; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: BqAKAWunQsqjRDzOKhBrl3BOA1uR5d4gbSBOJRCA/qMbqOPvPYML7mUBKlAM1IQh4wqk6vlmA0P7uqXix2lJi2RR+bGTa//NQ1kNMAClJpxTKKI1tlB7cjNs8dwtuHck3tIH0uD0PbZFOl1dQb7IsUi7eoADdBuoo4cFsrYGguRUlxLYnw2SepcXbHcqiW03+sCagF3S2TG0MT3pR8FlPzfUTcPi5S62t4krs8BiITV7Cf372G0bwZi7cgZJN87QxEChCPCxxi4GMlpVOtadeuTD4tTLIFRXXjilRhHEbFTvRgSJOH1yd2NXGTBeGtHEYsnQm/6G7JC1VP+eq+HOOg== x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM8PR10MB4034.EURPRD10.PROD.OUTLOOK.COM; PTR:; CAT:NONE; SFS:(4636009)(366004)(136003)(346002)(376002)(39840400004)(396003)(186003)(26005)(91956017)(86362001)(76116006)(4326008)(2616005)(2906002)(54906003)(6506007)(55236004)(83380400001)(44832011)(6486002)(36756003)(71200400001)(5660300002)(6512007)(316002)(6916009)(478600001)(8676002)(66476007)(66446008)(66556008)(8936002)(64756008)(66946007); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata: =?utf-8?q?VlegqIdYx1D60Wr6iPjmSmPZWXZ/RE?= =?utf-8?q?ENDJYLaYFctdIvfHYbxz88d56LXjudILQNVLAPAo5SbTWsHJIH3JrOFWVGFbQ+fub?= =?utf-8?q?mZhyA+X1lYvHlsN7dQLIQ2C/cZ9Pm9H5Y8h2OTdeguP6E1CsiaKM656OFnRuTIUdz?= =?utf-8?q?zgeS79cSA9zha6g8e/1JBFUJOBvFpjoVgNp9CEKOZLADOtl4127BDy5oGdc26mV+o?= =?utf-8?q?cJhSGkXMNBrOuap88hibMhje12BpXnwIw8BAoTetiaVsKM7LLox+fwyVRrGx71FTK?= =?utf-8?q?g/YdZmSEtuD1pdiFvrfE5Yav4hv6qJuLO/hSuKyrDn2GO9B749G5fIdZvoL+nvOFQ?= =?utf-8?q?/MsJoWiRuRaVq6IncOPhPMk0LfPl/ERQanMkpw4AvscXee+bjX3qwoYpJqhwlEg6G?= =?utf-8?q?kicbBcDpmGeW/kRGDGryu7sWDopqjp/Z4JpCPYDbuQIq5PwAjt8b77ixuDg2jWRki?= =?utf-8?q?wc4g/HhKN8Cl4ALrJI1JjmtlvNWiTUZAKPKEND433BnrS3OI3QToer2UYSsFzPvK/?= =?utf-8?q?LYLK8FLPWfcxECrFBgHdCFiTz5HeGxHD7Ip7wTzzDv6YGrY72lyTvtoQAointfgU5?= =?utf-8?q?CVcn65F1CAsVfKeI1X4VuR9FCun0+BiuA/tYGZpT9JjlimPa0S3RGpRQHaxnbqZB4?= =?utf-8?q?ymLHN2oSu6hBvaUp26qVmpsO9ll56VuLcN2PhCo6fCB1HfGvV04sFgsa7Ybxe2zwn?= =?utf-8?q?KXWV6RS4Hsp6QKI6PU++Xxq3qnoq2xM6HMDGiQvJwwOtzVjGHXt0wptS1+VaP7tbE?= =?utf-8?q?bZPoF8c+zD0Z4rpZmDevBPBc9H0GF1PurvmgS/A+XBzwf/+nV+KZiUwr0VvZfycjs?= =?utf-8?q?7UJ1kR5rcv3ImsfRQJdzRtmfVtT5jCLXrLSu678UtyzNqUtiNgvPYlZo2ThaBCA4i?= =?utf-8?q?cnAHWlYUXK4zn+Pk8XxRyhiczWXZX+olSqH55ecuPHY9WawEXYqV8j+8eMg6yebZp?= =?utf-8?q?F3TkMKIkn1eEpvV9R2+?= x-ms-exchange-transport-forked: True Content-ID: <3FBD10D1AFD2E84A9747F4E38D389E12@EURPRD10.PROD.OUTLOOK.COM> MIME-Version: 1.0 X-OriginatorOrg: nedap.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: AM8PR10MB4034.EURPRD10.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-Network-Message-Id: c4bb065e-abdf-4bbe-4c45-08d8944bc12a X-MS-Exchange-CrossTenant-originalarrivaltime: 29 Nov 2020 09:47:15.6749 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 6d21d161-0ae7-4a24-94cf-df0881e2fa96 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: 9c0ZVXzpGvfyRfNL3WXaB9jIZz2X5Ry0UHM8c7XL3gguR5fWzNrtfkeIyH8QH89DQ6kug7763NquYyAgMpjV+A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR10MB3457 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.34 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.102.3 at phobos.denx.de X-Virus-Status: Clean The dm_gpio_set_dir_flags function cannot be used to update the configuration of a GPIO pin because it does a bitwise OR with the existing flags. Looks like commit 788ea834124b ("gpio: add function _dm_gpio_set_dir_flags") has introduced this behaviour and the i2c-gpio driver has been broken since. Signed-off-by: Harm Berntsen CC: Heiko Schocher CC: Patrick Delaunay --- drivers/i2c/i2c-gpio.c | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/drivers/i2c/i2c-gpio.c b/drivers/i2c/i2c-gpio.c index 381938c956..9c5e0d4d68 100644 --- a/drivers/i2c/i2c-gpio.c +++ b/drivers/i2c/i2c-gpio.c @@ -50,9 +50,10 @@ static void i2c_gpio_sda_set(struct i2c_gpio_bus *bus, int bit) struct gpio_desc *sda = &bus->gpios[PIN_SDA]; if (bit) - dm_gpio_set_dir_flags(sda, GPIOD_IS_IN); + sda->flags = (sda->flags & ~GPIOD_IS_OUT) | GPIOD_IS_IN; else - dm_gpio_set_dir_flags(sda, GPIOD_IS_OUT); + sda->flags = (sda->flags & (~GPIOD_IS_IN & ~GPIOD_IS_OUT_ACTIVE)) | GPIOD_IS_OUT; + dm_gpio_set_dir(sda); } static void i2c_gpio_scl_set(struct i2c_gpio_bus *bus, int bit) @@ -61,14 +62,16 @@ static void i2c_gpio_scl_set(struct i2c_gpio_bus *bus, int bit) int count = 0; if (bit) { - dm_gpio_set_dir_flags(scl, GPIOD_IS_IN); + scl->flags = (scl->flags & ~GPIOD_IS_OUT) | GPIOD_IS_IN; + dm_gpio_set_dir(scl); while (!dm_gpio_get_value(scl) && count++ < 100000) udelay(1); if (!dm_gpio_get_value(scl)) pr_err("timeout waiting on slave to release scl\n"); } else { - dm_gpio_set_dir_flags(scl, GPIOD_IS_OUT); + scl->flags = (scl->flags & (~GPIOD_IS_IN & ~GPIOD_IS_OUT_ACTIVE)) | GPIOD_IS_OUT; + dm_gpio_set_dir(scl); } } @@ -76,11 +79,11 @@ static void i2c_gpio_scl_set(struct i2c_gpio_bus *bus, int bit) static void i2c_gpio_scl_set_output_only(struct i2c_gpio_bus *bus, int bit) { struct gpio_desc *scl = &bus->gpios[PIN_SCL]; - ulong flags = GPIOD_IS_OUT; + scl->flags = (scl->flags & (~GPIOD_IS_IN & ~GPIOD_IS_OUT_ACTIVE)) | GPIOD_IS_OUT; if (bit) - flags |= GPIOD_IS_OUT_ACTIVE; - dm_gpio_set_dir_flags(scl, flags); + scl->flags |= GPIOD_IS_OUT_ACTIVE; + dm_gpio_set_dir(scl); } static void i2c_gpio_write_bit(struct i2c_gpio_bus *bus, int delay, uchar bit)