From patchwork Wed Nov 13 09:37:28 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Xianwei Zhao via B4 Relay X-Patchwork-Id: 13873353 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 bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 6C298D41C27 for ; Wed, 13 Nov 2024 09:38:55 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:Reply-To:List-Subscribe:List-Help: List-Post:List-Archive:List-Unsubscribe:List-Id:Cc:To:In-Reply-To:References: Message-Id:MIME-Version:Subject:Date:From:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=IwaXJGJWwzIecvDN0eTMZZ7zVje40a9I3iTRZnTIT3k=; b=JO5O7Wa/sQFIUA pMhZG5es6fwQPkSdrdG3mXME6Sa3Y7+giIrKYUMKIkg8HlqBbi2MRo6+FEAA0aUvFx/NAqXbfmIks HiNG7yzo9mrAeJEuA/Om/FKshz05NRFt38U6QG+jShKLvGZgYEqtYJMcyCB0PI3jLFmPb/hwAbHep 1B+4hZnJ5gXm7m/tk1qTgTw6NuXXNtDSTb3nuywo0GwlTabKM3XeEnAwU9zNCpx+vvQzGJu1Y7lJd tD/XPV/pfo1gKzH/2XxB4QdSzqsv5GrnORt/M4KVllHv9lV58KI5kPimlLSh9NSbdI9Zsby77PDQp yDAIGEMVEsH7978rR1WQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tB9pr-00000006GOu-3huc; Wed, 13 Nov 2024 09:38:51 +0000 Received: from nyc.source.kernel.org ([2604:1380:45d1:ec00::3]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tB9of-00000006G86-1EcR; Wed, 13 Nov 2024 09:37:38 +0000 Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by nyc.source.kernel.org (Postfix) with ESMTP id 0CF8AA40207; Wed, 13 Nov 2024 09:35:42 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPS id BB38EC4CED2; Wed, 13 Nov 2024 09:37:35 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1731490655; bh=wPBe1Ne97A1i8ZbAL/kYQUIE50R8f1hyGC9apeCSxRo=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=ZfDuVQjiR8bL6TeUXNRcAfE3GNMeHJBHgKvWEkjNJiaSO1yWlaRB10lQNVHfGArKs mYGfePpDbnrmxKGkLKVb/eC/pHVAvYhyv1x9C4MqLGZJJQIo7W84YAHTgAo08NXRuo so2U90lnVSY4R+KCJNmWNktIrgtT+HJNv4CYFyuCPMYVqEFQo5lstsB5ltPqB3+Cd0 mrEi8+gDtKmZFicoy/kUAOxojn3VuyZP7XeW3gFqU8HXwW+rewjCN6XHwe8e5yi6rz A5sR7KmiT+pDhQJlww8AMIhj4vYsfTbXKCUP8HP29ojFjIuiizuVZgCQANJ9Satzt+ jos8Ruhf+nJlg== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id A75A6D41C26; Wed, 13 Nov 2024 09:37:35 +0000 (UTC) From: Xianwei Zhao via B4 Relay Date: Wed, 13 Nov 2024 17:37:28 +0800 Subject: [PATCH v7 1/5] dt-bindings: pinctrl: move gpio-cells and gpio-controller property MIME-Version: 1.0 Message-Id: <20241113-a4_pinctrl-v7-1-0546a20c1c22@amlogic.com> References: <20241113-a4_pinctrl-v7-0-0546a20c1c22@amlogic.com> In-Reply-To: <20241113-a4_pinctrl-v7-0-0546a20c1c22@amlogic.com> To: Linus Walleij , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Neil Armstrong , Kevin Hilman , Jerome Brunet , Martin Blumenstingl , Bartosz Golaszewski Cc: linux-gpio@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-amlogic@lists.infradead.org, linux-kernel@vger.kernel.org, Xianwei Zhao X-Mailer: b4 0.12.4 X-Developer-Signature: v=1; a=ed25519-sha256; t=1731490653; l=4395; i=xianwei.zhao@amlogic.com; s=20231208; h=from:subject:message-id; bh=9MmCznmDm9mVPvWwuBcONM77WszO1Q8hkiP9QjVbjvU=; b=xxRS3+wJ0rR+qFhpzkDhhya4g7/CA1N/WcYSR/mS22omOlz0acXcjZtfbtSK77kO4ZHM7d3Ja RpYQ0TeV9pmD4Z0BDdjeTenVC90AV3MgHr5g110+30+5koqqOmRD3+n X-Developer-Key: i=xianwei.zhao@amlogic.com; a=ed25519; pk=o4fDH8ZXL6xQg5h17eNzRljf6pwZHWWjqcOSsj3dW24= X-Endpoint-Received: by B4 Relay for xianwei.zhao@amlogic.com/20231208 with auth_id=107 X-Original-From: Xianwei Zhao X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20241113_013737_517110_2AFBA563 X-CRM114-Status: UNSURE ( 7.85 ) X-CRM114-Notice: Please train this message. X-BeenThere: linux-amlogic@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: xianwei.zhao@amlogic.com Sender: "linux-amlogic" Errors-To: linux-amlogic-bounces+linux-amlogic=archiver.kernel.org@lists.infradead.org From: Xianwei Zhao Move #gpio-cells and gpio-controller properties from common yaml file to lower-level yaml files. Signed-off-by: Xianwei Zhao --- .../devicetree/bindings/pinctrl/amlogic,meson-pinctrl-a1.yaml | 5 +++++ .../devicetree/bindings/pinctrl/amlogic,meson-pinctrl-common.yaml | 5 ----- .../bindings/pinctrl/amlogic,meson-pinctrl-g12a-aobus.yaml | 5 +++++ .../bindings/pinctrl/amlogic,meson-pinctrl-g12a-periphs.yaml | 5 +++++ .../devicetree/bindings/pinctrl/amlogic,meson8-pinctrl-aobus.yaml | 5 +++++ .../devicetree/bindings/pinctrl/amlogic,meson8-pinctrl-cbus.yaml | 5 +++++ 6 files changed, 25 insertions(+), 5 deletions(-) diff --git a/Documentation/devicetree/bindings/pinctrl/amlogic,meson-pinctrl-a1.yaml b/Documentation/devicetree/bindings/pinctrl/amlogic,meson-pinctrl-a1.yaml index d9e0b2c48e84..f841367878a0 100644 --- a/Documentation/devicetree/bindings/pinctrl/amlogic,meson-pinctrl-a1.yaml +++ b/Documentation/devicetree/bindings/pinctrl/amlogic,meson-pinctrl-a1.yaml @@ -38,6 +38,11 @@ patternProperties: - const: mux - const: gpio + gpio-controller: true + + "#gpio-cells": + const: 2 + gpio-line-names: minItems: 62 # A1 maxItems: 82 # S4 diff --git a/Documentation/devicetree/bindings/pinctrl/amlogic,meson-pinctrl-common.yaml b/Documentation/devicetree/bindings/pinctrl/amlogic,meson-pinctrl-common.yaml index e707c222a07f..e3765010f6a8 100644 --- a/Documentation/devicetree/bindings/pinctrl/amlogic,meson-pinctrl-common.yaml +++ b/Documentation/devicetree/bindings/pinctrl/amlogic,meson-pinctrl-common.yaml @@ -33,11 +33,6 @@ $defs: type: object properties: - gpio-controller: true - - "#gpio-cells": - const: 2 - gpio-ranges: maxItems: 1 diff --git a/Documentation/devicetree/bindings/pinctrl/amlogic,meson-pinctrl-g12a-aobus.yaml b/Documentation/devicetree/bindings/pinctrl/amlogic,meson-pinctrl-g12a-aobus.yaml index 108719bde0d0..47607ba59237 100644 --- a/Documentation/devicetree/bindings/pinctrl/amlogic,meson-pinctrl-g12a-aobus.yaml +++ b/Documentation/devicetree/bindings/pinctrl/amlogic,meson-pinctrl-g12a-aobus.yaml @@ -36,6 +36,11 @@ patternProperties: - const: ds - const: gpio + gpio-controller: true + + "#gpio-cells": + const: 2 + gpio-line-names: maxItems: 15 diff --git a/Documentation/devicetree/bindings/pinctrl/amlogic,meson-pinctrl-g12a-periphs.yaml b/Documentation/devicetree/bindings/pinctrl/amlogic,meson-pinctrl-g12a-periphs.yaml index dc277f2e2edf..adbcda6ce18e 100644 --- a/Documentation/devicetree/bindings/pinctrl/amlogic,meson-pinctrl-g12a-periphs.yaml +++ b/Documentation/devicetree/bindings/pinctrl/amlogic,meson-pinctrl-g12a-periphs.yaml @@ -38,6 +38,11 @@ patternProperties: - const: mux - const: ds + gpio-controller: true + + "#gpio-cells": + const: 2 + gpio-line-names: maxItems: 85 diff --git a/Documentation/devicetree/bindings/pinctrl/amlogic,meson8-pinctrl-aobus.yaml b/Documentation/devicetree/bindings/pinctrl/amlogic,meson8-pinctrl-aobus.yaml index add83c676327..15e04f2ef9e8 100644 --- a/Documentation/devicetree/bindings/pinctrl/amlogic,meson8-pinctrl-aobus.yaml +++ b/Documentation/devicetree/bindings/pinctrl/amlogic,meson8-pinctrl-aobus.yaml @@ -44,6 +44,11 @@ patternProperties: - const: pull - const: gpio + gpio-controller: true + + "#gpio-cells": + const: 2 + gpio-line-names: minItems: 11 # GXL maxItems: 16 # Meson8 diff --git a/Documentation/devicetree/bindings/pinctrl/amlogic,meson8-pinctrl-cbus.yaml b/Documentation/devicetree/bindings/pinctrl/amlogic,meson8-pinctrl-cbus.yaml index 412bbcc276f3..c63e057cca92 100644 --- a/Documentation/devicetree/bindings/pinctrl/amlogic,meson8-pinctrl-cbus.yaml +++ b/Documentation/devicetree/bindings/pinctrl/amlogic,meson8-pinctrl-cbus.yaml @@ -45,6 +45,11 @@ patternProperties: - const: pull-enable - const: gpio + gpio-controller: true + + "#gpio-cells": + const: 2 + gpio-line-names: minItems: 86 # AXG maxItems: 120 # Meson8 From patchwork Wed Nov 13 09:37:29 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Xianwei Zhao via B4 Relay X-Patchwork-Id: 13873354 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 bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 08A33D41C24 for ; Wed, 13 Nov 2024 09:42:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:Reply-To:List-Subscribe:List-Help: List-Post:List-Archive:List-Unsubscribe:List-Id:Cc:To:In-Reply-To:References: Message-Id:MIME-Version:Subject:Date:From:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=FMxKojVBtxKVtYgFS95n3F1x5cZFhL4MdyPkcLCXnQ8=; b=C4gnBJ6kQNRXjt EUOUQPMZb9XFmsYD5i3fLANXiqJMdmoDZuNiQ4TCSzAiYpKdzwNcspNJ4yK0zkvZ3aeFPJfceZE1s xJ9+89+hmvSJtu7Xifm4I+OFA7XCjjgzv8L2nNR/Mog5VSQtRV/EI64vqd9IbDv+1OB7TJTodn3SA MgTc6QR2/joBOchqE4zUjhbFXHs7/OZzvOJof8FQQ7RJtswrPeDAxcDF/dsKNQNbzalhGPRAWY7Df I1dx8oShANFKSw/g7votAbbxW7I8iXpDJFvCOuxzGCfyA5lflaIQGu3UF3+ysnHt3IKjMIxs/EV1v xp5k6dCxcJukG3UdvYlA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tB9tS-00000006Gv8-09ox; Wed, 13 Nov 2024 09:42:34 +0000 Received: from desiato.infradead.org ([2001:8b0:10b:1:d65d:64ff:fe57:4e05]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tB9om-00000006G95-3lDT; Wed, 13 Nov 2024 09:37:45 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=desiato.20200630; h=Reply-To:Cc:To:In-Reply-To:References: Message-Id:Content-Transfer-Encoding:Content-Type:MIME-Version:Subject:Date: From:Sender:Content-ID:Content-Description; bh=IMXnuAdCa4biqfeSFsEHS1SxOkiFLXs1qrfKwGoxWUU=; b=nfyc8pycfcDLYjJlufO/M/XwSy /3Mt9HMZ6Zy84nO6fH2bUKq5saOY40dmttjUEkiyftc6hc4ym5xT86ey9yYYmlTDUWlSUlCxzaorQ wgx9AmLF301Dtnv7xzfj+k9JE0X7qrhDeDvWcjEgSR/yUh9J/dGf/mE0BVmaFSPR7vsIGheK4AHhv i1bJ6LTNXojTBzU9JoBaLMlV3qcGsn4K0NpsgoGRAjQEZL7wCCkDCKsT06+Q+zzioTXREZVuxUYMg Rr/F+uTNcg+Mzhe36nYWOd5RbwdauYiNveiEE/wqdmPlqYmbViP38x+vqLmU6hLEQmcTuSAxe1nKq s193yAqQ==; Received: from nyc.source.kernel.org ([2604:1380:45d1:ec00::3]) by desiato.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tB9oi-0000000DDvG-2MIv; Wed, 13 Nov 2024 09:37:43 +0000 Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by nyc.source.kernel.org (Postfix) with ESMTP id 48793A40512; Wed, 13 Nov 2024 09:35:42 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPS id C89E8C4CED7; Wed, 13 Nov 2024 09:37:35 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1731490655; bh=jF8bZTWN3AB9XKsseQGVgxQ6RryMR2osjnjfCUqnOnU=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=TypZg6pLeCaSBoINbmBXk6UDfJHSDQ1MZdeHPE6ZxZYBdmGzk8phSSCuS817Zi3iv yme7W9KturW9EgdfJdbd+hwqI3Lq+3GcHyp/9Ns6XwhBBVlVSs1iCsI2X5Ou3ArTQs RM5JXDXIM7ecSswuxkdf7Tr/exVtrQoRQeBY2OVIjbVXmSOXWGBBZKziQMthmja6y4 8UQY0Rqn/Pi4eWnyPc9T/qzIA3eZoWtJiNwNe8gaetfgneqeLdYj2xEOCHFwntKV7+ JJOBptxJksr9ZhF4zLWuvCZVHiitsfFbEJ67yC4X2zA6IZT7Y4JoMqX9ZualujhNvc 0quTWQFWNp/8g== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id BAC03D41C00; Wed, 13 Nov 2024 09:37:35 +0000 (UTC) From: Xianwei Zhao via B4 Relay Date: Wed, 13 Nov 2024 17:37:29 +0800 Subject: [PATCH v7 2/5] dt-bindings: pinctrl: Add support for Amlogic A4 SoCs MIME-Version: 1.0 Message-Id: <20241113-a4_pinctrl-v7-2-0546a20c1c22@amlogic.com> References: <20241113-a4_pinctrl-v7-0-0546a20c1c22@amlogic.com> In-Reply-To: <20241113-a4_pinctrl-v7-0-0546a20c1c22@amlogic.com> To: Linus Walleij , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Neil Armstrong , Kevin Hilman , Jerome Brunet , Martin Blumenstingl , Bartosz Golaszewski Cc: linux-gpio@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-amlogic@lists.infradead.org, linux-kernel@vger.kernel.org, Xianwei Zhao X-Mailer: b4 0.12.4 X-Developer-Signature: v=1; a=ed25519-sha256; t=1731490653; l=4207; i=xianwei.zhao@amlogic.com; s=20231208; h=from:subject:message-id; bh=E8gcBsM6qojqj57hTy/vqLumXN1IUp3FUay7hZlvU14=; b=6g8W/fNaZ8PbmBSC3DbFf1TECvck9xVkg2eXOLWcM81cH+8yNpEH4njg3QQWAv+2GitlgLlVu tkOjeb49ionCc/xBLYfShpBF6tq1Q+0z0MEIEsVm54NUiSIYQmz5w5o X-Developer-Key: i=xianwei.zhao@amlogic.com; a=ed25519; pk=o4fDH8ZXL6xQg5h17eNzRljf6pwZHWWjqcOSsj3dW24= X-Endpoint-Received: by B4 Relay for xianwei.zhao@amlogic.com/20231208 with auth_id=107 X-Original-From: Xianwei Zhao X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20241113_093741_677107_D8829590 X-CRM114-Status: GOOD ( 11.86 ) X-BeenThere: linux-amlogic@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: xianwei.zhao@amlogic.com Sender: "linux-amlogic" Errors-To: linux-amlogic-bounces+linux-amlogic=archiver.kernel.org@lists.infradead.org From: Xianwei Zhao Add the dt-bindings for Amlogic A4 pin controller, and add a new dt-binding header file which document the GPIO bank names of all Amlogic subsequent SoCs. Acked-by: Rob Herring (Arm) Signed-off-by: Xianwei Zhao --- .../bindings/pinctrl/amlogic,meson-pinctrl-a4.yaml | 82 ++++++++++++++++++++++ include/dt-bindings/gpio/amlogic-gpio.h | 45 ++++++++++++ 2 files changed, 127 insertions(+) diff --git a/Documentation/devicetree/bindings/pinctrl/amlogic,meson-pinctrl-a4.yaml b/Documentation/devicetree/bindings/pinctrl/amlogic,meson-pinctrl-a4.yaml new file mode 100644 index 000000000000..357e9bb079eb --- /dev/null +++ b/Documentation/devicetree/bindings/pinctrl/amlogic,meson-pinctrl-a4.yaml @@ -0,0 +1,82 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/pinctrl/amlogic,meson-pinctrl-a4.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Amlogic A4 pinmux controller + +maintainers: + - Neil Armstrong + - Xianwei Zhao + +allOf: + - $ref: amlogic,meson-pinctrl-common.yaml# + +properties: + compatible: + enum: + - amlogic,a4-aobus-pinctrl + - amlogic,a4-periphs-pinctrl + +required: + - compatible + +patternProperties: + "^bank@[0-9a-f]+$": + $ref: amlogic,meson-pinctrl-common.yaml#/$defs/meson-gpio + + unevaluatedProperties: false + + properties: + reg: + maxItems: 2 + + reg-names: + items: + - const: mux + - const: gpio + + gpio-controller: true + + "#gpio-cells": + const: 3 + + gpio-line-names: + minItems: 8 + maxItems: 73 + +unevaluatedProperties: + type: object + $ref: amlogic,meson-pinctrl-common.yaml#/$defs/meson-pins + +examples: + - | + bus { + #address-cells = <2>; + #size-cells = <2>; + + periphs_pinctrl: pinctrl@4000 { + compatible = "amlogic,a4-periphs-pinctrl"; + #address-cells = <2>; + #size-cells = <2>; + ranges = <0x0 0x0 0x0 0x4000 0x0 0x02e0>; + + bank@0 { + reg = <0x0 0x0 0x0 0x0050>, + <0x0 0xc0 0x0 0x0220>; + reg-names = "mux", "gpio"; + gpio-controller; + #gpio-cells = <3>; + gpio-ranges = <&periphs_pinctrl 0 0 73>; + }; + + cec_ao_a_h_pins: cec_ao_a_h { + mux { + groups = "cec_ao_a_h"; + function = "cec_ao_a_h"; + bias-disable; + }; + }; + }; + }; diff --git a/include/dt-bindings/gpio/amlogic-gpio.h b/include/dt-bindings/gpio/amlogic-gpio.h new file mode 100644 index 000000000000..5bfdb39eeda8 --- /dev/null +++ b/include/dt-bindings/gpio/amlogic-gpio.h @@ -0,0 +1,45 @@ +/* SPDX-License-Identifier: (GPL-2.0-only OR MIT) */ +/* + * Copyright (c) 2024 Amlogic, Inc. All rights reserved. + * Author: Xianwei Zhao + */ + +#ifndef _DT_BINDINGS_AMLOGIC_GPIO_H +#define _DT_BINDINGS_AMLOGIC_GPIO_H + +#include + +/* Normal GPIO bank */ +#define AMLOGIC_GPIO_A 0 +#define AMLOGIC_GPIO_B 1 +#define AMLOGIC_GPIO_C 2 +#define AMLOGIC_GPIO_D 3 +#define AMLOGIC_GPIO_E 4 +#define AMLOGIC_GPIO_F 5 +#define AMLOGIC_GPIO_G 6 +#define AMLOGIC_GPIO_H 7 +#define AMLOGIC_GPIO_I 8 +#define AMLOGIC_GPIO_J 9 +#define AMLOGIC_GPIO_K 10 +#define AMLOGIC_GPIO_L 11 +#define AMLOGIC_GPIO_M 12 +#define AMLOGIC_GPIO_N 13 +#define AMLOGIC_GPIO_O 14 +#define AMLOGIC_GPIO_P 15 +#define AMLOGIC_GPIO_Q 16 +#define AMLOGIC_GPIO_R 17 +#define AMLOGIC_GPIO_S 18 +#define AMLOGIC_GPIO_T 19 +#define AMLOGIC_GPIO_U 20 +#define AMLOGIC_GPIO_V 21 +#define AMLOGIC_GPIO_W 22 +#define AMLOGIC_GPIO_X 23 +#define AMLOGIC_GPIO_Y 24 +#define AMLOGIC_GPIO_Z 25 +/* Special GPIO bank */ +#define AMLOGIC_GPIO_DV 26 +#define AMLOGIC_GPIO_AO 27 +#define AMLOGIC_GPIO_CC 28 +#define AMLOGIC_GPIO_TEST_N 29 + +#endif /* _DT_BINDINGS_AMLOGIC_GPIO_H */ From patchwork Wed Nov 13 09:37:30 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Xianwei Zhao via B4 Relay X-Patchwork-Id: 13873388 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 bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id AF80ED41C24 for ; Wed, 13 Nov 2024 09:46:15 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:Reply-To:List-Subscribe:List-Help: List-Post:List-Archive:List-Unsubscribe:List-Id:Cc:To:In-Reply-To:References: Message-Id:MIME-Version:Subject:Date:From:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=Hr/zl8WI0cUzF0HFt+3fwQvsKoYzFfz58nUE02QoX0Y=; b=YAVLvAwYK551sO MsgVWO238FtG6WQfrBX4qBYWc+1SMkHA/28ccOR9oTrIC3hPPexhyCrTPeSUBM/Fmzk3vlvuaRIc6 7WbzA5V0O+7Mj4HRLrignMKEKUOvOvRFdVlldSyPaIzLjhOQVdt+IxyeIRbSU1EPK1rKaETqdpUkw j6qQPObCYxzzHvpIYDEzBM0HWEKLv8Ha7holOqT8jHgLvYUBd5AiYXv7qbM/jGUuXJizc6tERHFMb aYoUj+nhlKBpuspsNuPgyY4VCTNJymlLh+GmKH2fY5e/T7WSAMQ1tlRvdz8NWwt4R2rDRKQvVDLr8 57D6OwDI2otuOChhLvOg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tB9wy-00000006HKp-1e5b; Wed, 13 Nov 2024 09:46:12 +0000 Received: from desiato.infradead.org ([2001:8b0:10b:1:d65d:64ff:fe57:4e05]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tB9oo-00000006G9Q-3E41; Wed, 13 Nov 2024 09:37:46 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=desiato.20200630; h=Reply-To:Cc:To:In-Reply-To:References: Message-Id:Content-Transfer-Encoding:Content-Type:MIME-Version:Subject:Date: From:Sender:Content-ID:Content-Description; bh=KWcYE08QmOt/2PXkvFAPHcchNfXBF8BJT23rJcCAv50=; b=DvoJ2jFKVW8so0in35Ggn72uNA RhhaRRrvMTOo7110paphkD2F9m+agSuskFKtcBHUkRfzJJnN5BC+64Tr4BrOAJMX0s4vHFLWVGV2V 6XFh7X32ptuGZpl6SMJUecTpa3+sKsrVP5ujhNOt24lXyrdj0sXALrBOuGKD+t+mA8W3S14IkJhQs kMSF39TYIkJF9DjiIC1WJsMP6JCjG0seXOlqLPYHBtxLdvmArHboZ2JXDVstsDJ4/y/hq+UEILbjN qv1CFx5B+ExJesB3x0lG9svAtLb/Lwb4qgbKWgHdtGugAchyec1Oq6kuibGSvBm+xhrWw2ZyNTnRm HyuIuymA==; Received: from nyc.source.kernel.org ([147.75.193.91]) by desiato.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tB9oj-0000000DDvH-0W5h; Wed, 13 Nov 2024 09:37:44 +0000 Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by nyc.source.kernel.org (Postfix) with ESMTP id 62F80A405B8; Wed, 13 Nov 2024 09:35:42 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPS id D81B5C4CED8; Wed, 13 Nov 2024 09:37:35 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1731490655; bh=8TOv1Z5OyPH3FzN2qQ0QJp6OTICIwjthX/si2CeYrbw=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=gEY6ye42h+QP1DKU3EHWQ4r29J9fqJ5z3ykGlFr83XMAlUCbTF1GylEGA0sAotw3t xVKHWuY/5+aM8Lcj/Pnsp6F5uGThnI4LNb0JxqNSfs9JZKWRMQK7eMjEAggYwBhv5Y JOYx4cZhgEGMUQuuvv9lJeAGnQoME+fDsOp7Hka4zWpig2BW2NvglUT4ewiXIP3pwi iTd/zl85gMtZ/rkAoYwnPjlZyRxI0i5lN9FYEH+58Rr3MpDxEyKZN1YT55bT/vYNAj aC69fjhCfE3uNTQ/TQV52m9Gtrt1te4Luo5yTZM6RN8mR2+iptPs2RypaTqg93p1HT 8AFnIF/oTEh2Q== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id CCBBDD41C2A; Wed, 13 Nov 2024 09:37:35 +0000 (UTC) From: Xianwei Zhao via B4 Relay Date: Wed, 13 Nov 2024 17:37:30 +0800 Subject: [PATCH v7 3/5] pinctrl: meson: add interface of of_xlate MIME-Version: 1.0 Message-Id: <20241113-a4_pinctrl-v7-3-0546a20c1c22@amlogic.com> References: <20241113-a4_pinctrl-v7-0-0546a20c1c22@amlogic.com> In-Reply-To: <20241113-a4_pinctrl-v7-0-0546a20c1c22@amlogic.com> To: Linus Walleij , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Neil Armstrong , Kevin Hilman , Jerome Brunet , Martin Blumenstingl , Bartosz Golaszewski Cc: linux-gpio@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-amlogic@lists.infradead.org, linux-kernel@vger.kernel.org, Xianwei Zhao X-Mailer: b4 0.12.4 X-Developer-Signature: v=1; a=ed25519-sha256; t=1731490653; l=1754; i=xianwei.zhao@amlogic.com; s=20231208; h=from:subject:message-id; bh=kZkfTxXyUa/bUEnikqRrRpqnocDlXw3ORsFp/T0SNwU=; b=oyTkOMvKCa2cVjlY8hKd3hAxrbJwp8YiBEVVLREl9rTCfaX7670T1XHpd6Gn8jhqZlrNnw3Dp jY4hQwnxHW+BvZuHsgwrLIpDMHI23qxbIJ3iyyIWmdK/oZYc50MpOYG X-Developer-Key: i=xianwei.zhao@amlogic.com; a=ed25519; pk=o4fDH8ZXL6xQg5h17eNzRljf6pwZHWWjqcOSsj3dW24= X-Endpoint-Received: by B4 Relay for xianwei.zhao@amlogic.com/20231208 with auth_id=107 X-Original-From: Xianwei Zhao X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20241113_093742_085440_271E5648 X-CRM114-Status: UNSURE ( 9.98 ) X-CRM114-Notice: Please train this message. X-BeenThere: linux-amlogic@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: xianwei.zhao@amlogic.com Sender: "linux-amlogic" Errors-To: linux-amlogic-bounces+linux-amlogic=archiver.kernel.org@lists.infradead.org From: Xianwei Zhao Amlogic pinctrl software framework use system API of_gpio_simple_xlate which only support linear one-to-one correspondence to translate gpiospec to the GPIO number and flags before. It can not meet the non-linear needs. Add the interface satisfies the underlying driver to implement the transformation to meet the needs of various scenarios. Reviewed-by: Neil Armstrong Signed-off-by: Xianwei Zhao --- drivers/pinctrl/meson/pinctrl-meson.c | 4 ++++ drivers/pinctrl/meson/pinctrl-meson.h | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/drivers/pinctrl/meson/pinctrl-meson.c b/drivers/pinctrl/meson/pinctrl-meson.c index 253a0cc57e39..fc0c0bef38c0 100644 --- a/drivers/pinctrl/meson/pinctrl-meson.c +++ b/drivers/pinctrl/meson/pinctrl-meson.c @@ -620,6 +620,10 @@ static int meson_gpiolib_register(struct meson_pinctrl *pc) pc->chip.base = -1; pc->chip.ngpio = pc->data->num_pins; pc->chip.can_sleep = false; + if (pc->data->of_xlate) { + pc->chip.of_gpio_n_cells = pc->data->of_gpio_n_cells; + pc->chip.of_xlate = pc->data->of_xlate; + } ret = gpiochip_add_data(&pc->chip, pc); if (ret) { diff --git a/drivers/pinctrl/meson/pinctrl-meson.h b/drivers/pinctrl/meson/pinctrl-meson.h index 7883ea31a001..cbb3f22552b9 100644 --- a/drivers/pinctrl/meson/pinctrl-meson.h +++ b/drivers/pinctrl/meson/pinctrl-meson.h @@ -120,6 +120,10 @@ struct meson_pinctrl_data { const struct pinmux_ops *pmx_ops; const void *pmx_data; int (*parse_dt)(struct meson_pinctrl *pc); + int (*of_xlate)(struct gpio_chip *gc, + const struct of_phandle_args *gpiospec, + u32 *flags); + int of_gpio_n_cells; }; struct meson_pinctrl { From patchwork Wed Nov 13 09:37:31 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Xianwei Zhao via B4 Relay X-Patchwork-Id: 13873389 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 bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id A0A4CD41C27 for ; Wed, 13 Nov 2024 09:48:14 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:Reply-To:List-Subscribe:List-Help: List-Post:List-Archive:List-Unsubscribe:List-Id:Cc:To:In-Reply-To:References: Message-Id:MIME-Version:Subject:Date:From:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=xECdqagn7gzTKadRBtpV7HrvfMsrlrRwiqJ9iV5trNE=; b=mvwqcTKTnrWStb CgYcsM5V/qCKDz+LOdCRX3/NBkwOjQ3o/ilovK0ev1yFPVlVomuogfS3dKGUkBwSYjLxG9gcirsMV vSy+i227W0qLDu+uVdirTr83+J+thisErNkb8DHjB1hHJG7OA8Rgen9zD44YF7BTCJt80Lus4juop ICOZxNMnxTYKuUDluJ3h2IynFFO3FfBLjzP37N9N5wZ2kq0xnaIEV/qhdJsbPmdbDsa9GZVFBVOW2 wMIpbuixGBT+/jZXZMt35h17g5NxOUffQacjTMi00+3ju5tQNbWpWwEiftA24UjVMsthqsCy7ZXnD l8tfGyrXEn8470AQf7OA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tB9yr-00000006Hu2-2Xpm; Wed, 13 Nov 2024 09:48:09 +0000 Received: from desiato.infradead.org ([2001:8b0:10b:1:d65d:64ff:fe57:4e05]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tB9ot-00000006GA6-2loa; Wed, 13 Nov 2024 09:37:52 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=desiato.20200630; h=Reply-To:Cc:To:In-Reply-To:References: Message-Id:Content-Transfer-Encoding:Content-Type:MIME-Version:Subject:Date: From:Sender:Content-ID:Content-Description; bh=U+AgTLIPyQbInlDNsHOkghXs+B5NjW43gyYJmG6WdSQ=; b=P4e3S2+VbGQ64JCPg0NnXQpYOz lh/EQ2pb72ZH/75sIKB1UO6uzQU1vilYCypfgMqQoqEuzd6CYA+qk8DbiLX0iNLk7JyDe/qMz9+35 e6D9JAiMgjdTgNSCceD0ZHcV6x4MER44cHTkvrxEvYq6bsRLHMVrqdIz57CBRWNTviDAUIe/q/9iu diSrzisI+yW1oqSdnIIi7iVMDd+5aRqmk9j+V7E7kAeNHG/P8pl+nOBpbCCkwM0DrELnaQZNA9VbT MiFG4La/8JHf3YsuGEW4fzZUCcAJfW/5FSZ07czpz8NPf0y19toQnTP2M4C0kGbMKRLW5H3JVFrKf rOGILgpw==; Received: from dfw.source.kernel.org ([139.178.84.217]) by desiato.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tB9oi-0000000DDvF-2MoM; Wed, 13 Nov 2024 09:37:50 +0000 Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by dfw.source.kernel.org (Postfix) with ESMTP id 2B3CB5C4C0E; Wed, 13 Nov 2024 09:36:52 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPS id EB9C5C4AF0C; Wed, 13 Nov 2024 09:37:35 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1731490656; bh=rwGEUOIpNRJdihacl3Vr8CYfVXN0US+iyPXC4i8Y4D8=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=AXvh0l4rebHUCtUnF3sJmsFKX5zYNTZL3WQJrbBoTs2jpLWxT0R2Gb0DNDqQ9MEYP S2ZT9Runvjud2bvmJ/1YXXkMnogygiRQotnwqo7fyeGWVteCDlga7PVG6o0MhlImkC vEwbR1idud3SvRCopUwtf/W023meNrynBlxgLwXPWz/fSpwQnFM7brPv96RaaElc3/ Zi03WhS77Xjr+LTkHvxfFla76RnCF6jw3+bxoLQgo6QGhcGLwbw0m1c+4inAvkSdIm I6HMR2Hi7k+Qxv6qh8+cxdkWiFZYSO1WCPwWmJGbiinqWp0445zsH8CxNmKsRzcl3a YN6JjgG/erIZQ== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id E13DAD41C24; Wed, 13 Nov 2024 09:37:35 +0000 (UTC) From: Xianwei Zhao via B4 Relay Date: Wed, 13 Nov 2024 17:37:31 +0800 Subject: [PATCH v7 4/5] pinctrl: meson: Add driver support for Amlogic A4 SoCs MIME-Version: 1.0 Message-Id: <20241113-a4_pinctrl-v7-4-0546a20c1c22@amlogic.com> References: <20241113-a4_pinctrl-v7-0-0546a20c1c22@amlogic.com> In-Reply-To: <20241113-a4_pinctrl-v7-0-0546a20c1c22@amlogic.com> To: Linus Walleij , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Neil Armstrong , Kevin Hilman , Jerome Brunet , Martin Blumenstingl , Bartosz Golaszewski Cc: linux-gpio@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-amlogic@lists.infradead.org, linux-kernel@vger.kernel.org, Xianwei Zhao X-Mailer: b4 0.12.4 X-Developer-Signature: v=1; a=ed25519-sha256; t=1731490653; l=45209; i=xianwei.zhao@amlogic.com; s=20231208; h=from:subject:message-id; bh=k+BTxLebWfNJZ27OfoMAUrw2L60yKj4hqGF+c3QqrGQ=; b=3K1YafInW4NMYH5yh5mE9nEgCRM4X/MBsge89cZDREDXofl22Rmtzo1J8fameokbHFV05Hjmf 5tjTQPQTSprCTCY/C3BEVF7maDGEV48P1W6qqka9S6Sda8mp41wGIic X-Developer-Key: i=xianwei.zhao@amlogic.com; a=ed25519; pk=o4fDH8ZXL6xQg5h17eNzRljf6pwZHWWjqcOSsj3dW24= X-Endpoint-Received: by B4 Relay for xianwei.zhao@amlogic.com/20231208 with auth_id=107 X-Original-From: Xianwei Zhao X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20241113_093748_404815_C86676F6 X-CRM114-Status: GOOD ( 13.64 ) X-BeenThere: linux-amlogic@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: xianwei.zhao@amlogic.com Sender: "linux-amlogic" Errors-To: linux-amlogic-bounces+linux-amlogic=archiver.kernel.org@lists.infradead.org From: Xianwei Zhao Add a new pinctrl driver for Amlogic A4 SoCs which share the same register layout as the previous Amlogic S4. Signed-off-by: Xianwei Zhao Reviewed-by: Neil Armstrong --- drivers/pinctrl/meson/Kconfig | 6 + drivers/pinctrl/meson/Makefile | 1 + drivers/pinctrl/meson/pinctrl-amlogic-a4.c | 1324 ++++++++++++++++++++++++++++ 3 files changed, 1331 insertions(+) diff --git a/drivers/pinctrl/meson/Kconfig b/drivers/pinctrl/meson/Kconfig index cc397896762c..3e90bb5ec442 100644 --- a/drivers/pinctrl/meson/Kconfig +++ b/drivers/pinctrl/meson/Kconfig @@ -67,6 +67,12 @@ config PINCTRL_MESON_S4 select PINCTRL_MESON_AXG_PMX default y +config PINCTRL_AMLOGIC_A4 + tristate "Amlogic A4 SoC pinctrl driver" + depends on ARM64 + select PINCTRL_MESON_AXG_PMX + default y + config PINCTRL_AMLOGIC_C3 tristate "Amlogic C3 SoC pinctrl driver" depends on ARM64 diff --git a/drivers/pinctrl/meson/Makefile b/drivers/pinctrl/meson/Makefile index 9e538b9ffb9b..c92a65a83344 100644 --- a/drivers/pinctrl/meson/Makefile +++ b/drivers/pinctrl/meson/Makefile @@ -10,5 +10,6 @@ obj-$(CONFIG_PINCTRL_MESON_AXG) += pinctrl-meson-axg.o obj-$(CONFIG_PINCTRL_MESON_G12A) += pinctrl-meson-g12a.o obj-$(CONFIG_PINCTRL_MESON_A1) += pinctrl-meson-a1.o obj-$(CONFIG_PINCTRL_MESON_S4) += pinctrl-meson-s4.o +obj-$(CONFIG_PINCTRL_AMLOGIC_A4) += pinctrl-amlogic-a4.o obj-$(CONFIG_PINCTRL_AMLOGIC_C3) += pinctrl-amlogic-c3.o obj-$(CONFIG_PINCTRL_AMLOGIC_T7) += pinctrl-amlogic-t7.o diff --git a/drivers/pinctrl/meson/pinctrl-amlogic-a4.c b/drivers/pinctrl/meson/pinctrl-amlogic-a4.c new file mode 100644 index 000000000000..edc5f2ba2c8a --- /dev/null +++ b/drivers/pinctrl/meson/pinctrl-amlogic-a4.c @@ -0,0 +1,1324 @@ +// SPDX-License-Identifier: (GPL-2.0-only OR MIT) +/* + * Pin controller and GPIO driver for Amlogic A4 SoC. + * + * Copyright (c) 2024 Amlogic, Inc. All rights reserved. + * Author: Xianwei Zhao + * Huqiang Qin + */ + +#include "pinctrl-meson.h" +#include "pinctrl-meson-axg-pmx.h" +#include + +/* Standard port */ + +#define GPIOE_0 0 +#define GPIOE_1 1 + +#define GPIOD_0 2 +#define GPIOD_1 3 +#define GPIOD_2 4 +#define GPIOD_3 5 +#define GPIOD_4 6 +#define GPIOD_5 7 +#define GPIOD_6 8 +#define GPIOD_7 9 +#define GPIOD_8 10 +#define GPIOD_9 11 +#define GPIOD_10 12 +#define GPIOD_11 13 +#define GPIOD_12 14 +#define GPIOD_13 15 +#define GPIOD_14 16 +#define GPIOD_15 17 + +#define GPIOB_0 18 +#define GPIOB_1 19 +#define GPIOB_2 20 +#define GPIOB_3 21 +#define GPIOB_4 22 +#define GPIOB_5 23 +#define GPIOB_6 24 +#define GPIOB_7 25 +#define GPIOB_8 26 +#define GPIOB_9 27 +#define GPIOB_10 28 +#define GPIOB_11 29 +#define GPIOB_12 30 +#define GPIOB_13 31 + +#define GPIOX_0 32 +#define GPIOX_1 33 +#define GPIOX_2 34 +#define GPIOX_3 35 +#define GPIOX_4 36 +#define GPIOX_5 37 +#define GPIOX_6 38 +#define GPIOX_7 39 +#define GPIOX_8 40 +#define GPIOX_9 41 +#define GPIOX_10 42 +#define GPIOX_11 43 +#define GPIOX_12 44 +#define GPIOX_13 45 +#define GPIOX_14 46 +#define GPIOX_15 47 +#define GPIOX_16 48 +#define GPIOX_17 49 + +#define GPIOT_0 50 +#define GPIOT_1 51 +#define GPIOT_2 52 +#define GPIOT_3 53 +#define GPIOT_4 54 +#define GPIOT_5 55 +#define GPIOT_6 56 +#define GPIOT_7 57 +#define GPIOT_8 58 +#define GPIOT_9 59 +#define GPIOT_10 60 +#define GPIOT_11 61 +#define GPIOT_12 62 +#define GPIOT_13 63 +#define GPIOT_14 64 +#define GPIOT_15 65 +#define GPIOT_16 66 +#define GPIOT_17 67 +#define GPIOT_18 68 +#define GPIOT_19 69 +#define GPIOT_20 70 +#define GPIOT_21 71 +#define GPIOT_22 72 + +/* Aobus port */ +#define GPIOAO_0 0 +#define GPIOAO_1 1 +#define GPIOAO_2 2 +#define GPIOAO_3 3 +#define GPIOAO_4 4 +#define GPIOAO_5 5 +#define GPIOAO_6 6 + +#define GPIO_TEST_N 7 + +#define GPIOE_NUM 2 +#define GPIOD_NUM 16 +#define GPIOB_NUM 14 +#define GPIOX_NUM 18 +#define GPIOT_NUM 23 +#define GPIOAO_NUM 7 + +static const struct pinctrl_pin_desc a4_aobus_pins[] = { + MESON_PIN(GPIOAO_0), + MESON_PIN(GPIOAO_1), + MESON_PIN(GPIOAO_2), + MESON_PIN(GPIOAO_3), + MESON_PIN(GPIOAO_4), + MESON_PIN(GPIOAO_5), + MESON_PIN(GPIOAO_6), + + MESON_PIN(GPIO_TEST_N) +}; + +static const struct pinctrl_pin_desc a4_periphs_pins[] = { + MESON_PIN(GPIOE_0), + MESON_PIN(GPIOE_1), + + MESON_PIN(GPIOD_0), + MESON_PIN(GPIOD_1), + MESON_PIN(GPIOD_2), + MESON_PIN(GPIOD_3), + MESON_PIN(GPIOD_4), + MESON_PIN(GPIOD_5), + MESON_PIN(GPIOD_6), + MESON_PIN(GPIOD_7), + MESON_PIN(GPIOD_8), + MESON_PIN(GPIOD_9), + MESON_PIN(GPIOD_10), + MESON_PIN(GPIOD_11), + MESON_PIN(GPIOD_12), + MESON_PIN(GPIOD_13), + MESON_PIN(GPIOD_14), + MESON_PIN(GPIOD_15), + + MESON_PIN(GPIOB_0), + MESON_PIN(GPIOB_1), + MESON_PIN(GPIOB_2), + MESON_PIN(GPIOB_3), + MESON_PIN(GPIOB_4), + MESON_PIN(GPIOB_5), + MESON_PIN(GPIOB_6), + MESON_PIN(GPIOB_7), + MESON_PIN(GPIOB_8), + MESON_PIN(GPIOB_9), + MESON_PIN(GPIOB_10), + MESON_PIN(GPIOB_11), + MESON_PIN(GPIOB_12), + MESON_PIN(GPIOB_13), + + MESON_PIN(GPIOX_0), + MESON_PIN(GPIOX_1), + MESON_PIN(GPIOX_2), + MESON_PIN(GPIOX_3), + MESON_PIN(GPIOX_4), + MESON_PIN(GPIOX_5), + MESON_PIN(GPIOX_6), + MESON_PIN(GPIOX_7), + MESON_PIN(GPIOX_8), + MESON_PIN(GPIOX_9), + MESON_PIN(GPIOX_10), + MESON_PIN(GPIOX_11), + MESON_PIN(GPIOX_12), + MESON_PIN(GPIOX_13), + MESON_PIN(GPIOX_14), + MESON_PIN(GPIOX_15), + MESON_PIN(GPIOX_16), + MESON_PIN(GPIOX_17), + + MESON_PIN(GPIOT_0), + MESON_PIN(GPIOT_1), + MESON_PIN(GPIOT_2), + MESON_PIN(GPIOT_3), + MESON_PIN(GPIOT_4), + MESON_PIN(GPIOT_5), + MESON_PIN(GPIOT_6), + MESON_PIN(GPIOT_7), + MESON_PIN(GPIOT_8), + MESON_PIN(GPIOT_9), + MESON_PIN(GPIOT_10), + MESON_PIN(GPIOT_11), + MESON_PIN(GPIOT_12), + MESON_PIN(GPIOT_13), + MESON_PIN(GPIOT_14), + MESON_PIN(GPIOT_15), + MESON_PIN(GPIOT_16), + MESON_PIN(GPIOT_17), + MESON_PIN(GPIOT_18), + MESON_PIN(GPIOT_19), + MESON_PIN(GPIOT_20), + MESON_PIN(GPIOT_21), + MESON_PIN(GPIOT_22) +}; + +/* GPIOAO func1 */ +static const unsigned int i2c_slave_a_sda_ao0_pins[] = { GPIOAO_0 }; +static const unsigned int i2c_slave_a_scl_ao1_pins[] = { GPIOAO_1 }; +static const unsigned int remote_ao_input_ao3_pins[] = { GPIOAO_3 }; +static const unsigned int uart_ao_c_tx_ao4_pins[] = { GPIOAO_4 }; +static const unsigned int uart_ao_c_rx_ao5_pins[] = { GPIOAO_5 }; +static const unsigned int clk_32k_ao_out_pins[] = { GPIOAO_6 }; + +/* GPIOAO func2 */ +static const unsigned int uart_ao_c_tx_ao0_pins[] = { GPIOAO_0 }; +static const unsigned int uart_ao_c_rx_ao1_pins[] = { GPIOAO_1 }; +static const unsigned int i2c_slave_a_sda_ao2_pins[] = { GPIOAO_2 }; +static const unsigned int i2c_slave_a_scl_ao3_pins[] = { GPIOAO_3 }; +static const unsigned int remote_ao_input_ao4_pins[] = { GPIOAO_4 }; +static const unsigned int pwm_g_pins[] = { GPIOAO_6 }; + +/* GPIOAO func3 */ +static const unsigned int remote_ao_input_ao1_pins[] = { GPIOAO_1 }; +static const unsigned int remote_ao_input_ao6_pins[] = { GPIOAO_6 }; + +/* GPIOAO func4 */ +static const unsigned int pmic_sleep_ao2_pins[] = { GPIOAO_2 }; +static const unsigned int pmic_sleep_ao4_pins[] = { GPIOAO_4 }; + +static const struct meson_pmx_group a4_aobus_groups[] = { + GPIO_GROUP(GPIOAO_0), + GPIO_GROUP(GPIOAO_1), + GPIO_GROUP(GPIOAO_2), + GPIO_GROUP(GPIOAO_3), + GPIO_GROUP(GPIOAO_4), + GPIO_GROUP(GPIOAO_5), + GPIO_GROUP(GPIOAO_6), + + GPIO_GROUP(GPIO_TEST_N), + + /* GPIOAO func1 */ + GROUP(i2c_slave_a_sda_ao0, 1), + GROUP(i2c_slave_a_scl_ao1, 1), + GROUP(remote_ao_input_ao3, 1), + GROUP(uart_ao_c_tx_ao4, 1), + GROUP(uart_ao_c_rx_ao5, 1), + GROUP(clk_32k_ao_out, 1), + + /* GPIOAO func2 */ + GROUP(uart_ao_c_tx_ao0, 2), + GROUP(uart_ao_c_rx_ao1, 2), + GROUP(i2c_slave_a_sda_ao2, 2), + GROUP(i2c_slave_a_scl_ao3, 2), + GROUP(remote_ao_input_ao4, 2), + GROUP(pwm_g, 2), + + /* GPIOAO func3 */ + GROUP(remote_ao_input_ao1, 3), + GROUP(remote_ao_input_ao6, 3), + + /* GPIOAO func4 */ + GROUP(pmic_sleep_ao2, 4), + GROUP(pmic_sleep_ao4, 4) +}; + +/* GPIOE func1 */ +static const unsigned int pwm_e_e0_pins[] = { GPIOE_0 }; +static const unsigned int pwm_f_pins[] = { GPIOE_1 }; + +/* GPIOE func3 */ +static const unsigned int uart_b_tx_e0_pins[] = { GPIOE_0 }; +static const unsigned int uart_b_rx_e1_pins[] = { GPIOE_1 }; + +/* GPIOE func5 */ +static const unsigned int i2c0_sda_e0_pins[] = { GPIOE_0 }; +static const unsigned int i2c0_scl_e1_pins[] = { GPIOE_1 }; + +/* GPIOD func1 */ +static const unsigned int pdm_din1_d2_pins[] = { GPIOD_2 }; +static const unsigned int pdm_din0_d3_pins[] = { GPIOD_3 }; +static const unsigned int pdm_dclk_d4_pins[] = { GPIOD_4 }; +static const unsigned int remote_out_pins[] = { GPIOD_5 }; +static const unsigned int jtag_1_clk_pins[] = { GPIOD_6 }; +static const unsigned int jtag_1_tms_pins[] = { GPIOD_7 }; +static const unsigned int jtag_1_tdi_pins[] = { GPIOD_8 }; +static const unsigned int jtag_1_tdo_pins[] = { GPIOD_9 }; +static const unsigned int clk12_24_pins[] = { GPIOD_10 }; +static const unsigned int tdm_d3_d11_pins[] = { GPIOD_11 }; +static const unsigned int tdm_d2_d12_pins[] = { GPIOD_12 }; +static const unsigned int mclk1_d13_pins[] = { GPIOD_13 }; +static const unsigned int tdm_sclk1_d14_pins[] = { GPIOD_14 }; +static const unsigned int tdm_fs1_d15_pins[] = { GPIOD_15 }; + +/* GPIOD func2 */ +static const unsigned int uart_b_tx_d0_pins[] = { GPIOD_0 }; +static const unsigned int uart_b_rx_d1_pins[] = { GPIOD_1 }; +static const unsigned int uart_b_cts_pins[] = { GPIOD_2 }; +static const unsigned int uart_b_rts_pins[] = { GPIOD_3 }; +static const unsigned int remote_in_pins[] = { GPIOD_5 }; +static const unsigned int pwm_a_hiz_pins[] = { GPIOD_6 }; +static const unsigned int pwm_b_hiz_pins[] = { GPIOD_7 }; +static const unsigned int pwm_c_hiz_pins[] = { GPIOD_8 }; +static const unsigned int pwm_d_hiz_pins[] = { GPIOD_9 }; +static const unsigned int gen_clk_pins[] = { GPIOD_10 }; +static const unsigned int pwm_e_hiz_pins[] = { GPIOD_11 }; +static const unsigned int i2c3_sda_d12_pins[] = { GPIOD_12 }; +static const unsigned int i2c3_scl_d13_pins[] = { GPIOD_13 }; +static const unsigned int i2c2_sda_d14_pins[] = { GPIOD_14 }; +static const unsigned int i2c2_scl_d15_pins[] = { GPIOD_15 }; + +/* GPIOD func3 */ +static const unsigned int uart_a_tx_d2_pins[] = { GPIOD_2 }; +static const unsigned int uart_a_rx_d3_pins[] = { GPIOD_3 }; +static const unsigned int pwm_a_d6_pins[] = { GPIOD_6 }; +static const unsigned int pwm_b_d7_pins[] = { GPIOD_7 }; +static const unsigned int pwm_c_d8_pins[] = { GPIOD_8 }; +static const unsigned int pwm_d_d9_pins[] = { GPIOD_9 }; +static const unsigned int pwm_e_d11_pins[] = { GPIOD_11 }; +static const unsigned int pwm_h_d12_pins[] = { GPIOD_12 }; + +/* GPIOD func4 */ +static const unsigned int spi_b_miso_d2_pins[] = { GPIOD_2 }; +static const unsigned int spi_b_mosi_d3_pins[] = { GPIOD_3 }; +static const unsigned int spi_b_clk_d4_pins[] = { GPIOD_4 }; +static const unsigned int spi_b_ss0_d5_pins[] = { GPIOD_5 }; +static const unsigned int spi_b_dq2_pins[] = { GPIOD_6 }; +static const unsigned int spi_b_dq3_pins[] = { GPIOD_7 }; +static const unsigned int tdm_d12_d8_pins[] = { GPIOD_8 }; +static const unsigned int tdm_d13_d9_pins[] = { GPIOD_9 }; +static const unsigned int i2c1_sda_d10_pins[] = { GPIOD_10 }; +static const unsigned int i2c1_scl_d11_pins[] = { GPIOD_11 }; + +/* GPIOD func5 */ +static const unsigned int i2c1_sda_d2_pins[] = { GPIOD_2 }; +static const unsigned int i2c1_scl_d3_pins[] = { GPIOD_3 }; +static const unsigned int eth_mdio_d6_pins[] = { GPIOD_6 }; +static const unsigned int eth_mdc_d7_pins[] = { GPIOD_7 }; +static const unsigned int dcon_led_d8_pins[] = { GPIOD_8 }; +static const unsigned int mic_mute_en_pins[] = { GPIOD_10 }; +static const unsigned int mic_mute_key_pins[] = { GPIOD_11 }; +static const unsigned int dcon_led_d12_pins[] = { GPIOD_12 }; +static const unsigned int mclk0_d13_pins[] = { GPIOD_13 }; +static const unsigned int tdm_sclk0_d14_pins[] = { GPIOD_14 }; +static const unsigned int tdm_fs0_d15_pins[] = { GPIOD_15 }; + +/* GPIOB func1 */ +static const unsigned int emmc_nand_d0_pins[] = { GPIOB_0 }; +static const unsigned int emmc_nand_d1_pins[] = { GPIOB_1 }; +static const unsigned int emmc_nand_d2_pins[] = { GPIOB_2 }; +static const unsigned int emmc_nand_d3_pins[] = { GPIOB_3 }; +static const unsigned int emmc_nand_d4_pins[] = { GPIOB_4 }; +static const unsigned int emmc_nand_d5_pins[] = { GPIOB_5 }; +static const unsigned int emmc_nand_d6_pins[] = { GPIOB_6 }; +static const unsigned int emmc_nand_d7_pins[] = { GPIOB_7 }; +static const unsigned int emmc_clk_pins[] = { GPIOB_8 }; +static const unsigned int emmc_rst_pins[] = { GPIOB_9 }; +static const unsigned int emmc_cmd_pins[] = { GPIOB_10 }; +static const unsigned int emmc_nand_ds_pins[] = { GPIOB_11 }; + +/* GPIOB func2 */ +static const unsigned int nand_wen_clk_pins[] = { GPIOB_8 }; +static const unsigned int nand_ale_pins[] = { GPIOB_9 }; +static const unsigned int nand_ren_wr_pins[] = { GPIOB_10 }; +static const unsigned int nand_cle_pins[] = { GPIOB_11 }; +static const unsigned int nand_ce0_pins[] = { GPIOB_12 }; + +/* GPIOB func4 */ +static const unsigned int spinf_mo_d0_pins[] = { GPIOB_0 }; +static const unsigned int spinf_mi_d1_pins[] = { GPIOB_1 }; +static const unsigned int spinf_wp_d2_pins[] = { GPIOB_2 }; +static const unsigned int spinf_hold_d3_pins[] = { GPIOB_3 }; +static const unsigned int spinf_d4_pins[] = { GPIOB_4 }; +static const unsigned int spinf_d5_pins[] = { GPIOB_5 }; +static const unsigned int spinf_d6_pins[] = { GPIOB_6 }; +static const unsigned int spinf_d7_pins[] = { GPIOB_7 }; +static const unsigned int spinf_rst_pins[] = { GPIOB_9 }; +static const unsigned int spinf_clk_pins[] = { GPIOB_10 }; +static const unsigned int spinf_cs1_pins[] = { GPIOB_12 }; +static const unsigned int spinf_cs0_pins[] = { GPIOB_13 }; + +/* GPIOX func1 */ +static const unsigned int sdio_d0_pins[] = { GPIOX_0 }; +static const unsigned int sdio_d1_pins[] = { GPIOX_1 }; +static const unsigned int sdio_d2_pins[] = { GPIOX_2 }; +static const unsigned int sdio_d3_pins[] = { GPIOX_3 }; +static const unsigned int sdio_clk_pins[] = { GPIOX_4 }; +static const unsigned int sdio_cmd_pins[] = { GPIOX_5 }; +static const unsigned int mclk0_x6_pins[] = { GPIOX_6 }; +static const unsigned int tdm_d1_pins[] = { GPIOX_7 }; +static const unsigned int tdm_d0_x8_pins[] = { GPIOX_8 }; +static const unsigned int tdm_fs0_x9_pins[] = { GPIOX_9 }; +static const unsigned int tdm_sclk0_x10_pins[] = { GPIOX_10 }; +static const unsigned int uart_a_tx_x11_pins[] = { GPIOX_11 }; +static const unsigned int uart_a_rx_x12_pins[] = { GPIOX_12 }; +static const unsigned int uart_a_cts_pins[] = { GPIOX_13 }; +static const unsigned int uart_a_rts_pins[] = { GPIOX_14 }; +static const unsigned int pwm_g_x15_pins[] = { GPIOX_15 }; +static const unsigned int pwm_b_x17_pins[] = { GPIOX_17 }; + +/* GPIOX func2 */ +static const unsigned int pwm_a_x6_pins[] = { GPIOX_6 }; +static const unsigned int spi_a_mosi_x7_pins[] = { GPIOX_7 }; +static const unsigned int spi_a_miso_x8_pins[] = { GPIOX_8 }; +static const unsigned int spi_a_ss0_x9_pins[] = { GPIOX_9 }; +static const unsigned int spi_a_clk_x10_pins[] = { GPIOX_10 }; +static const unsigned int i2c0_sda_x16_pins[] = { GPIOX_16 }; +static const unsigned int i2c0_scl_x17_pins[] = { GPIOX_17 }; + +/* GPIOX func5 */ +static const unsigned int eth_mdio_x0_pins[] = { GPIOX_0 }; +static const unsigned int eth_mdc_x1_pins[] = { GPIOX_1 }; +static const unsigned int eth_rgmii_rx_clk_pins[] = { GPIOX_2 }; +static const unsigned int eth_rx_dv_pins[] = { GPIOX_3 }; +static const unsigned int eth_rxd0_pins[] = { GPIOX_4 }; +static const unsigned int eth_rxd1_pins[] = { GPIOX_5 }; +static const unsigned int eth_rxd2_rgmii_pins[] = { GPIOX_6 }; +static const unsigned int eth_rxd3_rgmii_pins[] = { GPIOX_7 }; +static const unsigned int eth_rgmii_tx_clk_pins[] = { GPIOX_8 }; +static const unsigned int eth_txen_pins[] = { GPIOX_9 }; +static const unsigned int eth_txd0_pins[] = { GPIOX_10 }; +static const unsigned int eth_txd1_pins[] = { GPIOX_11 }; +static const unsigned int eth_txd2_rgmii_pins[] = { GPIOX_12 }; +static const unsigned int eth_txd3_rgmii_pins[] = { GPIOX_13 }; +static const unsigned int spi_b_mosi_x14_pins[] = { GPIOX_14 }; +static const unsigned int spi_b_ss0_x15_pins[] = { GPIOX_15 }; +static const unsigned int spi_b_clk_x16_pins[] = { GPIOX_16 }; +static const unsigned int spi_b_miso_x17_pins[] = { GPIOX_17 }; + +/* GPIOT func1 */ +static const unsigned int tdm_d2_t0_pins[] = { GPIOT_0 }; +static const unsigned int tdm_d3_t1_pins[] = { GPIOT_1 }; +static const unsigned int tdm_fs1_t2_pins[] = { GPIOT_2 }; +static const unsigned int tdm_sclk1_t3_pins[] = { GPIOT_3 }; +static const unsigned int mclk1_t4_pins[] = { GPIOT_4 }; +static const unsigned int tdm_d4_t5_pins[] = { GPIOT_5 }; +static const unsigned int tdm_d5_t6_pins[] = { GPIOT_6 }; +static const unsigned int tdm_d6_t7_pins[] = { GPIOT_7 }; +static const unsigned int tdm_d7_pins[] = { GPIOT_8 }; +static const unsigned int spdif_out_pins[] = { GPIOT_9 }; +static const unsigned int spdif_in_t10_pins[] = { GPIOT_10 }; +static const unsigned int tdm_fs2_t11_pins[] = { GPIOT_11 }; +static const unsigned int tdm_sclk2_t12_pins[] = { GPIOT_12 }; +static const unsigned int tdm_d8_pins[] = { GPIOT_13 }; +static const unsigned int tdm_d9_pins[] = { GPIOT_14 }; +static const unsigned int tdm_d10_pins[] = { GPIOT_15 }; +static const unsigned int tdm_d11_pins[] = { GPIOT_16 }; +static const unsigned int mclk2_t17_pins[] = { GPIOT_17 }; +static const unsigned int tdm_d12_t18_pins[] = { GPIOT_18 }; +static const unsigned int tdm_d13_t19_pins[] = { GPIOT_19 }; +static const unsigned int i2c0_sda_t21_pins[] = { GPIOT_21 }; +static const unsigned int i2c0_scl_t22_pins[] = { GPIOT_22 }; + +/* GPIOT func2 */ +static const unsigned int i2c3_sda_t0_pins[] = { GPIOT_0 }; +static const unsigned int i2c3_scl_t1_pins[] = { GPIOT_1 }; +static const unsigned int uart_d_tx_t7_pins[] = { GPIOT_7 }; +static const unsigned int uart_d_rx_t8_pins[] = { GPIOT_8 }; +static const unsigned int uart_d_cts_pins[] = { GPIOT_9 }; +static const unsigned int uart_d_rts_pins[] = { GPIOT_10 }; +static const unsigned int spi_a_dq2_pins[] = { GPIOT_11 }; +static const unsigned int spi_a_dq3_pins[] = { GPIOT_12 }; +static const unsigned int spi_a_clk_t13_pins[] = { GPIOT_13 }; +static const unsigned int spi_a_mosi_t14_pins[] = { GPIOT_14 }; +static const unsigned int spi_a_miso_t15_pins[] = { GPIOT_15 }; +static const unsigned int spi_a_ss0_t16_pins[] = { GPIOT_16 }; +static const unsigned int spi_a_ss1_pins[] = { GPIOT_17 }; +static const unsigned int spi_a_ss2_pins[] = { GPIOT_18 }; +static const unsigned int pwm_g_t19_pins[] = { GPIOT_19 }; +static const unsigned int pwm_h_t20_pins[] = { GPIOT_20 }; +static const unsigned int eth_link_led_t21_pins[] = { GPIOT_21 }; +static const unsigned int eth_act_led_t22_pins[] = { GPIOT_22 }; + +/* GPIOT func3 */ +static const unsigned int pdm_din1_t0_pins[] = { GPIOT_0 }; +static const unsigned int pdm_din0_t1_pins[] = { GPIOT_1 }; +static const unsigned int pdm_dclk_t2_pins[] = { GPIOT_2 }; +static const unsigned int spi_b_clk_t5_pins[] = { GPIOT_5 }; +static const unsigned int spi_b_mosi_t6_pins[] = { GPIOT_6 }; +static const unsigned int spi_b_miso_t7_pins[] = { GPIOT_7 }; +static const unsigned int spi_b_ss0_t8_pins[] = { GPIOT_8 }; +static const unsigned int spi_b_ss1_pins[] = { GPIOT_9 }; +static const unsigned int spi_b_ss2_pins[] = { GPIOT_10 }; +static const unsigned int uart_e_tx_pins[] = { GPIOT_14 }; +static const unsigned int uart_e_rx_pins[] = { GPIOT_15 }; +static const unsigned int uart_e_rts_pins[] = { GPIOT_16 }; +static const unsigned int uart_e_cts_pins[] = { GPIOT_17 }; +static const unsigned int eth_link_led_t18_pins[] = { GPIOT_18 }; +static const unsigned int eth_act_led_t19_pins[] = { GPIOT_19 }; +static const unsigned int tdm_d4_t20_pins[] = { GPIOT_20 }; +static const unsigned int tdm_d5_t21_pins[] = { GPIOT_21 }; +static const unsigned int tdm_d6_t22_pins[] = { GPIOT_22 }; + +/* GPIOT func4 */ +static const unsigned int dcon_led_t4_pins[] = { GPIOT_4 }; +static const unsigned int mclk2_t5_pins[] = { GPIOT_5 }; +static const unsigned int tdm_fs2_t6_pins[] = { GPIOT_6 }; +static const unsigned int tdm_sclk2_t7_pins[] = { GPIOT_7 }; +static const unsigned int spdif_in_t9_pins[] = { GPIOT_9 }; +static const unsigned int i2c2_sda_t11_pins[] = { GPIOT_11 }; +static const unsigned int i2c2_scl_t12_pins[] = { GPIOT_12 }; +static const unsigned int pwm_d_t15_pins[] = { GPIOT_15 }; +static const unsigned int pwm_c_t16_pins[] = { GPIOT_16 }; +static const unsigned int uart_d_tx_t18_pins[] = { GPIOT_18 }; +static const unsigned int uart_d_rx_t19_pins[] = { GPIOT_19 }; +static const unsigned int tdm_d0_t20_pins[] = { GPIOT_20 }; +static const unsigned int tdm_fs0_t21_pins[] = { GPIOT_21 }; +static const unsigned int tdm_sclk0_t22_pins[] = { GPIOT_22 }; + +/* GPIOT func5 */ +static const unsigned int lcd_d0_pins[] = { GPIOT_0 }; +static const unsigned int lcd_d1_pins[] = { GPIOT_1 }; +static const unsigned int lcd_d2_pins[] = { GPIOT_2 }; +static const unsigned int lcd_d3_pins[] = { GPIOT_3 }; +static const unsigned int lcd_d4_pins[] = { GPIOT_4 }; +static const unsigned int lcd_d5_pins[] = { GPIOT_5 }; +static const unsigned int lcd_d6_pins[] = { GPIOT_6 }; +static const unsigned int lcd_d7_pins[] = { GPIOT_7 }; +static const unsigned int lcd_d8_pins[] = { GPIOT_8 }; +static const unsigned int lcd_d9_pins[] = { GPIOT_9 }; +static const unsigned int lcd_d10_pins[] = { GPIOT_10 }; +static const unsigned int lcd_d11_pins[] = { GPIOT_11 }; +static const unsigned int lcd_d12_pins[] = { GPIOT_12 }; +static const unsigned int lcd_d13_pins[] = { GPIOT_13 }; +static const unsigned int lcd_d14_pins[] = { GPIOT_14 }; +static const unsigned int lcd_d15_pins[] = { GPIOT_15 }; +static const unsigned int lcd_d16_pins[] = { GPIOT_16 }; +static const unsigned int lcd_d17_pins[] = { GPIOT_17 }; +static const unsigned int lcd_clk_pins[] = { GPIOT_18 }; +static const unsigned int lcd_den_pins[] = { GPIOT_19 }; +static const unsigned int lcd_hsync_pins[] = { GPIOT_20 }; +static const unsigned int lcd_vsync_pins[] = { GPIOT_21 }; + +static const struct meson_pmx_group a4_periphs_groups[] = { + /* func0 as GPIO */ + GPIO_GROUP(GPIOE_0), + GPIO_GROUP(GPIOE_1), + + GPIO_GROUP(GPIOD_0), + GPIO_GROUP(GPIOD_1), + GPIO_GROUP(GPIOD_2), + GPIO_GROUP(GPIOD_3), + GPIO_GROUP(GPIOD_4), + GPIO_GROUP(GPIOD_5), + GPIO_GROUP(GPIOD_6), + GPIO_GROUP(GPIOD_7), + GPIO_GROUP(GPIOD_8), + GPIO_GROUP(GPIOD_9), + GPIO_GROUP(GPIOD_10), + GPIO_GROUP(GPIOD_11), + GPIO_GROUP(GPIOD_12), + GPIO_GROUP(GPIOD_13), + GPIO_GROUP(GPIOD_14), + GPIO_GROUP(GPIOD_15), + + GPIO_GROUP(GPIOB_0), + GPIO_GROUP(GPIOB_1), + GPIO_GROUP(GPIOB_2), + GPIO_GROUP(GPIOB_3), + GPIO_GROUP(GPIOB_4), + GPIO_GROUP(GPIOB_5), + GPIO_GROUP(GPIOB_6), + GPIO_GROUP(GPIOB_7), + GPIO_GROUP(GPIOB_8), + GPIO_GROUP(GPIOB_9), + GPIO_GROUP(GPIOB_10), + GPIO_GROUP(GPIOB_11), + GPIO_GROUP(GPIOB_12), + GPIO_GROUP(GPIOB_13), + + GPIO_GROUP(GPIOX_0), + GPIO_GROUP(GPIOX_1), + GPIO_GROUP(GPIOX_2), + GPIO_GROUP(GPIOX_3), + GPIO_GROUP(GPIOX_4), + GPIO_GROUP(GPIOX_5), + GPIO_GROUP(GPIOX_6), + GPIO_GROUP(GPIOX_7), + GPIO_GROUP(GPIOX_8), + GPIO_GROUP(GPIOX_9), + GPIO_GROUP(GPIOX_10), + GPIO_GROUP(GPIOX_11), + GPIO_GROUP(GPIOX_12), + GPIO_GROUP(GPIOX_13), + GPIO_GROUP(GPIOX_14), + GPIO_GROUP(GPIOX_15), + GPIO_GROUP(GPIOX_16), + GPIO_GROUP(GPIOX_17), + + GPIO_GROUP(GPIOT_0), + GPIO_GROUP(GPIOT_1), + GPIO_GROUP(GPIOT_2), + GPIO_GROUP(GPIOT_3), + GPIO_GROUP(GPIOT_4), + GPIO_GROUP(GPIOT_5), + GPIO_GROUP(GPIOT_6), + GPIO_GROUP(GPIOT_7), + GPIO_GROUP(GPIOT_8), + GPIO_GROUP(GPIOT_9), + GPIO_GROUP(GPIOT_10), + GPIO_GROUP(GPIOT_11), + GPIO_GROUP(GPIOT_12), + GPIO_GROUP(GPIOT_13), + GPIO_GROUP(GPIOT_14), + GPIO_GROUP(GPIOT_15), + GPIO_GROUP(GPIOT_16), + GPIO_GROUP(GPIOT_17), + GPIO_GROUP(GPIOT_18), + GPIO_GROUP(GPIOT_19), + GPIO_GROUP(GPIOT_20), + GPIO_GROUP(GPIOT_21), + GPIO_GROUP(GPIOT_22), + + /* GPIOE func1 */ + GROUP(pwm_e_e0, 1), + GROUP(pwm_f, 1), + + /* GPIOE func3 */ + GROUP(uart_b_tx_e0, 3), + GROUP(uart_b_rx_e1, 3), + + /* GPIOE func5 */ + GROUP(i2c0_sda_e0, 5), + GROUP(i2c0_scl_e1, 5), + + /* GPIOD func1 */ + GROUP(pdm_din1_d2, 1), + GROUP(pdm_din0_d3, 1), + GROUP(pdm_dclk_d4, 1), + GROUP(remote_out, 1), + GROUP(jtag_1_clk, 1), + GROUP(jtag_1_tms, 1), + GROUP(jtag_1_tdi, 1), + GROUP(jtag_1_tdo, 1), + GROUP(clk12_24, 1), + GROUP(tdm_d3_d11, 1), + GROUP(tdm_d2_d12, 1), + GROUP(mclk1_d13, 1), + GROUP(tdm_sclk1_d14, 1), + GROUP(tdm_fs1_d15, 1), + + /* GPIOD func2 */ + GROUP(uart_b_tx_d0, 2), + GROUP(uart_b_rx_d1, 2), + GROUP(uart_b_cts, 2), + GROUP(uart_b_rts, 2), + GROUP(remote_in, 2), + GROUP(pwm_a_hiz, 2), + GROUP(pwm_b_hiz, 2), + GROUP(pwm_c_hiz, 2), + GROUP(pwm_d_hiz, 2), + GROUP(gen_clk, 2), + GROUP(pwm_e_hiz, 2), + GROUP(i2c3_sda_d12, 2), + GROUP(i2c3_scl_d13, 2), + GROUP(i2c2_sda_d14, 2), + GROUP(i2c2_scl_d15, 2), + + /* GPIOD func3 */ + GROUP(uart_a_tx_d2, 3), + GROUP(uart_a_rx_d3, 3), + GROUP(pwm_a_d6, 3), + GROUP(pwm_b_d7, 3), + GROUP(pwm_c_d8, 3), + GROUP(pwm_d_d9, 3), + GROUP(pwm_e_d11, 3), + GROUP(pwm_h_d12, 3), + + /* GPIOD func4 */ + GROUP(spi_b_miso_d2, 4), + GROUP(spi_b_mosi_d3, 4), + GROUP(spi_b_clk_d4, 4), + GROUP(spi_b_ss0_d5, 4), + GROUP(spi_b_dq2, 4), + GROUP(spi_b_dq3, 4), + GROUP(tdm_d12_d8, 4), + GROUP(tdm_d13_d9, 4), + GROUP(i2c1_sda_d10, 4), + GROUP(i2c1_scl_d11, 4), + + /* GPIOD func5 */ + GROUP(i2c1_sda_d2, 5), + GROUP(i2c1_scl_d3, 5), + GROUP(eth_mdio_d6, 5), + GROUP(eth_mdc_d7, 5), + GROUP(dcon_led_d8, 5), + GROUP(mic_mute_en, 5), + GROUP(mic_mute_key, 5), + GROUP(dcon_led_d12, 5), + GROUP(mclk0_d13, 5), + GROUP(tdm_sclk0_d14, 5), + GROUP(tdm_fs0_d15, 5), + + /* GPIOB func1 */ + GROUP(emmc_nand_d0, 1), + GROUP(emmc_nand_d1, 1), + GROUP(emmc_nand_d2, 1), + GROUP(emmc_nand_d3, 1), + GROUP(emmc_nand_d4, 1), + GROUP(emmc_nand_d5, 1), + GROUP(emmc_nand_d6, 1), + GROUP(emmc_nand_d7, 1), + GROUP(emmc_clk, 1), + GROUP(emmc_rst, 1), + GROUP(emmc_cmd, 1), + GROUP(emmc_nand_ds, 1), + + /* GPIOB func2 */ + GROUP(nand_wen_clk, 2), + GROUP(nand_ale, 2), + GROUP(nand_ren_wr, 2), + GROUP(nand_cle, 2), + GROUP(nand_ce0, 2), + + /* GPIOB func4 */ + GROUP(spinf_mo_d0, 4), + GROUP(spinf_mi_d1, 4), + GROUP(spinf_wp_d2, 4), + GROUP(spinf_hold_d3, 4), + GROUP(spinf_d4, 4), + GROUP(spinf_d5, 4), + GROUP(spinf_d6, 4), + GROUP(spinf_d7, 4), + GROUP(spinf_rst, 4), + GROUP(spinf_clk, 4), + GROUP(spinf_cs1, 4), + GROUP(spinf_cs0, 4), + + /* GPIOX func1 */ + GROUP(sdio_d0, 1), + GROUP(sdio_d1, 1), + GROUP(sdio_d2, 1), + GROUP(sdio_d3, 1), + GROUP(sdio_clk, 1), + GROUP(sdio_cmd, 1), + GROUP(mclk0_x6, 1), + GROUP(tdm_d1, 1), + GROUP(tdm_d0_x8, 1), + GROUP(tdm_fs0_x9, 1), + GROUP(tdm_sclk0_x10, 1), + GROUP(uart_a_tx_x11, 1), + GROUP(uart_a_rx_x12, 1), + GROUP(uart_a_cts, 1), + GROUP(uart_a_rts, 1), + GROUP(pwm_g_x15, 1), + GROUP(pwm_b_x17, 1), + + /* GPIOX func2 */ + GROUP(pwm_a_x6, 2), + GROUP(spi_a_mosi_x7, 2), + GROUP(spi_a_miso_x8, 2), + GROUP(spi_a_ss0_x9, 2), + GROUP(spi_a_clk_x10, 2), + GROUP(i2c0_sda_x16, 2), + GROUP(i2c0_scl_x17, 2), + + /* GPIOX func5 */ + GROUP(eth_mdio_x0, 5), + GROUP(eth_mdc_x1, 5), + GROUP(eth_rgmii_rx_clk, 5), + GROUP(eth_rx_dv, 5), + GROUP(eth_rxd0, 5), + GROUP(eth_rxd1, 5), + GROUP(eth_rxd2_rgmii, 5), + GROUP(eth_rxd3_rgmii, 5), + GROUP(eth_rgmii_tx_clk, 5), + GROUP(eth_txen, 5), + GROUP(eth_txd0, 5), + GROUP(eth_txd1, 5), + GROUP(eth_txd2_rgmii, 5), + GROUP(eth_txd3_rgmii, 5), + GROUP(spi_b_mosi_x14, 5), + GROUP(spi_b_ss0_x15, 5), + GROUP(spi_b_clk_x16, 5), + GROUP(spi_b_miso_x17, 5), + + /* GPIOT func1 */ + GROUP(tdm_d2_t0, 1), + GROUP(tdm_d3_t1, 1), + GROUP(tdm_fs1_t2, 1), + GROUP(tdm_sclk1_t3, 1), + GROUP(mclk1_t4, 1), + GROUP(tdm_d4_t5, 1), + GROUP(tdm_d5_t6, 1), + GROUP(tdm_d6_t7, 1), + GROUP(tdm_d7, 1), + GROUP(spdif_out, 1), + GROUP(spdif_in_t10, 1), + GROUP(tdm_fs2_t11, 1), + GROUP(tdm_sclk2_t12, 1), + GROUP(tdm_d8, 1), + GROUP(tdm_d9, 1), + GROUP(tdm_d10, 1), + GROUP(tdm_d11, 1), + GROUP(mclk2_t17, 1), + GROUP(tdm_d12_t18, 1), + GROUP(tdm_d13_t19, 1), + GROUP(i2c0_sda_t21, 1), + GROUP(i2c0_scl_t22, 1), + + /* GPIOT func2 */ + GROUP(i2c3_sda_t0, 2), + GROUP(i2c3_scl_t1, 2), + GROUP(uart_d_tx_t7, 2), + GROUP(uart_d_rx_t8, 2), + GROUP(uart_d_cts, 2), + GROUP(uart_d_rts, 2), + GROUP(spi_a_dq2, 2), + GROUP(spi_a_dq3, 2), + GROUP(spi_a_clk_t13, 2), + GROUP(spi_a_mosi_t14, 2), + GROUP(spi_a_miso_t15, 2), + GROUP(spi_a_ss0_t16, 2), + GROUP(spi_a_ss1, 2), + GROUP(spi_a_ss2, 2), + GROUP(pwm_g_t19, 2), + GROUP(pwm_h_t20, 2), + GROUP(eth_link_led_t21, 2), + GROUP(eth_act_led_t22, 2), + + /* GPIOT func3 */ + GROUP(pdm_din1_t0, 3), + GROUP(pdm_din0_t1, 3), + GROUP(pdm_dclk_t2, 3), + GROUP(spi_b_clk_t5, 3), + GROUP(spi_b_mosi_t6, 3), + GROUP(spi_b_miso_t7, 3), + GROUP(spi_b_ss0_t8, 3), + GROUP(spi_b_ss1, 3), + GROUP(spi_b_ss2, 3), + GROUP(uart_e_tx, 3), + GROUP(uart_e_rx, 3), + GROUP(uart_e_rts, 3), + GROUP(uart_e_cts, 3), + GROUP(eth_link_led_t18, 3), + GROUP(eth_act_led_t19, 3), + GROUP(tdm_d4_t20, 3), + GROUP(tdm_d5_t21, 3), + GROUP(tdm_d6_t22, 3), + + /* GPIOT func4 */ + GROUP(dcon_led_t4, 4), + GROUP(mclk2_t5, 4), + GROUP(tdm_fs2_t6, 4), + GROUP(tdm_sclk2_t7, 4), + GROUP(spdif_in_t9, 4), + GROUP(i2c2_sda_t11, 4), + GROUP(i2c2_scl_t12, 4), + GROUP(pwm_d_t15, 4), + GROUP(pwm_c_t16, 4), + GROUP(uart_d_tx_t18, 4), + GROUP(uart_d_rx_t19, 4), + GROUP(tdm_d0_t20, 4), + GROUP(tdm_fs0_t21, 4), + GROUP(tdm_sclk0_t22, 4), + + /* GPIOT func5 */ + GROUP(lcd_d0, 5), + GROUP(lcd_d1, 5), + GROUP(lcd_d2, 5), + GROUP(lcd_d3, 5), + GROUP(lcd_d4, 5), + GROUP(lcd_d5, 5), + GROUP(lcd_d6, 5), + GROUP(lcd_d7, 5), + GROUP(lcd_d8, 5), + GROUP(lcd_d9, 5), + GROUP(lcd_d10, 5), + GROUP(lcd_d11, 5), + GROUP(lcd_d12, 5), + GROUP(lcd_d13, 5), + GROUP(lcd_d14, 5), + GROUP(lcd_d15, 5), + GROUP(lcd_d16, 5), + GROUP(lcd_d17, 5), + GROUP(lcd_clk, 5), + GROUP(lcd_den, 5), + GROUP(lcd_hsync, 5), + GROUP(lcd_vsync, 5) +}; + +static const char * const gpio_aobus_groups[] = { + "GPIOAO_0", "GPIOAO_1", "GPIOAO_2", "GPIOAO_3", + "GPIOAO_4", "GPIOAO_5", "GPIOAO_6", + "GPIO_TEST_N" +}; + +static const char * const i2c_slave_ao_groups[] = { + "i2c_slave_a_sda_ao0", "i2c_slave_a_scl_ao1", + "i2c_slave_a_sda_ao2", "i2c_slave_a_scl_ao3" +}; + +static const char * const remote_in_ao_groups[] = { + "remote_ao_input_ao1", "remote_ao_input_ao3", "remote_ao_input_ao4", + "remote_ao_input_ao6" +}; + +static const char * const uart_c_ao_groups[] = { + "uart_ao_c_tx_ao0", "uart_ao_c_rx_ao1", "uart_ao_c_tx_ao4", + "uart_ao_c_rx_ao5" +}; + +static const char * const clk32_ao_groups[] = { + "clk_32k_ao_out" +}; + +static const char * const pwm_g_ao_groups[] = { + "pwm_g" +}; + +static const char * const pmic_sleep_ao_groups[] = { + "pmic_sleep_ao2", "pmic_sleep_ao4" +}; + +static const struct meson_pmx_func a4_aobus_functions[] = { + FUNCTION(gpio_aobus), + FUNCTION(i2c_slave_ao), + FUNCTION(remote_in_ao), + FUNCTION(uart_c_ao), + FUNCTION(clk32_ao), + FUNCTION(pwm_g_ao), + FUNCTION(pmic_sleep_ao) +}; + +static const char * const gpio_periphs_groups[] = { + "GPIOE_0", "GPIOE_1", "GPIOD_0", "GPIOD_1", "GPIOD_2", + "GPIOD_3", "GPIOD_4", "GPIOD_5", "GPIOD_6", + "GPIOD_7", "GPIOD_8", "GPIOD_9", "GPIOD_10", + "GPIOD_11", "GPIOD_12", "GPIOD_13", "GPIOD_14", + "GPIOD_15", "GPIOB_0", "GPIOB_1", "GPIOB_2", + "GPIOB_3", "GPIOB_4", "GPIOB_5", "GPIOB_6", + "GPIOB_7", "GPIOB_8", "GPIOB_9", "GPIOB_10", + "GPIOB_11", "GPIOB_12", "GPIOB_13", "GPIOX_0", + "GPIOX_1", "GPIOX_2", "GPIOX_3", "GPIOX_4", + "GPIOX_5", "GPIOX_6", "GPIOX_7", "GPIOX_8", + "GPIOX_9", "GPIOX_10", "GPIOX_11", "GPIOX_12", + "GPIOX_13", "GPIOX_14", "GPIOX_15", "GPIOX_16", + "GPIOX_17", "GPIOT_0", "GPIOT_1", "GPIOT_2", + "GPIOT_3", "GPIOT_4", "GPIOT_5", "GPIOT_6", + "GPIOT_7", "GPIOT_8", "GPIOT_9", "GPIOT_10", + "GPIOT_11", "GPIOT_12", "GPIOT_13", "GPIOT_14", + "GPIOT_15", "GPIOT_16", "GPIOT_17", "GPIOT_18", + "GPIOT_19", "GPIOT_20", "GPIOT_21", "GPIOT_22" +}; + +static const char * const uart_a_groups[] = { + "uart_a_tx_d2", "uart_a_rx_d3", "uart_a_tx_x11", + "uart_a_rx_x12", "uart_a_cts", "uart_a_rts" +}; + +static const char * const uart_b_groups[] = { + "uart_b_tx_e0", "uart_b_rx_e1", "uart_b_tx_d0", "uart_b_cts", + "uart_b_rts", "uart_b_rx_d1" +}; + +static const char * const uart_d_groups[] = { + "uart_d_tx_t7", "uart_d_rx_t8", "uart_d_cts", "uart_d_rts", + "uart_d_tx_t18", "uart_d_rx_t19" +}; + +static const char * const uart_e_groups[] = { + "uart_e_tx", "uart_e_rx", "uart_e_rts", "uart_e_cts" +}; + +static const char * const i2c0_groups[] = { + "i2c0_sda_e0", "i2c0_scl_e1", "i2c0_sda_x16", "i2c0_scl_x17", + "i2c0_sda_t21", "i2c0_scl_t22" +}; + +static const char * const i2c1_groups[] = { + "i2c1_sda_d2", "i2c1_scl_d3", "i2c1_sda_d10", "i2c1_scl_d11" +}; + +static const char * const i2c2_groups[] = { + "i2c2_sda_d14", "i2c2_scl_d15", "i2c2_sda_t11", "i2c2_scl_t12" +}; + +static const char * const i2c3_groups[] = { + "i2c3_sda_d12", "i2c3_scl_d13", "i2c3_sda_t0", "i2c3_scl_t1" +}; + +static const char * const pwm_a_groups[] = { + "pwm_a_hiz", "pwm_a_x6", "pwm_a_d6" +}; + +static const char * const pwm_b_groups[] = { + "pwm_b_hiz", "pwm_b_x17", "pwm_b_d7" +}; + +static const char * const pwm_c_groups[] = { + "pwm_c_hiz", "pwm_c_t16", "pwm_c_d8" +}; + +static const char * const pwm_d_groups[] = { + "pwm_d_hiz", "pwm_d_t15", "pwm_d_d9" +}; + +static const char * const pwm_e_groups[] = { + "pwm_e_e0", "pwm_e_hiz", "pwm_e_d11" +}; + +static const char * const pwm_f_groups[] = { + "pwm_f" +}; + +static const char * const pwm_g_groups[] = { + "pwm_g_x15", "pwm_g_t19" +}; + +static const char * const pwm_h_groups[] = { + "pwm_h_d12", "pwm_h_t20" +}; + +static const char * const remote_out_groups[] = { + "remote_out" +}; + +static const char * const remote_in_groups[] = { + "remote_in" +}; + +static const char * const dcon_led_groups[] = { + "dcon_led_d8", "dcon_led_d12", "dcon_led_t4" +}; + +static const char * const spinf_groups[] = { + "spinf_mo_d0", "spinf_mi_d1", "spinf_wp_d2", "spinf_hold_d3", + "spinf_d4", "spinf_d5", "spinf_d6", "spinf_d7", "spinf_rst", + "spinf_clk", "spinf_cs1", "spinf_cs0" +}; + +static const char * const lcd_groups[] = { + "lcd_d0", "lcd_d1", "lcd_d2", "lcd_d3", "lcd_d4", "lcd_d5", + "lcd_d6", "lcd_d7", "lcd_d8", "lcd_d9", "lcd_d10", "lcd_d11", + "lcd_d12", "lcd_d13", "lcd_d14", "lcd_d15", "lcd_d16", "lcd_d17", + "lcd_clk", "lcd_den", "lcd_hsync", "lcd_vsync" +}; + +static const char * const jtag_1_groups[] = { + "jtag_1_clk", "jtag_1_tms", "jtag_1_tdi", "jtag_1_tdo" +}; + +static const char * const gen_clk_groups[] = { + "gen_clk" +}; + +static const char * const clk12_24_groups[] = { + "clk12_24" +}; + +static const char * const emmc_groups[] = { + "emmc_nand_d0", "emmc_nand_d1", "emmc_nand_d2", "emmc_nand_d3", + "emmc_nand_d4", "emmc_nand_d5", "emmc_nand_d6", "emmc_nand_d7", + "emmc_clk", "emmc_rst", "emmc_cmd", "emmc_nand_ds" +}; + +static const char * const nand_groups[] = { + "emmc_nand_d0", "emmc_nand_d1", "emmc_nand_d2", "emmc_nand_d3", + "emmc_nand_d4", "emmc_nand_d5", "emmc_nand_d6", "emmc_nand_d7", + "nand_wen_clk", "nand_ale", "nand_ren_wr", "nand_cle", "nand_ce0" +}; + +static const char * const spi_a_groups[] = { + "spi_a_mosi_x7", "spi_a_miso_x8", "spi_a_ss0_x9", "spi_a_clk_x10", + "spi_a_dq2", "spi_a_dq3", "spi_a_clk_t13", "spi_a_mosi_t14", + "spi_a_miso_t15", "spi_a_ss0_t16", "spi_a_ss1", "spi_a_ss2" +}; + +static const char * const spi_b_groups[] = { + "spi_b_miso_d2", "spi_b_mosi_d3", "spi_b_clk_d4", "spi_b_ss0_d5", + "spi_b_dq2", "spi_b_dq3", "spi_b_mosi_x14", "spi_b_ss0_x15", + "spi_b_clk_x16", "spi_b_miso_x17", "spi_b_clk_t5", "spi_b_mosi_t6", + "spi_b_miso_t7", "spi_b_ss0_t8", "spi_b_ss1", "spi_b_ss2" +}; + +static const char * const pdm_groups[] = { + "pdm_din1_d2", "pdm_dclk_d4", "pdm_din1_t0", "pdm_din0_t1", + "pdm_dclk_t2", "pdm_din0_d3" +}; + +static const char * const sdio_groups[] = { + "sdio_d0", "sdio_d1", "sdio_d2", "sdio_d3", + "sdio_clk", "sdio_cmd" +}; + +static const char * const eth_groups[] = { + "eth_mdio_d6", "eth_mdc_d7", "eth_mdio_x0", "eth_mdc_x1", + "eth_rgmii_rx_clk", "eth_rx_dv", "eth_rxd0", "eth_rxd1", + "eth_rxd2_rgmii", "eth_rxd3_rgmii", "eth_rgmii_tx_clk", "eth_txen", + "eth_txd0", "eth_txd1", "eth_txd2_rgmii", "eth_txd3_rgmii", + "eth_link_led_t18", "eth_act_led_t19", "eth_link_led_t21", + "eth_act_led_t22" +}; + +static const char * const mic_mute_groups[] = { + "mic_mute_en", "mic_mute_key" +}; + +static const char * const mclk_groups[] = { + "mclk0_x6", "mclk0_d13", "mclk1_d13", "mclk1_t4", + "mclk2_t5", "mclk2_t17" +}; + +static const char * const tdm_groups[] = { + "tdm_d12_d8", "tdm_d13_d9", "tdm_d2_d12", "tdm_sclk1_d14", + "tdm_fs1_d15", "tdm_d1", "tdm_d0_x8", "tdm_fs0_x9", + "tdm_sclk0_x10", "tdm_d2_t0", "tdm_d3_t1", "tdm_fs1_t2", + "tdm_sclk1_t3", "tdm_d4_t5", "tdm_d5_t6", "tdm_d6_t7", + "tdm_d7", "tdm_fs2_t11", "tdm_sclk2_t12", "tdm_d8", + "tdm_d9", "tdm_d10", "tdm_d11", "tdm_d12_t18", + "tdm_d13_t19", "tdm_d4_t20", "tdm_d5_t21", "tdm_d6_t22", + "tdm_d3_d11", "tdm_sclk0_d14", "tdm_fs0_d15", "tdm_fs2_t6", + "tdm_sclk2_t7", "tdm_d0_t20", "tdm_fs0_t21", "tdm_sclk0_t22" +}; + +static const char * const spdif_in_groups[] = { + "spdif_in_t9", "spdif_in_t10" +}; + +static const char * const spdif_out_groups[] = { + "spdif_out" +}; + +static struct meson_pmx_func a4_periphs_functions[] = { + FUNCTION(gpio_periphs), + FUNCTION(uart_a), + FUNCTION(uart_b), + FUNCTION(uart_d), + FUNCTION(uart_e), + FUNCTION(i2c0), + FUNCTION(i2c1), + FUNCTION(i2c2), + FUNCTION(i2c3), + FUNCTION(pwm_a), + FUNCTION(pwm_b), + FUNCTION(pwm_c), + FUNCTION(pwm_d), + FUNCTION(pwm_e), + FUNCTION(pwm_f), + FUNCTION(pwm_g), + FUNCTION(pwm_h), + FUNCTION(remote_out), + FUNCTION(remote_in), + FUNCTION(dcon_led), + FUNCTION(spinf), + FUNCTION(lcd), + FUNCTION(jtag_1), + FUNCTION(gen_clk), + FUNCTION(clk12_24), + FUNCTION(emmc), + FUNCTION(nand), + FUNCTION(spi_a), + FUNCTION(spi_b), + FUNCTION(pdm), + FUNCTION(sdio), + FUNCTION(eth), + FUNCTION(mic_mute), + FUNCTION(mclk), + FUNCTION(tdm), + FUNCTION(spdif_in), + FUNCTION(spdif_out) +}; + +static const struct meson_bank a4_periphs_banks[] = { + /* name first last irq pullen pull dir out in */ + BANK_DS("E", GPIOE_0, GPIOE_1, 14, 15, + 0x43, 0, 0x44, 0, 0x42, 0, 0x41, 0, 0x40, 0, 0x47, 0), + BANK_DS("D", GPIOD_0, GPIOD_15, 16, 31, + 0x33, 0, 0x34, 0, 0x32, 0, 0x31, 0, 0x30, 0, 0x37, 0), + BANK_DS("B", GPIOB_0, GPIOB_13, 0, 13, + 0x63, 0, 0x64, 0, 0x62, 0, 0x61, 0, 0x60, 0, 0x67, 0), + BANK_DS("X", GPIOX_0, GPIOX_17, 55, 72, + 0x13, 0, 0x14, 0, 0x12, 0, 0x11, 0, 0x10, 0, 0x17, 0), + BANK_DS("T", GPIOT_0, GPIOT_22, 32, 54, + 0x23, 0, 0x24, 0, 0x22, 0, 0x21, 0, 0x20, 0, 0x27, 0), +}; + +static const struct meson_bank a4_aobus_banks[] = { + BANK_DS("AO", GPIOAO_0, GPIOAO_6, 0, 6, + 0x3, 0, 0x4, 0, 0x2, 0, 0x1, 0, 0x0, 0, 0x7, 0), + BANK_DS("TEST_N", GPIO_TEST_N, GPIO_TEST_N, 7, 7, + 0x13, 0, 0x14, 0, 0x12, 0, 0x11, 0, 0x10, 0, 0x17, 0), +}; + +static const struct meson_pmx_bank a4_periphs_pmx_banks[] = { + /* name first lask reg offset */ + BANK_PMX("E", GPIOE_0, GPIOE_1, 0x12, 0), + BANK_PMX("D", GPIOD_0, GPIOD_15, 0x10, 0), + BANK_PMX("B", GPIOB_0, GPIOB_13, 0x00, 0), + BANK_PMX("X", GPIOX_0, GPIOX_17, 0x03, 0), + BANK_PMX("T", GPIOT_0, GPIOT_22, 0x0b, 0), +}; + +static const struct meson_pmx_bank a4_aobus_pmx_banks[] = { + BANK_PMX("AO", GPIOAO_0, GPIOAO_6, 0x00, 0), + BANK_PMX("TEST_N", GPIO_TEST_N, GPIO_TEST_N, 0x0, 28), +}; + +static const struct meson_axg_pmx_data a4_periphs_pmx_banks_data = { + .pmx_banks = a4_periphs_pmx_banks, + .num_pmx_banks = ARRAY_SIZE(a4_periphs_pmx_banks), +}; + +static const struct meson_axg_pmx_data a4_aobus_pmx_banks_data = { + .pmx_banks = a4_aobus_pmx_banks, + .num_pmx_banks = ARRAY_SIZE(a4_aobus_pmx_banks), +}; + +static int a4_of_gpio_xlate(struct gpio_chip *gc, + const struct of_phandle_args *gpiospec, + u32 *flags) +{ + int gpio_num = gpiospec->args[1]; + + switch (gpiospec->args[0]) { + case AMLOGIC_GPIO_B: + if (gpio_num >= GPIOB_NUM) + return -EINVAL; + gpio_num += GPIOB_0; + break; + + case AMLOGIC_GPIO_D: + if (gpio_num >= GPIOD_NUM) + return -EINVAL; + gpio_num += GPIOD_0; + break; + + case AMLOGIC_GPIO_E: + if (gpio_num >= GPIOE_NUM) + return -EINVAL; + gpio_num += GPIOE_0; + break; + + case AMLOGIC_GPIO_X: + if (gpio_num >= GPIOX_NUM) + return -EINVAL; + gpio_num += GPIOX_0; + break; + + case AMLOGIC_GPIO_T: + if (gpio_num >= GPIOT_NUM) + return -EINVAL; + gpio_num += GPIOT_0; + break; + + case AMLOGIC_GPIO_TEST_N: + if (gpio_num != 0) + return -EINVAL; + gpio_num += GPIO_TEST_N; + break; + + case AMLOGIC_GPIO_AO: + if (gpio_num >= GPIOAO_NUM) + return -EINVAL; + gpio_num += GPIOAO_0; + break; + + default: + return -EINVAL; + } + + if (flags) + *flags = gpiospec->args[2]; + + return gpio_num; +} + +static const struct meson_pinctrl_data a4_periphs_pinctrl_data = { + .name = "periphs-banks", + .pins = a4_periphs_pins, + .groups = a4_periphs_groups, + .funcs = a4_periphs_functions, + .banks = a4_periphs_banks, + .num_pins = ARRAY_SIZE(a4_periphs_pins), + .num_groups = ARRAY_SIZE(a4_periphs_groups), + .num_funcs = ARRAY_SIZE(a4_periphs_functions), + .num_banks = ARRAY_SIZE(a4_periphs_banks), + .pmx_ops = &meson_axg_pmx_ops, + .pmx_data = &a4_periphs_pmx_banks_data, + .parse_dt = &meson_a1_parse_dt_extra, + .of_gpio_n_cells = 3, + .of_xlate = &a4_of_gpio_xlate, +}; + +static const struct meson_pinctrl_data a4_aobus_pinctrl_data = { + .name = "aobus-banks", + .pins = a4_aobus_pins, + .groups = a4_aobus_groups, + .funcs = a4_aobus_functions, + .banks = a4_aobus_banks, + .num_pins = ARRAY_SIZE(a4_aobus_pins), + .num_groups = ARRAY_SIZE(a4_aobus_groups), + .num_funcs = ARRAY_SIZE(a4_aobus_functions), + .num_banks = ARRAY_SIZE(a4_aobus_banks), + .pmx_ops = &meson_axg_pmx_ops, + .pmx_data = &a4_aobus_pmx_banks_data, + .parse_dt = &meson_a1_parse_dt_extra, + .of_gpio_n_cells = 3, + .of_xlate = &a4_of_gpio_xlate, +}; + +static const struct of_device_id a4_pinctrl_dt_match[] = { + { + .compatible = "amlogic,a4-periphs-pinctrl", + .data = &a4_periphs_pinctrl_data, + }, + { + .compatible = "amlogic,a4-aobus-pinctrl", + .data = &a4_aobus_pinctrl_data, + }, + { } +}; +MODULE_DEVICE_TABLE(of, a4_pinctrl_dt_match); + +static struct platform_driver a4_pinctrl_driver = { + .probe = meson_pinctrl_probe, + .driver = { + .name = "amlogic-a4-pinctrl", + .of_match_table = a4_pinctrl_dt_match, + }, +}; + +module_platform_driver(a4_pinctrl_driver); + +MODULE_AUTHOR("Xianwei Zhao "); +MODULE_DESCRIPTION("Pin controller and GPIO driver for Amlogic A4 SoC"); +MODULE_LICENSE("Dual BSD/GPL"); From patchwork Wed Nov 13 09:37:32 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Xianwei Zhao via B4 Relay X-Patchwork-Id: 13873355 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 bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 11A41D41C2A for ; Wed, 13 Nov 2024 09:42:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:Reply-To:List-Subscribe:List-Help: List-Post:List-Archive:List-Unsubscribe:List-Id:Cc:To:In-Reply-To:References: Message-Id:MIME-Version:Subject:Date:From:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=KuMAzdgnL9f6Wa667ea6iXFJyCaq9PCdPtaIqeaMFZA=; b=zM+rIVN22JWnrQ LVXd4bPrOP0dh4TKuJpCJb0JzAEM5n/9G0q7+BzhSwcmH/wlyjOGi+SHOMXXayLyAZfw2a7Qyn7AK Msd3uURKgGBPaxGSS1m9Mm85bgh8pj6NqzzqYjn4ZdtLukBzwgnDzML0K3ud6e0RT1p1AjersEYjn FS/cFvOUJ4vs4bGv0QBeqHWd/lNc2TTJt347RY7GuZb50tS3e7kzF4rZnbH/1yQoTbJj/F/7a6egN VhiXVA1y57p7y5kjR5Kat9lXi1/F9pkPK8n57O4YJ7FbNewbu0dHDX1vb9MeNU3gbHhF+/9MA1KqT Tb33pBMmm061Q+jt00bg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tB9tR-00000006Gur-2GJ1; Wed, 13 Nov 2024 09:42:33 +0000 Received: from desiato.infradead.org ([2001:8b0:10b:1:d65d:64ff:fe57:4e05]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tB9om-00000006G94-3lDj; Wed, 13 Nov 2024 09:37:44 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=desiato.20200630; h=Reply-To:Cc:To:In-Reply-To:References: Message-Id:Content-Transfer-Encoding:Content-Type:MIME-Version:Subject:Date: From:Sender:Content-ID:Content-Description; bh=QLcSgOR7aLvQVOBAvpbksa+9sDVbJ1+E1YZiE5RshU4=; b=AknUwHG+oWVLpffYsEjJuU3kD8 ozb1eUVzoWu9rlAgvvGkzc+QlqTosjf3JR+fKxr56JETqO+K9+Y6fpTbGxuCd1nvd+Yd1wRXqcsHq DhzT6qAiNKLwKUMmHxqnJ7jc2jzJ4B9kB0wOeBbzEnQMxRepzix8y8/E3g0uDkjX7uc45yv+HzJB3 /4+lVVx/ZNhjN7GZFeIIWHdJz8CFikiV5kO9wCap+YFZ6IhT1kU6XwtXAx2JaFrTtWrPgH4M392us AqizYdalhw8wLHQDwmLS7xrIB4ErzD1mqPDi2HTecjAjnlGMx8pYh2upU92XC6ehCnhv+pfO8h1Mw FPF3/ySQ==; Received: from nyc.source.kernel.org ([2604:1380:45d1:ec00::3]) by desiato.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tB9oi-0000000DDvJ-2MJv; Wed, 13 Nov 2024 09:37:43 +0000 Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by nyc.source.kernel.org (Postfix) with ESMTP id AA136A40694; Wed, 13 Nov 2024 09:35:42 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPS id 0C410C4CEE3; Wed, 13 Nov 2024 09:37:36 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1731490656; bh=emTg6gDh6BXC5WxZiY52CWHMm6aFR9q/BDSunW+ZUto=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=XiKqSUHLDjA6Tzt2f5SPY3sJde3lPOrmOpU3HZxIxwCbpVpPAb+BikJ4a1N3TCXNM 6bbKEl9vIM5u//JwkzJXH02WpJR0zLceVNPeJ4eb3JXAWHwRZqXykKqP9Gnt9AoGy+ j6csyDjy1xAcElkcRJbQWg7Bxch+0yfVDaoc/rHHPhz7mD0aj1ZKvwpmyaxtFfyJql aPAKMdhokXAcFICMfbBmEaZPRq/8V6PqGImFvf0NtFRtDT/paHOKc/FiGgJhALAzaF Lf24WwjXtU/CejQ6Jv9OIH2jt4ldUYrk99ImPGivT4LPCRDMZzdtinLv92miF/Aay1 +DAgrfxlvgBmg== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 00195D41C26; Wed, 13 Nov 2024 09:37:35 +0000 (UTC) From: Xianwei Zhao via B4 Relay Date: Wed, 13 Nov 2024 17:37:32 +0800 Subject: [PATCH v7 5/5] arm64: dts: amlogic: a4: add pinctrl node MIME-Version: 1.0 Message-Id: <20241113-a4_pinctrl-v7-5-0546a20c1c22@amlogic.com> References: <20241113-a4_pinctrl-v7-0-0546a20c1c22@amlogic.com> In-Reply-To: <20241113-a4_pinctrl-v7-0-0546a20c1c22@amlogic.com> To: Linus Walleij , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Neil Armstrong , Kevin Hilman , Jerome Brunet , Martin Blumenstingl , Bartosz Golaszewski Cc: linux-gpio@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-amlogic@lists.infradead.org, linux-kernel@vger.kernel.org, Xianwei Zhao X-Mailer: b4 0.12.4 X-Developer-Signature: v=1; a=ed25519-sha256; t=1731490653; l=1622; i=xianwei.zhao@amlogic.com; s=20231208; h=from:subject:message-id; bh=BwmmxNbUHc87jVbNysKI2HGP1eTeZdpPlPo2pspjE6Y=; b=hn2p1wGZPfsXzU3Bx5wf7JMYkfyqeofIhyhq1sVoKupzAstVpSTr/QNt5Byp5/Nmm8EmodgyD FLLm00mF8YTBhXAYtT04iaM/UEpYoOIAFZTIQ87PBqeGY+wR6vPUKdv X-Developer-Key: i=xianwei.zhao@amlogic.com; a=ed25519; pk=o4fDH8ZXL6xQg5h17eNzRljf6pwZHWWjqcOSsj3dW24= X-Endpoint-Received: by B4 Relay for xianwei.zhao@amlogic.com/20231208 with auth_id=107 X-Original-From: Xianwei Zhao X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20241113_093741_289249_BCE171DA X-CRM114-Status: UNSURE ( 8.93 ) X-CRM114-Notice: Please train this message. X-BeenThere: linux-amlogic@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: xianwei.zhao@amlogic.com Sender: "linux-amlogic" Errors-To: linux-amlogic-bounces+linux-amlogic=archiver.kernel.org@lists.infradead.org From: Xianwei Zhao Add pinctrl device to support Amlogic A4. Reviewed-by: Neil Armstrong Signed-off-by: Xianwei Zhao --- arch/arm64/boot/dts/amlogic/amlogic-a4.dtsi | 36 +++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/arch/arm64/boot/dts/amlogic/amlogic-a4.dtsi b/arch/arm64/boot/dts/amlogic/amlogic-a4.dtsi index de10e7aebf21..a176faf7f1ef 100644 --- a/arch/arm64/boot/dts/amlogic/amlogic-a4.dtsi +++ b/arch/arm64/boot/dts/amlogic/amlogic-a4.dtsi @@ -5,6 +5,7 @@ #include "amlogic-a4-common.dtsi" #include +#include / { cpus { #address-cells = <2>; @@ -48,3 +49,38 @@ pwrc: power-controller { }; }; }; + +&apb { + periphs_pinctrl: pinctrl@4000 { + compatible = "amlogic,a4-periphs-pinctrl"; + #address-cells = <2>; + #size-cells = <2>; + ranges = <0x0 0x0 0x0 0x4000 0x0 0x02e0>; + + gpio: bank@0 { + reg = <0x0 0x0 0x0 0x0050>, + <0x0 0xc0 0x0 0x0220>; + reg-names = "mux", "gpio"; + gpio-controller; + #gpio-cells = <3>; + gpio-ranges = <&periphs_pinctrl 0 0 73>; + }; + }; + + aobus_pinctrl: pinctrl@8e700 { + compatible = "amlogic,a4-aobus-pinctrl"; + #address-cells = <2>; + #size-cells = <2>; + ranges = <0x0 0x0 0x0 0x8e700 0x0 0x0064>; + + ao_gpio: bank@0 { + reg = <0x0 0x00 0x0 0x04>, + <0x0 0x04 0x0 0x60>; + reg-names = "mux", "gpio"; + gpio-controller; + #gpio-cells = <3>; + gpio-ranges = <&aobus_pinctrl 0 0 8>; + }; + }; + +};