From nobody Mon Jun 15 23:20:19 2026 Received: from BL2PR02CU003.outbound.protection.outlook.com (mail-eastusazon11021134.outbound.protection.outlook.com [52.101.52.134]) (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 CB62B3E63A4; Tue, 14 Apr 2026 13:48:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.52.134 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776174540; cv=fail; b=SHp7oBZm8Pc5L/bJ2QIqf8ZnHE5NsMg0E8KzprBnotK210faNJ9EPTfZuIoXkgqycDXBEHhJfD9TynyJjR7gz98X50Q9KBM9lbXRwYBCLb76cDVKUyhZsCJwxb95qyMKoy8Q0b8LT5witFwkq++xko+t53vn6o8Eiz5XO9QaRuk= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776174540; c=relaxed/simple; bh=H/7tphw1p5GZxdnGAdY7vnJ7mxwpU3ssqyp1QKW7D6E=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=aCVb/XG5pxBa0MBJuUC9UWo0UOHCHFIv0Fum0K6fH7Vg8cyIyH0vgj72wfMSdL6aBM3fQOGtqoI1sYW7+dNK+LtmMjoOCiSafj42eOvj3WtbOdgUixuDv+HTN4lP2JorfD5RyIJ/cXrTMJxRMx+0jf/Z31/uofdjTPgl2x/AKFk= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=axiado.com; spf=pass smtp.mailfrom=axiado.com; dkim=pass (2048-bit key) header.d=axiado.com header.i=@axiado.com header.b=pl6kX1PA; arc=fail smtp.client-ip=52.101.52.134 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=axiado.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=axiado.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=axiado.com header.i=@axiado.com header.b="pl6kX1PA" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ulk5FvUVX0YLYXtffStD2o4SSgJtuIaKm0mRTfRCIqgBp7A88iYVIRlncgtoYeoR3SZXRk3c1y1XlAsVRwniv+CuLSdRdO3hWLE/PQiGGHbY7BvY3qRT32MW+CDIVGaurjR35DZsZcrQLscvplrMjMwsp6y513mj5vllbpe40dEE6NJeXUGjgrjH7o45RJmN4MSm9f+Fm6u9GIvDUyB+6wKasxuqEa9UrC+mXcUgXPYrYu4I5VDR84gEpjzSulxCa+JHiOspeKzcFyol0WgdrrutKFY5S09xEFvfAMNiKZjSq1ktoXyqpaPvvNpIq8aFC8wbJvtIdLMA+lUcf3yFpg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=smRf72d9WumPdiT/XIWzf73qFT/7KntAUpwF2ddiLUs=; b=NHotaoZy7fyJibFW8KemMVgGXXf68EOnzJvTzMTqBvXm1SZU5L9wNfBkQeyaM121DZ5xZIjYClSg9DkDINokKOaOSIhrLRPJ9r/IcIREVoL7zFXtmBv92liQM5QDiTYA4YXMerda2N18xFuyvdbhtkKrRzbCbqLbBLCjG49lHGWdChbPAaW7eEuFB88EBImFs49RR1zgum7LXqZPae7tL72Ey5w0r3I+wx+Bl5yBhvwYyyMQW6N3jYBOCEG76lcpSL/qVD5xsu/p0Q9N6i3lVf2v6GTKlyVaTl55rXhxVGZSgwA/b5Q7UfkWjOJg9MeUdVdb4WDVmIDILDyjQuBytA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=fail (sender ip is 50.233.182.194) smtp.rcpttodomain=axiado.com smtp.mailfrom=axiado.com; dmarc=none action=none header.from=axiado.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=axiado.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=smRf72d9WumPdiT/XIWzf73qFT/7KntAUpwF2ddiLUs=; b=pl6kX1PAnFalfG0DeTS4c0gm/dQVfotVwllqpVUEIr8Y0R/XJLy+ohMvn6kYne0g9zgyrqp/bvu7UWsXIdFCHgE0TOs4/mcc+H/klLFI3+HimYfTdw+H3n2TR5EHj1RnR5TN/EUIz2H9mJK/eKO28z2cBA0XC8S5Uy45ewjdcYnaSIQNgO5ZUw9lUhYgVlDHieYvjkEi+3Wi1zSvxOeKloCL0Pxlgco7JzJtijEqSk3tfoZlV+vxrfykrh4To6t0WcjLHa741cM7NaXk/0c49REZ5R6mNTFJKfpsGNkZCjyBa4N4dOrTlMD08ZelZ8Pfok7kx/5Cyjwq/Xs4954GIA== Received: from SN7PR18CA0004.namprd18.prod.outlook.com (2603:10b6:806:f3::13) by SJ0PR18MB3898.namprd18.prod.outlook.com (2603:10b6:a03:2e8::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9769.48; Tue, 14 Apr 2026 13:48:53 +0000 Received: from SA2PEPF00003F66.namprd04.prod.outlook.com (2603:10b6:806:f3:cafe::f1) by SN7PR18CA0004.outlook.office365.com (2603:10b6:806:f3::13) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9769.49 via Frontend Transport; Tue, 14 Apr 2026 13:48:53 +0000 X-MS-Exchange-Authentication-Results: spf=fail (sender IP is 50.233.182.194) smtp.mailfrom=axiado.com; dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=axiado.com; Received-SPF: Fail (protection.outlook.com: domain of axiado.com does not designate 50.233.182.194 as permitted sender) receiver=protection.outlook.com; client-ip=50.233.182.194; helo=smtp.corp.axiado.com; Received: from smtp.corp.axiado.com (50.233.182.194) by SA2PEPF00003F66.mail.protection.outlook.com (10.167.248.41) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9769.17 via Frontend Transport; Tue, 14 Apr 2026 13:48:53 +0000 Received: from axz-uw1-build-vm02.corp.axiado.com (unknown [10.14.1.22]) by smtp.corp.axiado.com (Postfix) with ESMTP id 638474186B59; Tue, 14 Apr 2026 06:48:51 -0700 (PDT) From: Petar Stepanovic Date: Tue, 14 Apr 2026 06:48:32 -0700 Subject: [PATCH 1/3] dt-bindings: gpio: add Axiado SGPIO controller Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260414-axiado-ax3000-sgpio-controller-v1-1-b5c7e4c2e69b@axiado.com> References: <20260414-axiado-ax3000-sgpio-controller-v1-0-b5c7e4c2e69b@axiado.com> In-Reply-To: <20260414-axiado-ax3000-sgpio-controller-v1-0-b5c7e4c2e69b@axiado.com> To: Petar Stepanovic , Tzu-Hao Wei , Swark Yang , Prasad Bolisetty , Linus Walleij , Bartosz Golaszewski , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Harshit Shah , SriNavmani A Cc: linux-gpio@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1776174532; l=3398; i=pstepanovic@axiado.com; s=20250916; h=from:subject:message-id; bh=H/7tphw1p5GZxdnGAdY7vnJ7mxwpU3ssqyp1QKW7D6E=; b=NkDfTTRAq0DF26cvYyFWrZQdoPAnIjCcmzZLMkDSC/quUivjWhiYwxa/TRR1naPdR7ITrXISl C1kUWdw7dFbAYSfLEfQj8tpjt2/KQ1DICEtgPrPIHjJdQhEVvP7/Z36 X-Developer-Key: i=pstepanovic@axiado.com; a=ed25519; pk=70f1UJOGT9U11ZK6o+ENXtv0I5wBE3e+Y9YWODzRsdI= X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SA2PEPF00003F66:EE_|SJ0PR18MB3898:EE_ X-MS-Office365-Filtering-Correlation-Id: 18087240-ab17-4232-b63b-08de9a2c90e9 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|82310400026|30052699003|1800799024|36860700016|376014|921020|13003099007|18002099003|56012099003|22082099003; X-Microsoft-Antispam-Message-Info: EwkqRO38EN5spTKJO8qOVxx8HpBxSiO+lhPF/Am6C5KJc6sinQCMWGsu9FZ3w0m2pqpOWEXHr0qZkTSYd8fJJoF/JSUCRlZB6gZV6UjvdRVxo99ubQD9ub6wJsg607huGjl8TE5wiVxVkFfuRP1+Q4VSLj3CnSnCwosxBstk9UwwJz968OHhePtCC9pUUA1kfM8P7Kyv/fug83lu2zK9vI12/34zxOXOMgTLz8rGMh3quaClYc3SD5zpY42/xWUu38qiJ6tijM7IW9KNE8sslSOWKwkQPCRVth+rlN7o5icvrxsNvXnA6JOVKYKVnw1nSSB0RYxJlK1rkXqm2Dt57oqtm+UPKLf8fqsaZNdaRcPlBbRF/i+MOyKmh5zktVUU5ULgX9D8i68F7de0ugvxdOwiVeyZieS/acrINxtoL49SIZWIxRZfQ3ZP7w5QIm/XZaH8Qg4bjhgCq6vUUHFkh6pMArFYwbGEo3o5CHD22ATCT8AAu8GilSpdlQB+tdMaGkNTpHzTAIi0HDRdsAdD1VbCN6YaqfWxleYbWSiJ4EOVOic379PpM9KZGlJFeL3EEAwwVvfCE8DjMNkrcY1Y94uokTZfEfV1uXNUQvsMvMnGF6DrA0ZPLaW9XJCXS0dDZfpe0NP4SzhH5zY9LBPhsbolnR8tiMRH4O8VtRZrJ+XPfFZxPgSPAUYIt2O/XUX8eYz6BTQejp/TSh+mETZIQqxaUzvsryBdj3aKP9hT1kh37VDgPaHmsD4AKh399xSnTaTBU+noOokwq8VRN4MIQA== X-Forefront-Antispam-Report: CIP:50.233.182.194;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:smtp.corp.axiado.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(82310400026)(30052699003)(1800799024)(36860700016)(376014)(921020)(13003099007)(18002099003)(56012099003)(22082099003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: dm1s41BSMtgKWw7XOO5/hLg4wKRhszh631SBZKV3yI0YBGM6qr5vP3PuMXBkpP23hV+H1zN4K9y+8JjKQHnPqpxkICxonRMSdLrMjXVvf3T3oG1meFozoYSRREfGeRYraHBjQw4WN2kCpzXeaL7JfOoIaDFvp8oAP1mHHgTNX0r0D1tFK+eGNR124cnp8v5ql60y+U/81rRi086jw2TRa6+RUUvHVTVIiIJca/jp+f70KjtWrzOp/mTF/gXLKhoum5DfxK29BRnh0kD53IcIbTmYM1gEp6NnPwILk2izj0L0dlnqBzbFzg+L3wcWtF7eoytVp5biRlb9OC2K4acuN4LdJ4PXltZYMNROTiT6J8EEMtduGjp5riPmAd/Dw8TX7kRbFbTdiJ6FGF9OxhLhfubFgJ5bnAPPMZV4EqkbiE3pIF6Tc2I4yTfbET8i+XmB X-OriginatorOrg: axiado.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Apr 2026 13:48:53.2390 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 18087240-ab17-4232-b63b-08de9a2c90e9 X-MS-Exchange-CrossTenant-Id: ff2db17c-4338-408e-9036-2dee8e3e17d7 X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=ff2db17c-4338-408e-9036-2dee8e3e17d7;Ip=[50.233.182.194];Helo=[smtp.corp.axiado.com] X-MS-Exchange-CrossTenant-AuthSource: SA2PEPF00003F66.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR18MB3898 Add device tree binding for the Axiado SGPIO controller. The SGPIO controller provides a serialized interface for controlling multiple GPIO signals over a limited number of physical lines. It supports configurable data direction and interrupt handling. The binding describes the properties required to instantiate the controller and register it as a GPIO provider. Signed-off-by: Petar Stepanovic --- .../devicetree/bindings/gpio/axiado,sgpio.yaml | 98 ++++++++++++++++++= ++++ 1 file changed, 98 insertions(+) diff --git a/Documentation/devicetree/bindings/gpio/axiado,sgpio.yaml b/Doc= umentation/devicetree/bindings/gpio/axiado,sgpio.yaml new file mode 100644 index 000000000000..1533446d69f1 --- /dev/null +++ b/Documentation/devicetree/bindings/gpio/axiado,sgpio.yaml @@ -0,0 +1,98 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/gpio/axiado,sgpio.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Axiado SGPIO Controller + +maintainers: + - Petar Stepanovic + - SriNavmani A + - Prasad Bolisetty + +description: | + The SGPIO controller provides a serialized interface for controlling + multiple GPIO signals over a limited number of physical lines. + It supports configurable data direction and interrupt handling. + +properties: + compatible: + enum: + - axiado,sgpio + + reg: + maxItems: 1 + + gpio-controller: true + + '#gpio-cells': + const: 2 + + interrupts: + maxItems: 1 + + interrupt-controller: true + + '#interrupt-cells': + const: 2 + + design-variant: + description: SGPIO design variant size in bits (e.g. 128 or 512). + enum: [128, 512] + $ref: /schemas/types.yaml#/definitions/uint32 + + ngpios: + description: The number of gpios this controller has. + $ref: /schemas/types.yaml#/definitions/uint32 + + bus-frequency: + description: The SGPIO shift clock frequency in Hz. + $ref: /schemas/types.yaml#/definitions/uint32 + + apb-frequency: + description: The APB bus frequency in Hz. + $ref: /schemas/types.yaml#/definitions/uint32 + + dout-init: + description: Initial values for the dout registers. + $ref: /schemas/types.yaml#/definitions/uint32-array + minItems: 4 + maxItems: 4 + +required: + - compatible + - reg + - gpio-controller + - '#gpio-cells' + - interrupts + - interrupt-controller + - '#interrupt-cells' + - design-variant + - ngpios + - bus-frequency + - apb-frequency + - dout-init + +additionalProperties: false + +examples: + - | + #include + + sgpio@a000 { + compatible =3D "axiado,sgpio"; + reg =3D <0xa000 0x800>; + gpio-controller; + #gpio-cells =3D <2>; + + interrupt-controller; + #interrupt-cells =3D <2>; + interrupt-parent =3D <&gpio6>; + interrupts =3D <17 IRQ_TYPE_LEVEL_HIGH>; + design-variant =3D <128>; + ngpios =3D <128>; + bus-frequency =3D <1000000>; + apb-frequency =3D <100000000>; + dout-init =3D <0x00300000 0x00006371 0x00003800 0x00000000>; + }; --=20 2.34.1 From nobody Mon Jun 15 23:20:19 2026 Received: from CH4PR04CU002.outbound.protection.outlook.com (mail-northcentralusazon11023112.outbound.protection.outlook.com [40.107.201.112]) (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 C813B22D4E9; Tue, 14 Apr 2026 13:48:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.201.112 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776174538; cv=fail; b=hUGODAlPAKJF6czR+3hcUYxI/2YAx9Wb2ivRYrcfXBrLbfweHUJU+v48mwLELj1mZfTFVqNYgLRAdNAwWkmgiCL8eBEl58Tvjn2denTrKPOlJNBaf5euS/D1mXPNNcuIO54SrwcLFT4jyZBZm/IFmcGec5uu26q84qXwTUlq8fw= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776174538; c=relaxed/simple; bh=UctPww/5ghi9OTkK+5V0Zebvu20m6X4LR+bptf3MKpc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=PQkKbKF9g4MVTDSzd5Cr6osCifUnwd8N9FEipvlXTwGjuNypGpLggpW56voQbyAA6/PptuGbEXSLt4IWkpD5kEgV4jn1tNdBWSlvvF7mZLAf/wot4NOs1DQcldG3TbqSIPcFi4cvQO1M6+TkERPczZcnh4xCq3VvXwHFolK0//U= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=axiado.com; spf=pass smtp.mailfrom=axiado.com; dkim=pass (2048-bit key) header.d=axiado.com header.i=@axiado.com header.b=QuiPLdj2; arc=fail smtp.client-ip=40.107.201.112 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=axiado.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=axiado.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=axiado.com header.i=@axiado.com header.b="QuiPLdj2" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=k5+pp8jdyChKI+MkGc3kbNZZw7BDewo4RkzmHstwG7l2WtMy1LKQn42bRZFKB8K8xj7DPnddTJEb5caggjUWy9Y/SyDBixdQlFVzKA00jJBcVLSPiO/Uxe1DJZBzk1TjSy9cm4i+E+iCJkoiViS7tumXO5hXVbCJRvn/jOUotFMk6IMU7H3yD/1DdVgDfUFRUqrqqi5uZ4EDxELzRdyEwKsJgLRqsGLhjZjuGzw78gQohXSz4a8V4nEakXiPdNNFMfdN7+xQOQmT9kkRF6OOuvzlrubqP0Seerfx2gbM3cW+wyCuop9/3ps6BadcI7/2G+Uo6Tx1KHjbZ8mNPfvoCw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=Uc0Cc5EnREDYCPbblIwAoMTbAbdhsP2yAQGul9ifjbw=; b=QcCBrSKcjhDaF2yQdPQdRgKvVY+qT0/BSHE0LmMQscqmZc89QxvU3xmiH5GtNOUnjyZLlYdgrTZj+B1HV/Pxy/et433iVWj3IRbclQPBvI/okYFjljlcLROw43l4/FrEBTS+uRRqX2sBSlq5/pCl1Fd+En6bHViIaGzyd7IZ1FU6Nlp91P3p8Y6LV4Mylqd4/9G5Bz+kMibhT6/5HYw1S+KsL25be6w+tn2AHnd2424qp8rZ47YNJLdovl5xoERn3u9XQS1NBjHxuQNBMHSSbRYAfzWagJtyec+Ga5NJSTnwZfz4skAvGmN42j6s7FMBUENPgGAXHWfeOEjmhgEnUA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=fail (sender ip is 50.233.182.194) smtp.rcpttodomain=axiado.com smtp.mailfrom=axiado.com; dmarc=none action=none header.from=axiado.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=axiado.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Uc0Cc5EnREDYCPbblIwAoMTbAbdhsP2yAQGul9ifjbw=; b=QuiPLdj2CgHVsub3AUkRVUFQOL2LLsSIC174wuNdXScTMnJGz0u3rxajVJMDXmOT0zfVyO5R+byxvd0Uu+o1HJUL5xUUpP4dhB/9MYKPFF8IEkF1N6SSXyzPU0OzPN7TGEXfUda0DzK8x5gwprb1khxcP62mfrqFx5p5N8qLL7OPpJRwgxp1lBCVbWzqaLF9jxZ6k18C4hAxGYXiXI35tsgaa9s5Z5j7Zb0JnPre6QWTojoMSyYotML04CKpVFB7ULXegh2AtJEgcf/h6vdyjiN2zYIxGpxLUdd/KDjeJIuK2bPeDdRMpiL6JUI9mIqxc+JnFCWt0uwY2crXm9FmYg== Received: from SJ0PR13CA0136.namprd13.prod.outlook.com (2603:10b6:a03:2c6::21) by SA0PR18MB3662.namprd18.prod.outlook.com (2603:10b6:806:9e::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9769.48; Tue, 14 Apr 2026 13:48:53 +0000 Received: from SJ5PEPF000001D2.namprd05.prod.outlook.com (2603:10b6:a03:2c6:cafe::98) by SJ0PR13CA0136.outlook.office365.com (2603:10b6:a03:2c6::21) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9769.48 via Frontend Transport; Tue, 14 Apr 2026 13:48:53 +0000 X-MS-Exchange-Authentication-Results: spf=fail (sender IP is 50.233.182.194) smtp.mailfrom=axiado.com; dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=axiado.com; Received-SPF: Fail (protection.outlook.com: domain of axiado.com does not designate 50.233.182.194 as permitted sender) receiver=protection.outlook.com; client-ip=50.233.182.194; helo=smtp.corp.axiado.com; Received: from smtp.corp.axiado.com (50.233.182.194) by SJ5PEPF000001D2.mail.protection.outlook.com (10.167.242.54) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9769.17 via Frontend Transport; Tue, 14 Apr 2026 13:48:52 +0000 Received: from axz-uw1-build-vm02.corp.axiado.com (unknown [10.14.1.22]) by smtp.corp.axiado.com (Postfix) with ESMTP id 77A354186B5A; Tue, 14 Apr 2026 06:48:51 -0700 (PDT) From: Petar Stepanovic Date: Tue, 14 Apr 2026 06:48:33 -0700 Subject: [PATCH 2/3] gpio: axiado: add SGPIO controller support Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260414-axiado-ax3000-sgpio-controller-v1-2-b5c7e4c2e69b@axiado.com> References: <20260414-axiado-ax3000-sgpio-controller-v1-0-b5c7e4c2e69b@axiado.com> In-Reply-To: <20260414-axiado-ax3000-sgpio-controller-v1-0-b5c7e4c2e69b@axiado.com> To: Petar Stepanovic , Tzu-Hao Wei , Swark Yang , Prasad Bolisetty , Linus Walleij , Bartosz Golaszewski , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Harshit Shah , SriNavmani A Cc: linux-gpio@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1776174532; l=21770; i=pstepanovic@axiado.com; s=20250916; h=from:subject:message-id; bh=UctPww/5ghi9OTkK+5V0Zebvu20m6X4LR+bptf3MKpc=; b=GjvMHTV63fcT2rH2/EsmLkSGlEyt/ODexKYpu7hRXLrW50tpgoeQYEchPAHDq5isHu+Qj34Kd fHQGES1/oVzDhX1WTUD00Xi6dLFgHpCN0ZuI0vIIcIIvrSfWZRtipiG X-Developer-Key: i=pstepanovic@axiado.com; a=ed25519; pk=70f1UJOGT9U11ZK6o+ENXtv0I5wBE3e+Y9YWODzRsdI= X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ5PEPF000001D2:EE_|SA0PR18MB3662:EE_ X-MS-Office365-Filtering-Correlation-Id: a1e8612c-4e18-47a5-82a4-08de9a2c90ab X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|82310400026|36860700016|376014|921020|56012099003|18002099003|22082099003; X-Microsoft-Antispam-Message-Info: mohtETSJD3bExUr0oVWWQkJ0gTgtgdd8+/RiiTKhBLvRQVg9XzK0oTalzai7/o+SAujnj2/QmmEP/U9Spd94QpVvVjuGx2c54WZSVM/SjTY4KiAmYrmCHUvSUm/vRZ0BSLoQbniUBtGzwR7gDuAW8jrVeC5KbmRJ1AVM1SPfAkTfx+p8FM5b+/BFajqbtdTkwkAzizNYdW31JdgxOb/eVPPEYVAW5FPWYV07hrNnp3baTUTXM5riUi/EuHh39U2OGlz3ULGNM3p+HE3OtmkgO193nGH/zykUYcXa7q1BIIKLGROFo1KZIkP3yWRh4W+YZIIhEEUZX1Nfgw/Jo/JGPX3ZdDseKowxE3f3Bf7tlasEjXcINHFB+NEtv6IKDgfVhl1ToTuy3OdwSr1OUabAEv48M+jzLhqxUNqdCA8ze7BZr+ozGjdi/Ajy5FamUI0UTeLlppz0Oqwe61nceb96tUbIqobiR0AyUpb74Dd/qxv+sLzjFhJTcZgQSU7jsTaSn3J+3GODiI7T1VS5yjnlp5lJrGTvb80NQHZ/CFUrqFBOCY3IcxJgQ6EWoIzviLiJmtRE7BGfPxt/angdCEerFZ65vI6D7I4xI8Th/ES/if9CmxNvWLAk2aEHoKbeAOOPuXfahcLx6+s3m8JTXC1XqQIDMIX5+ByKhhFOZ6zfzpq74eGoQP7JOM8ERuDHVekbglpAaEZae+gsmLv37tj5gJzOd0p3tSFT0maIJk4lZg+IPiEKL79llvuGYIU3VrMevQF/DA3Rkw80ysuXkTB2nRTN0RY/p3QWEpUe/YnIfeoHkUidKFhKemNmbUn+0815 X-Forefront-Antispam-Report: CIP:50.233.182.194;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:smtp.corp.axiado.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(1800799024)(82310400026)(36860700016)(376014)(921020)(56012099003)(18002099003)(22082099003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: fn8lvT9wBxwH3Filw1jh1vPasAfDmpNoPYXKFkKZPqhaj9FvScHZHUw0rjtMcqx3eR+ioFH2vuQELNakzFuHPhMgaybs61W0ypQL2fj1CgPMbfIwKDM8HUcUIcsvpbqYuRh48vnHdw9MTM2K/J6mqv6R+afFMBx/km6vC0TtHedd7cwqm5H/jiv0BC460EoPYf1z0nApUbVn3zV/6Swkj7m8DcO5bAAW+6OdfR4T18HjC2QcUQ1tXXG7avmFR644kbJLus+jYGr6dRQRlQ7rHotMC8vhuXOgXWfnXMxOdy7ASpSUZbV4nwrsH8nu8I28QqpvAuisvzKwUZ87OSVEh5Ar9/JH4/K5MXsORv/yV2LESf8nrZC41ukrD3drJeodm+shgs9/xuNiyM359D8cGNMxAhr9C3BF4kZmxi8dmr47xVQIB1M3IFTqyBb+jksn X-OriginatorOrg: axiado.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Apr 2026 13:48:52.9104 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: a1e8612c-4e18-47a5-82a4-08de9a2c90ab X-MS-Exchange-CrossTenant-Id: ff2db17c-4338-408e-9036-2dee8e3e17d7 X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=ff2db17c-4338-408e-9036-2dee8e3e17d7;Ip=[50.233.182.194];Helo=[smtp.corp.axiado.com] X-MS-Exchange-CrossTenant-AuthSource: SJ5PEPF000001D2.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA0PR18MB3662 Add support for the Axiado SGPIO controller. The controller provides a serialized interface for GPIOs with configurable direction and interrupt support. The driver registers the controller as a gpio_chip and uses regmap for register access. Signed-off-by: Petar Stepanovic --- drivers/gpio/Kconfig | 18 + drivers/gpio/Makefile | 1 + drivers/gpio/gpio-axiado-sgpio.c | 780 +++++++++++++++++++++++++++++++++++= ++++ 3 files changed, 799 insertions(+) diff --git a/drivers/gpio/Kconfig b/drivers/gpio/Kconfig index bd185482a7fd..42c56d157092 100644 --- a/drivers/gpio/Kconfig +++ b/drivers/gpio/Kconfig @@ -198,6 +198,24 @@ config GPIO_ATH79 Select this option to enable GPIO driver for Atheros AR71XX/AR724X/AR913X SoC devices. =20 +config GPIO_AXIADO_SGPIO + bool "Axiado SGPIO support" + depends on OF_GPIO + depends on ARCH_AXIADO || COMPILE_TEST + select GPIO_GENERIC + select GPIOLIB_IRQCHIP + select REGMAP + help + Enable support for the Axiado Serial GPIO (SGPIO) controller. + + The SGPIO controller provides a serialized interface for + controlling multiple GPIO signals over a limited number of + physical lines. It supports configurable data direction and + interrupt handling. + + This driver integrates with the Linux GPIO subsystem and + exposes the controller as a standard GPIO provider. + config GPIO_RASPBERRYPI_EXP tristate "Raspberry Pi 3 GPIO Expander" default RASPBERRYPI_FIRMWARE diff --git a/drivers/gpio/Makefile b/drivers/gpio/Makefile index 2421a8fd3733..909a97551807 100644 --- a/drivers/gpio/Makefile +++ b/drivers/gpio/Makefile @@ -42,6 +42,7 @@ obj-$(CONFIG_GPIO_ARIZONA) +=3D gpio-arizona.o obj-$(CONFIG_GPIO_ASPEED) +=3D gpio-aspeed.o obj-$(CONFIG_GPIO_ASPEED_SGPIO) +=3D gpio-aspeed-sgpio.o obj-$(CONFIG_GPIO_ATH79) +=3D gpio-ath79.o +obj-$(CONFIG_GPIO_AXIADO_SGPIO) +=3D gpio-axiado-sgpio.o obj-$(CONFIG_GPIO_BCM_KONA) +=3D gpio-bcm-kona.o obj-$(CONFIG_GPIO_BCM_XGS_IPROC) +=3D gpio-xgs-iproc.o obj-$(CONFIG_GPIO_BD71815) +=3D gpio-bd71815.o diff --git a/drivers/gpio/gpio-axiado-sgpio.c b/drivers/gpio/gpio-axiado-sg= pio.c new file mode 100644 index 000000000000..8cd349ec6f53 --- /dev/null +++ b/drivers/gpio/gpio-axiado-sgpio.c @@ -0,0 +1,780 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* + * Copyright (c) 2022-2026 Axiado Corporation + */ +#include +#include +#include +#include + +#include +#include +#include + +#include +#include +#include + +#include + +#include +#include +#include + +#include + +struct sgpio_reg_offsets { + u32 mux_0; + u32 preset_0; + u32 count_0; + u32 pos_0; + + u32 mux_1; + u32 ld; + u32 ld_ss; + + u32 preset_1; + u32 count_1; + u32 pos_1; + + u32 mux_2; + u32 dout; + u32 dout_ss; + + u32 preset_2; + u32 count_2; + u32 pos_2; + + u32 mux_3; + u32 preset_3; + u32 count_3; + u32 pos_3; + + u32 mux_4; + u32 oe; + u32 oe_ss; + + u32 preset_4; + u32 count_4; + u32 pos_4; + + u32 mask; + u32 ctrl_en; + u32 ctrl_en_pos; + + u32 din_ss; + u32 status; +}; + +static const struct sgpio_reg_offsets sgpio_offsets_512 =3D { + .mux_0 =3D 0x000, + .preset_0 =3D 0x1dc, + .count_0 =3D 0x1f0, + .pos_0 =3D 0x204, + + .mux_1 =3D 0x004, + .ld =3D 0x014, + .ld_ss =3D 0x0d8, + + .preset_1 =3D 0x1e0, + .count_1 =3D 0x1f4, + .pos_1 =3D 0x208, + + .mux_2 =3D 0x008, + .dout =3D 0x054, + .dout_ss =3D 0x158, + + .preset_2 =3D 0x1e4, + .count_2 =3D 0x1f8, + .pos_2 =3D 0x20c, + + .mux_3 =3D 0x00c, + .preset_3 =3D 0x1e8, + .count_3 =3D 0x1fc, + .pos_3 =3D 0x210, + + .mux_4 =3D 0x010, + .oe =3D 0x0d4, + .oe_ss =3D 0x1d8, + + .preset_4 =3D 0x1ec, + .count_4 =3D 0x200, + .pos_4 =3D 0x214, + + .mask =3D 0x224, + .ctrl_en =3D 0x218, + .ctrl_en_pos =3D 0x21c, + + .din_ss =3D 0x198, + .status =3D 0x228, +}; + +static const struct sgpio_reg_offsets sgpio_offsets_128 =3D { + .mux_0 =3D 0x000, + .preset_0 =3D 0x08c, + .count_0 =3D 0x0a0, + .pos_0 =3D 0x0b4, + + .mux_1 =3D 0x004, + .ld =3D 0x014, + .ld_ss =3D 0x048, + + .preset_1 =3D 0x090, + .count_1 =3D 0x0a4, + .pos_1 =3D 0x0b8, + + .mux_2 =3D 0x008, + .dout =3D 0x024, + .dout_ss =3D 0x068, + + .preset_2 =3D 0x094, + .count_2 =3D 0x0a8, + .pos_2 =3D 0x0bc, + + .mux_3 =3D 0x00c, + .preset_3 =3D 0x098, + .count_3 =3D 0x0ac, + .pos_3 =3D 0x0c0, + + .mux_4 =3D 0x010, + .oe =3D 0x044, + .oe_ss =3D 0x088, + + .preset_4 =3D 0x09c, + .count_4 =3D 0x0b0, + .pos_4 =3D 0x0c4, + + .mask =3D 0x0d4, + .ctrl_en =3D 0x0c8, + .ctrl_en_pos =3D 0x0cc, + + .din_ss =3D 0x078, + .status =3D 0x0d8, +}; + +#define MAX_SGPIO_PINS 512 +#define MAX_OFFSET_REG 16 +#define MAX_SLICE_COUNT 5 + +struct ax3000_slice_info { + u32 out_mux; + u32 sgpio_mux; + u32 slice_mux; + u32 reg[MAX_OFFSET_REG]; + u32 reg_ss[MAX_OFFSET_REG]; + u32 preset; + u32 count; + u32 pos; +}; + +struct ax3000_sgpio { + u32 preset_value; + u32 count_value; + u32 pos_reg; + struct ax3000_slice_info + slices[MAX_SLICE_COUNT]; /* 0=3Dclk,1=3Dload,2=3Dout,3=3Din,4=3Doe */ + spinlock_t lock; + int ngpios; + int max_sgpio_pins; + int max_offset_regs; + struct gpio_chip chip; + u32 irq_unmasked[MAX_SGPIO_PINS]; + int parent_irq; + struct regmap *regmap; + u32 regmap_base_offset; + struct sgpio_reg_offsets *regs; +}; + +static int sgpio_set_irq_type(struct irq_data *d, unsigned int type); +static void sgpio_mask_irq(struct irq_data *d); +static void sgpio_unmask_irq(struct irq_data *d); +static void sgpio_irq_shutdown(struct irq_data *d); + +static const struct irq_chip axiado_sgpio_irqchip =3D { + .name =3D "axiado-sgpio", + .irq_mask =3D sgpio_mask_irq, + .irq_unmask =3D sgpio_unmask_irq, + .irq_set_type =3D sgpio_set_irq_type, + .irq_shutdown =3D sgpio_irq_shutdown, + .flags =3D IRQCHIP_IMMUTABLE | IRQCHIP_MASK_ON_SUSPEND, +}; + +static void ax3000_sgpio_set(struct gpio_chip *chip, unsigned int offset, + int value) +{ + struct ax3000_sgpio *sgpio =3D gpiochip_get_data(chip); + unsigned long flags; + u32 bank =3D (offset / 2) / 32; + u32 position =3D (offset / 2) % 32; + + spin_lock_irqsave(&sgpio->lock, flags); + if (value) + sgpio->slices[2].reg_ss[bank] |=3D BIT(position); + else + sgpio->slices[2].reg_ss[bank] &=3D ~BIT(position); + + spin_unlock_irqrestore(&sgpio->lock, flags); + regmap_write(sgpio->regmap, + sgpio->regmap_base_offset + sgpio->regs->dout_ss + + (bank * 4), + sgpio->slices[2].reg_ss[bank]); +} + +static int ax3000_sgpio_get(struct gpio_chip *chip, unsigned int offset) +{ + struct ax3000_sgpio *sgpio =3D gpiochip_get_data(chip); + u32 bank =3D (offset / 2) / 32; + u32 position =3D (offset / 2) % 32; + + if (offset % 2 =3D=3D 0) + return !!(sgpio->slices[3].reg_ss[bank] & BIT(position)); + else + return !!(sgpio->slices[2].reg_ss[bank] & BIT(position)); +} + +static int ax3000_sgpio_dir_in(struct gpio_chip *chip, unsigned int offset) +{ + if (!(offset % 2)) + return 0; + else + return -EINVAL; +} + +static int ax3000_sgpio_dir_out(struct gpio_chip *chip, unsigned int offse= t, + int value) +{ + if (offset % 2) { + if (chip->set) + chip->set(chip, offset, value); + return 0; + } else { + return -EINVAL; + } +} + +static irqreturn_t sgpio_irq_handler(int irq, void *arg) +{ + struct ax3000_sgpio *sgpio =3D (struct ax3000_sgpio *)arg; + unsigned long flags; + u32 status, new_value; + u32 changed_value; + int i, bit, reg_ptr; + + /* Read-on-clear (ACK) parent cause */ + regmap_read(sgpio->regmap, + sgpio->regmap_base_offset + sgpio->regs->status, &status); + status >>=3D 16; + + bool has_shifted_layout =3D (sgpio->max_offset_regs =3D=3D MAX_OFFSET_REG= ); + + reg_ptr =3D has_shifted_layout ? 16 - DIV_ROUND_UP(sgpio->ngpios, 32) : 0; + + for (i =3D 0; i < DIV_ROUND_UP(sgpio->ngpios, 32); i++, reg_ptr++) { + if (status & BIT(reg_ptr)) { + regmap_read(sgpio->regmap, + sgpio->regmap_base_offset + + sgpio->regs->din_ss + (reg_ptr * 4), + &new_value); + spin_lock_irqsave(&sgpio->lock, flags); + changed_value =3D sgpio->slices[3].reg_ss[i] ^ new_value; + sgpio->slices[3].reg_ss[i] =3D new_value; + spin_unlock_irqrestore(&sgpio->lock, flags); + + while (changed_value) { + bit =3D __ffs(changed_value); + changed_value &=3D ~BIT(bit); + + irq_hw_number_t hwirq =3D i * 32 + bit; + + if (sgpio->irq_unmasked[hwirq]) { + unsigned int child_irq; + + child_irq =3D irq_find_mapping(sgpio->chip.irq.domain, + hwirq); + + if (child_irq) + handle_nested_irq(child_irq); + } + } + } + } + + return IRQ_HANDLED; +} + +static void sgpio_hw_init(struct ax3000_sgpio *sgpio) +{ + u32 bank; + u32 position; + int i =3D 0; + bool has_shifted_layout =3D (sgpio->max_offset_regs =3D=3D MAX_OFFSET_REG= ); + + /* slice A0, Clock Pin - 0 */ + regmap_write(sgpio->regmap, + sgpio->regmap_base_offset + sgpio->regs->mux_0, 0x306); + regmap_write(sgpio->regmap, + sgpio->regmap_base_offset + sgpio->regs->preset_0, + sgpio->preset_value); + regmap_write(sgpio->regmap, + sgpio->regmap_base_offset + sgpio->regs->count_0, + sgpio->count_value); + regmap_write(sgpio->regmap, + sgpio->regmap_base_offset + sgpio->regs->pos_0, 0x1f001f); + + /* Slice B1, Data Load Pin - 1 */ + bank =3D (sgpio->ngpios - 1) / 32; + position =3D (sgpio->ngpios - 1) % 32; + + regmap_write(sgpio->regmap, + sgpio->regmap_base_offset + sgpio->regs->mux_1, + has_shifted_layout ? 0x30c : 0x304); + + for (i =3D 0; i < bank; i++) { + regmap_write(sgpio->regmap, + sgpio->regmap_base_offset + sgpio->regs->ld + + (i * 4), + 0xffffffff); + regmap_write(sgpio->regmap, + sgpio->regmap_base_offset + sgpio->regs->ld_ss + + (i * 4), + 0xffffffff); + } + + if (position) { + u32 val; + + val =3D sgpio->slices[1].reg_ss[i]; + val |=3D GENMASK(position - 1, 0); + + regmap_write(sgpio->regmap, + sgpio->regmap_base_offset + sgpio->regs->ld + + (i * 4), + val); + regmap_write(sgpio->regmap, + sgpio->regmap_base_offset + sgpio->regs->ld_ss + + (i * 4), + val); + } + + regmap_write(sgpio->regmap, + sgpio->regmap_base_offset + sgpio->regs->preset_1, + sgpio->preset_value); + regmap_write(sgpio->regmap, + sgpio->regmap_base_offset + sgpio->regs->count_1, + sgpio->count_value); + regmap_write(sgpio->regmap, + sgpio->regmap_base_offset + sgpio->regs->pos_1, + sgpio->pos_reg); + + /* Slice C2, Data Out Pin - 2 */ + bank =3D sgpio->ngpios / 32; + position =3D sgpio->ngpios % 32; + + regmap_write(sgpio->regmap, + sgpio->regmap_base_offset + sgpio->regs->mux_2, + has_shifted_layout ? 0x30c : 0x304); + + for (i =3D 0; i < bank; i++) { + regmap_write(sgpio->regmap, + sgpio->regmap_base_offset + sgpio->regs->dout + + (i * 4), + sgpio->slices[2].reg_ss[i]); + regmap_write(sgpio->regmap, + sgpio->regmap_base_offset + sgpio->regs->dout_ss + + (i * 4), + sgpio->slices[2].reg_ss[i]); + } + + if (position) { + regmap_write(sgpio->regmap, + sgpio->regmap_base_offset + sgpio->regs->dout + + (i * 4), + sgpio->slices[2].reg_ss[i]); + regmap_write(sgpio->regmap, + sgpio->regmap_base_offset + sgpio->regs->dout_ss + + (i * 4), + sgpio->slices[2].reg_ss[i]); + } + + regmap_write(sgpio->regmap, + sgpio->regmap_base_offset + sgpio->regs->preset_2, + sgpio->preset_value); + regmap_write(sgpio->regmap, + sgpio->regmap_base_offset + sgpio->regs->count_2, + sgpio->count_value); + regmap_write(sgpio->regmap, + sgpio->regmap_base_offset + sgpio->regs->pos_2, + sgpio->pos_reg); + + /* Slice D3, Data In Pin - 3 */ + regmap_write(sgpio->regmap, + sgpio->regmap_base_offset + sgpio->regs->mux_3, 0x14C); + regmap_write(sgpio->regmap, + sgpio->regmap_base_offset + sgpio->regs->preset_3, + sgpio->preset_value); + regmap_write(sgpio->regmap, + sgpio->regmap_base_offset + sgpio->regs->count_3, + sgpio->count_value); + regmap_write(sgpio->regmap, + sgpio->regmap_base_offset + sgpio->regs->pos_3, + sgpio->pos_reg); + + /* Slice E4, Output Enable for respective pins */ + regmap_write(sgpio->regmap, + sgpio->regmap_base_offset + sgpio->regs->mux_4, + has_shifted_layout ? 0x10c : 0x104); + regmap_write(sgpio->regmap, sgpio->regmap_base_offset + sgpio->regs->oe, + 0xffffffff); + regmap_write(sgpio->regmap, + sgpio->regmap_base_offset + sgpio->regs->oe_ss, + 0xffffffff); + regmap_write(sgpio->regmap, + sgpio->regmap_base_offset + sgpio->regs->preset_4, + sgpio->preset_value); + regmap_write(sgpio->regmap, + sgpio->regmap_base_offset + sgpio->regs->count_4, + sgpio->count_value); + regmap_write(sgpio->regmap, + sgpio->regmap_base_offset + sgpio->regs->pos_4, 0x1f001f); + + regmap_write(sgpio->regmap, + sgpio->regmap_base_offset + sgpio->regs->mask, 0xdfff); + + regmap_write(sgpio->regmap, + sgpio->regmap_base_offset + sgpio->regs->ctrl_en, 0xffff); + regmap_write(sgpio->regmap, + sgpio->regmap_base_offset + sgpio->regs->ctrl_en_pos, + 0xffff); +} + +static int sgpio_set_irq_type(struct irq_data *d, unsigned int type) +{ + switch (type) { + case IRQ_TYPE_EDGE_BOTH: + case IRQ_TYPE_EDGE_RISING: + case IRQ_TYPE_EDGE_FALLING: + irq_set_handler_locked(d, handle_edge_irq); + break; + default: + return -EINVAL; + } + + return 0; +} + +static void sgpio_mask_irq(struct irq_data *d) +{ + struct gpio_chip *chip; + struct ax3000_sgpio *sgpio; + u32 irq_num; + + chip =3D irq_data_get_irq_chip_data(d); + if (!chip) { + pr_err("Unable to get gpio_chip for IRQ\n"); + return; + } + + sgpio =3D gpiochip_get_data(chip); + if (!sgpio) { + pr_err("Unable to get chip data\n"); + return; + } + + irq_num =3D irqd_to_hwirq(d); + sgpio->irq_unmasked[irq_num / 2] =3D 0; +} + +static void sgpio_unmask_irq(struct irq_data *d) +{ + struct gpio_chip *chip; + struct ax3000_sgpio *sgpio; + u32 irq_num; + + chip =3D irq_data_get_irq_chip_data(d); + if (!chip) { + pr_err("Unable to get gpio_chip for IRQ\n"); + return; + } + + sgpio =3D gpiochip_get_data(chip); + if (!sgpio) { + pr_err("Unable to get chip data\n"); + return; + } + + irq_num =3D irqd_to_hwirq(d); + sgpio->irq_unmasked[irq_num / 2] =3D 1; +} + +static void sgpio_irq_shutdown(struct irq_data *d) +{ + sgpio_mask_irq(d); +} + +static int sgpio_probe(struct platform_device *pdev) +{ + int rc; + int irq; + int i; + const __be32 *prop; + struct gpio_irq_chip *girq; + struct ax3000_sgpio *sgpio; + u32 variant; + u32 dout_value; + u32 bus_frequency; + u32 apb_frequency; + int dout_reverse; + + void __iomem *base; + + const struct regmap_config regmap_config =3D { + .reg_bits =3D 32, + .val_bits =3D 32, + .reg_stride =3D 4, + }; + + sgpio =3D devm_kzalloc(&pdev->dev, sizeof(*sgpio), GFP_KERNEL); + if (!sgpio) + return -ENOMEM; + + spin_lock_init(&sgpio->lock); + + sgpio->regmap =3D dev_get_regmap(pdev->dev.parent, NULL); + + if (sgpio->regmap) { + rc =3D of_property_read_u32(pdev->dev.of_node, "reg", + &sgpio->regmap_base_offset); + if (rc) { + dev_err(&pdev->dev, "Failed to read reg property: %d\n", + rc); + return rc; + } + dev_info(&pdev->dev, "Using regmap with base offset: 0x%x\n", + sgpio->regmap_base_offset); + } else { + base =3D devm_platform_ioremap_resource(pdev, 0); + if (IS_ERR(base)) + return PTR_ERR(base); + + sgpio->regmap =3D + devm_regmap_init_mmio(&pdev->dev, base, ®map_config); + + if (IS_ERR(sgpio->regmap)) + return PTR_ERR(sgpio->regmap); + + sgpio->regmap_base_offset =3D 0; + + dev_info(&pdev->dev, "Using MMIO regmap\n"); + } + + rc =3D device_property_read_u32(&pdev->dev, "ngpios", &sgpio->ngpios); + if (rc < 0) { + dev_err(&pdev->dev, "Could not read ngpios property\n"); + return -EINVAL; + } + + if (device_property_read_u32(&pdev->dev, "design-variant", &variant)) { + dev_err(&pdev->dev, "design-variant not specified in DT\n"); + return -EINVAL; + } + + if (variant =3D=3D 128) { + sgpio->regs =3D &sgpio_offsets_128; + sgpio->max_sgpio_pins =3D 128; + sgpio->max_offset_regs =3D 4; + } else if (variant =3D=3D 512) { + sgpio->regs =3D &sgpio_offsets_512; + sgpio->max_sgpio_pins =3D 512; + sgpio->max_offset_regs =3D 16; + } else { + return -EINVAL; + } + + if (sgpio->ngpios > sgpio->max_sgpio_pins) { + dev_err(&pdev->dev, "ngpio is greater than 512 pins\n"); + return -EINVAL; + } + + rc =3D device_property_read_u32(&pdev->dev, "bus-frequency", + &bus_frequency); + if (rc < 0) { + dev_err(&pdev->dev, "Could not read bus-frequency property\n"); + return -EINVAL; + } + + rc =3D device_property_read_u32(&pdev->dev, "apb-frequency", + &apb_frequency); + if (rc < 0) { + dev_err(&pdev->dev, "Could not read apb-frequency property\n"); + return -EINVAL; + } + + sgpio->preset_value =3D (apb_frequency / bus_frequency) - 1; + sgpio->count_value =3D sgpio->preset_value; + + u32 pos; + + pos =3D sgpio->ngpios - 1; + sgpio->pos_reg =3D (pos << 16) | pos; + + prop =3D of_get_property(pdev->dev.of_node, "dout-init", NULL); + if (!prop) { + dev_err(&pdev->dev, "Failed to get dout-init\n"); + return -EINVAL; + } + + for (i =3D 0; i < sgpio->max_offset_regs; i++) { + sgpio->slices[2].reg_ss[i] =3D 0; + dout_value =3D be32_to_cpu(prop[i]); + + for (dout_reverse =3D 0; dout_reverse < 32; ++dout_reverse) { + sgpio->slices[2].reg_ss[i] <<=3D 1; + sgpio->slices[2].reg_ss[i] |=3D (dout_value & 1); + dout_value >>=3D 1; + } + } + + sgpio_hw_init(sgpio); + + irq =3D platform_get_irq(pdev, 0); + + if (irq < 0) { + dev_err(&pdev->dev, "Failed to get parent IRQ: %d\n", irq); + return irq; + } + /* Store parent IRQ for cleanup */ + sgpio->parent_irq =3D irq; + + rc =3D devm_request_threaded_irq(&pdev->dev, irq, NULL, sgpio_irq_handler, + IRQF_ONESHOT, "axiado-sgpio", sgpio); + + if (rc < 0) { + dev_err(&pdev->dev, "Failed to request threaded IRQ %d: %d\n", + irq, rc); + return rc; + } + + sgpio->chip.parent =3D &pdev->dev; + sgpio->chip.ngpio =3D sgpio->ngpios * 2; + sgpio->chip.owner =3D THIS_MODULE; + sgpio->chip.direction_input =3D ax3000_sgpio_dir_in; + sgpio->chip.direction_output =3D ax3000_sgpio_dir_out; + sgpio->chip.get =3D ax3000_sgpio_get; + sgpio->chip.set =3D ax3000_sgpio_set; + sgpio->chip.label =3D dev_name(&pdev->dev); + sgpio->chip.base =3D -1; + + girq =3D &sgpio->chip.irq; + + girq->chip =3D &axiado_sgpio_irqchip; + girq->handler =3D handle_edge_irq; + girq->default_type =3D IRQ_TYPE_NONE; + girq->num_parents =3D 1; + girq->parents =3D + devm_kcalloc(&pdev->dev, 1, sizeof(*girq->parents), GFP_KERNEL); + if (!girq->parents) { + dev_err(&pdev->dev, "Failed to allocate parents array\n"); + return -ENOMEM; + } + girq->parents[0] =3D irq; + + rc =3D devm_gpiochip_add_data(&pdev->dev, &sgpio->chip, sgpio); + if (rc < 0) { + dev_err(&pdev->dev, "Could not register gpiochip, %d\n", rc); + return rc; + } + + /* Store driver data for remove() */ + platform_set_drvdata(pdev, sgpio); + dev_info(&pdev->dev, "SGPIO registered with %d GPIOs\n", + sgpio->chip.ngpio); + + return 0; +} + +static int sgpio_remove(struct platform_device *pdev) +{ + struct ax3000_sgpio *sgpio =3D platform_get_drvdata(pdev); + int i; + + if (!sgpio) + return 0; + + /* Disable interrupts in hardware */ + if (sgpio->regs) { + regmap_write(sgpio->regmap, + sgpio->regmap_base_offset + sgpio->regs->mask, + 0x0); + regmap_write(sgpio->regmap, + sgpio->regmap_base_offset + sgpio->regs->ctrl_en, + 0x0); + } + + /* Disable and synchronize parent IRQ to avoid races with handlers */ + if (sgpio->parent_irq >=3D 0) { + disable_irq(sgpio->parent_irq); + synchronize_irq(sgpio->parent_irq); + } + + /* Ensure all GPIO IRQ handlers complete before removal */ + if (sgpio->chip.irq.domain) { + struct irq_domain *domain =3D sgpio->chip.irq.domain; + unsigned int irq; + int hwirq; + + for (hwirq =3D 0; hwirq < sgpio->chip.ngpio; hwirq++) { + irq =3D irq_find_mapping(domain, hwirq); + if (irq) { + disable_irq(irq); + synchronize_irq(irq); + } + } + } + + /* Clear internal IRQ state */ + for (i =3D 0; i < sgpio->max_sgpio_pins; i++) + sgpio->irq_unmasked[i] =3D 0; + + return 0; +} + +static const struct of_device_id ax_sgpio_match[] =3D { + { .compatible =3D "axiado,sgpio" }, + {} +}; +MODULE_DEVICE_TABLE(of, ax_sgpio_match); + +static struct platform_driver sgpio_driver =3D { + .driver =3D { + .name =3D "sgpio", + .owner =3D THIS_MODULE, + .of_match_table =3D ax_sgpio_match, + }, + .probe =3D sgpio_probe, + .remove =3D sgpio_remove, +}; + +static int __init ax_sgpio_init(void) +{ + int ret; + + ret =3D platform_driver_register(&sgpio_driver); + if (ret < 0) { + pr_err("Failed to register SGPIO driver\n"); + return ret; + } + + return 0; +} + +static void __exit ax_sgpio_exit(void) +{ + platform_driver_unregister(&sgpio_driver); +} + +module_init(ax_sgpio_init); +module_exit(ax_sgpio_exit); + +MODULE_DESCRIPTION("Axiado Serial GPIO Driver"); +MODULE_AUTHOR("Axiado Corporation"); +MODULE_LICENSE("GPL"); --=20 2.34.1 From nobody Mon Jun 15 23:20:19 2026 Received: from SN4PR2101CU001.outbound.protection.outlook.com (mail-southcentralusazon11022121.outbound.protection.outlook.com [40.93.195.121]) (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 354343E5591; Tue, 14 Apr 2026 13:48:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.195.121 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776174538; cv=fail; b=eusl7bv4yg4OS7kdFaxxGOnKf3gjSz0VMSNH8omrfn+EnvZJ3f3V8uoNw5zOePfeQVDx0oF5AiGX67ImALU6uDqszxqj0EKKyfd9W1gTuFqQOJTCjqyQGb+sVFCGw1G24l9+E9iWoMAsVSkBalPJjISPw2GxnYcFhZjHKljnL3c= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776174538; c=relaxed/simple; bh=O/NQ15M3jf6zoB3avakSr+NPUQcnUOEs0mRcdd+JWkw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=rkIVMOEDn2IEzj082XIBCGLj3/c3o1iEA7x2jCP9u7DLNeC7dhJhOEvztFayrxqWVIMqDR8GigejY676WBjRB2uk9lVdpmjLd1UDlfa8FvbHzmmjxuAKQoM2CZbzVdF7tGcjZtlBtRXR35zku7D2Ri4xPgtHmGntQmEq/tIjHMk= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=axiado.com; spf=pass smtp.mailfrom=axiado.com; dkim=pass (2048-bit key) header.d=axiado.com header.i=@axiado.com header.b=eOguIwwO; arc=fail smtp.client-ip=40.93.195.121 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=axiado.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=axiado.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=axiado.com header.i=@axiado.com header.b="eOguIwwO" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Imboo+I/Ue6uIGnlCWjmhq+QQft6mzthsXqjypa6TyTUJnw+hO0KZsdeneBEy7cFYfF3zaK8NVDsqI9B4C9aGoQAwaYzYD1Zaqk5vrR1ixWlcYOZDwOxcgx/HUviZ4QeOoth2snar2pwwIKDGBIghbLMUZG65Pojyqiw1KMus+6B/2MCl0rvhNmd+w2mR2pC8CbZXEp0hy8XWGZSkbUuIl/COaRIlYncEmugStCGTQTwU2v/DwsIpEhmX9pFxQwhPrLlSwQhdNK6FbHuKCoRh+xMDr8/mZv+rrW6sman2JZn09LaaPgcvbHTxgyoWEG6mTs7HQqljBA0b6gNHELDvw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=zId+5TVYAXJATNMn5KcJzAqrhS1LRW/2tp29vPuvmCY=; b=tSQo7Vtv0TSnt4HLwcZfsPnIBo6+IUc/KTuW4imcQafwcIoXjGOvQnMw5xb3x/Yr48Mo5NZ7Gv/cQzdB0rrWGzSJwL0JS9PyzMEPen43RqBLbVD9B/C64A1zbxwfLGlVVKlUt7pFBbqCW3jmmBi5oIXax6SFUCZmrrqnRqZYEAri/IPcZu3QHbsunVP1PWgrG7oDD4gGJrhU4Gbnd/93C95faysYwx5qQ3i5BFqiE2TltnBHSDLfEQvJvG7uzKwFtjkg9qBpO1bHDqMa0FEk6caEgY4y2YM5eVWgaH77Mc9M3O4C/jRKpasqay6z9S1V6H89iJdKQ3VYmF4bmtBfvA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=fail (sender ip is 50.233.182.194) smtp.rcpttodomain=axiado.com smtp.mailfrom=axiado.com; dmarc=none action=none header.from=axiado.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=axiado.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=zId+5TVYAXJATNMn5KcJzAqrhS1LRW/2tp29vPuvmCY=; b=eOguIwwOrbyw3iNJ+lardiFHhzdcXd6JrGd03B57qCpYs5Ai2OzeeLZGS0JwXzVhhoeiinXpAWmZe1oHmmqawhJaeM2+IOWFJ0aOUMYk0kS4xqeMnnj0WRz0P+VUxtJTx6aR+TfH3DI/GuArHSJq1rNVnHVkCp7eGn11YeLY/spOJHbYzFZAHiWG0CPLe6/Rbaa3AowpBZIwY9qH/w8AvOg3XnsyRKUsZuLCqeUwCjwzqXYUrntXZQWl3nhppDSdShvR+BptrHh6OquizDlbBv/oP3+mmyzCRluOOUHvPtptRFjYyumb+7dm5aqqK0rRQ1qw6s5BY+myF8j87TVpRQ== Received: from PH8PR20CA0011.namprd20.prod.outlook.com (2603:10b6:510:23c::14) by PH3PPF6D3BD054F.namprd18.prod.outlook.com (2603:10b6:518:1::ca1) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9769.46; Tue, 14 Apr 2026 13:48:53 +0000 Received: from SJ1PEPF000023D9.namprd21.prod.outlook.com (2603:10b6:510:23c:cafe::75) by PH8PR20CA0011.outlook.office365.com (2603:10b6:510:23c::14) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9769.48 via Frontend Transport; Tue, 14 Apr 2026 13:48:53 +0000 X-MS-Exchange-Authentication-Results: spf=fail (sender IP is 50.233.182.194) smtp.mailfrom=axiado.com; dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=axiado.com; Received-SPF: Fail (protection.outlook.com: domain of axiado.com does not designate 50.233.182.194 as permitted sender) receiver=protection.outlook.com; client-ip=50.233.182.194; helo=smtp.corp.axiado.com; Received: from smtp.corp.axiado.com (50.233.182.194) by SJ1PEPF000023D9.mail.protection.outlook.com (10.167.244.74) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9846.0 via Frontend Transport; Tue, 14 Apr 2026 13:48:53 +0000 Received: from axz-uw1-build-vm02.corp.axiado.com (unknown [10.14.1.22]) by smtp.corp.axiado.com (Postfix) with ESMTP id 8CE594186B5B; Tue, 14 Apr 2026 06:48:51 -0700 (PDT) From: Petar Stepanovic Date: Tue, 14 Apr 2026 06:48:34 -0700 Subject: [PATCH 3/3] MAINTAINERS: add Axiado SGPIO controller Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260414-axiado-ax3000-sgpio-controller-v1-3-b5c7e4c2e69b@axiado.com> References: <20260414-axiado-ax3000-sgpio-controller-v1-0-b5c7e4c2e69b@axiado.com> In-Reply-To: <20260414-axiado-ax3000-sgpio-controller-v1-0-b5c7e4c2e69b@axiado.com> To: Petar Stepanovic , Tzu-Hao Wei , Swark Yang , Prasad Bolisetty , Linus Walleij , Bartosz Golaszewski , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Harshit Shah , SriNavmani A Cc: linux-gpio@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1776174532; l=927; i=pstepanovic@axiado.com; s=20250916; h=from:subject:message-id; bh=O/NQ15M3jf6zoB3avakSr+NPUQcnUOEs0mRcdd+JWkw=; b=uHvkvAfBgxfkT6nA/m5Aa1Z+P8HZWLqbAuvTUUSbHOgqy0Q0838lC9VTw1L+mpZDeFObztmTl WvbC1N/QsSNAdfQe4PqaFa05iIqI3+VC2PgsIyJmFVlMJEk7D4CM9m5 X-Developer-Key: i=pstepanovic@axiado.com; a=ed25519; pk=70f1UJOGT9U11ZK6o+ENXtv0I5wBE3e+Y9YWODzRsdI= X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ1PEPF000023D9:EE_|PH3PPF6D3BD054F:EE_ X-MS-Office365-Filtering-Correlation-Id: 98fd6cdf-9857-4cd5-e0f4-08de9a2c90e7 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|36860700016|82310400026|376014|1800799024|921020|18002099003|22082099003|56012099003; X-Microsoft-Antispam-Message-Info: 2mpQJPwv66mgsG5xeAZ+tKmil7uZpvf3fdeaqw+1foFrCxdhl8E2PGrr0pNgvGAY+X7rlrWCDrXDiXTpbKJK8V6zD1KjOPUSKeUPTQgIa8bE6+okck1mywgvz7qQzuhUEd2mh6tkTCGrPI6JHXWFZ6Ln+MNCsT64WjsPTq2Lfab0W1w3Hrv2DousB8I3hf2PUD/XD5ZVT0VdWik0GseX/AMmoP782ibXkWwU/X7zvZQsweQXQ6xQuKqyhoEnipMa/up1xuOql4KJtx9EfmkO8ES7mLPVYgkVZqUHYHztIhaC1B8AktHezHWbWIuU7aTC8D4AO749v7LFNq/9EvN32O0DWLG9hW89S0NpgpUo14fV5V9gu6149hVi/0puAeTQh9wZii2AjvP/o0ghIMAberES+XtfYYm+XOjYEmJP43mb2jnCySvqxamIkY2e+V6AwuMM8YbZ5/TL1UkBP69bb1t38LaYnbccC6WzbWFBToBQ6QNoTm0ZwEHtVmPmNwXO+iBNnYrJn+IJ39GxtMqEhl4sa3dARpbvuLFnlI2HbSkiZSaDjPHZ8nKvngkW7V43Qme91rxvHh6RFps5xjIad2nkDlpQQ7zk425QYHJjzKl77FgyzTfrc3SE4xXOFEVGUWhOrNWQhiUIxCFafIMNBMpLbiSY8Tag6S3vjKWXrp0U1rECHfCnldAain4wDpPQAz6rZQ+7nfmdj+Kepphwsre8MJtvlhv2sPMIrAqNf+L0HU9M3pnvjzdNh/Gy1GV2el2D7gdTgC0Xpd0XuCT0ZNaG7u7kVTUqRUPxi4imZUNUHbg5Hem+nuI+qgMAWrZ6 X-Forefront-Antispam-Report: CIP:50.233.182.194;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:smtp.corp.axiado.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(36860700016)(82310400026)(376014)(1800799024)(921020)(18002099003)(22082099003)(56012099003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: GPGYhW90D+Y8ZzeccibGMbHha+t9JG/L18pXqf3q36nOwbiLhBWaAvp78ydRyLvf1SokkHQnWkyhrjp+w+dd4o/3AROaYUG7cxNJGOzyQWWt5szxqjuia4IFxEHzLcy4gCGiUUJoiS83Q4Dnz7yPzGh4Ary6SYWee7Uk8w3FkYUIGhYvqF/XhWZMOYKwcf8jHPsgSq346sfO1W25wt58ix7fEA+BL3ahxLB3FZGAQlCU3sEv8mcxg8pAQQ8RuzdH1VRsurVCMGzzKwWSwo+fzTKLkaCNSsRdXEJ+/yNed8S5urJ22VqaLuiRS4rXZsOgvTGgMMHBOjoBLTPpqQhQwLsearQ2JGPUEJZ2OS1syUaMYRrATbR9FT/VDwrG6FZ+EmOOMDSilsw+1NL/VEQVJPIJ9XUlaNKyr03CtaXgwtut6ZNb/fH+smiKDrFugCEO X-OriginatorOrg: axiado.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Apr 2026 13:48:53.2357 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 98fd6cdf-9857-4cd5-e0f4-08de9a2c90e7 X-MS-Exchange-CrossTenant-Id: ff2db17c-4338-408e-9036-2dee8e3e17d7 X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=ff2db17c-4338-408e-9036-2dee8e3e17d7;Ip=[50.233.182.194];Helo=[smtp.corp.axiado.com] X-MS-Exchange-CrossTenant-AuthSource: SJ1PEPF000023D9.namprd21.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH3PPF6D3BD054F Add MAINTAINERS entry for the Axiado SGPIO controller driver and corresponding device tree binding. Signed-off-by: Petar Stepanovic --- MAINTAINERS | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/MAINTAINERS b/MAINTAINERS index 67db88b04537..56835c0a1863 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -4234,6 +4234,15 @@ S: Maintained F: Documentation/devicetree/bindings/sound/axentia,* F: sound/soc/atmel/tse850-pcm5142.c =20 +AXIADO SGPIO DRIVER +M: Petar Stepanovic +M: SriNavmani A +M: Prasad Bolisetty +L: linux-gpio@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/gpio/axiado,sgpio.yaml +F: drivers/gpio/gpio-axiado-sgpio.c + AXIS ARTPEC ARM64 SoC SUPPORT M: Jesper Nilsson M: Lars Persson --=20 2.34.1