From patchwork Mon Dec 18 17:19:46 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Th=C3=A9o_Lebrun?= X-Patchwork-Id: 180591 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7300:24d3:b0:fb:cd0c:d3e with SMTP id r19csp1399172dyi; Mon, 18 Dec 2023 09:21:19 -0800 (PST) X-Google-Smtp-Source: AGHT+IGT2DFPlpYf1j8S+hFq/59JzqwjvVzj0FX/notXEyklM8RZA67bRYaMNKk5rXiy5zLWrBH1 X-Received: by 2002:a05:6a20:549a:b0:18f:97c:9279 with SMTP id i26-20020a056a20549a00b0018f097c9279mr9504549pzk.94.1702920079701; Mon, 18 Dec 2023 09:21:19 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1702920079; cv=none; d=google.com; s=arc-20160816; b=GFVjecuY/c6cD0hi7IJCfJSq544tkMcU9UNxFJa6IprE3GbPV6yBb5sJtiAlYBjv58 GZ+OO89qUy5PwgLJTSqp9SuO5ugLnrwiAU16jAZvQzWA75jhtR2sM4v9tIDf77I8uiEa 41M0rafOTQTg+T6PIEbO8Y6L44pyIT6W6syQHhKdj3qZfA6pqmsxG0W+yxfGZIs7puW7 N486MZSZcGyErGYivoQ35ySHXXOo9HJry5cbf/X12z2rWqP+HIAnYlhSXrYRY/GFZIUj 3WQ75qD/ouvdLI2qTDRRqrAqqdFAQu5f1YyQXYhxoQOI7A2afNzHi6E2aBEdv47/rhC+ iI5Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:list-unsubscribe:list-subscribe:list-id:precedence :subject:date:from:dkim-signature; bh=/Wwl11dg+pn6TldO6thipG27TxYZycqcEukr6hWE+P4=; fh=s7S0IY9Tz563FDa18ivkgXeQy//bxhfhgMk8PVNuTl0=; b=NCooYZGzZRPY+46reXRlaVlp2Xenv6LxChXD95cYQxS0/DAe/CLCgVvhVerk/rgZZh R3fYzLNVjgBWGpckcYsnN73pQioao9RqSRWgIonFlTFVQO85+SjchItPHwmUg0irfPWG UX14bb1N287efDu9wsZBNrI55wHzl78vSDM3mOT89E3HHc0NGnkzZZ8Jctfapw27oD3t cioDsO2G7wViPzOwEUYMlkQfn2rdHGt6LGXUcVYUXeQeLYOGHHrZuub+ooXE4AR1nBgo NIrVMh9SYO1G0oddzVG1k34Lgq/jyfsbayTd7342YARPX+7QVtvNzjhiecd0By9GKDyP dYyw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@bootlin.com header.s=gm1 header.b="lYY9FGk/"; spf=pass (google.com: domain of linux-kernel+bounces-4149-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-4149-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=bootlin.com Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org. [2604:1380:45e3:2400::1]) by mx.google.com with ESMTPS id n22-20020a62e516000000b006ce97669ffdsi17423141pff.358.2023.12.18.09.21.19 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 Dec 2023 09:21:19 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-4149-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) client-ip=2604:1380:45e3:2400::1; Authentication-Results: mx.google.com; dkim=pass header.i=@bootlin.com header.s=gm1 header.b="lYY9FGk/"; spf=pass (google.com: domain of linux-kernel+bounces-4149-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-4149-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=bootlin.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sv.mirrors.kernel.org (Postfix) with ESMTPS id 70EC9284EB4 for ; Mon, 18 Dec 2023 17:21:19 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 7C8037147E; Mon, 18 Dec 2023 17:20:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b="lYY9FGk/" X-Original-To: linux-kernel@vger.kernel.org Received: from relay7-d.mail.gandi.net (relay7-d.mail.gandi.net [217.70.183.200]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2C0F75A879; Mon, 18 Dec 2023 17:20:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=bootlin.com Received: by mail.gandi.net (Postfix) with ESMTPSA id 55C7C20002; Mon, 18 Dec 2023 17:20:07 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1; t=1702920008; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=/Wwl11dg+pn6TldO6thipG27TxYZycqcEukr6hWE+P4=; b=lYY9FGk/iH5dT4vEQQ+pS0PIcjNBxY/kGIy31ILNItU95ll7qIg6IDIJYYt641fks0rhKI c9C/LsAG5K+iFfmD9vD2+oZ0rA3W02eiiLrO4PCUsGmObheXj2+WtOggTMU5n7squSyV/5 9XSnoKS0rdNwRr9QnBQqruPrLpVgfHhQky9pVPkddzXfTk8ZlngXVS91oMvNokjZ2wpTYZ Bq8JTv3RZ3vkI9XZ+PQ5Y/VkJTlRFd+iaVFn90JcAVfHv9wiHX88QcoYXWprr+Qz5BV4UM t71a8xacDXq9PXbywhbTne2BgRdAZHOICtGeHOup1P5BXvAJSfujalaROAbLiA== From: =?utf-8?q?Th=C3=A9o_Lebrun?= Date: Mon, 18 Dec 2023 18:19:46 +0100 Subject: [PATCH 1/4] dt-bindings: pinctrl: mobileye,eyeq5-pinctrl: add bindings Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20231218-mbly-pinctrl-v1-1-2f7d366c2051@bootlin.com> References: <20231218-mbly-pinctrl-v1-0-2f7d366c2051@bootlin.com> In-Reply-To: <20231218-mbly-pinctrl-v1-0-2f7d366c2051@bootlin.com> To: Vladimir Kondratiev , Gregory CLEMENT , Linus Walleij , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Thomas Bogendoerfer Cc: linux-mips@vger.kernel.org, linux-gpio@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Thomas Petazzoni , Tawfik Bayouk , =?utf-8?q?Th=C3=A9o_Lebrun?= X-Mailer: b4 0.12.4 X-GND-Sasl: theo.lebrun@bootlin.com X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1785641125381188175 X-GMAIL-MSGID: 1785641125381188175 Add dt-schema type bindings for the Mobileye EyeQ5 pin controller. Signed-off-by: Théo Lebrun --- .../bindings/pinctrl/mobileye,eyeq5-pinctrl.yaml | 125 +++++++++++++++++++++ MAINTAINERS | 1 + 2 files changed, 126 insertions(+) diff --git a/Documentation/devicetree/bindings/pinctrl/mobileye,eyeq5-pinctrl.yaml b/Documentation/devicetree/bindings/pinctrl/mobileye,eyeq5-pinctrl.yaml new file mode 100644 index 000000000000..5faddebe2413 --- /dev/null +++ b/Documentation/devicetree/bindings/pinctrl/mobileye,eyeq5-pinctrl.yaml @@ -0,0 +1,125 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/pinctrl/mobileye,eyeq5-pinctrl.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Mobileye EyeQ5 pinctrl (pinmux & pinconf) controller + +description: + The EyeQ5 pin controller handles a pin bank. It is custom to this platform, + its registers live in a shared region called OLB. + There are two pin banks on the platform, each having a specific compatible. + Pins and groups are bijective. + +maintainers: + - Grégory Clement + - Théo Lebrun + - Vladimir Kondratiev + +properties: + $nodename: + pattern: "^pinctrl([0-9]+)?$" + description: + We have no unique address, we rely on OLB; we therefore can't keep the + standard pattern and cannot inherit from pinctrl.yaml. + + compatible: + enum: + - mobileye,eyeq5-a-pinctrl + - mobileye,eyeq5-b-pinctrl + + "#pinctrl-cells": + const: 1 + + mobileye,olb: + $ref: /schemas/types.yaml#/definitions/phandle + description: + A phandle to the OLB syscon. This is a fallback to using the parent as + syscon node. + +required: + - compatible + - "#pinctrl-cells" + +patternProperties: + "-pins?$": + type: object + description: Pin muxing configuration. + $ref: pinmux-node.yaml# + additionalProperties: false + properties: + pins: true + function: true + bias-disable: true + bias-pull-down: true + bias-pull-up: true + drive-strength: true + required: + - pins + - function + +allOf: + - if: + properties: + compatible: + contains: + const: mobileye,eyeq5-a-pinctrl + then: + patternProperties: + "-pins?$": + properties: + function: + enum: [gpio, timer0, timer1, timer2, timer5, uart0, uart1, can0, + can1, spi0, spi1, refclk0] + - if: + properties: + compatible: + contains: + const: mobileye,eyeq5-b-pinctrl + then: + patternProperties: + "-pins?$": + properties: + function: + enum: [gpio, timer3, timer4, timer6, uart2, can2, spi2, spi3, + mclk0] + +additionalProperties: false + +examples: + - | + olb@e00000 { + compatible = "mobileye,eyeq5-olb", "syscon", "simple-mfd"; + reg = <0xe00000 0x400>; + reg-io-width = <4>; + + pinctrl0 { + compatible = "mobileye,eyeq5-a-pinctrl"; + #pinctrl-cells = <1>; + }; + + pinctrl1 { + compatible = "mobileye,eyeq5-b-pinctrl"; + #pinctrl-cells = <1>; + }; + }; + - | + olb: olb@e00000 { + compatible = "mobileye,eyeq5-olb", "syscon", "simple-mfd"; + reg = <0xe00000 0x400>; + reg-io-width = <4>; + }; + + pinctrl0 { + compatible = "mobileye,eyeq5-a-pinctrl"; + #pinctrl-cells = <1>; + mobileye,olb = <&olb>; + }; + + pinctrl1 { + compatible = "mobileye,eyeq5-b-pinctrl"; + #pinctrl-cells = <1>; + mobileye,olb = <&olb>; + }; + diff --git a/MAINTAINERS b/MAINTAINERS index 138e0303c5da..d8d9583a5a06 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -14553,6 +14553,7 @@ M: Théo Lebrun L: linux-mips@vger.kernel.org S: Maintained F: Documentation/devicetree/bindings/mips/mobileye.yaml +F: Documentation/devicetree/bindings/pinctrl/mobileye,eyeq5-pinctrl.yaml F: Documentation/devicetree/bindings/reset/mobileye,eyeq5-reset.yaml F: arch/mips/boot/dts/mobileye/ F: arch/mips/configs/generic/board-eyeq5.config From patchwork Mon Dec 18 17:19:47 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Th=C3=A9o_Lebrun?= X-Patchwork-Id: 180594 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7300:24d3:b0:fb:cd0c:d3e with SMTP id r19csp1399572dyi; Mon, 18 Dec 2023 09:22:00 -0800 (PST) X-Google-Smtp-Source: AGHT+IFmWaxp+qq2qJ/Bw/G69M/hmednpBAfzmsbmgmkk+SmmuKDa7+98GRB4rjVZfkGUxHVd7io X-Received: by 2002:a17:902:e810:b0:1d0:6ffd:6e60 with SMTP id u16-20020a170902e81000b001d06ffd6e60mr9370712plg.88.1702920120048; Mon, 18 Dec 2023 09:22:00 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1702920120; cv=none; d=google.com; s=arc-20160816; b=HS7NdOuTtJqgls2vQ1fov3vT3CYqrZA/R3csgGGOhzlqv0ykkQJq43cUCNKT7OGXVp kbIj/JX06XYXgTsSD96hACrJnANQGiPaiALqdii5rXIA4GAfS6ag0t4lF0f6uIeegTnh BPB1NBUxHH8zw/JUetRtWhZaP3R1Yg95PRvJ5Il0Gjo95TylnQFA9wRMVR48JIop507u mFp3h458+x7ssZ4ytDzV8tn91Cb+yl2Bt/nd24qbYxDB418xRWfQSQfRgEzJaW9q21yL xhW0tNe0Xm5Hcq3RChRnkBYqfrSWaFBLQfcUZ/XEWL7i8RuO/FTwawdixp7CEs+ObzPw M6fQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:list-unsubscribe:list-subscribe:list-id:precedence :subject:date:from:dkim-signature; bh=kzHnP1i6Rn44JDL6C4JAosBad4Iv57MED61+AdqH6LE=; fh=s7S0IY9Tz563FDa18ivkgXeQy//bxhfhgMk8PVNuTl0=; b=bkaHyN0fbbXUH6jOR90MkdU97FUi96/et7hpFbIpgnqAFtYFohaUzJJmtKvEbIjv3C vCq5qTTbzBrYrYgq+TlcufqMLJoZWxeMt/1euZN1CgOen4yJqtElCnvGui3s2GMQSj5I ry2flMpLlA+dqStSpXlNC/qxOmikYI79BHVEC1O/G6A/c20p9A0ZmPheuTkMxfha9Hfk SH1osIGrqCP5jfUD9akYYdkCYa0qz8xUzCr7q5OScQzHerp9FGxvIYvLzBJDmxVkJsI6 QoGcZ1GEzlzcfN9i5cG9+94VVy25vXEQkGdFcx6fb6O4/YttoHjAiPUN8ZI2SJbRC4AI 2Nyw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@bootlin.com header.s=gm1 header.b=W88UoD8D; spf=pass (google.com: domain of linux-kernel+bounces-4150-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-4150-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=bootlin.com Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org. [2604:1380:45e3:2400::1]) by mx.google.com with ESMTPS id p19-20020a170902b09300b001d07b6a0aeasi17646171plr.325.2023.12.18.09.21.59 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 Dec 2023 09:22:00 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-4150-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) client-ip=2604:1380:45e3:2400::1; Authentication-Results: mx.google.com; dkim=pass header.i=@bootlin.com header.s=gm1 header.b=W88UoD8D; spf=pass (google.com: domain of linux-kernel+bounces-4150-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-4150-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=bootlin.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sv.mirrors.kernel.org (Postfix) with ESMTPS id C3CEA28498A for ; Mon, 18 Dec 2023 17:21:59 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 8D9804B137; Mon, 18 Dec 2023 17:20:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b="W88UoD8D" X-Original-To: linux-kernel@vger.kernel.org Received: from relay7-d.mail.gandi.net (relay7-d.mail.gandi.net [217.70.183.200]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 532805BF80; Mon, 18 Dec 2023 17:20:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=bootlin.com Received: by mail.gandi.net (Postfix) with ESMTPSA id A8BC820003; Mon, 18 Dec 2023 17:20:08 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1; t=1702920009; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=kzHnP1i6Rn44JDL6C4JAosBad4Iv57MED61+AdqH6LE=; b=W88UoD8DIy1/EFnWUjx7UxLkx6Km2+12XbRD3BxOfWW/tmtK51nDGeDKLeQ37+/qK5b+pL rFM2L01MBggBlgTXhva56sQkE5Iw4ndfWCab4WdT6P6uQFaLdzjJyvusO6K40qh0kg0uBw CfliBzf2X9SM77i8sri06VV0DjjrCGUFut2294hptAmfYxOZyM7jVhXao4QfTgL8Z/OVVN TPgz4qc27xcT+G9wHZFjs/0j6b0KkgG/3V1xMG546SQJOi2lcZMg7lqt73tpj3A+S4IC1M bL+f5xax6T4/wqoCEDNSK2CQKB81SA7Fx8PaSr9N+SknEGoMvNy3v6kx16Vs4w== From: =?utf-8?q?Th=C3=A9o_Lebrun?= Date: Mon, 18 Dec 2023 18:19:47 +0100 Subject: [PATCH 2/4] pinctrl: eyeq5: add driver Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20231218-mbly-pinctrl-v1-2-2f7d366c2051@bootlin.com> References: <20231218-mbly-pinctrl-v1-0-2f7d366c2051@bootlin.com> In-Reply-To: <20231218-mbly-pinctrl-v1-0-2f7d366c2051@bootlin.com> To: Vladimir Kondratiev , Gregory CLEMENT , Linus Walleij , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Thomas Bogendoerfer Cc: linux-mips@vger.kernel.org, linux-gpio@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Thomas Petazzoni , Tawfik Bayouk , =?utf-8?q?Th=C3=A9o_Lebrun?= X-Mailer: b4 0.12.4 X-GND-Sasl: theo.lebrun@bootlin.com X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1785641167956782730 X-GMAIL-MSGID: 1785641167956782730 Add the Mobileye EyeQ5 pinctrl (pinconf & pinmux) controller driver. See the header comment for more information on how it works. This driver is specific to this platform; it might grow to add later support of other platforms from Mobileye. Existing pins and their function live statically in the driver code rather than in the devicetree, see compatible match data. Signed-off-by: Théo Lebrun --- MAINTAINERS | 1 + drivers/pinctrl/Kconfig | 15 + drivers/pinctrl/Makefile | 1 + drivers/pinctrl/pinctrl-eyeq5.c | 593 ++++++++++++++++++++++++++++++++++++++++ 4 files changed, 610 insertions(+) diff --git a/MAINTAINERS b/MAINTAINERS index d8d9583a5a06..5272b61d51d5 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -14558,6 +14558,7 @@ F: Documentation/devicetree/bindings/reset/mobileye,eyeq5-reset.yaml F: arch/mips/boot/dts/mobileye/ F: arch/mips/configs/generic/board-eyeq5.config F: arch/mips/generic/board-epm5.its.S +F: drivers/pinctrl/pinctrl-eyeq5.c F: drivers/reset/reset-eyeq5.c F: include/dt-bindings/reset/mobileye,eyeq5-reset.h F: include/dt-bindings/soc/mobileye,eyeq5.h diff --git a/drivers/pinctrl/Kconfig b/drivers/pinctrl/Kconfig index 1de4e1edede0..e05c59116215 100644 --- a/drivers/pinctrl/Kconfig +++ b/drivers/pinctrl/Kconfig @@ -195,6 +195,21 @@ config PINCTRL_EQUILIBRIUM desired pin functions, configure GPIO attributes for LGM SoC pins. Pin muxing and pin config settings are retrieved from device tree. +config PINCTRL_EYEQ5 + bool "Mobileye EyeQ5 pinctrl driver" + depends on OF + depends on SOC_EYEQ5 || COMPILE_TEST + select PINMUX + select GENERIC_PINCONF + select MFD_SYSCON + default SOC_EYEQ5 + help + Pin controller driver for the Mobileye EyeQ5 platform. It does both + pin config & pin muxing. It does not handle GPIO. + + Pin muxing supports two functions for each pin: first is GPIO, second + is pin-dependent. Pin config is about bias & drive strength. + config PINCTRL_GEMINI bool depends on ARCH_GEMINI diff --git a/drivers/pinctrl/Makefile b/drivers/pinctrl/Makefile index 37575deb7a69..3f7c933c5470 100644 --- a/drivers/pinctrl/Makefile +++ b/drivers/pinctrl/Makefile @@ -22,6 +22,7 @@ obj-$(CONFIG_PINCTRL_DA850_PUPD) += pinctrl-da850-pupd.o obj-$(CONFIG_PINCTRL_DA9062) += pinctrl-da9062.o obj-$(CONFIG_PINCTRL_DIGICOLOR) += pinctrl-digicolor.o obj-$(CONFIG_PINCTRL_EQUILIBRIUM) += pinctrl-equilibrium.o +obj-$(CONFIG_PINCTRL_EYEQ5) += pinctrl-eyeq5.o obj-$(CONFIG_PINCTRL_GEMINI) += pinctrl-gemini.o obj-$(CONFIG_PINCTRL_INGENIC) += pinctrl-ingenic.o obj-$(CONFIG_PINCTRL_K210) += pinctrl-k210.o diff --git a/drivers/pinctrl/pinctrl-eyeq5.c b/drivers/pinctrl/pinctrl-eyeq5.c new file mode 100644 index 000000000000..3c584eec6f54 --- /dev/null +++ b/drivers/pinctrl/pinctrl-eyeq5.c @@ -0,0 +1,593 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * Pinctrl driver for the Mobileye EyeQ5 platform. + * + * The registers are located in a syscon region called OLB. There are two pin + * banks, each being controlled by 5 registers (see enum eq5p_regs) for + * pull-down, pull-up, drive strength and muxing. + * + * For each pin, muxing is between two functions: (0) GPIO or (1) another one + * that is pin-dependent. Functions are declared statically in this driver. + * + * We create pinctrl groups that are 1:1 equivalent to pins: each group has a + * single pin, and its index/selector is the pin number/offset. + * + * We use eq5p_ as prefix, as-in "EyeQ5 Pinctrl", but way shorter. + * + * Copyright (C) 2023 Mobileye Vision Technologies Ltd. + */ +#include +#include +#include +#include +#include +#include +#include +#include + +#include "core.h" +#include "pinctrl-utils.h" + +#define GPIO_FUNC_SELECTOR 0 + +struct eq5p_pinctrl { + struct pinctrl_desc desc; + + struct regmap *olb; + const unsigned int *regs; /* array of size EQ5P_REG_MAX */ + + const struct eq5p_function *funcs; + unsigned int nfuncs; +}; + +struct eq5p_function { + const char *name; + const char * const *groups; + unsigned int ngroups; +}; + +/* OLB registers; those are offsets in an array of address offsets. */ +enum eq5p_regs { + EQ5P_PD, + EQ5P_PU, + EQ5P_DS_LOW, + EQ5P_DS_HIGH, + EQ5P_IOCR, + + EQ5P_REG_MAX +}; + +static int eq5p_pinctrl_get_groups_count(struct pinctrl_dev *pctldev) +{ + return pctldev->desc->npins; +} + +static const char *eq5p_pinctrl_get_group_name(struct pinctrl_dev *pctldev, + unsigned int selector) +{ + return pctldev->desc->pins[selector].name; +} + +static int eq5p_pinctrl_get_group_pins(struct pinctrl_dev *pctldev, + unsigned int selector, + const unsigned int **pins, + unsigned int *num_pins) +{ + *pins = &pctldev->desc->pins[selector].number; + *num_pins = 1; + return 0; +} + +static int eq5p_pinconf_get(struct pinctrl_dev *pctldev, unsigned int offset, + unsigned long *config); + +static void eq5p_pinctrl_pin_dbg_show(struct pinctrl_dev *pctldev, + struct seq_file *s, + unsigned int offset) +{ + struct eq5p_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev); + const char *pin_name = pctrl->desc.pins[offset].name; + const char *func_name, *bias; + unsigned int val_pd, val_pu, val_iocr; + unsigned long ds_config; + u32 drive_strength; + bool pd, pu; + int i, j; + + /* First, let's get the function name. */ + regmap_read(pctrl->olb, pctrl->regs[EQ5P_IOCR], &val_iocr); + if ((val_iocr & BIT(offset)) == 0) { + func_name = pctrl->funcs[GPIO_FUNC_SELECTOR].name; + } else { + /* All pins have only two functions: GPIO and something else. We + * look for this something else. + */ + func_name = NULL; + for (i = 0; i < pctrl->nfuncs; i++) { + if (i == GPIO_FUNC_SELECTOR) + continue; + + for (j = 0; j < pctrl->funcs[i].ngroups; j++) { + /* Groups and pins are the same thing for us. */ + const char *x = pctrl->funcs[i].groups[j]; + + if (strcmp(x, pin_name) == 0) { + func_name = pctrl->funcs[i].name; + break; + } + } + + if (func_name) + break; + } + + /* We have not found the function attached to this pin, this + * should never occur as all pins have exactly two functions. + */ + if (!func_name) + func_name = "unknown"; + } + + /* Second, we retrieve the bias. */ + regmap_read(pctrl->olb, pctrl->regs[EQ5P_PD], &val_pd); + pd = (val_pd & BIT(offset)) != 0; + regmap_read(pctrl->olb, pctrl->regs[EQ5P_PU], &val_pu); + pu = (val_pu & BIT(offset)) != 0; + if (pd && pu) + bias = "both"; + else if (pd && !pu) + bias = "pulldown"; + else if (!pd && pu) + bias = "pullup"; + else + bias = "none"; + + /* Third, we get the drive strength. */ + ds_config = pinconf_to_config_packed(PIN_CONFIG_DRIVE_STRENGTH, 0); + eq5p_pinconf_get(pctldev, offset, &ds_config); + drive_strength = pinconf_to_config_argument(ds_config); + + seq_printf(s, "function=%s bias=%s drive_strength=%d", + func_name, bias, drive_strength); +} + +static const struct pinctrl_ops eq5p_pinctrl_ops = { + .get_groups_count = eq5p_pinctrl_get_groups_count, + .get_group_name = eq5p_pinctrl_get_group_name, + .get_group_pins = eq5p_pinctrl_get_group_pins, + .pin_dbg_show = eq5p_pinctrl_pin_dbg_show, + .dt_node_to_map = pinconf_generic_dt_node_to_map_pin, + .dt_free_map = pinctrl_utils_free_map, +}; + +static int eq5p_pinmux_get_functions_count(struct pinctrl_dev *pctldev) +{ + struct eq5p_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev); + + return pctrl->nfuncs; +} + +static const char *eq5p_pinmux_get_function_name(struct pinctrl_dev *pctldev, + unsigned int selector) +{ + struct eq5p_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev); + + return pctrl->funcs[selector].name; +} + +static int eq5p_pinmux_get_function_groups(struct pinctrl_dev *pctldev, + unsigned int selector, + const char * const **groups, + unsigned int *num_groups) +{ + struct eq5p_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev); + + *groups = pctrl->funcs[selector].groups; + *num_groups = pctrl->funcs[selector].ngroups; + return 0; +} + +static int eq5p_pinmux_set_mux(struct pinctrl_dev *pctldev, + unsigned int func_selector, unsigned int offset) +{ + const char *group_name = pctldev->desc->pins[offset].name; + struct eq5p_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev); + const char *func_name = pctrl->funcs[func_selector].name; + bool is_gpio = func_selector == GPIO_FUNC_SELECTOR; + unsigned int reg, mask, val; + + dev_dbg(pctldev->dev, "%s: func=%s group=%s\n", __func__, func_name, + group_name); + + reg = pctrl->regs[EQ5P_IOCR]; + mask = BIT(offset); + val = is_gpio ? 0 : U32_MAX; + + regmap_update_bits(pctrl->olb, reg, mask, val); + + return 0; +} + +static int eq5p_pinmux_gpio_request_enable(struct pinctrl_dev *pctldev, + struct pinctrl_gpio_range *range, + unsigned int offset) +{ + /* Pin offsets and group selectors are the same thing in our case. */ + return eq5p_pinmux_set_mux(pctldev, GPIO_FUNC_SELECTOR, offset); +} + +static const struct pinmux_ops eq5p_pinmux_ops = { + .get_functions_count = eq5p_pinmux_get_functions_count, + .get_function_name = eq5p_pinmux_get_function_name, + .get_function_groups = eq5p_pinmux_get_function_groups, + .set_mux = eq5p_pinmux_set_mux, + .gpio_request_enable = eq5p_pinmux_gpio_request_enable, + .strict = true, +}; + +static int eq5p_pinconf_get(struct pinctrl_dev *pctldev, unsigned int offset, + unsigned long *config) +{ + enum pin_config_param param = pinconf_to_config_param(*config); + struct eq5p_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev); + unsigned int reg, val_pd, val_pu, val_ds; + bool pd, pu; + u32 arg = 0; + + regmap_read(pctrl->olb, pctrl->regs[EQ5P_PD], &val_pd); + pd = (val_pd & BIT(offset)) != 0; + regmap_read(pctrl->olb, pctrl->regs[EQ5P_PU], &val_pu); + pu = (val_pu & BIT(offset)) != 0; + + switch (param) { + case PIN_CONFIG_BIAS_DISABLE: + arg = !(pd || pu); + break; + case PIN_CONFIG_BIAS_PULL_DOWN: + arg = pd; + break; + case PIN_CONFIG_BIAS_PULL_UP: + arg = pu; + break; + case PIN_CONFIG_DRIVE_STRENGTH: + offset *= 2; /* two bits per pin */ + if (offset >= 32) { + reg = pctrl->regs[EQ5P_DS_HIGH]; + offset -= 32; + } else { + reg = pctrl->regs[EQ5P_DS_LOW]; + } + regmap_read(pctrl->olb, reg, &val_ds); + arg = (val_ds >> offset) & 0b11; + break; + default: + return -EOPNOTSUPP; + } + + *config = pinconf_to_config_packed(param, arg); + return 0; +} + +static int eq5p_pinconf_set_drive_strength(struct pinctrl_dev *pctldev, + unsigned int offset, u32 arg) +{ + struct eq5p_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev); + unsigned int reg, mask, val; + + if (arg > 3) { + dev_err(pctldev->dev, "Unsupported drive strength: %u\n", arg); + return -EINVAL; + } + + offset *= 2; /* two bits per pin */ + + if (offset >= 32) { + reg = pctrl->regs[EQ5P_DS_HIGH]; + offset -= 32; + } else { + reg = pctrl->regs[EQ5P_DS_LOW]; + } + + mask = 0b11 << offset; + val = arg << offset; + regmap_update_bits(pctrl->olb, reg, mask, val); + return 0; +} + +static int eq5p_pinconf_set(struct pinctrl_dev *pctldev, unsigned int offset, + unsigned long *configs, unsigned int num_configs) +{ + struct eq5p_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev); + const char *pin_name = pctldev->desc->pins[offset].name; + struct device *dev = pctldev->dev; + unsigned int i, val, reg_pd, reg_pu; + + val = BIT(offset); + reg_pd = pctrl->regs[EQ5P_PD]; + reg_pu = pctrl->regs[EQ5P_PU]; + + for (i = 0; i < num_configs; i++) { + enum pin_config_param param = pinconf_to_config_param(configs[i]); + u32 arg = pinconf_to_config_argument(configs[i]); + + switch (param) { + case PIN_CONFIG_BIAS_DISABLE: + dev_dbg(dev, "%s: pin=%s BIAS_DISABLE\n", + __func__, pin_name); + regmap_clear_bits(pctrl->olb, reg_pd, val); + regmap_clear_bits(pctrl->olb, reg_pu, val); + break; + case PIN_CONFIG_BIAS_PULL_DOWN: + dev_dbg(dev, "%s: pin=%s BIAS_PULL_DOWN arg=%u\n", + __func__, pin_name, arg); + if (arg == 0) /* cannot connect to GND */ + return -EOPNOTSUPP; + regmap_set_bits(pctrl->olb, reg_pd, val); + regmap_clear_bits(pctrl->olb, reg_pu, val); + break; + case PIN_CONFIG_BIAS_PULL_UP: + dev_dbg(dev, "%s: pin=%s BIAS_PULL_UP arg=%u\n", + __func__, pin_name, arg); + if (arg == 0) /* cannot connect to VDD */ + return -EOPNOTSUPP; + regmap_clear_bits(pctrl->olb, reg_pd, val); + regmap_set_bits(pctrl->olb, reg_pu, val); + break; + case PIN_CONFIG_DRIVE_STRENGTH: + dev_dbg(dev, "%s: pin=%s DRIVE_STRENGTH arg=%u\n", + __func__, pin_name, arg); + eq5p_pinconf_set_drive_strength(pctldev, offset, arg); + break; + default: + dev_err(dev, "Unsupported pinconf %u\n", param); + return -EOPNOTSUPP; + } + } + + return 0; +} + +static const struct pinconf_ops eq5p_pinconf_ops = { + .is_generic = true, + .pin_config_get = eq5p_pinconf_get, + .pin_config_set = eq5p_pinconf_set, + /* Pins and groups are equivalent in this driver. */ + .pin_config_group_get = eq5p_pinconf_get, + .pin_config_group_set = eq5p_pinconf_set, +}; + +/* + * Comments to the right of each pin are the "signal name" in the datasheet. + */ + +static const struct pinctrl_pin_desc eq5p_pins_a[] = { /* Bank A */ + PINCTRL_PIN(0, "PA0"), /* A0_TIMER0_CK */ + PINCTRL_PIN(1, "PA1"), /* A1_TIMER0_EOC */ + PINCTRL_PIN(2, "PA2"), /* A2_TIMER1_CK */ + PINCTRL_PIN(3, "PA3"), /* A3_TIMER1_EOC */ + PINCTRL_PIN(4, "PA4"), /* A4_TIMER2_CK */ + PINCTRL_PIN(5, "PA5"), /* A5_TIMER2_EOC */ + PINCTRL_PIN(6, "PA6"), /* A6_TIMER5_EXT_INCAP1 */ + PINCTRL_PIN(7, "PA7"), /* A7_TIMER5_EXT_INCAP2 */ + PINCTRL_PIN(8, "PA8"), /* A8_TIMER5_EXT_OUTCMP1 */ + PINCTRL_PIN(9, "PA9"), /* A9_TIMER5_EXT_OUTCMP2 */ + PINCTRL_PIN(10, "PA10"), /* A10_UART_0_TX */ + PINCTRL_PIN(11, "PA11"), /* A11_UART_0_RX */ + PINCTRL_PIN(12, "PA12"), /* A12_UART_1_TX */ + PINCTRL_PIN(13, "PA13"), /* A13_UART_1_RX */ + PINCTRL_PIN(14, "PA14"), /* A14_CAN_0_TX */ + PINCTRL_PIN(15, "PA15"), /* A15_CAN_0_RX */ + PINCTRL_PIN(16, "PA16"), /* A16_CAN_1_TX */ + PINCTRL_PIN(17, "PA17"), /* A17_CAN_1_RX */ + PINCTRL_PIN(18, "PA18"), /* A18_SPI_0_DO */ + PINCTRL_PIN(19, "PA19"), /* A19_SPI_0_DI */ + PINCTRL_PIN(20, "PA20"), /* A20_SPI_0_CK */ + PINCTRL_PIN(21, "PA21"), /* A21_SPI_0_CS0 */ + PINCTRL_PIN(22, "PA22"), /* A22_SPI_0_CS1 */ + PINCTRL_PIN(23, "PA23"), /* A23_SPI_1_DO */ + PINCTRL_PIN(24, "PA24"), /* A24_SPI_1_DI */ + PINCTRL_PIN(25, "PA25"), /* A25_SPI_1_CK */ + PINCTRL_PIN(26, "PA26"), /* A26_SPI_1_CS0 */ + PINCTRL_PIN(27, "PA27"), /* A27_SPI_1_CS1 */ + PINCTRL_PIN(28, "PA28"), /* A28_REF_CLK0 */ +}; + +static const struct pinctrl_pin_desc eq5p_pins_b[] = { /* Bank B */ + PINCTRL_PIN(0, "PB0"), /* B0_TIMER3_CK */ + PINCTRL_PIN(1, "PB1"), /* B1_TIMER3_EOC */ + PINCTRL_PIN(2, "PB2"), /* B2_TIMER4_CK */ + PINCTRL_PIN(3, "PB3"), /* B3_TIMER4_EOC */ + PINCTRL_PIN(4, "PB4"), /* B4_TIMER6_EXT_INCAP1 */ + PINCTRL_PIN(5, "PB5"), /* B5_TIMER6_EXT_INCAP2 */ + PINCTRL_PIN(6, "PB6"), /* B6_TIMER6_EXT_OUTCMP1 */ + PINCTRL_PIN(7, "PB7"), /* B7_TIMER6_EXT_OUTCMP2 */ + PINCTRL_PIN(8, "PB8"), /* B8_UART_2_TX */ + PINCTRL_PIN(9, "PB9"), /* B9_UART_2_RX */ + PINCTRL_PIN(10, "PB10"), /* B10_CAN_2_TX */ + PINCTRL_PIN(11, "PB11"), /* B11_CAN_2_RX */ + PINCTRL_PIN(12, "PB12"), /* B12_SPI_2_DO */ + PINCTRL_PIN(13, "PB13"), /* B13_SPI_2_DI */ + PINCTRL_PIN(14, "PB14"), /* B14_SPI_2_CK */ + PINCTRL_PIN(15, "PB15"), /* B15_SPI_2_CS0 */ + PINCTRL_PIN(16, "PB16"), /* B16_SPI_2_CS1 */ + PINCTRL_PIN(17, "PB17"), /* B17_SPI_3_DO */ + PINCTRL_PIN(18, "PB18"), /* B18_SPI_3_DI */ + PINCTRL_PIN(19, "PB19"), /* B19_SPI_3_CK */ + PINCTRL_PIN(20, "PB20"), /* B20_SPI_3_CS0 */ + PINCTRL_PIN(21, "PB21"), /* B21_SPI_3_CS1 */ + PINCTRL_PIN(22, "PB22"), /* B22_MCLK0 */ +}; + +/* Groups of functions on bank A */ +static const char * const gpioa_groups[] = { + "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", + "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PA16", "PA17", "PA18", + "PA19", "PA20", "PA21", "PA22", "PA23", "PA24", "PA25", "PA26", "PA27", + "PA28", +}; +static const char * const timer0_groups[] = { "PA0", "PA1" }; +static const char * const timer1_groups[] = { "PA2", "PA3" }; +static const char * const timer2_groups[] = { "PA4", "PA5" }; +static const char * const timer5_groups[] = { "PA6", "PA7", "PA8", "PA9" }; +static const char * const uart0_groups[] = { "PA10", "PA11" }; +static const char * const uart1_groups[] = { "PA12", "PA13" }; +static const char * const can0_groups[] = { "PA14", "PA15" }; +static const char * const can1_groups[] = { "PA16", "PA17" }; +static const char * const spi0_groups[] = { "PA18", "PA19", "PA20", "PA21", "PA22" }; +static const char * const spi1_groups[] = { "PA23", "PA24", "PA25", "PA26", "PA27" }; +static const char * const refclk0_groups[] = { "PA28" }; + +/* Groups of functions on bank B */ +static const char * const gpiob_groups[] = { + "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", + "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PB16", "PB17", "PB18", + "PB19", "PB20", "PB21", "PB22", +}; +static const char * const timer3_groups[] = { "PB0", "PB1" }; +static const char * const timer4_groups[] = { "PB2", "PB3" }; +static const char * const timer6_groups[] = { "PB4", "PB5", "PB6", "PB7" }; +static const char * const uart2_groups[] = { "PB8", "PB9" }; +static const char * const can2_groups[] = { "PB10", "PB11" }; +static const char * const spi2_groups[] = { "PB12", "PB13", "PB14", "PB15", "PB16" }; +static const char * const spi3_groups[] = { "PB17", "PB18", "PB19", "PB20", "PB21" }; +static const char * const mclk0_groups[] = { "PB22" }; + +#define FUNCTION(a, b) { .name = a, .groups = b, .ngroups = ARRAY_SIZE(b) } + +static const struct eq5p_function eq5p_functions_a[] = { + /* GPIO having a fixed index is depended upon, see GPIO_FUNC_SELECTOR. */ + FUNCTION("gpio", gpioa_groups), + + FUNCTION("timer0", timer0_groups), + FUNCTION("timer1", timer1_groups), + FUNCTION("timer2", timer2_groups), + FUNCTION("timer5", timer5_groups), + FUNCTION("uart0", uart0_groups), + FUNCTION("uart1", uart1_groups), + FUNCTION("can0", can0_groups), + FUNCTION("can1", can1_groups), + FUNCTION("spi0", spi0_groups), + FUNCTION("spi1", spi1_groups), + FUNCTION("refclk0", refclk0_groups), +}; + +static const struct eq5p_function eq5p_functions_b[] = { + /* GPIO having a fixed index is depended upon, see GPIO_FUNC_SELECTOR. */ + FUNCTION("gpio", gpiob_groups), + + FUNCTION("timer3", timer3_groups), + FUNCTION("timer4", timer4_groups), + FUNCTION("timer6", timer6_groups), + FUNCTION("uart2", uart2_groups), + FUNCTION("can2", can2_groups), + FUNCTION("spi2", spi2_groups), + FUNCTION("spi3", spi3_groups), + FUNCTION("mclk0", mclk0_groups), +}; + +struct eq5p_match { + unsigned int regs[EQ5P_REG_MAX]; + const struct pinctrl_pin_desc *pins; + unsigned int npins; + const struct eq5p_function *funcs; + unsigned int nfuncs; +}; + +static int eq5p_probe(struct platform_device *pdev) +{ + struct device *dev = &pdev->dev; + struct device_node *np = dev->of_node; + struct device_node *parent_np = of_get_parent(np); + const struct eq5p_match *match = of_device_get_match_data(dev); + struct pinctrl_dev *pctldev; + struct eq5p_pinctrl *pctrl; + int ret; + + pctrl = devm_kzalloc(dev, sizeof(*pctrl), GFP_KERNEL); + if (!pctrl) + return -ENOMEM; + + pctrl->olb = ERR_PTR(-ENODEV); + if (parent_np) + pctrl->olb = syscon_node_to_regmap(parent_np); + if (IS_ERR(pctrl->olb)) + pctrl->olb = syscon_regmap_lookup_by_phandle(np, "mobileye,olb"); + if (IS_ERR(pctrl->olb)) + return PTR_ERR(pctrl->olb); + + pctrl->regs = match->regs; + pctrl->funcs = match->funcs; + pctrl->nfuncs = match->nfuncs; + + pctrl->desc.name = dev_name(dev); + pctrl->desc.pins = match->pins; + pctrl->desc.npins = match->npins; + pctrl->desc.pctlops = &eq5p_pinctrl_ops; + pctrl->desc.pmxops = &eq5p_pinmux_ops; + pctrl->desc.confops = &eq5p_pinconf_ops; + pctrl->desc.owner = THIS_MODULE; + + ret = devm_pinctrl_register_and_init(dev, &pctrl->desc, pctrl, &pctldev); + if (ret) { + dev_err(dev, "Failed registering pinctrl device: %d\n", ret); + return ret; + } + + ret = pinctrl_enable(pctldev); + if (ret) { + dev_err(dev, "Failed enabling pinctrl device: %d\n", ret); + return ret; + } + + dev_info(dev, "probed\n"); + + return 0; +} + +static const struct eq5p_match eq5p_match_a = { + .regs = { + [EQ5P_PD] = 0x0C0, + [EQ5P_PU] = 0x0C4, + [EQ5P_DS_LOW] = 0x0D0, + [EQ5P_DS_HIGH] = 0x0D4, + [EQ5P_IOCR] = 0x0B0, + }, + .pins = eq5p_pins_a, + .npins = ARRAY_SIZE(eq5p_pins_a), + .funcs = eq5p_functions_a, + .nfuncs = ARRAY_SIZE(eq5p_functions_a), +}; + +static const struct eq5p_match eq5p_match_b = { + .regs = { + [EQ5P_PD] = 0x0C8, + [EQ5P_PU] = 0x0CC, + [EQ5P_DS_LOW] = 0x0D8, + [EQ5P_DS_HIGH] = 0x0DC, + [EQ5P_IOCR] = 0x0B4, + }, + .pins = eq5p_pins_b, + .npins = ARRAY_SIZE(eq5p_pins_b), + .funcs = eq5p_functions_b, + .nfuncs = ARRAY_SIZE(eq5p_functions_b), +}; + +static const struct of_device_id eq5p_match[] = { + { .compatible = "mobileye,eyeq5-a-pinctrl", .data = &eq5p_match_a }, + { .compatible = "mobileye,eyeq5-b-pinctrl", .data = &eq5p_match_b }, + {}, +}; + +static struct platform_driver eq5p_driver = { + .driver = { + .name = "eyeq5-pinctrl", + .of_match_table = eq5p_match, + }, + .probe = eq5p_probe, +}; + +static int __init eq5p_init(void) +{ + return platform_driver_register(&eq5p_driver); +} +core_initcall(eq5p_init); From patchwork Mon Dec 18 17:19:48 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Th=C3=A9o_Lebrun?= X-Patchwork-Id: 180596 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7300:24d3:b0:fb:cd0c:d3e with SMTP id r19csp1399767dyi; Mon, 18 Dec 2023 09:22:15 -0800 (PST) X-Google-Smtp-Source: AGHT+IF9cHNuvs9qmnd9eDz6pJB6YX5twaX5/Ol14qIKH4oUswWqYi/uBI/hXCZlQu3Fw/uNoXeS X-Received: by 2002:a05:620a:8906:b0:77f:32c6:c6b8 with SMTP id ql6-20020a05620a890600b0077f32c6c6b8mr26463594qkn.112.1702920134861; Mon, 18 Dec 2023 09:22:14 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1702920134; cv=none; d=google.com; s=arc-20160816; b=KLj7dBsms0kC5NshjcrDabNzZQYxhgchLPPeWoPqLB3F7jBSX3AJFOmusilOpYW+CE u1Y7wtFEXv9klGD6bLInxT/4u04UrG0zyapdfx6sQtLSHRpQWeftDjbOntyV3M3GpNZL 9JWW4ydx3qKwppzRmALRZ9zNT4XZqr80aBXviI2FlKEjr+77d41FYqIj90csOxJkG0w7 4PVQNZJ9gh4z7EQbKMEThpVQ/XOhqcz/aC+dQITPORUvy5a8MuJrP65sXcTERlrHxNhf WDqtJ8pALhhFBPqsER3g2kWxALgLtUGe9sVCC2B6duOnYHEpZ5TMZB/IJKBupY48zDCv ngfA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:list-unsubscribe:list-subscribe:list-id:precedence :subject:date:from:dkim-signature; bh=JT0DcVH4FYgIj1FT5JoVaRhNHTajfdKgAuI0ECPU2cM=; fh=s7S0IY9Tz563FDa18ivkgXeQy//bxhfhgMk8PVNuTl0=; b=c4LHb92/+k2nSlS3GQvG25pqCglBO9Jwqnp+9+vbmrMdYeyHrOhlcjMkTbC1FQoZnf mvgaBFZHQu9Df0Az3ROAGcKjVWKS8ZCGqtv5XR5IR7dABFhFsisJbWrDldwePA192VRV jsmqY0pQkXdvbDP6f6tsPd2TOIkLLAT7NDHDfongNFvwY6PYLHp2LQjVbZhRmfzo1KRD qsM8I3Bq7DSRkUEQu6rhdsINM5uQbUeTmYYxAyFE+raj2NhlSU77U43lLCqJlqJ+7XLb 9MUEvRCX5E/EpuXondl28oDeYDY91nuXAlfrg9CvC9+FuPeEytXaS5i8IYvypqMzAU2k Vf7w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@bootlin.com header.s=gm1 header.b=HSQZsWPF; spf=pass (google.com: domain of linux-kernel+bounces-4153-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-4153-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=bootlin.com Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org. [2604:1380:45d1:ec00::1]) by mx.google.com with ESMTPS id bp19-20020a05620a459300b0077dabd477f6si12656661qkb.761.2023.12.18.09.22.14 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 Dec 2023 09:22:14 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-4153-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) client-ip=2604:1380:45d1:ec00::1; Authentication-Results: mx.google.com; dkim=pass header.i=@bootlin.com header.s=gm1 header.b=HSQZsWPF; spf=pass (google.com: domain of linux-kernel+bounces-4153-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-4153-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=bootlin.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ny.mirrors.kernel.org (Postfix) with ESMTPS id 8F6CE1C23A67 for ; Mon, 18 Dec 2023 17:22:14 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 5CF7973490; Mon, 18 Dec 2023 17:20:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b="HSQZsWPF" X-Original-To: linux-kernel@vger.kernel.org Received: from relay7-d.mail.gandi.net (relay7-d.mail.gandi.net [217.70.183.200]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 231131E4BF; Mon, 18 Dec 2023 17:20:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=bootlin.com Received: by mail.gandi.net (Postfix) with ESMTPSA id 88F362000B; Mon, 18 Dec 2023 17:20:09 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1; t=1702920010; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=JT0DcVH4FYgIj1FT5JoVaRhNHTajfdKgAuI0ECPU2cM=; b=HSQZsWPFzVpwIv6jd6yGxe44rUiH+xlZ/XIsbvHO1ryhvpkcYPF/0NEN8YXkliGsXjiA9z XnmUcj6/FNOmna4hqvWEQV4myRcHiVuGLhqLQBYtTP+6ByMz4FSxgYrGLEi+AqgYdtVSzh H6ZC3afVmZTslOOmqDsttGmelzhQ9YPJZPSbirwtXNJo7JU13cVo2NbfH0GFZTsZlnBaU7 HMTX39qfmn2fI2+g28yP0X0LEiYm7FPEo2Soe++a8z0iqYsyVGsPUq2LS/ldrD2QEtQSyy nZlF3OxXFymfiCto+26iVKsYjhDQuF5wj+f94nQ8vOT06YmRRWBinGdsKbdt9g== From: =?utf-8?q?Th=C3=A9o_Lebrun?= Date: Mon, 18 Dec 2023 18:19:48 +0100 Subject: [PATCH 3/4] MIPS: mobileye: eyeq5: add pinctrl nodes & pinmux function nodes Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20231218-mbly-pinctrl-v1-3-2f7d366c2051@bootlin.com> References: <20231218-mbly-pinctrl-v1-0-2f7d366c2051@bootlin.com> In-Reply-To: <20231218-mbly-pinctrl-v1-0-2f7d366c2051@bootlin.com> To: Vladimir Kondratiev , Gregory CLEMENT , Linus Walleij , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Thomas Bogendoerfer Cc: linux-mips@vger.kernel.org, linux-gpio@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Thomas Petazzoni , Tawfik Bayouk , =?utf-8?q?Th=C3=A9o_Lebrun?= X-Mailer: b4 0.12.4 X-GND-Sasl: theo.lebrun@bootlin.com X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1785641183317723962 X-GMAIL-MSGID: 1785641183317723962 Pins on this platform have two functions: GPIO or something-else. We create function nodes for each something-else based on functions. Signed-off-by: Théo Lebrun --- arch/mips/boot/dts/mobileye/eyeq5-pins.dtsi | 128 ++++++++++++++++++++++++++++ arch/mips/boot/dts/mobileye/eyeq5.dtsi | 11 +++ 2 files changed, 139 insertions(+) diff --git a/arch/mips/boot/dts/mobileye/eyeq5-pins.dtsi b/arch/mips/boot/dts/mobileye/eyeq5-pins.dtsi new file mode 100644 index 000000000000..33df4a021863 --- /dev/null +++ b/arch/mips/boot/dts/mobileye/eyeq5-pins.dtsi @@ -0,0 +1,128 @@ +// SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) + +/* + * Default pin configuration for Mobileye EyeQ5 boards. We mostly create one + * pin configuration node per function. + */ + +&pinctrl0 { + timer0_pins: timer0-pins { + function = "timer0"; + pins = "PA0", "PA1"; + }; + timer1_pins: timer1-pins { + function = "timer1"; + pins = "PA2", "PA3"; + }; + timer2_pins: timer2-pins { + function = "timer2"; + pins = "PA4", "PA5"; + }; + pps0_pins: pps0-pin { + function = "timer2"; + pins = "PA4"; + }; + pps1_pins: pps1-pin { + function = "timer2"; + pins = "PA5"; + }; + timer5_ext_pins: timer5-ext-pins { + function = "timer5"; + pins = "PA6", "PA7", "PA8", "PA9"; + }; + timer5_ext_input_pins: timer5-ext-input-pins { + function = "timer5"; + pins = "PA6", "PA7"; + }; + timer5_ext_incap_a_pins: timer5-ext-incap-a-pin { + function = "timer5"; + pins = "PA6"; + }; + timer5_ext_incap_b_pins: timer5-ext-incap-b-pin { + function = "timer5"; + pins = "PA7"; + }; + can0_pins: can0-pins { + function = "can0"; + pins = "PA14", "PA15"; + }; + can1_pins: can1-pins { + function = "can1"; + pins = "PA16", "PA17"; + }; + uart0_pins: uart0-pins { + function = "uart0"; + pins = "PA10", "PA11"; + }; + uart1_pins: uart1-pins { + function = "uart1"; + pins = "PA12", "PA13"; + }; + spi0_pins: spi0-pins { + function = "spi0"; + pins = "PA18", "PA19", "PA20", "PA21", "PA22"; + }; + spi1_pins: spi1-pins { + function = "spi1"; + pins = "PA23", "PA24", "PA25", "PA26", "PA27"; + }; + spi1_slave_pins: spi1-slave-pins { + function = "spi1"; + pins = "PA24", "PA25", "PA26"; + }; + refclk0_pins: refclk0-pin { + function = "refclk0"; + pins = "PA28"; + }; +}; + +&pinctrl1 { + timer3_pins: timer3-pins { + function = "timer3"; + pins = "PB0", "PB1"; + }; + timer4_pins: timer4-pins { + function = "timer4"; + pins = "PB2", "PB3"; + }; + timer6_ext_pins: timer6-ext-pins { + function = "timer6"; + pins = "PB4", "PB5", "PB6", "PB7"; + }; + timer6_ext_input_pins: timer6-ext-input-pins { + function = "timer6"; + pins = "PB4", "PB5"; + }; + timer6_ext_incap_a_pins: timer6-ext-incap-a-pin { + function = "timer6"; + pins = "PB4"; + }; + timer6_ext_incap_b_pins: timer6-ext-incap-b-pin { + function = "timer6"; + pins = "PB5"; + }; + can2_pins: can2-pins { + function = "can2"; + pins = "PB10", "PB11"; + }; + uart2_pins: uart2-pins { + function = "uart2"; + pins = "PB8", "PB9"; + }; + spi2_pins: spi2-pins { + function = "spi2"; + pins = "PB12", "PB13", "PB14", "PB15", "PB16"; + }; + spi3_pins: spi3-pins { + function = "spi3"; + pins = "PB17", "PB18", "PB19", "PB20", "PB21"; + }; + spi3_slave_pins: spi3-slave-pins { + function = "spi3"; + pins = "PB18", "PB19", "PB20"; + }; + mclk0_pins: mclk0-pin { + function = "mclk0"; + pins = "PB22"; + }; +}; diff --git a/arch/mips/boot/dts/mobileye/eyeq5.dtsi b/arch/mips/boot/dts/mobileye/eyeq5.dtsi index 746148eb423f..def9e9645dac 100644 --- a/arch/mips/boot/dts/mobileye/eyeq5.dtsi +++ b/arch/mips/boot/dts/mobileye/eyeq5.dtsi @@ -85,6 +85,16 @@ reset: reset-controller { compatible = "mobileye,eyeq5-reset"; #reset-cells = <2>; }; + + pinctrl0: pinctrl0 { + compatible = "mobileye,eyeq5-a-pinctrl"; + #pinctrl-cells = <1>; + }; + + pinctrl1: pinctrl1 { + compatible = "mobileye,eyeq5-b-pinctrl"; + #pinctrl-cells = <1>; + }; }; gic: interrupt-controller@140000 { @@ -110,3 +120,4 @@ timer { }; }; +#include "eyeq5-pins.dtsi" From patchwork Mon Dec 18 17:19:49 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Th=C3=A9o_Lebrun?= X-Patchwork-Id: 180595 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7300:24d3:b0:fb:cd0c:d3e with SMTP id r19csp1399655dyi; Mon, 18 Dec 2023 09:22:08 -0800 (PST) X-Google-Smtp-Source: AGHT+IGEPqUFtCtDojkHaD+a/O71JNr8Wu1cF5CeOJA2HswvMYHsw/a2ybg2CbQKGiOUo45zYuO+ X-Received: by 2002:ac8:7d92:0:b0:425:4042:f446 with SMTP id c18-20020ac87d92000000b004254042f446mr24910042qtd.42.1702920128115; Mon, 18 Dec 2023 09:22:08 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1702920128; cv=none; d=google.com; s=arc-20160816; b=WWD4tsrK6kP+XhruMSbTcS7w3+/o1Ypywsz3xY7RFuAWAmTT6A5QGze7s6uBruuBYO ETAeFA9fJ0jPeT7isB6sD+3IAxZMsdOrj/+hZ2kHVBKwgM8WQ15bocH+W6k0GRekV7aX ddGLCZ9OtpYJRG0B3dLDxVYSqbYXI1c/hiTp1Hyu7kzFoXesxM5EbB0z6Ef2fWwHbwqA 2mB5W6rqcPDwX42hOVMaV4J2lQtMvHuAbTgUjiCip3SJKeAuMlmLKZ1sgnAOE8v0xjFO nawOTLNuHpweD8cs8U9xihMGh+cZ11/td8Lj0ywdFrk3MN8rzwcrzvdnkMlgmWVIrNuj X3qw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:list-unsubscribe:list-subscribe:list-id:precedence :subject:date:from:dkim-signature; bh=XFEhtm8TN595z9mluAbF5vfxS0ToImp1eb8mLdoD7tw=; fh=s7S0IY9Tz563FDa18ivkgXeQy//bxhfhgMk8PVNuTl0=; b=ilMp9E1PdSVonbcao/g94ArQoyRNhBA3dZibMOgRrfeNTLYUt7NfCgxVKnbDw2MYDt yvmyqL6tadVtIlIwFAzysu1xHwtxct9T3Oc8z8VeDiaAs43zCipnh/4veAOc9ocgmQNF EuE1aCDUvGACe8lKaQ6nZFrrwT76cwpFlOejfBuxm46OwMy104/usAZZ4+Qvw4fae0Ky nLVEkoNDDCxSc0OIrV1phZTWSlN1w7kCjyKK9H/k5sGjYnkbYH2S9Ze3LR3eA4FpGhgq Qrubm0DnquqoTr8D46RZaGmTIFZQ2o1+IqDN4l5naNMUV+dlaUejFEZLSTVl/5QtXeBw ilpw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@bootlin.com header.s=gm1 header.b=PowopAzL; spf=pass (google.com: domain of linux-kernel+bounces-4152-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-4152-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=bootlin.com Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org. [2604:1380:45d1:ec00::1]) by mx.google.com with ESMTPS id ay24-20020a05622a229800b00423a48ec8adsi25573132qtb.103.2023.12.18.09.22.08 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 Dec 2023 09:22:08 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-4152-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) client-ip=2604:1380:45d1:ec00::1; Authentication-Results: mx.google.com; dkim=pass header.i=@bootlin.com header.s=gm1 header.b=PowopAzL; spf=pass (google.com: domain of linux-kernel+bounces-4152-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-4152-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=bootlin.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ny.mirrors.kernel.org (Postfix) with ESMTPS id C5C681C233C1 for ; Mon, 18 Dec 2023 17:22:07 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id F07DA73485; Mon, 18 Dec 2023 17:20:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b="PowopAzL" X-Original-To: linux-kernel@vger.kernel.org Received: from relay7-d.mail.gandi.net (relay7-d.mail.gandi.net [217.70.183.200]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D3F425D735; Mon, 18 Dec 2023 17:20:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=bootlin.com Received: by mail.gandi.net (Postfix) with ESMTPSA id 6A21920009; Mon, 18 Dec 2023 17:20:10 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1; t=1702920011; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=XFEhtm8TN595z9mluAbF5vfxS0ToImp1eb8mLdoD7tw=; b=PowopAzLR0FRPktyG1gO4z2q21NU+ZKhkwVyaYJhguUo5Wv7RGKzbkDlXtxVkKB0W/mw5n QXJ+4/Bo2jKBeaL/Lkubclju/lOG2/2UNwIVd/o+6cyj2E7ZVdJq6+/y4KalhQNKsYDsEb dL590XJ8VpGbI6y4FZoVO3u8TB03CYZzw/2sqprNSXSfwRUURTX38IJz1xiRIFLbbE3uvR vayHWGZ2tlqHDBtJ4V4Qzzne+y95MYyJAFOz4isuoWOtu3K1jx5Lpp6CI3l0ROtWAIei02 P22Ykd92Zg+dmK2ViYna13ya4+KHoA/ThXucsAZfkFkCYQcirYYYQn5gi6PbQA== From: =?utf-8?q?Th=C3=A9o_Lebrun?= Date: Mon, 18 Dec 2023 18:19:49 +0100 Subject: [PATCH 4/4] MIPS: mobileye: eyeq5: add pinctrl properties to uarts Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20231218-mbly-pinctrl-v1-4-2f7d366c2051@bootlin.com> References: <20231218-mbly-pinctrl-v1-0-2f7d366c2051@bootlin.com> In-Reply-To: <20231218-mbly-pinctrl-v1-0-2f7d366c2051@bootlin.com> To: Vladimir Kondratiev , Gregory CLEMENT , Linus Walleij , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Thomas Bogendoerfer Cc: linux-mips@vger.kernel.org, linux-gpio@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Thomas Petazzoni , Tawfik Bayouk , =?utf-8?q?Th=C3=A9o_Lebrun?= X-Mailer: b4 0.12.4 X-GND-Sasl: theo.lebrun@bootlin.com X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1785641176203359196 X-GMAIL-MSGID: 1785641176203359196 UART nodes are present in the platform devicetree. Add pinctrl to them now that the pin controller is supported. Signed-off-by: Théo Lebrun --- arch/mips/boot/dts/mobileye/eyeq5.dtsi | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/arch/mips/boot/dts/mobileye/eyeq5.dtsi b/arch/mips/boot/dts/mobileye/eyeq5.dtsi index def9e9645dac..fb7397a3366c 100644 --- a/arch/mips/boot/dts/mobileye/eyeq5.dtsi +++ b/arch/mips/boot/dts/mobileye/eyeq5.dtsi @@ -52,6 +52,8 @@ uart0: serial@800000 { clocks = <&uart_clk>, <&occ_periph>; clock-names = "uartclk", "apb_pclk"; resets = <&reset 0 EQ5R_D0_UART0>; + pinctrl-names = "default"; + pinctrl-0 = <&uart0_pins>; }; uart1: serial@900000 { @@ -63,6 +65,8 @@ uart1: serial@900000 { clocks = <&uart_clk>, <&occ_periph>; clock-names = "uartclk", "apb_pclk"; resets = <&reset 0 EQ5R_D0_UART1>; + pinctrl-names = "default"; + pinctrl-0 = <&uart1_pins>; }; uart2: serial@a00000 { @@ -74,6 +78,8 @@ uart2: serial@a00000 { clocks = <&uart_clk>, <&occ_periph>; clock-names = "uartclk", "apb_pclk"; resets = <&reset 0 EQ5R_D0_UART2>; + pinctrl-names = "default"; + pinctrl-0 = <&uart2_pins>; }; olb: olb@e00000 {