Received: by 2002:a05:6a10:1a4d:0:0:0:0 with SMTP id nk13csp4128263pxb; Fri, 11 Feb 2022 16:35:53 -0800 (PST) X-Google-Smtp-Source: ABdhPJwlmOBp0OMDqwB/ABnqdhxrlbcagGeQvw3mpHP4uP+n/N6TEfq+d81ezuWszvhdXyzcdAhm X-Received: by 2002:a17:906:d78b:: with SMTP id pj11mr3361939ejb.584.1644626153436; Fri, 11 Feb 2022 16:35:53 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1644626153; cv=none; d=google.com; s=arc-20160816; b=xUJeVQ6ahSHJ1xXqtStl6lzWQu3Xa71hq6Bk4KGESuBXKslZ6zoJ5IH0EJ66wEJ16U pN4QMK7l6jFhs1qwEldurCmHa1S7jgw1GPSEwJQAHYjBKde+OAMyr8MRu1TwdNYqdjAh wvm82jQwfuhPwsTtaTfk8Vf9ktitQtj2jfc7+LQ+CPnJQWtrV+3KOvvHmbwX2/E6YvLs ddaMm8P7GzzA963g6EPbHtaskyQP5whVugjw/Qv0SPeElsVmpvC9Ey3tOAoRf7iLuixL kgwC5G6HL/kY6DwsRtueyGQhKLkBOTZnj+A2sQSOG/7b9Hp//10a+8SdKGuuYcscWY+A 4UxQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=9AH09FjFVIX7UYaxUIral38fT8dDv56yADBK/0wswKU=; b=zGfX8A03szbxxPbJ64g4rf0dEb6SHfPd4Jg4bZQub4UUu4HJEvPG5SaD2hMxgAMerj AUCs9dPRzgmfGPjmbY9a04m1sQtXOIkqZmiNdhRIqi69j8lU6EhjHhHA3B+cil0Dby7n thKSunYKIODBL3jlXZ6reeKHpofBBH8rGwIvloBz8abXZWzVfuGXQ8bC6XMNiUh6RawI pU7nDGcTyA+XNTb8pJ8n7VMEowBJWtgET7l/T2Ji43t7EqxPhudkxmGhq9hjLYc8z1Wn wmH8g43y+Uiz2Ue86oaTs0S5PP5vWzPTgMcQCAgj+AI50DkhbyJL/W0YiFnhwi8szG5V pohg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id t11si372964eds.261.2022.02.11.16.35.28; Fri, 11 Feb 2022 16:35:53 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1354164AbiBKXbv (ORCPT + 99 others); Fri, 11 Feb 2022 18:31:51 -0500 Received: from mxb-00190b01.gslb.pphosted.com ([23.128.96.19]:34406 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1354119AbiBKXbs (ORCPT ); Fri, 11 Feb 2022 18:31:48 -0500 Received: from hs01.dk-develop.de (hs01.dk-develop.de [IPv6:2a02:c207:3002:6234::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3AF7DCF8; Fri, 11 Feb 2022 15:31:46 -0800 (PST) From: Danilo Krummrich To: dmitry.torokhov@gmail.com, robh+dt@kernel.org, devicetree@vger.kernel.org, linux-input@vger.kernel.org, linux-kernel@vger.kernel.org Cc: linus.walleij@linaro.org, Danilo Krummrich Subject: [PATCH 2/2] input: ps2-gpio: enforce and document open drain Date: Sat, 12 Feb 2022 00:31:37 +0100 Message-Id: <20220211233137.99624-3-danilokrummrich@dk-develop.de> In-Reply-To: <20220211233137.99624-1-danilokrummrich@dk-develop.de> References: <20220211233137.99624-1-danilokrummrich@dk-develop.de> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,SPF_HELO_NONE, SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The PS/2 bus defines the data and clock line be open drain, therefore document this in the dt-binding and enforce the particular flag in the driver. Without enforcing to flag at least the clock gpio as open drain we run into the following warning: WARNING: CPU: 1 PID: 40 at drivers/gpio/gpiolib.c:3175 gpiochip_enable_irq+0x54/0x90 gpiochip_enable_irq() warns on a GPIO being configured as output and using IRQ without being flagged as open drain. Signed-off-by: Danilo Krummrich --- .../devicetree/bindings/serio/ps2-gpio.yaml | 14 ++++++++++---- drivers/input/serio/ps2-gpio.c | 9 +++++++-- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/Documentation/devicetree/bindings/serio/ps2-gpio.yaml b/Documentation/devicetree/bindings/serio/ps2-gpio.yaml index ec6fa7b40851..5e1951b4f511 100644 --- a/Documentation/devicetree/bindings/serio/ps2-gpio.yaml +++ b/Documentation/devicetree/bindings/serio/ps2-gpio.yaml @@ -16,12 +16,18 @@ properties: data-gpios: description: - the gpio used for the data signal + the gpio used for the data signal - this should be flagged as + active high using open drain with (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN) + from since the signal is open drain by + definition maxItems: 1 clk-gpios: description: - the gpio used for the clock signal + the gpio used for the clock signal - this should be flagged as + active high using open drain with (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN) + from since the signal is open drain by + definition maxItems: 1 interrupts: @@ -46,7 +52,7 @@ examples: compatible = "ps2-gpio"; interrupt-parent = <&gpio>; interrupts = <23 IRQ_TYPE_EDGE_FALLING>; - data-gpios = <&gpio 24 GPIO_ACTIVE_HIGH>; - clk-gpios = <&gpio 23 GPIO_ACTIVE_HIGH>; + data-gpios = <&gpio 24 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>; + clk-gpios = <&gpio 23 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>; write-enable; }; diff --git a/drivers/input/serio/ps2-gpio.c b/drivers/input/serio/ps2-gpio.c index 460d520ac865..fdaff7a415cd 100644 --- a/drivers/input/serio/ps2-gpio.c +++ b/drivers/input/serio/ps2-gpio.c @@ -362,14 +362,19 @@ static irqreturn_t ps2_gpio_irq(int irq, void *dev_id) static int ps2_gpio_get_props(struct device *dev, struct ps2_gpio_data *drvdata) { - drvdata->gpio_data = devm_gpiod_get(dev, "data", GPIOD_IN); + enum gpiod_flags gflags; + + /* Enforce open drain, since this is required by the PS/2 bus. */ + gflags = GPIOD_IN | GPIOD_FLAGS_BIT_OPEN_DRAIN; + + drvdata->gpio_data = devm_gpiod_get(dev, "data", gflags); if (IS_ERR(drvdata->gpio_data)) { dev_err(dev, "failed to request data gpio: %ld", PTR_ERR(drvdata->gpio_data)); return PTR_ERR(drvdata->gpio_data); } - drvdata->gpio_clk = devm_gpiod_get(dev, "clk", GPIOD_IN); + drvdata->gpio_clk = devm_gpiod_get(dev, "clk", gflags); if (IS_ERR(drvdata->gpio_clk)) { dev_err(dev, "failed to request clock gpio: %ld", PTR_ERR(drvdata->gpio_clk)); -- 2.34.1