From nobody Tue Sep 29 06:59:57 2026 Received: from CH4PR04CU002.outbound.protection.outlook.com (mail-northcentralusazon11023114.outbound.protection.outlook.com [40.107.201.114]) (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 9286840DB55; Tue, 11 Aug 2026 09:02:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.201.114 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786438958; cv=fail; b=tlKLnKqGdzMnIjUy8HmBm56jyXi/tU/4m/4QPOYb8araS55Kw3aev2gLFPC1U4obM9yhaI5kRbD25j3kifE91vimntPzwaYIZT5F/814o7P02EzDmbsDuMlt52foEKpGnRp8uycrL/7BBx1PW4axdehM1dxuYscuGeGIkJn3KtM= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786438958; c=relaxed/simple; bh=F0PWHlmVXkFgnIZrHGa0HtMtZLYXJg4GHtKQ4/93trY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=S7Djq2RHOh5h6x50jGss6dAlr3l2V88/9tnQhlx836+yquO2/UYN80acvinQ5x8ypxu4LpJKdpYfVRdQhbO2ZpcfFRbbDoZn3jH6cOurNOOSFDv7K/9NcWhgu2aSd+1OwkrM6ksXscHO8ha4E2HXHUm60wZ6ookwzuVDiAQD+yY= 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=ZFJ8yLTt; arc=fail smtp.client-ip=40.107.201.114 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="ZFJ8yLTt" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=NbHXCRDKFi/7IY4Ez0+F8SchYfr90lm31kj6kxdtag2T0wY6X1Dfx538if5Ri0JyNSCKJtEAH0P3zeB5qsAsQVrFg72tiuQGdq4rjy/D7WrE7IHZd79gJ/Qu/eXQzPFTTlEnJkLMuovqEkjOl+GEmXvm7RamJe2ZqMc/a5PaUyO96cbIW0b+KWdDo9QP+qiyisgP3s5rrJ5Ch41wGW1mG1p9tZR9M9Cmx8WPaSXZ6M+6ncnmK5v9znW1QMYiyWyCV6rkjRHrVfRZXa7W7zK14wtGRm02QzofwJZV01Oc6yvqpd3Kj8zSOKAt00o+wuX4kPJzmIc3n/JCGeSGYZFi3A== 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=+H3u1U0Bokja27RcgG6yExMsX7BU1o+vfXzxXK6tbpc=; b=QF17r5cN3tkHPFF89r9yr+70ELwJuiO0s3RUPsfgAuacu1GNPbVheOe+jUiqpdPwi6fmVrSiFEjJ6JFiFcEVUrPZen9edcimFJ+CWNbre1E+eT27n7jAR04eTm+xTL6uKUVDR1mlYpBeY0STVPOHV7dte67ns9yORRFZUulWDm+DItPpqOOQkurxUUW7Lh6gwW+tJPZa8Msy5CyZg2FoBSTgoC0EnAlOmInV6O88d7VxSAz5tOxCLbW5L+gfGnrMEvzW4/D1lm99DnrlFXMMggIXmqhNYTBYMlH27F13q5ftfLsyyvoolCqWknLxWk0f7Zkua6NgdsDaUL/35NVYqQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=fail (sender ip is 64.62.143.114) 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=+H3u1U0Bokja27RcgG6yExMsX7BU1o+vfXzxXK6tbpc=; b=ZFJ8yLTtZdUN9j5N5IC8L1TNMk/5NRrpXMM6lqacaTTbDY5aQG73XYqVecaIbHR9Rmo3ZHWns3P0PiMJIDbv52vpoxrW7k+EQihIOV/2pZa5TqWq8PkW0CJVUOUPV8evCFaerKId9Ntqz5gvWT5/DUPnZL4BVPYbPJoc6oRKG8KA8rQuryIM7cOP2N405uoPEoRx8kN/blIqZjzI+kTehsCr9+Wm5kNQh7DqFkBL7xvw6VF34uA7a1qkyii/+AeGplv/9RCFRaGJlOLcMNXBXa0JrsiRAJcC79/b8/gnMliX1/c3ygBZ7lwD66qMtTKhdw/9vvPROyg3VwLm36jQQA== Received: from BL1PR13CA0397.namprd13.prod.outlook.com (2603:10b6:208:2c2::12) by IA5PR18MB988654.namprd18.prod.outlook.com (2603:10b6:208:608::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.315.12; Tue, 11 Aug 2026 09:02:32 +0000 Received: from BL6PEPF0001AB56.namprd02.prod.outlook.com (2603:10b6:208:2c2:cafe::6c) by BL1PR13CA0397.outlook.office365.com (2603:10b6:208:2c2::12) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.315.11 via Frontend Transport; Tue, 11 Aug 2026 09:02:32 +0000 X-MS-Exchange-Authentication-Results: spf=fail (sender IP is 64.62.143.114) 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 64.62.143.114 as permitted sender) receiver=protection.outlook.com; client-ip=64.62.143.114; helo=smtp.corp.axiado.com; Received: from smtp.corp.axiado.com (64.62.143.114) by BL6PEPF0001AB56.mail.protection.outlook.com (10.167.241.8) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.315.6 via Frontend Transport; Tue, 11 Aug 2026 09:02:32 +0000 Received: from axz-uw1-build-vm02.corp.axiado.com (unknown [10.14.1.22]) by smtp.corp.axiado.com (Postfix) with ESMTP id 770304186B58; Tue, 11 Aug 2026 02:02:31 -0700 (PDT) From: Petar Stepanovic Date: Tue, 11 Aug 2026 02:01:50 -0700 Subject: [PATCH v3 1/2] dt-bindings: pwm: add Axiado AX3000 PWM 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: <20260811-axiado-ax3000-pwm-v3-1-6ceaccd812cf@axiado.com> References: <20260811-axiado-ax3000-pwm-v3-0-6ceaccd812cf@axiado.com> In-Reply-To: <20260811-axiado-ax3000-pwm-v3-0-6ceaccd812cf@axiado.com> To: Akhila Kavi , Prasad Bolisetty , =?utf-8?q?Uwe_Kleine-K=C3=B6nig?= , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Harshit Shah Cc: linux-pwm@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Petar Stepanovic X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1786438951; l=2395; i=pstepanovic@axiado.com; s=20250916; h=from:subject:message-id; bh=F0PWHlmVXkFgnIZrHGa0HtMtZLYXJg4GHtKQ4/93trY=; b=rVCPovhR7MF5hc4NoRcb2/lAvlPQJ7ZNNPokBxVk3bF1gMTmh1sASqkSdi1LrFXNG/iZ3R6i4 VcGxi9d04p5DG8C0sj/o1xOVkxYA0BfDXKg1vatm37CYFM/pgm07vgG X-Developer-Key: i=pstepanovic@axiado.com; a=ed25519; pk=70f1UJOGT9U11ZK6o+ENXtv0I5wBE3e+Y9YWODzRsdI= X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL6PEPF0001AB56:EE_|IA5PR18MB988654:EE_ X-MS-Office365-Filtering-Correlation-Id: c1154d09-ab4c-42da-560a-08def787475d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|82310400026|1800799024|376014|36860700016|23010399003|10067099003|56012099006|18002099003|22082099003|3023799007|13003099007; X-Microsoft-Antispam-Message-Info: wjfr9yN0X5agUmmsRtlkD6QAZdJmHWktyigQ5aWFfN2rUxW+eDfe4UgdtdL/9tRxHK1UEcwtsxaXyfCxEQX1QLWr3Xc4rBRUBtFRLC2GLdXj4OlidbLggPAPUiC4w2Wt+xxoSlpzSZYJ1g+8edTRjMosBhw3+LRuPyEPCTuQft/u90ZLcgCIm5z4HDUnEZOxiVS0ddI0V7RgdTum765SJMkeAC1wZTzTDPNffZnnf5EEPPbCZOvymLuV7fwOeAOGNbIjO6CrkMU529euMT2vXj8VcH94DZjB8YiDaw10ywsep5HQLfWn/RuNDbRQgffGuGayfGFeaS+tGtjp0jB+uuhh0yc/xcqdGYyPEFd14qIfQLBcFt/vNVrVNNKR1uSQhCMIcHTV8qwRWz5KXJYE0VJ49u+l4yPQeDQcGakpHzC5yyEaP9e9juRkR+2OcL27WKO3Iw3vrebBp7KTnRRMuZMOxwyb9436CwwosB7oDdRvJgm9q2kq0UL7kMjtAS8t2Y0fjz92XZiyn6qZSJKEXCPbR3RAqq2bGYxyPC9c2WDg1tvFICutYni8BJbJnLwjEgrrfxbHdYtpUFf0WqdEpVR7CUCer6WdoMid4OvAQU7M84tqPmgUwMeK3poNVf+Tw2Lb5dgf/M3FLtV64sIMhw== X-Forefront-Antispam-Report: CIP:64.62.143.114;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:smtp.corp.axiado.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(82310400026)(1800799024)(376014)(36860700016)(23010399003)(10067099003)(56012099006)(18002099003)(22082099003)(3023799007)(13003099007);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: P7/pY+xiT36l4kEKuwNIO+FkGGa/gt2yirq4+Q+OjHK0p5j5kSqdNLrHDzesolh88a/acZ4cOPJyuHfZ6dgbKV+8XdPhGcKN2STtQv1l5/jurXweFlWFN7nCpo/di4MQy5N5HTaNiYBDU25konf/LYGD5xJM9zR9bENVDsybffmr8tzyd2ADHojaL9gyH6tzclVrpwT036zBbhTQiD943K2/0dOAIRG3EKzTl5fzlSsf4dtqIEy8nojY5oekK/fev434DKWYjhh6MMI0DjOWjXmZU3Nl7JOd2FuXP9H2hPr+Fhz1QrtVeKKKWj/3SLK0zeL78mAT2zjXRCKXRnuIMh0jI8rRsLyusQf4cOti1LlqbMZGD78Mdf9PB6hvM50F6nM52ATSECgzcm1su+YW24wltp5v3aTvRisD4x68qDzbxpb4R7HJAnVRXWL7p+2a X-OriginatorOrg: axiado.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Aug 2026 09:02:32.1446 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: c1154d09-ab4c-42da-560a-08def787475d X-MS-Exchange-CrossTenant-Id: ff2db17c-4338-408e-9036-2dee8e3e17d7 X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=ff2db17c-4338-408e-9036-2dee8e3e17d7;Ip=[64.62.143.114];Helo=[smtp.corp.axiado.com] X-MS-Exchange-CrossTenant-AuthSource: BL6PEPF0001AB56.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA5PR18MB988654 The Axiado AX3000 and AX3005 SoCs include PWM controllers that can be used to generate configurable PWM output signals. Signed-off-by: Petar Stepanovic --- .../devicetree/bindings/pwm/axiado,ax3000-pwm.yaml | 53 ++++++++++++++++++= ++++ MAINTAINERS | 8 ++++ 2 files changed, 61 insertions(+) diff --git a/Documentation/devicetree/bindings/pwm/axiado,ax3000-pwm.yaml b= /Documentation/devicetree/bindings/pwm/axiado,ax3000-pwm.yaml new file mode 100644 index 000000000000..7297abccbc24 --- /dev/null +++ b/Documentation/devicetree/bindings/pwm/axiado,ax3000-pwm.yaml @@ -0,0 +1,53 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/pwm/axiado,ax3000-pwm.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Axiado AX3000 PWM controller + +maintainers: + - Petar Stepanovic + - Akhila Kavi + - Prasad Bolisetty + +description: + The Axiado PWM controller found on the AX3000 and AX3005 SoCs. + +allOf: + - $ref: pwm.yaml# + +properties: + compatible: + oneOf: + - const: axiado,ax3000-pwm + - items: + - const: axiado,ax3000-pwm + - const: axiado,ax3005-pwm + + reg: + maxItems: 1 + + clocks: + maxItems: 1 + + "#pwm-cells": + const: 2 + +required: + - compatible + - reg + - clocks + - "#pwm-cells" + +additionalProperties: false + +examples: + - | + pwm@80801c00 { + compatible =3D "axiado,ax3000-pwm"; + reg =3D <0x80801c00 0x1000>; + #pwm-cells =3D <2>; + clocks =3D <&clk>; + }; + diff --git a/MAINTAINERS b/MAINTAINERS index b2040011a386..9999480376cc 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -4312,6 +4312,14 @@ S: Orphan F: Documentation/devicetree/bindings/sound/axentia,* F: sound/soc/atmel/tse850-pcm5142.c =20 +AXIADO AX3000 PWM DRIVER +M: Petar Stepanovic +M: Akhila Kavi +M: Prasad Bolisetty +L: linux-pwm@vger.kernel.org +S: Supported +F: Documentation/devicetree/bindings/pwm/axiado,ax3000-pwm.yaml + AXIS ARTPEC ARM64 SoC SUPPORT M: Jesper Nilsson M: Lars Persson --=20 2.34.1 From nobody Tue Sep 29 06:59:57 2026 Received: from BL2PR02CU003.outbound.protection.outlook.com (mail-eastusazon11021120.outbound.protection.outlook.com [52.101.52.120]) (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 4C9392DEA6B; Tue, 11 Aug 2026 09:02:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.52.120 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786438959; cv=fail; b=ZU5/wN+GCygMtIq0qq/xq7JUsgjXY/lFe3kPqI1liT02Atqmr6PzKEeWPCCrACndGIXx7Fq/yY/zehqJOnjkt0FNZDyS4wef19TSKW/TuQZqhem0Yf4Hx7HJK2exbNzC6zs8uLiRqzDfMkGuoykQh9AcSIF/KqV9XfheTbfHXg0= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786438959; c=relaxed/simple; bh=5lKeCfNkgVOGImhDdRmmNBGC/YUkoZXY+c/Z5sDNXdc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=W4PQwq88GjNZduHy+nVYqX/YBvfZk62RU6NMfarQwaullQ1WBzPxABYjXXzccsjcd9hkkqgw7byEryHFCFn1aX2l/JYVV9EioFcSbxoRgFbS0r2182Q6hTLB9/JTYl85sM33gICWrLcEhrmH6oZfcZfq4QiwULRqtOB0rrCkdg0= 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=Z6r1CeSP; arc=fail smtp.client-ip=52.101.52.120 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="Z6r1CeSP" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=U8TcHVOeue4mxuaCos5ZjheW89p/3Iwg6dD9W/ln4m4thE4YX0nfkOVthtOYOWqZVYGmrfPzGxu8XncLqNSw9MoV+c+rVMiOIhHtxf8E2JvNQ9EEDAaX8hOfhX4lr2DQYOzh0LJp1Rl/kIEGDSQ3hW6Z0Y/FP++d+vhrY+acbhdP5qQ0W4G/IuoCfPqcrsBjVGtrqdCYshr876kY1gtMfGBJCwLjn1skmowtKymDvV04AcmAjylj0shpasr9m0Kh4lDvzsGqgErg/yFVlnqp4jqF2fwSv0AQvjFw2+55Qsl6TbUd5GT6bgJAf/PA8dLShC7JXtQyzyFNy/hHrWyMYQ== 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=zSz5fp8A+4Oz/rfxGdk8BgRi5I8WhH3kRTjUpjFeckU=; b=N66SfIExJIwUmqsUK20V8TExdqP4k9ykjfnsm3aoIzAko5FfoTSTC6uri8pNQ4EhJZ7rQSfXoxJxB02WCRZQOgzeuUKWI3wPigaMZXa0UZGBCBf3H+Dk/zTlbZtf1mcm+S8PelYU4wPtWcqJS5Yj6azLIhX8F8JmfU8kGQmxRlWxaDB6heRd0hcUknfZe3ubG3hslH4nI6I4j2mnwjr7ZL+m5/SX0QeWgqy5dlgopA7k/qTDDHHWnMlIVGrt7WT9s3BEe3JWX3IEEvMGMcL3N/6XTbijCSvJy/N4Gzsw45aHodAgSzmAKT7CocNgki4r+C5GeMX8/0hhZ9FdmQTq/g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=fail (sender ip is 64.62.143.114) 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=zSz5fp8A+4Oz/rfxGdk8BgRi5I8WhH3kRTjUpjFeckU=; b=Z6r1CeSPpIIN5HEGztzgx8WVPKyTzgaaHJTwM9xZQon4Fqy2gc7mMZdh76tY6O/LPPM71OTIeeFS8Z112gXeXlEgRFqCMSLzh6FIjz2uFrEoBEIfcmcWfje1jlTm5HVZyALJNpD9WTKlKdZ3GxMyL6w5cBJL7sVdfEGIHvw/8Iu65JpQDw3tyRkqOzpFSA8o/0IbUo8XcHhkB0/aszPFBVuZr5rN0yUxmsRzLdaaz0mCtq0TaaVrIT5a3+DJyZzTPxYqicmoRfhSZWj8oEXwMtPDbPsH1xpsIRO670XsEbMEZJgDADvMks2b1T3jyRvqAEY7ZEE4Zr8beFF8xj4fEw== Received: from DS7PR06CA0025.namprd06.prod.outlook.com (2603:10b6:8:54::31) by CH3PR18MB6005.namprd18.prod.outlook.com (2603:10b6:610:1e2::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.315.11; Tue, 11 Aug 2026 09:02:32 +0000 Received: from DS3PEPF000099E1.namprd04.prod.outlook.com (2603:10b6:8:54:cafe::12) by DS7PR06CA0025.outlook.office365.com (2603:10b6:8:54::31) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.292.25 via Frontend Transport; Tue, 11 Aug 2026 09:02:32 +0000 X-MS-Exchange-Authentication-Results: spf=fail (sender IP is 64.62.143.114) 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 64.62.143.114 as permitted sender) receiver=protection.outlook.com; client-ip=64.62.143.114; helo=smtp.corp.axiado.com; Received: from smtp.corp.axiado.com (64.62.143.114) by DS3PEPF000099E1.mail.protection.outlook.com (10.167.17.196) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.315.6 via Frontend Transport; Tue, 11 Aug 2026 09:02:32 +0000 Received: from axz-uw1-build-vm02.corp.axiado.com (unknown [10.14.1.22]) by smtp.corp.axiado.com (Postfix) with ESMTP id 84E674186B59; Tue, 11 Aug 2026 02:02:31 -0700 (PDT) From: Petar Stepanovic Date: Tue, 11 Aug 2026 02:01:51 -0700 Subject: [PATCH v3 2/2] pwm: add Axiado AX3000 PWM driver 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: <20260811-axiado-ax3000-pwm-v3-2-6ceaccd812cf@axiado.com> References: <20260811-axiado-ax3000-pwm-v3-0-6ceaccd812cf@axiado.com> In-Reply-To: <20260811-axiado-ax3000-pwm-v3-0-6ceaccd812cf@axiado.com> To: Akhila Kavi , Prasad Bolisetty , =?utf-8?q?Uwe_Kleine-K=C3=B6nig?= , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Harshit Shah Cc: linux-pwm@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Petar Stepanovic X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1786438951; l=11123; i=pstepanovic@axiado.com; s=20250916; h=from:subject:message-id; bh=5lKeCfNkgVOGImhDdRmmNBGC/YUkoZXY+c/Z5sDNXdc=; b=apf/cMLxKuOPoElxiQvfsmvObBMnF0SIwKMAQVAyjGK23ohlB4GcZYvegeV/YrIrFbRc9s4VS rjlYWzTplOvASITSukMihlr9I+T30HdlhYOZ4RYuRABTKBHcaKh16Bm X-Developer-Key: i=pstepanovic@axiado.com; a=ed25519; pk=70f1UJOGT9U11ZK6o+ENXtv0I5wBE3e+Y9YWODzRsdI= X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS3PEPF000099E1:EE_|CH3PR18MB6005:EE_ X-MS-Office365-Filtering-Correlation-Id: 6196d801-833d-41ba-8a81-08def7874743 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|82310400026|23010399003|376014|1800799024|36860700016|6133799003|56012099006|10067099003|22082099003|18002099003|3023799007; X-Microsoft-Antispam-Message-Info: QIWXGrzP8ghVPuvAbJSRtffvFn9g/r5g1930zs4R4yO2NGVHkFZ9PMJZZIwpEKPgXBklAJDolxT75HiZ5DgPh7bCL7M6Sr+CSOcHbJUsbDgZWnaRyuu0wb7odVbbeF1mKSif+b/1zky1H4T6HVQRTG1RL82PG+znMz1htgSvPgPPDFRcHEsyPFCQ6D1xBy2ipKFdwukcTkG89r3dV3tLqm1yzr6iCzzpAzPOeVb9lhpL8RU1ZksYm1VjbVZRimjQuAuZALSRZiMZjIkRGjWdmSvjEn9QoziTHn4gC+u8IOi1DnePIFR9TM2kF5cwom6dgQmJjMzptfqUX3uEg+sT3QfLXHf0bgdFkPCbaGM4wAGptAgLbFvyjvEq64pXUCGuw40PnTvP7QQWPiK/MlpQgBOR7yXBx1A5SlD3+TCif836DQ74oblF+e8of3QoxIZ8AkVWW7cHEyByoWc+tNgMwyOU+lziLxgZB/LcrLs9t0/C6qqAC2UwLaZ1fFjtVoEvAccLliLpnQgVKrqsjhNCF9FZ+/LoxI08aJVdUO+WLm4JzFnjzLUjF4L9Lp5rpC8nhjQjF1Bkl3hHjRDHPipRhiSmmZy37hfDK5nLdYHB0P6FijVKRd5NNLVw96dvyuI9RhTo5QgA1lcl5xeG83LOOFIyUCY6jV2Pd3kQqyLH8xH7z+wRelYxkjvLkp9JTOtIRHX3NV4ZwvqSuXUnZ8H84A== X-Forefront-Antispam-Report: CIP:64.62.143.114;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:smtp.corp.axiado.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(82310400026)(23010399003)(376014)(1800799024)(36860700016)(6133799003)(56012099006)(10067099003)(22082099003)(18002099003)(3023799007);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: b9VBo5tWvhiaHgpDdKNZrpJYfnJtHvJYS3gct1W3rgZEY74KS/TaE8iQtK2fFAiB5tnXQsJsha+PP7SNrCGRTpuRMsZGJosPL5k1+jst4oPEZn/mvIOAmd+sXzfAcMj4gJcP0m7t1iqHHeIsptbaddxHBWvgpzw3OJB3ZhewjkxQKd6F/PtsE7qGRxrIaWmgCKtKB28Jot5a3MrPuByaMt46UK7+cdZZHYJ1LiFoQI/HQu46FKniqr2SFEamQnhbvayRBwoxbkVm8iT/Vj0p/bB3A2fv/s9BHv+iwsxlWYDVhaYWiqp4o2sQOupqfcITHup7bq7fl1X6XxT1YIYV4Wu3kbMg84Vy/d5Tvuuw478A+oHg4iA92CgBRL8TsUZ/7AOekGOyZO1G1oGyE2s/xDAeLKTDrhQGpY6TjCRSKNL9Y1F/um8boQ5CYcxp+yEC X-OriginatorOrg: axiado.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Aug 2026 09:02:32.0185 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 6196d801-833d-41ba-8a81-08def7874743 X-MS-Exchange-CrossTenant-Id: ff2db17c-4338-408e-9036-2dee8e3e17d7 X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=ff2db17c-4338-408e-9036-2dee8e3e17d7;Ip=[64.62.143.114];Helo=[smtp.corp.axiado.com] X-MS-Exchange-CrossTenant-AuthSource: DS3PEPF000099E1.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH3PR18MB6005 The Axiado AX3000 and AX3005 SoCs include PWM controllers that can be used to generate configurable PWM output signals. Add a PWM driver with support for configuring period, duty cycle, and enable state through the Linux PWM framework. Signed-off-by: Petar Stepanovic --- MAINTAINERS | 1 + drivers/pwm/Kconfig | 11 ++ drivers/pwm/Makefile | 1 + drivers/pwm/pwm-axiado.c | 310 +++++++++++++++++++++++++++++++++++++++++++= ++++ 4 files changed, 323 insertions(+) diff --git a/MAINTAINERS b/MAINTAINERS index 9999480376cc..14eea3bc4d4d 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -4319,6 +4319,7 @@ M: Prasad Bolisetty L: linux-pwm@vger.kernel.org S: Supported F: Documentation/devicetree/bindings/pwm/axiado,ax3000-pwm.yaml +F: drivers/pwm/pwm-axiado.c =20 AXIS ARTPEC ARM64 SoC SUPPORT M: Jesper Nilsson diff --git a/drivers/pwm/Kconfig b/drivers/pwm/Kconfig index 6f3147518376..76f6c04b0e23 100644 --- a/drivers/pwm/Kconfig +++ b/drivers/pwm/Kconfig @@ -129,6 +129,17 @@ config PWM_ATMEL_TCB To compile this driver as a module, choose M here: the module will be called pwm-atmel-tcb. =20 +config PWM_AXIADO + tristate "Axiado PWM support" + depends on ARCH_AXIADO || COMPILE_TEST + depends on HAS_IOMEM + help + PWM framework driver for the PWM controller found on Axiado + AX3000 and AX3005 SoCs. + + To compile this driver as a module, choose M here: the module + will be called pwm-axiado. + config PWM_AXI_PWMGEN tristate "Analog Devices AXI PWM generator" depends on MICROBLAZE || NIOS2 || ARCH_ZYNQ || ARCH_ZYNQMP || ARCH_INTEL_= SOCFPGA || COMPILE_TEST diff --git a/drivers/pwm/Makefile b/drivers/pwm/Makefile index 0dc0d2b69025..4466a29e780a 100644 --- a/drivers/pwm/Makefile +++ b/drivers/pwm/Makefile @@ -8,6 +8,7 @@ obj-$(CONFIG_PWM_ARGON_FAN_HAT) +=3D pwm-argon-fan-hat.o obj-$(CONFIG_PWM_ATMEL) +=3D pwm-atmel.o obj-$(CONFIG_PWM_ATMEL_HLCDC_PWM) +=3D pwm-atmel-hlcdc.o obj-$(CONFIG_PWM_ATMEL_TCB) +=3D pwm-atmel-tcb.o +obj-$(CONFIG_PWM_AXIADO) +=3D pwm-axiado.o obj-$(CONFIG_PWM_AXI_PWMGEN) +=3D pwm-axi-pwmgen.o obj-$(CONFIG_PWM_BCM2835) +=3D pwm-bcm2835.o obj-$(CONFIG_PWM_BCM_IPROC) +=3D pwm-bcm-iproc.o diff --git a/drivers/pwm/pwm-axiado.c b/drivers/pwm/pwm-axiado.c new file mode 100644 index 000000000000..4815d34b907e --- /dev/null +++ b/drivers/pwm/pwm-axiado.c @@ -0,0 +1,310 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* + * Copyright (c) 2021-2026 Axiado Corporation. + */ + +/* + * Limitations: + * - Only normal polarity is supported. + * - Configuration changes take effect immediately; the current period is + * not guaranteed to complete. + * - Disable operations take effect immediately; the current period is not + * guaranteed to complete. + * - When disabled, the output remains high. + * - The supported period range is 2 through 0xfffffffe PWM input clock + * cycles; 0xffffffff is reserved by the hardware for a constant-low + * output. Longer periods are rounded down to the maximum. + * - The hardware interprets a zero high time as a constant high output, so + * a 0% duty cycle is programmed as a constant-low period instead. That + * encoding does not hold the requested period, so the period cannot be + * read back from the hardware while the duty cycle is 0%. + * - A 100% duty cycle is supported and produces a constant high output. + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +/* Register offsets */ +#define AXIADO_PWM_CTRL_REG 0x0000 +#define AXIADO_PWM_PERIOD_REG 0x0004 +#define AXIADO_PWM_HIGH_REG 0x0008 + +/* Period and duty cycle limits */ +#define AXIADO_PWM_PERIOD_MIN 2 +#define AXIADO_PWM_PERIOD_MAX 0xfffffffe +#define AXIADO_PWM_PERIOD_CONST_LOW 0xffffffff +#define AXIADO_PWM_DUTY_MIN 1 + +/* Control register bits */ +#define AXIADO_PWM_CTRL_ENABLE BIT(0) + +struct axiado_pwm_chip { + void __iomem *base; + unsigned long rate; + u32 cached_period; +}; + +struct axiado_pwm_waveform { + u32 period; + u32 duty; + bool enabled; +}; + +static int +axiado_pwm_round_waveform_tohw(struct pwm_chip *chip, + struct pwm_device *pwm, + const struct pwm_waveform *wf, + void *_wfhw) +{ + struct axiado_pwm_chip *axpwm =3D pwmchip_get_drvdata(chip); + struct axiado_pwm_waveform *wfhw =3D _wfhw; + u64 period; + u64 duty; + int ret =3D 0; + + /* Encode a disabled request as a zeroed hardware waveform. */ + if (!wf->period_length_ns) { + *wfhw =3D (struct axiado_pwm_waveform) {}; + + return 0; + } + + /* Only an edge-aligned waveform starting at offset zero is supported. */ + if (wf->duty_offset_ns) + return -EINVAL; + + if (wf->duty_length_ns > wf->period_length_ns) + return -EINVAL; + + period =3D mul_u64_u64_div_u64(wf->period_length_ns, axpwm->rate, + NSEC_PER_SEC); + + if (period < AXIADO_PWM_PERIOD_MIN) { + period =3D AXIADO_PWM_PERIOD_MIN; + ret =3D 1; + } else if (period > AXIADO_PWM_PERIOD_MAX) { + period =3D AXIADO_PWM_PERIOD_MAX; + } + + /* + * Keep the rounded period for a 0% duty cycle. .write_waveform() + * translates it to the hardware constant-low representation. + */ + if (!wf->duty_length_ns) { + *wfhw =3D (struct axiado_pwm_waveform) { + .period =3D period, + .duty =3D 0, + .enabled =3D true, + }; + + return ret; + } + + duty =3D mul_u64_u64_div_u64(wf->duty_length_ns, axpwm->rate, + NSEC_PER_SEC); + + /* + * Preserve an exact 100% duty request when the hardware period has + * been clamped. + */ + if (wf->duty_length_ns =3D=3D wf->period_length_ns) + duty =3D period; + + /* + * Period clamping can leave the converted duty greater than the + * final hardware period. In that case, clamp it to 100% duty. + */ + if (duty > period) + duty =3D period; + + *wfhw =3D (struct axiado_pwm_waveform) { + .period =3D period, + .duty =3D duty, + .enabled =3D true, + }; + + return ret; +} + +static int +axiado_pwm_round_waveform_fromhw(struct pwm_chip *chip, + struct pwm_device *pwm, + const void *_wfhw, + struct pwm_waveform *wf) +{ + struct axiado_pwm_chip *axpwm =3D pwmchip_get_drvdata(chip); + const struct axiado_pwm_waveform *wfhw =3D _wfhw; + + if (!wfhw->enabled) { + *wf =3D (struct pwm_waveform) { + .period_length_ns =3D 0, + .duty_length_ns =3D 0, + .duty_offset_ns =3D 0, + }; + + return 0; + } + + *wf =3D (struct pwm_waveform) { + .period_length_ns =3D + mul_u64_u64_div_u64_roundup(wfhw->period, NSEC_PER_SEC, + axpwm->rate), + .duty_length_ns =3D + mul_u64_u64_div_u64_roundup(wfhw->duty, NSEC_PER_SEC, + axpwm->rate), + .duty_offset_ns =3D 0, + }; + + return 0; +} + +static int axiado_pwm_read_waveform(struct pwm_chip *chip, + struct pwm_device *pwm, + void *_wfhw) +{ + struct axiado_pwm_chip *axpwm =3D pwmchip_get_drvdata(chip); + struct axiado_pwm_waveform *wfhw =3D _wfhw; + u32 period; + u32 duty; + u32 ctrl; + + ctrl =3D readl(axpwm->base + AXIADO_PWM_CTRL_REG); + period =3D readl(axpwm->base + AXIADO_PWM_PERIOD_REG); + duty =3D readl(axpwm->base + AXIADO_PWM_HIGH_REG); + + /* The constant-low encoding doesn't hold the period, so restore it. */ + if (period =3D=3D AXIADO_PWM_PERIOD_CONST_LOW) { + period =3D axpwm->cached_period; + duty =3D 0; + } else if (duty > period) { + duty =3D period; + } + + *wfhw =3D (struct axiado_pwm_waveform) { + .period =3D period, + .duty =3D duty, + .enabled =3D !!(ctrl & AXIADO_PWM_CTRL_ENABLE), + }; + + return 0; +} + +static int axiado_pwm_write_waveform(struct pwm_chip *chip, + struct pwm_device *pwm, + const void *_wfhw) +{ + struct axiado_pwm_chip *axpwm =3D pwmchip_get_drvdata(chip); + const struct axiado_pwm_waveform *wfhw =3D _wfhw; + u32 period =3D wfhw->period; + u32 duty =3D wfhw->duty; + + if (!wfhw->enabled) { + writel(0, axpwm->base + AXIADO_PWM_CTRL_REG); + return 0; + } + + /* + * A zero high time produces a constant high output, so use the + * constant-low period encoding for a 0% duty cycle. Keep the high time + * non-zero because a zero value takes precedence over that encoding. + * Cache the requested period for .read_waveform(). + */ + if (!duty) { + axpwm->cached_period =3D period; + period =3D AXIADO_PWM_PERIOD_CONST_LOW; + duty =3D AXIADO_PWM_DUTY_MIN; + } + + /* + * The hardware has no shadow registers. These writes may alter the + * active waveform before the current period has completed. + */ + writel(period, axpwm->base + AXIADO_PWM_PERIOD_REG); + writel(duty, axpwm->base + AXIADO_PWM_HIGH_REG); + writel(AXIADO_PWM_CTRL_ENABLE, axpwm->base + AXIADO_PWM_CTRL_REG); + + return 0; +} + +static const struct pwm_ops axiado_pwm_ops =3D { + .sizeof_wfhw =3D sizeof(struct axiado_pwm_waveform), + .round_waveform_tohw =3D axiado_pwm_round_waveform_tohw, + .round_waveform_fromhw =3D axiado_pwm_round_waveform_fromhw, + .read_waveform =3D axiado_pwm_read_waveform, + .write_waveform =3D axiado_pwm_write_waveform, +}; + +static int axiado_pwm_probe(struct platform_device *pdev) +{ + struct device *dev =3D &pdev->dev; + struct axiado_pwm_chip *axpwm; + struct pwm_chip *chip; + struct clk *clk; + int ret; + + chip =3D devm_pwmchip_alloc(dev, 1, sizeof(*axpwm)); + if (IS_ERR(chip)) + return PTR_ERR(chip); + + axpwm =3D pwmchip_get_drvdata(chip); + + axpwm->base =3D devm_platform_ioremap_resource(pdev, 0); + if (IS_ERR(axpwm->base)) + return dev_err_probe(dev, PTR_ERR(axpwm->base), + "Failed to map registers\n"); + + clk =3D devm_clk_get_enabled(dev, NULL); + if (IS_ERR(clk)) + return dev_err_probe(dev, PTR_ERR(clk), + "Failed to get/enable clock\n"); + + ret =3D devm_clk_rate_exclusive_get(dev, clk); + if (ret) + return dev_err_probe(dev, ret, + "Failed to lock clock rate\n"); + + axpwm->rate =3D clk_get_rate(clk); + if (!axpwm->rate) + return dev_err_probe(dev, -EINVAL, + "Failed to get clock rate\n"); + + /* + * Provide a valid fallback period if the bootloader left the + * constant-low encoding programmed. + */ + axpwm->cached_period =3D AXIADO_PWM_PERIOD_MIN; + + chip->ops =3D &axiado_pwm_ops; + chip->atomic =3D true; + + ret =3D devm_pwmchip_add(dev, chip); + if (ret) + return dev_err_probe(dev, ret, "Failed to add PWM chip\n"); + + return 0; +} + +static const struct of_device_id axiado_pwm_match[] =3D { + { .compatible =3D "axiado,ax3000-pwm" }, + { } +}; +MODULE_DEVICE_TABLE(of, axiado_pwm_match); + +static struct platform_driver axiado_pwm_driver =3D { + .driver =3D { + .name =3D "axiado-pwm", + .of_match_table =3D axiado_pwm_match, + }, + .probe =3D axiado_pwm_probe, +}; +module_platform_driver(axiado_pwm_driver); + +MODULE_AUTHOR("Axiado Corporation"); +MODULE_DESCRIPTION("Axiado PWM driver"); +MODULE_LICENSE("GPL"); --=20 2.34.1