From nobody Fri Jul 24 21:53:41 2026 Received: from SA9PR02CU001.outbound.protection.outlook.com (mail-southcentralusazon11023122.outbound.protection.outlook.com [40.93.196.122]) (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 8840441F375; Thu, 23 Jul 2026 09:32:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.196.122 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784799160; cv=fail; b=f0LzGE1w7o+NfvJdPRM6NPUFwK2gL17aL0/lbJ+cvkgTqb2HGgQeXt6oatLzuFhoVXDTYajL6H8X3v6lexqiWIxcAX/sbe/jymIsvlQHDOVcQwMQU9/Ozncz/6dXxGuwJrPDBEksx5X4yOzdgG8HOjfZLcElE9A6C7FxdmIJ24o= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784799160; c=relaxed/simple; bh=CrM9KcdTYuwGYQ9WJlE26qPNJiZO6cBuRg88p8mavlg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=iAj0RVn4nFeg8gadt55n3L+svG767D39Txoy012h9Sy3URaLgavKPfX6J70JYwPIt0TgZsMX+EjIKu7PhPKT6iSmpua7LR6GXYPxwOd7p+tXXTWXmjiny0DzVfvQxuzAVNFTbwV0PH2/2aY5BWNjt8RA7qtuYO92keiOuY/qfow= 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=v/xuoLN8; arc=fail smtp.client-ip=40.93.196.122 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="v/xuoLN8" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=t7WxZCE8sMDQYi3qx2qbh0O0GjH0KQXUMf0OfwfM2e00JwyoZNop+/NN91Y+eaMTqXiolTldARqLk/gESvEg3cKPZjWBj3kQofoyT9dlsm6yeoZLs66Q81rGFUcM3HgPlFNgmXzukRMOrit1XqMO/HcAEElhRCJemYv6grjqBvkGY0IMetw5slk/SJJvDb776AoPC7AlrfjWy1f0X9eMYF1f4QuNMOzEulhi90azqZcplTr21W1307NX8mpbqr8sSZzxNVMG95/4Znm48sIOaBB9dDCCjC3GvGxiwlTxi9H1m0abzqEfV9/OjrcZZ7LQaSszasth3ruAqlDHJOYEJw== 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=fb9v+58VYqfu5j0ZTAc6ZUpL5aul4K4dCH3ti6OXA+8=; b=M7Frvp58OuWYaJveoRJQEemNAJ3cSNjGpVkiZEHPok9zh9NwoUxRgGY8rcSlmpErbk3B68XNovBluR6gc1x6gUmkBdFJTTwFyd1LuI6inGIpYlh9D6lLd7ipv6O0HWqAKaqo0zgH8RDSwGzKw2JEdyaIuER4q/Y/GNah18t7+mqzGKmpPaNeGovgatR33IKdVoIpTLfdSQTV6/LmhO2aWucddr52Ai1eZMKWyGLSwS3EHsRU+m6g3f/KdnGnfXnUrwOcnBnVH4OyRGmaQV8X155yiYjRrXou20h3WKdvGBReo5Vjx/rMeJHchXRWehz2QrD+xSNVcs++22VthJMQ6g== 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=fb9v+58VYqfu5j0ZTAc6ZUpL5aul4K4dCH3ti6OXA+8=; b=v/xuoLN8kVrWHsbdoWS8FCd4ReqC6anY/yMu+qFcUjW7gN12C4XEdds4eC8xXFxpF8SoQr7dVMieKxg3/Mxlz+tgtLobs2RRs3GFDwzl7zSAN8U4N8kqYa46+CnlCRb/J1kinZsHmZH8ZYA7uLhrTGOpNesEqMsQI6S9Ngw32mmeshaFXurOIkQVjeFg14ekZTSwPQ4/ZUyDHf5CupYCR0naT7ReRta8j7hjI9EjD1hTqReHl6OHoQa7kSznxsBdPBeLb1qrk382kAX2YM0pbQCUaDEpcs+v17CCHRsd9XOp8kRaL2COF1jcm+4K6ap7SxJSp4YS9lFsRBCHhS/uOA== Received: from BN9PR03CA0143.namprd03.prod.outlook.com (2603:10b6:408:fe::28) by DM4PR18MB5428.namprd18.prod.outlook.com (2603:10b6:8:18d::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.245.10; Thu, 23 Jul 2026 09:32:34 +0000 Received: from BN1PEPF0000468A.namprd05.prod.outlook.com (2603:10b6:408:fe:cafe::5a) by BN9PR03CA0143.outlook.office365.com (2603:10b6:408:fe::28) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.245.11 via Frontend Transport; Thu, 23 Jul 2026 09:32:34 +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 BN1PEPF0000468A.mail.protection.outlook.com (10.167.243.135) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.270.5 via Frontend Transport; Thu, 23 Jul 2026 09:32:33 +0000 Received: from axz-uw1-build-vm02.corp.axiado.com (unknown [10.14.1.22]) by smtp.corp.axiado.com (Postfix) with ESMTP id 353A34186B58; Thu, 23 Jul 2026 02:32:33 -0700 (PDT) From: Petar Stepanovic Date: Thu, 23 Jul 2026 02:32:18 -0700 Subject: [PATCH v2 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: <20260723-axiado-ax3000-pwm-v2-1-22002f0b281d@axiado.com> References: <20260723-axiado-ax3000-pwm-v2-0-22002f0b281d@axiado.com> In-Reply-To: <20260723-axiado-ax3000-pwm-v2-0-22002f0b281d@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.14.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1784799153; l=2320; i=pstepanovic@axiado.com; s=20250916; h=from:subject:message-id; bh=CrM9KcdTYuwGYQ9WJlE26qPNJiZO6cBuRg88p8mavlg=; b=rs9+ixrP7K4rNMdJOiNmWEdLzxbzGara+7+T2jeOY+BQXuu/CEmfzWIFWvFwPP3YPkFKByHdM bek2ud+yH1pBTmzi9sxj5l3sZLpECcbWHQ5gSOW8DO04PUpKx4UvqY1 X-Developer-Key: i=pstepanovic@axiado.com; a=ed25519; pk=70f1UJOGT9U11ZK6o+ENXtv0I5wBE3e+Y9YWODzRsdI= X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BN1PEPF0000468A:EE_|DM4PR18MB5428:EE_ X-MS-Office365-Filtering-Correlation-Id: 9d1d5ff2-809d-4486-29d3-08dee89d5379 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|23010399003|376014|1800799024|36860700016|82310400026|13003099007|10067099003|56012099006|18002099003|22082099003|3023799007; X-Microsoft-Antispam-Message-Info: sfgryO4YgCPvmkP22L9yWaD6J6/ZO0f8PM3FwRb93xzJBdqPvB72ViG6FMqKRxq/2gO+p9g1mMvlzUJD5Vma8BDO110dSi/Ekx4EkZMrEs3nc5PUiGu5ScSGC2hRrFA01euO06CXce8+A/CPzVx2CkCelJ2emRQQ3DJEXZKh0ZZwGSZ7m8og1zVC6GxyN9mgkk8Cre6F8zP+qaR89mSUR5z/hZKZVovY5ufABHJIAPlD26HhZaDbHp8U4puSjN/NsSo/dgICOCwoKPHYTeeSqkA4IVSE7BxD1kRTMWQcsz77gzIgLU/7dXaGnsk6NYqLCMWIx0e15H4EhMUVXntQwQXwGepaQRxjV0mYlrSrbTG5YPI4mQZCuED2p7/7YGRG648obRbY3wYAcHnqwR3xE/m6/XdsHOnE+QSW8jUy+Scm23FaIfvyq9S6Ur1ba2QIQjTLUHnU91ZNr24ousB0ManbUZrNSoIp3mDzHF1o4nS8ILcEYdG1zGRK6w5yg6Ln6XOSFn1tvjfQjaK1ncGrfi+wSUGYxhpLjoAPXcrAW+SbHw+0bdVYN/ibzr1nzOK52UxNcoN1ezG4XkTWdnmTOzWgp/rah/LyxszytnC5xaM8iBNGyLo41F1LoiPxq4b5SFK8vxgkttHp1343YQPG8g== 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)(23010399003)(376014)(1800799024)(36860700016)(82310400026)(13003099007)(10067099003)(56012099006)(18002099003)(22082099003)(3023799007);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: OQKYQ64rQfamWGFWmgynqyc/TFvetqW2t+DQQ3z8n+cRPhfN6mz9iTfhkI1n3gfdMWSesV7oa/4D1o2H99NataCLMJ5a1l/nAmRgQ66q+Pla8C/Mtp3kzjCBBXuSLC+gMGjddHg+5pVvyxRNDlNJ4F14goMWSqL0SLqlls7GbqYIEWFtQX+YuiyaC6LhTgivXql9TvmCRyyi1TEg7iF1YN+LUvmKBfCyRsPa9SM1PW2QL87KDELP6kkUxcYbGslM22MM0mizv8Cxiqc1XN1Bzoq5qoj/DMJNX8Y670NPS/mlXqMjHPlRlYi2l+CWyo4cLyISFYOAvV+SaZg3hbGxpNP+JheBsKIIbB6Eh/Vns/NQCIDzGiFu8EH4gyXgbQwJSoR8GBOL2wWGk5fp7CZRViNB+ZoOQ9isa8dV1CySPDYn9HneFbSH2DWrYpwa5o3g X-OriginatorOrg: axiado.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Jul 2026 09:32:33.9401 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 9d1d5ff2-809d-4486-29d3-08dee89d5379 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: BN1PEPF0000468A.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM4PR18MB5428 The Axiado AX3000 and AX3005 SoCs include PWM controllers that can be used to generate configurable PWM output signals. Signed-off-by: Petar Stepanovic Reviewed-by: Krzysztof Kozlowski --- .../devicetree/bindings/pwm/axiado,ax3000-pwm.yaml | 51 ++++++++++++++++++= ++++ MAINTAINERS | 8 ++++ 2 files changed, 59 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..02da1cedad24 --- /dev/null +++ b/Documentation/devicetree/bindings/pwm/axiado,ax3000-pwm.yaml @@ -0,0 +1,51 @@ +# 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: + enum: + - axiado,ax3000-pwm + - 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 Fri Jul 24 21:53:41 2026 Received: from CH1PR05CU001.outbound.protection.outlook.com (mail-northcentralusazon11020085.outbound.protection.outlook.com [52.101.193.85]) (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 72AED38B14F; Thu, 23 Jul 2026 09:32:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.193.85 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784799161; cv=fail; b=JmtuzldRB0aOIBANT0NF8D6dyj0Bgvdvk2KegAmz4APhiFS3+6M26DC+Z73qfkk8d5f7EnxD3Hb5d55LWKoTJJT57ouaUG1ilDdC4BMBoZSwQmQqYeHTJBq27qDyLz3A9O5QaPlUy4hSrf8CNY5tvmvgyv8ar37bw3pn3Xm+XRI= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784799161; c=relaxed/simple; bh=W37xQPVulbP9rcXA0r/phSaj7uYYnRvIEWgM94VOzgs=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=unsNiwQE7qaUq/YDWJM+OT3/wj6qDEP9O+F79kVydIhoyx6dtGrPAP6n/MmEwpGiVvuatwASCakucbJBR00NgCUQ7+KBVoDi4sAvLjqAE0tOktT4cUjIFzqkUamyb4109+7ubgm4lL2365IyKEUo6Vl0VzSs91eVk71oEUJV+gk= 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=pkSoTHR8; arc=fail smtp.client-ip=52.101.193.85 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="pkSoTHR8" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=GW7dGeIWCc4kYrVlS76OcrXeuWtsqDP/avEj1+PW+It+A/5mxDNErdLFyjlf8f1ygExDkWEHfW34QeP/SE8LNdgPjczx222yMforZwvPjN5qyZ2O9NlSnEwAXpI8l3BRvBg7n7zBBlpO4ji3CD4rXBCPyNBrHL/uLk5THrZuaJ1fyFS/E01bLAMR3wlLO1A8xf/gntVFM/sefDV43yR9LoIypHysZDNFjLcG9ky83ETnXx2ouDTQr8+xoapoB//CNGzkqw7q9ikMfTLYG5wtg/6VBQbpUAteKn4x8/G83YvazSjdTQCrBVIVP+3dwqsRZyqJ7BxWIdJp/D/x1g0Bmw== 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=Rw4RCblj0J1ioFipbty0zY5pA+JDxHgEZFRSzvGtEE8=; b=IcJpiSZu6gS7PPyUs/2OZpjSMkVM32KYumG9DPc/NVxOIdEG+p9sOgIlz84i2QwYne/RYFx1IAR5bCtjeBNmuOOORa5k9lAVbFzYKJnS+jlnCBoOCj67TY9Yx1ZFsywqooTtuVfh6adwSN6PAwvBHrLS6dotGns3TEkrgE6HhnpI92332HGsqnIcxxw4Nt+6rE+KtIQKnDvODWj0CG9VIuo0p99zklXVJlJM4tjUKsvTYU0AMcr2qiDS88Y4hFjVroCibsdBWOGufjN4z2JdfFkyAQUYABQApgyfl6BBs7Sn2t7yxZh23JER+ZmIr0iRv3ZGyKTHixD60jG3lIj3Iw== 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=Rw4RCblj0J1ioFipbty0zY5pA+JDxHgEZFRSzvGtEE8=; b=pkSoTHR8uxsGWGf+6WZV+2Kl3YRKcAXJUY6/ckMXmefosBgtN55RQSOFIx2l9Iyf7FQ54PsAho0AT5/P5hKn4GUkho25TnaWNouvze6K+pgb0eZLemNMjj0nLMV74Bft958T+/WFhNTqOrfzGI68BsMr+hdGDE+kme+y3E27LLYafMyf/I4HfSGcWKZaEXS7+FvSJx4eP3Jpb59/UvAV6hvioujkmYkK9KCex5ZI/lq1r5+5XgVrjvdiT5FjOME5YWfcO9JPBCDbNQrNo4kxEt/ab9yQOemnIKR0Qukf+mxWXAw+CNA3quLc3+HMnwqf0a2EJNSNtwUoK5IlKJ1V0A== Received: from DM6PR03CA0099.namprd03.prod.outlook.com (2603:10b6:5:333::32) by DM4PR18MB5425.namprd18.prod.outlook.com (2603:10b6:8:17e::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.245.10; Thu, 23 Jul 2026 09:32:34 +0000 Received: from DS3PEPF000099DD.namprd04.prod.outlook.com (2603:10b6:5:333:cafe::3c) by DM6PR03CA0099.outlook.office365.com (2603:10b6:5:333::32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.245.10 via Frontend Transport; Thu, 23 Jul 2026 09:32:34 +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 DS3PEPF000099DD.mail.protection.outlook.com (10.167.17.199) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.270.5 via Frontend Transport; Thu, 23 Jul 2026 09:32:33 +0000 Received: from axz-uw1-build-vm02.corp.axiado.com (unknown [10.14.1.22]) by smtp.corp.axiado.com (Postfix) with ESMTP id 509DE4186B59; Thu, 23 Jul 2026 02:32:33 -0700 (PDT) From: Petar Stepanovic Date: Thu, 23 Jul 2026 02:32:19 -0700 Subject: [PATCH v2 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: <20260723-axiado-ax3000-pwm-v2-2-22002f0b281d@axiado.com> References: <20260723-axiado-ax3000-pwm-v2-0-22002f0b281d@axiado.com> In-Reply-To: <20260723-axiado-ax3000-pwm-v2-0-22002f0b281d@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.14.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1784799153; l=9950; i=pstepanovic@axiado.com; s=20250916; h=from:subject:message-id; bh=W37xQPVulbP9rcXA0r/phSaj7uYYnRvIEWgM94VOzgs=; b=bg1pSz1/WDZmb+IINErqorlDFkhFR1BI0/qrrwaYfczaxTHON1nxp/L2NHha0ARlCrF07x4xP Eh7Gh15XcFHCEaHSJ7cYzm93Ngyp65hGC7hIeuIPsL59xBGDiR81TrZ X-Developer-Key: i=pstepanovic@axiado.com; a=ed25519; pk=70f1UJOGT9U11ZK6o+ENXtv0I5wBE3e+Y9YWODzRsdI= X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS3PEPF000099DD:EE_|DM4PR18MB5425:EE_ X-MS-Office365-Filtering-Correlation-Id: b3f2a9ef-ae73-4529-7137-08dee89d5376 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|23010399003|376014|1800799024|36860700016|82310400026|6133799003|56012099006|10067099003|18002099003|22082099003|3023799007; X-Microsoft-Antispam-Message-Info: /uRgpHETDxRmGU1WgJm4l1YjPd1dL5EHnwdWeOOIkYX/fx/ivMv8AOCm4+OCKyWz/ChNE+eTWE2+DcAuZzMzCHMSlnapTW65P2BjeqtHPNu7a2VCksSk21mllqpK1I7oi6loRX79lRKXzF15gtgllrr1rWowa+MaGPEUyMY1rIHn1v2MctOB1YETuXs8ZZnoXuIzhFclPPMIxLRVUOrq2ZWp76ZrHy1Clo0ck+C9bWC6Ea7+ODl6egag3EhQPLcb5dZDmPk/V+RJdGEyFU1B2f4E4ZG+Qa8bPfVmKFh3v8HyF2akOMYEnxCMcKMtBKWMTLF9gfDyRyj6ZKy2wAoJ3qrThwXr3M4bs1TudeA7veNkKxNkFnKtswSm4H5BbhFO53i89aGTIFD3Y9MJWausJb5A2jIwFkLRjlGez5UqptPau/NaZqxU27xPTpZpB4NnWOVEHBnHOPf6BpxbxS9hmpqPiXsvaWXmRdF2opYexutgbXYmYM9hf18xp4n+oAX4tUUNEzEIxgvP7S/9T7i3/VSOuGbTamaAiLBR9sylwaQspuvcvFsXMrH7tFnW/VmBWRyFVCc4z65/vzMYyxL5dRuZ2SOrPV3D//Pi/bgvWQHOMtL+nj541qPmdxWCpP7TlgZ7GnUz+00qw9zIVRxlZ1DI0eMbhZ/yoCAkmqIs8YYtcmGGPuGUjP62270mncyqVoXIL+9Daxa8CjOHGp7Dhw== 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)(23010399003)(376014)(1800799024)(36860700016)(82310400026)(6133799003)(56012099006)(10067099003)(18002099003)(22082099003)(3023799007);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: agvS0OopIFnxz88WAdvssj1JQj2C8kfdh8xzTyJATlYNaeyTxuqgIfSfjCBM+odkGHcUkFMVMq7uyB4BGnz6DsP6YLCes0zQGbpwsKp4zddeSSXtMc+qo2k+oodEMlpthA6tFMVFpWq7nk1M8ifaC2sybaRTjtW0/QrGcTDQPl6RQNIbiFVAAABxIciH+ko66EtDxCRuxLmRzsXyrMIuS0QrM0fkSPLU9P4nRL/9MwpmcF142JicmDs8oB3I6Rhqac5jwXjg/hPPW0OnlU6yt/ZbbQ+y/arMyAuee73uEpzkiUSrIlOT6pRROAlKgD54iJqDyTgG16fmZTbNp/m6E/k1eRVDwuojcO0BwhLRgMvLms9a1Wwtm+4ONrakfBVvwWEMU7qnbvTHRzc7N/sFN2w18rDsY594PqN7ziVwFY4SQQnd8AJlsw8TtXuNyIcO X-OriginatorOrg: axiado.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Jul 2026 09:32:33.9712 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: b3f2a9ef-ae73-4529-7137-08dee89d5376 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: DS3PEPF000099DD.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM4PR18MB5425 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 | 272 +++++++++++++++++++++++++++++++++++++++++++= ++++ 4 files changed, 285 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..f9932646ae04 --- /dev/null +++ b/drivers/pwm/pwm-axiado.c @@ -0,0 +1,272 @@ +// 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. Longer periods are rounded down to the maximum. + * - A 0% duty cycle is not supported. Programming a zero high time produc= es + * a constant high output, so the driver rejects 0% duty-cycle requests. + * - A 100% duty cycle is supported and produces a constant high output. + */ + +#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_DUTY_MIN 1 + +/* Control register bits */ +#define AXIADO_PWM_CTRL_ENABLE BIT(0) + +struct axiado_pwm_chip { + void __iomem *base; + unsigned long rate; +}; + +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; + } + + /* The hardware cannot generate a 0% duty cycle. */ + if (!wf->duty_length_ns) + return -EINVAL; + + /* 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; + } + + 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; + + /* + * A positive duty request can round down to zero clock cycles. + * Round it up to the minimum supported high time. + */ + if (duty < AXIADO_PWM_DUTY_MIN) { + duty =3D AXIADO_PWM_DUTY_MIN; + ret =3D 1; + } + + /* + * 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 ctrl; + + ctrl =3D readl(axpwm->base + AXIADO_PWM_CTRL_REG); + + *wfhw =3D (struct axiado_pwm_waveform) { + .period =3D readl(axpwm->base + AXIADO_PWM_PERIOD_REG), + .duty =3D readl(axpwm->base + AXIADO_PWM_HIGH_REG), + .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; + + if (!wfhw->enabled) { + writel(0, axpwm->base + AXIADO_PWM_CTRL_REG); + return 0; + } + + /* + * The hardware has no shadow registers. These writes may alter the + * active waveform before the current period has completed. + */ + writel(wfhw->period, axpwm->base + AXIADO_PWM_PERIOD_REG); + writel(wfhw->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"); + + 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" }, + { .compatible =3D "axiado,ax3005-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