From nobody Sun Apr 19 05:39:45 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id CCC17C433EF for ; Tue, 5 Jul 2022 12:07:10 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234221AbiGEMHJ (ORCPT ); Tue, 5 Jul 2022 08:07:09 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45648 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233758AbiGEMES (ORCPT ); Tue, 5 Jul 2022 08:04:18 -0400 Received: from mail-lf1-x12e.google.com (mail-lf1-x12e.google.com [IPv6:2a00:1450:4864:20::12e]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id DFE62186F8 for ; Tue, 5 Jul 2022 05:04:04 -0700 (PDT) Received: by mail-lf1-x12e.google.com with SMTP id m18so1702874lfg.10 for ; Tue, 05 Jul 2022 05:04:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=JgapXPYyQW6JU+RyRJDX7d0Fy2HJw7ZXGeTl306iS5I=; b=dveBFbC8hgUVm5BkPxrrIOODtPlRViXGjtbK6mwVwlEor73nvjb9Bd1eqgr9J2yyPo oZTqkVAT3ev7oZ6+e0Kpf6qITV/KiDt+qP7UytylZ9afsvCxhlwbkGXRyw2dNhdPNjau Ccx1ZieijojVAtsARP2lqrJUG95u6no9wkGe5nlW5b1q0Hl9QX5nrBm3BXC+I1RtlEIT ujotrXOh/LLUmKJbb44MR1aNLEIiuTb7PIqlrL6UUDCxsthf/Ze8qEnE5H3/7xa9pgop lDfZ2ZzL08IKTlgN2xFX3jblJqFT3s1zXZ57jKI9zYjEC3akViwX2WVCE/GXzTGmBii3 w+Nw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=JgapXPYyQW6JU+RyRJDX7d0Fy2HJw7ZXGeTl306iS5I=; b=hGUJPSsAKtRmjACxOTceBhmyIqpKv5IJGUr/oMHlfwCh6Gx/nr6jY/JXyTpyXC+QFL NpYi9cEPlqT4ZYhxV/pbmdInI/dtxRn1LxVQrDceFGsBIq2Vt3rFXOWHjcmzuCK/MEoX zSYeP9wDkl0ihRYpG6Nbh8ksiNfVq0FrF2jjYaUEoaMUSzu3Wadh4UJLn8YwG8cf2cr0 uf18XklPNJLJSkjsk755WxW4Lspp8rWpiBi2lpeoNJM6xGLw3U2pZLua6qxc2wuVSHhn km7dApi0ZEm+YSb0gCHUOfypHeMoYm04xICiFnSfdGcgh0fiWLKykQMNIIfYhex7Ruix JuDA== X-Gm-Message-State: AJIora8KfDnQw0DmL/+Of4Vis7wzax2IdnnsyuQzDDbzEQW21a7fhiDg C6Vh7b+0wO1b5L1l/L5fIW2Wwg== X-Google-Smtp-Source: AGRyM1vqE6sWpPbtQ08eMXU7bf7adDcsPgHdfda8OrUuDVLnrB/a1O129CgFnqmYv9MnbLA7aowxBw== X-Received: by 2002:a05:6512:114a:b0:481:1b5b:691 with SMTP id m10-20020a056512114a00b004811b5b0691mr21046294lfg.205.1657022643163; Tue, 05 Jul 2022 05:04:03 -0700 (PDT) Received: from krzk-bin.home ([84.20.121.239]) by smtp.gmail.com with ESMTPSA id n13-20020a2e82cd000000b0025a885a135csm5547082ljh.119.2022.07.05.05.04.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 05 Jul 2022 05:04:02 -0700 (PDT) From: Krzysztof Kozlowski To: Dmitry Torokhov , Rob Herring , Krzysztof Kozlowski , linux-input@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Krzysztof Kozlowski Subject: [RESEND PATCH v3 1/3] dt-bindings: input: gpio-keys: enforce node names to match all properties Date: Tue, 5 Jul 2022 14:03:54 +0200 Message-Id: <20220705120356.94876-2-krzysztof.kozlowski@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220705120356.94876-1-krzysztof.kozlowski@linaro.org> References: <20220705120356.94876-1-krzysztof.kozlowski@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" The gpio-keys DT schema matches all properties with a wide pattern and applies specific schema to children. This has drawback - all regular properties are also matched and are silently ignored, even if they are not described in schema. Basically this allows any non-object property to be present. Enforce specific naming pattern for children (keys) to narrow the pattern thus do not match other properties. This will require all children to be properly prefixed or suffixed (button, event, switch or key). Removal of "if:" within patternProperties causes drop of one indentation level, but there are no other changes in the affected block. Signed-off-by: Krzysztof Kozlowski Reviewed-by: Rob Herring --- .../devicetree/bindings/input/gpio-keys.yaml | 157 +++++++++--------- 1 file changed, 77 insertions(+), 80 deletions(-) diff --git a/Documentation/devicetree/bindings/input/gpio-keys.yaml b/Docum= entation/devicetree/bindings/input/gpio-keys.yaml index 645dfa1e0d07..27bb5c6ab8d9 100644 --- a/Documentation/devicetree/bindings/input/gpio-keys.yaml +++ b/Documentation/devicetree/bindings/input/gpio-keys.yaml @@ -16,86 +16,83 @@ properties: - gpio-keys-polled =20 patternProperties: - ".*": - if: - type: object - then: - $ref: input.yaml# - - properties: - gpios: - maxItems: 1 - - interrupts: - maxItems: 1 - - label: - description: Descriptive name of the key. - - linux,code: - description: Key / Axis code to emit. - - linux,input-type: - default: 1 # EV_KEY - - linux,input-value: - description: | - If linux,input-type is EV_ABS or EV_REL then this - value is sent for events this button generates when pressed. - EV_ABS/EV_REL axis will generate an event with a value of 0 - when all buttons with linux,input-type =3D=3D type and - linux,code =3D=3D axis are released. This value is interpreted - as a signed 32 bit value, e.g. to make a button generate a - value of -1 use: - - linux,input-value =3D <0xffffffff>; /* -1 */ - - $ref: /schemas/types.yaml#/definitions/uint32 - - debounce-interval: - description: - Debouncing interval time in milliseconds. If not specified def= aults to 5. - $ref: /schemas/types.yaml#/definitions/uint32 - - default: 5 - - wakeup-source: - description: Button can wake-up the system. - - wakeup-event-action: - description: | - Specifies whether the key should wake the system when asserted= , when - deasserted, or both. This property is only valid for keys that= wake up the - system (e.g., when the "wakeup-source" property is also provid= ed). - - Supported values are defined in linux-event-codes.h: - - EV_ACT_ANY - both asserted and deasserted - EV_ACT_ASSERTED - asserted - EV_ACT_DEASSERTED - deasserted - $ref: /schemas/types.yaml#/definitions/uint32 - enum: [0, 1, 2] - - linux,can-disable: - description: - Indicates that button is connected to dedicated (not shared) i= nterrupt - which can be disabled to suppress events from the button. - type: boolean - - required: - - linux,code - - anyOf: - - required: - - interrupts - - required: - - gpios - - dependencies: - wakeup-event-action: [ wakeup-source ] - linux,input-value: [ gpios ] - - unevaluatedProperties: false + "^(button|event|key|switch|(button|event|key|switch)-[a-z0-9-]+|[a-z0-9-= ]+-(button|event|key|switch))$": + $ref: input.yaml# + + properties: + gpios: + maxItems: 1 + + interrupts: + maxItems: 1 + + label: + description: Descriptive name of the key. + + linux,code: + description: Key / Axis code to emit. + + linux,input-type: + default: 1 # EV_KEY + + linux,input-value: + description: | + If linux,input-type is EV_ABS or EV_REL then this + value is sent for events this button generates when pressed. + EV_ABS/EV_REL axis will generate an event with a value of 0 + when all buttons with linux,input-type =3D=3D type and + linux,code =3D=3D axis are released. This value is interpreted + as a signed 32 bit value, e.g. to make a button generate a + value of -1 use: + + linux,input-value =3D <0xffffffff>; /* -1 */ + + $ref: /schemas/types.yaml#/definitions/uint32 + + debounce-interval: + description: + Debouncing interval time in milliseconds. If not specified defau= lts to 5. + $ref: /schemas/types.yaml#/definitions/uint32 + + default: 5 + + wakeup-source: + description: Button can wake-up the system. + + wakeup-event-action: + description: | + Specifies whether the key should wake the system when asserted, = when + deasserted, or both. This property is only valid for keys that w= ake up the + system (e.g., when the "wakeup-source" property is also provided= ). + + Supported values are defined in linux-event-codes.h: + + EV_ACT_ANY - both asserted and deasserted + EV_ACT_ASSERTED - asserted + EV_ACT_DEASSERTED - deasserted + $ref: /schemas/types.yaml#/definitions/uint32 + enum: [0, 1, 2] + + linux,can-disable: + description: + Indicates that button is connected to dedicated (not shared) int= errupt + which can be disabled to suppress events from the button. + type: boolean + + required: + - linux,code + + anyOf: + - required: + - interrupts + - required: + - gpios + + dependencies: + wakeup-event-action: [ wakeup-source ] + linux,input-value: [ gpios ] + + unevaluatedProperties: false =20 if: properties: --=20 2.34.1 From nobody Sun Apr 19 05:39:45 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 9F41CC433EF for ; Tue, 5 Jul 2022 12:07:16 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231593AbiGEMHP (ORCPT ); Tue, 5 Jul 2022 08:07:15 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46690 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233305AbiGEMEV (ORCPT ); Tue, 5 Jul 2022 08:04:21 -0400 Received: from mail-lf1-x134.google.com (mail-lf1-x134.google.com [IPv6:2a00:1450:4864:20::134]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6C28918B01 for ; Tue, 5 Jul 2022 05:04:06 -0700 (PDT) Received: by mail-lf1-x134.google.com with SMTP id z13so20101172lfj.13 for ; Tue, 05 Jul 2022 05:04:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=yoi+zPkWqTTvlN+wO0cy6XLBUH8069tfMWIB3LL7MAs=; b=WWm4T6oxPdyPf5nsyg+DEokjkXa55qLaAcSi2GDKKfFnM1SJamkJj8diao1wh7h519 GDoPLkEc/u9fTELcdU6Q4+o4/K40UotZ89sbgkmxhlbDvVJ9Gcc2lfyDde/6o8F1fRCI tNGW81W1D02hV+RFSs5ZkEXmXzO6VIebpXuWx+W4l/Y7d4iheXr73VyKBbpIFUPm0PcK WvOOKxYVB5Euu0yKFIWxIB87V2IAyJcx8UOBPhZLKvyC2/JVMr9WeKeP7SIzCIXBDNnw M7AuCQ55qjw3wgT9gUYaSVTmxU7wDLuq/oHaOSw+9HQEmN1UwlQbqKD/Pr74pThF5Adq 7Q8Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=yoi+zPkWqTTvlN+wO0cy6XLBUH8069tfMWIB3LL7MAs=; b=FBc3TS00/2CnYKytamBF8KSC+FZe77vk4b/9ZQQlI4TUS1rcwfk6WSWBLoPCMsn4Ll tJyMohQOZLsLjagL78DXgbnh7dGkyMlVHh5xpnua5t37NkGnS94Kh6QkIC2ij+yyQz+f YQ1sBhgkPDfwawyifso6kamtSFiCEJ0pxe6aiheE9b8/CX807OOOUVJxcZUydxJbfmPG xjT85ny4DYPOG6wKuw/UdnbIc17V1Up3asbyBHBWohSEl9A9ZuBpAyKCwTfpcQuXfgcr AO7iBxej4nNxfWhcrsdfLbM5FwgnlprMZ6KJLhYSDLsAKHW7au9xeCNz7RNNs7kUmbir da4A== X-Gm-Message-State: AJIora+802xn/x+iG3jUEoFK80oI/9tHXuSGOcz18F5KJvFQTcKWNVYg 2PyAeIJdPlVexiFHLkzbOR9urw== X-Google-Smtp-Source: AGRyM1tJsEWFcvfyYuEaK0/YaV0GLte8Y2Pk2okWn5zzhgGVTJYfJHiMKhSx90vLBPEz9AYpkSVJBg== X-Received: by 2002:a19:f208:0:b0:481:5db8:7ce7 with SMTP id q8-20020a19f208000000b004815db87ce7mr14835124lfh.526.1657022644777; Tue, 05 Jul 2022 05:04:04 -0700 (PDT) Received: from krzk-bin.home ([84.20.121.239]) by smtp.gmail.com with ESMTPSA id n13-20020a2e82cd000000b0025a885a135csm5547082ljh.119.2022.07.05.05.04.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 05 Jul 2022 05:04:04 -0700 (PDT) From: Krzysztof Kozlowski To: Dmitry Torokhov , Rob Herring , Krzysztof Kozlowski , linux-input@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Krzysztof Kozlowski Subject: [RESEND PATCH v3 2/3] dt-bindings: input: gpio-keys: reference input.yaml and document properties Date: Tue, 5 Jul 2022 14:03:55 +0200 Message-Id: <20220705120356.94876-3-krzysztof.kozlowski@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220705120356.94876-1-krzysztof.kozlowski@linaro.org> References: <20220705120356.94876-1-krzysztof.kozlowski@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" The original text bindings documented "autorepeat" and "label" properties (in the device node, beside the nodes with keys). DTS use also poll-interval. Reference the input.yaml to get these top-level properties. Signed-off-by: Krzysztof Kozlowski Reviewed-by: Rob Herring --- .../devicetree/bindings/input/gpio-keys.yaml | 32 +++++++++++-------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/Documentation/devicetree/bindings/input/gpio-keys.yaml b/Docum= entation/devicetree/bindings/input/gpio-keys.yaml index 27bb5c6ab8d9..e722e681d237 100644 --- a/Documentation/devicetree/bindings/input/gpio-keys.yaml +++ b/Documentation/devicetree/bindings/input/gpio-keys.yaml @@ -15,6 +15,13 @@ properties: - gpio-keys - gpio-keys-polled =20 + autorepeat: true + + label: + description: Name of entire device + + poll-interval: true + patternProperties: "^(button|event|key|switch|(button|event|key|switch)-[a-z0-9-]+|[a-z0-9-= ]+-(button|event|key|switch))$": $ref: input.yaml# @@ -94,19 +101,18 @@ patternProperties: =20 unevaluatedProperties: false =20 -if: - properties: - compatible: - const: gpio-keys-polled -then: - properties: - poll-interval: - description: - Poll interval time in milliseconds - $ref: /schemas/types.yaml#/definitions/uint32 - - required: - - poll-interval +allOf: + - $ref: input.yaml# + - if: + properties: + compatible: + const: gpio-keys-polled + then: + required: + - poll-interval + else: + properties: + poll-interval: false =20 additionalProperties: false =20 --=20 2.34.1 From nobody Sun Apr 19 05:39:45 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 46B83C433EF for ; Tue, 5 Jul 2022 12:09:07 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232425AbiGEMHR (ORCPT ); Tue, 5 Jul 2022 08:07:17 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46762 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233796AbiGEME3 (ORCPT ); Tue, 5 Jul 2022 08:04:29 -0400 Received: from mail-lj1-x22c.google.com (mail-lj1-x22c.google.com [IPv6:2a00:1450:4864:20::22c]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 94FFA18B08 for ; Tue, 5 Jul 2022 05:04:08 -0700 (PDT) Received: by mail-lj1-x22c.google.com with SMTP id i17so9457805ljj.12 for ; Tue, 05 Jul 2022 05:04:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=n04xRHDLPG5HTJiUoTVbiyOiGV01+5rVdjSb2OnFTXM=; b=BCDuSqECc+nJ4QixySuzLrzpTldvI4Om7Dhhe79zvfcZpzEzGecmAsDtbOf3XLzQC7 w1uhu4rB9AKVhxlEOmTXJsDmqBX/3XMZXi9nrbmqxCnspovd7Q8yAdlrQQX0aZYeV6Fl c8WcJWt8Si79EF8UcAIz71wn15IahJMZQdjSgHyrHfHv/2MYqOUJadjBcEzDAjbrBDzj rRImKl3ArYsXlhHZx7+a/pZCSpAYvIjJP14wEi6xVHIkMAoeQyfbYASKFAWMrBNse3wm KDbQ04/bH6MFUz+3trU9Jg7lhMH741aCEqeBNZBq8fgVsCxnHx9VVKxFpE/9R8U5Fvkr YDOw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=n04xRHDLPG5HTJiUoTVbiyOiGV01+5rVdjSb2OnFTXM=; b=bkw/dfX401dwEpY8P+pT6narC9dccQuHqOFT+kdtxiVdxLasKj8q92emgsqTOPYwgw p0SgHmgj4HXmc1AOSCCBPP4vSzKI+wXtdQCoRdfbCeMWhaKxVn1sHZVW0Yvzqe6u8ebi 7etVhvIz7ASUkBhzxnSPrbCiwshjNH8KWHJs2b3UDterHj2u4v1yMhm0gRxhjlxXIPj6 /FGMzw4MavoC4EmJqcKcp9ElVbUtv2JE654snqeqhdP1m/QILA5avuN2bb1SoKMujKya Rip20TIBdGFNTeDjtipC3iX1LnmST5koX+qitCaM6kmkskp6aMHfVoXx0EdiO4cXQdqV 7Lhw== X-Gm-Message-State: AJIora8uqDWOfMQWo3pz2Ftts6eRZ7Ao3/Ge0uDh0FNtkCfQNrReEIx5 W6QZ68U28mCF9kt3iYCGZBDrg7a2NatEig== X-Google-Smtp-Source: AGRyM1sl7oYOktjybXQ7DcS9EisH+raxTv/CIYoUdIA4mqFgH0EaCpesDAtzqgGs0ayhR8cQfoLLyg== X-Received: by 2002:a05:651c:1699:b0:25b:c598:3803 with SMTP id bd25-20020a05651c169900b0025bc5983803mr20101511ljb.0.1657022646876; Tue, 05 Jul 2022 05:04:06 -0700 (PDT) Received: from krzk-bin.home ([84.20.121.239]) by smtp.gmail.com with ESMTPSA id n13-20020a2e82cd000000b0025a885a135csm5547082ljh.119.2022.07.05.05.04.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 05 Jul 2022 05:04:05 -0700 (PDT) From: Krzysztof Kozlowski To: Dmitry Torokhov , Rob Herring , Krzysztof Kozlowski , linux-input@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Krzysztof Kozlowski Subject: [RESEND PATCH v3 3/3] dt-bindings: input: gpio-keys: accept also interrupt-extended Date: Tue, 5 Jul 2022 14:03:56 +0200 Message-Id: <20220705120356.94876-4-krzysztof.kozlowski@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220705120356.94876-1-krzysztof.kozlowski@linaro.org> References: <20220705120356.94876-1-krzysztof.kozlowski@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Each key device node might have interrupts-extended instead of interrupts property: fsl-ls1028a-kontron-sl28-var1.dtb: buttons0: power-button: 'anyOf' condit= ional failed, one must be fixed: 'interrupts' is a required property 'gpios' is a required property Signed-off-by: Krzysztof Kozlowski Reviewed-by: Rob Herring --- Documentation/devicetree/bindings/input/gpio-keys.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Documentation/devicetree/bindings/input/gpio-keys.yaml b/Docum= entation/devicetree/bindings/input/gpio-keys.yaml index e722e681d237..17ac9dff7972 100644 --- a/Documentation/devicetree/bindings/input/gpio-keys.yaml +++ b/Documentation/devicetree/bindings/input/gpio-keys.yaml @@ -92,6 +92,8 @@ patternProperties: anyOf: - required: - interrupts + - required: + - interrupts-extended - required: - gpios =20 --=20 2.34.1