From patchwork Wed Feb 5 07:00:47 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chen Wang X-Patchwork-Id: 13960640 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 9176DC02192 for ; Wed, 5 Feb 2025 07:01:42 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=i7hrIbEKAl0zS0RDcFdBrk3t3gZfAgQsBsVNZMyd0Ns=; b=EHVy1pw1glpsN/ Bc23cV8kRzPUxHwcL7ZE8bYLlPE1IB1ekaI/Ih9ySV5uswMtF0HptjLUbS9qzANr81LDlncQg6job gkJZB7fn6Jb9nRqrGT1vWk05FIWNdUPcaVd/sd/ABvCDf4yE0HRN0z8D7nMBbt8OA9WtM4e+42yaJ g/eGPhWW9eT2d0f/9lWdLR0KZGAgJ89EL8LIjJO081AAQGZd3cgOgBz4eWFxVSjF+6vKKORUqddfg izC5Q8EYSSgId2CAzlxCHSStMEuoPpGZnaeXRCXX4bhu4L81VKBVzyhdA7eafTzD/IDJLOQRgMRH+ aiV3b0Ag/pf31HeCsVfw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tfZPl-00000002TI5-15pa; Wed, 05 Feb 2025 07:01:37 +0000 Received: from mail-oo1-xc30.google.com ([2607:f8b0:4864:20::c30]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tfZP7-00000002T9g-3VkY for linux-riscv@lists.infradead.org; Wed, 05 Feb 2025 07:00:59 +0000 Received: by mail-oo1-xc30.google.com with SMTP id 006d021491bc7-5f2e31139d9so3011230eaf.0 for ; Tue, 04 Feb 2025 23:00:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1738738857; x=1739343657; darn=lists.infradead.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=FVz8hdajmeQn+sLRJ3LfLAYPYY16G3b35wwKMJMKlco=; b=a4Yvk5FDXwe0B6YYTibAUMFLRuT4hqWl7VofF4tYTF5SOjOAdhn1Szcr/NhIrs2TYG sBOmRBZ7rwY1Ab6kECSDlPbXUp5zq3/dxwADczMh9eZlLF7p6a7g56konNKFcWuw9zj8 zavJGbzyvaCCk44W7olvfkKrIBTXPwczuUctNY11QkoMr6/+u+RpdI/dKpA5JFMxUkJ/ cqisDn2X6CyytWrhqwc1D6+H9iZOWDRnUNJ/+NpTYrsVhaqByh5vUS14V5KxN+rTI7ZV d9FpJ3Oh4g29DM40HLHfy45RWUzu6DwBni8lAccKFOFD/JeAwkvVAk70nICcCX+z4Vms C+Hg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738738857; x=1739343657; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=FVz8hdajmeQn+sLRJ3LfLAYPYY16G3b35wwKMJMKlco=; b=JURhKAEo2SRyyb8NSBtl93OJ6B4e4hsb4zPAkGhUV5b7BZnJpBJVQpIJudZDjDf6Si Y5jxFXpRO6h1Cq4PS8xFD9y0uwkOzMhkyxChHocZ+0zQZotvuA20x4kM15Gl+3Q7PSI3 uUrl7brsMtV1jPVT02PsByrRSRBLno2JVUTAs4V4Kv263ZCGe8ENptbV4SiUjUL+vKnH ACs9aSdov6ACfOQcmtovlat4eRRfX1D0YU6ErNwv+P4W/kOVCpNxxyI+pFUg4qGUtAY3 UCnkGkt1C6CZ9ebDw+DU5VFtoJQuMqIG8UijxeFgjpbpoQWCWHYZ4skG2UBLecyyFw5W sslg== X-Forwarded-Encrypted: i=1; AJvYcCVIFa7k3YRUdCGQLS0l1lQBBoz7TDvZCmJJ+oyNCKUSOaajJ8Jso+uGolFzkgymUJYBdxeyqt0YU4gBWQ==@lists.infradead.org X-Gm-Message-State: AOJu0YyVmolQcW/eR1tX111na6gr1VG6UP28QpBx58VZhXYvaVYVecX5 1qr6VD7yC4D1GyosLJOMmmRyzmc91qL71MX3Ia2bLKo4mq9z22J8 X-Gm-Gg: ASbGnctI5ZhLIHYc2//BWnRpPt309HQKD6XgZHCr9Nu9RUlZDtDV2tXme454FOJWUZr /z+OA/TZWZJTo/to1eORwopGjLHqrLfQkH1nFaRPTjlxSbEeZQtpoVnh9HOol6wm8dc1lvgNrzy wKM1hk+5zHRXwv5Q7dGsqCqDgqV7jEgLs02jL2QRxwFuP81eCUdrOExC3Ftkd8m6VZZVUzYesd2 8QFilBIc/1yuEzVBLu0bgB6kTuU2cqcGyvpGAxfyTRMpaFst/I4rQVjaZCOwGQQRHXubQG/XBZH dCjfE0a8Hp9V6x1lXZqYPZ/35w== X-Google-Smtp-Source: AGHT+IFsHiem+4btGG99h0d6BwMEp2mzewnRG8Nfz6GBsGDnx1ZgDacLy7O2/NhwKDNQhLK60akjwA== X-Received: by 2002:a05:6820:1992:b0:5fa:73ed:de8 with SMTP id 006d021491bc7-5fc479ce7demr1475362eaf.6.1738738856694; Tue, 04 Feb 2025 23:00:56 -0800 (PST) Received: from localhost.localdomain ([122.8.183.87]) by smtp.gmail.com with ESMTPSA id 006d021491bc7-5fc104e29b7sm3598247eaf.17.2025.02.04.23.00.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 04 Feb 2025 23:00:55 -0800 (PST) From: Chen Wang To: ukleinek@kernel.org, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, unicorn_wang@outlook.com, inochiama@outlook.com, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pwm@vger.kernel.org, linux-riscv@lists.infradead.org, chao.wei@sophgo.com, haijiao.liu@sophgo.com, xiaoguang.xing@sophgo.com, chunzhi.lin@sophgo.com Cc: Krzysztof Kozlowski Subject: [PATCH v7 1/3] dt-bindings: pwm: sophgo: add PWM controller for SG2042 Date: Wed, 5 Feb 2025 15:00:47 +0800 Message-Id: X-Mailer: git-send-email 2.34.1 In-Reply-To: References: MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250204_230057_887329_202DAC2F X-CRM114-Status: GOOD ( 11.36 ) X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org From: Chen Wang Sophgo SG2042 contains a PWM controller, which has 4 channels and can generate PWM waveforms output. Reviewed-by: Krzysztof Kozlowski Signed-off-by: Chen Wang --- .../bindings/pwm/sophgo,sg2042-pwm.yaml | 58 +++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 Documentation/devicetree/bindings/pwm/sophgo,sg2042-pwm.yaml diff --git a/Documentation/devicetree/bindings/pwm/sophgo,sg2042-pwm.yaml b/Documentation/devicetree/bindings/pwm/sophgo,sg2042-pwm.yaml new file mode 100644 index 000000000000..bbb6326d47d7 --- /dev/null +++ b/Documentation/devicetree/bindings/pwm/sophgo,sg2042-pwm.yaml @@ -0,0 +1,58 @@ +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/pwm/sophgo,sg2042-pwm.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Sophgo SG2042 PWM controller + +maintainers: + - Chen Wang + +description: + This controller contains 4 channels which can generate PWM waveforms. + +allOf: + - $ref: pwm.yaml# + +properties: + compatible: + const: sophgo,sg2042-pwm + + reg: + maxItems: 1 + + clocks: + maxItems: 1 + + clock-names: + items: + - const: apb + + resets: + maxItems: 1 + + "#pwm-cells": + const: 3 + +required: + - compatible + - reg + - clocks + - clock-names + - resets + +unevaluatedProperties: false + +examples: + - | + #include + + pwm@7f006000 { + compatible = "sophgo,sg2042-pwm"; + reg = <0x7f006000 0x1000>; + #pwm-cells = <3>; + clocks = <&clock 67>; + clock-names = "apb"; + resets = <&rstgen RST_PWM>; + }; From patchwork Wed Feb 5 07:01:13 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chen Wang X-Patchwork-Id: 13960642 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 95A91C02197 for ; Wed, 5 Feb 2025 07:03:05 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=cGMSCuJixoaexuBBTQp0zqbWDCTPIp4ONLXOPCjUuvE=; b=n1CvB/PgViuxw4 upbVxN45+U7u288uG/IPuCePyknG8NiAzwTiLl1/0Ni2nv2Wvg5G4hwv9Yc/UklN4Xjz/L/CIYNyK ggeQ9pzl20+PCaNLz5Zms5wNdPdHY3n6jukfiNu6RPZq3F7QrI8JCs9NP0/4WR6/DGlYccob2/i2H DP2Ko1Sia/ukrx1Z63Lbr/VGJbVfdswm8suhm0UC+IGkDOZ79pGhY+mPWApORuzCoweWb36NQvquL TOH5jBSqrEs635X4AHEBJoFklN2U0uTsKeLOXDlLhG2HIvdSWAsnvF+u27ORAZpyuKuIN9Qe/74zo HGj2O5vrD8n9piNdh7Eg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tfZR5-00000002TWq-3xru; Wed, 05 Feb 2025 07:02:59 +0000 Received: from mail-oi1-x236.google.com ([2607:f8b0:4864:20::236]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tfZPZ-00000002TFS-1Ks1 for linux-riscv@lists.infradead.org; Wed, 05 Feb 2025 07:01:26 +0000 Received: by mail-oi1-x236.google.com with SMTP id 5614622812f47-3eba559611aso1823535b6e.0 for ; Tue, 04 Feb 2025 23:01:24 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1738738884; x=1739343684; darn=lists.infradead.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=SwBabY2Dif2qU+HHNZ8N8GiCs/b5gFtvrv0DgcVk+kU=; b=SOyxaytilN9FvlgiIK3cYE8SlkfLo5BHhTQMjJdtFFknCPgVYSHjzc+nY9kDRLR1+Q Qe/Lx72mQJfWMxF+vlXt9csEOMcVdIEI/0HpCs3Vu8qlDjLVIJ1GU82zxxrIEsJVhs/z JLPaxMxbQiNw+U8zLX7wylyovIYwUMrbJ/ZeIJL19xbvsYuF5PhZe8GfYJq0awS22qhh Dr5mKMWkqgjK+1R62+ebreVOleEjx1WgSzUbBN6xL6KMmeGUWwKSP5w8LtIVpDi4k6Vd yRg/hV4m3wyIPjiQtLckS2Cyug/sRMInNWD0ZNXwXB9/gOKRDnh9ra6COSLq87EME83R M1kg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738738884; x=1739343684; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=SwBabY2Dif2qU+HHNZ8N8GiCs/b5gFtvrv0DgcVk+kU=; b=arTT9fzcIdBE0HhbrzxCuWYcDfZX3ZFewCXhrXQi+QtwCKaggAt75BfzfFGzdBNNod MRuW3GYlPi+2fkCY+uQb7IJRd6/t0nBUOwhphPxZQZquK3J2YnyGXUE95V9S78weEXgs 3wfCFyXfZ49Mq3Rja3gB9paFGvt2SzFxISuLKWeO0zC4CqFQxrWw2GGPUTNv7OZ+6ZyV 6jvVHz/N/QV6ClSM2Oot4FtfchA2bgsf8UfhZTGen3QkXsEy7dS+aBmdz8E/1YhSvBhV cehnWV+lNnD23leEEyxsWEsy3NCk0vo9QncyDyCO0M52wOuJj0F+1UqT3jUZpV1jggBH uGTg== X-Forwarded-Encrypted: i=1; AJvYcCXmEhis2ymu+TfIBq+3yWFQYm0NWYaA7sjx1IqdgptbPzD/iScdPUmY7hh5dOXJ4PPuL5rjLJ5WPBpNnA==@lists.infradead.org X-Gm-Message-State: AOJu0Yyf/RWE2w/lOxANqzpPl1aw0QBmZODkpv94HX0xkCC9u7zUMTCr dw+s3p5KrLINccytBEsjLSCTtzFpaPKeD7ETc0VXsJh7XCAfSZv9 X-Gm-Gg: ASbGncs/WtoZ7LJVdR+ZJ+u8+bosDv8sAlLyrl0Lv3JL3Al8GsZfiYLXxjd+nBRGZWh S1k3QlA9qynHr9V5yEKQpwm1w7T+8CtaFDxydNukWPM5PrPbWBLsz7WsJRIrulWcuPXzyCCcvBn 4WI1LSKwyn3Ph3/KNRf2HeNWI+8PMzLJwsHeHsCkmErcSIcBBAyK+0AhAECwfahL5p3LcNu/fJ5 zVpte3vWkny17/X9kD/+BOTN916ODNLRjBybcJRHDUeB7lijLdilzyfmkHUGTTkVxx7SrrV5ZJM cux/YgwRV/RFEHg6poy7mPoezA== X-Google-Smtp-Source: AGHT+IFOKv7NvEPObj+ABlljhF58GKcG3uAwtk/8J4W/YhXzERpVBCwZPgxh2nYVVtiLK17dNr+teQ== X-Received: by 2002:a05:6808:3204:b0:3e6:5761:af3 with SMTP id 5614622812f47-3f37c10d334mr1158689b6e.9.1738738882752; Tue, 04 Feb 2025 23:01:22 -0800 (PST) Received: from localhost.localdomain ([122.8.183.87]) by smtp.gmail.com with ESMTPSA id 5614622812f47-3f33367f6c6sm3441203b6e.42.2025.02.04.23.01.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 04 Feb 2025 23:01:21 -0800 (PST) From: Chen Wang To: ukleinek@kernel.org, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, unicorn_wang@outlook.com, inochiama@outlook.com, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pwm@vger.kernel.org, linux-riscv@lists.infradead.org, chao.wei@sophgo.com, haijiao.liu@sophgo.com, xiaoguang.xing@sophgo.com, chunzhi.lin@sophgo.com Cc: Sean Young Subject: [PATCH v7 2/3] pwm: sophgo: add driver for Sophgo SG2042 PWM Date: Wed, 5 Feb 2025 15:01:13 +0800 Message-Id: X-Mailer: git-send-email 2.34.1 In-Reply-To: References: MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250204_230125_361038_6DE02AB7 X-CRM114-Status: GOOD ( 27.05 ) X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org From: Chen Wang Add a PWM driver for PWM controller in Sophgo SG2042 SoC. Signed-off-by: Sean Young Signed-off-by: Chen Wang --- drivers/pwm/Kconfig | 10 ++ drivers/pwm/Makefile | 1 + drivers/pwm/pwm-sophgo-sg2042.c | 196 ++++++++++++++++++++++++++++++++ 3 files changed, 207 insertions(+) create mode 100644 drivers/pwm/pwm-sophgo-sg2042.c diff --git a/drivers/pwm/Kconfig b/drivers/pwm/Kconfig index 0915c1e7df16..ec85f3895936 100644 --- a/drivers/pwm/Kconfig +++ b/drivers/pwm/Kconfig @@ -584,6 +584,16 @@ config PWM_SL28CPLD To compile this driver as a module, choose M here: the module will be called pwm-sl28cpld. +config PWM_SOPHGO_SG2042 + tristate "Sophgo SG2042 PWM support" + depends on ARCH_SOPHGO || COMPILE_TEST + help + PWM driver for the PWM controller on Sophgo SG2042 SoC. The PWM + controller supports outputing 4 channels of PWM waveforms. + + To compile this driver as a module, choose M here: the module + will be called pwm_sophgo_sg2042. + config PWM_SPEAR tristate "STMicroelectronics SPEAr PWM support" depends on PLAT_SPEAR || COMPILE_TEST diff --git a/drivers/pwm/Makefile b/drivers/pwm/Makefile index 9081e0c0e9e0..539e0def3f82 100644 --- a/drivers/pwm/Makefile +++ b/drivers/pwm/Makefile @@ -53,6 +53,7 @@ obj-$(CONFIG_PWM_RZ_MTU3) += pwm-rz-mtu3.o obj-$(CONFIG_PWM_SAMSUNG) += pwm-samsung.o obj-$(CONFIG_PWM_SIFIVE) += pwm-sifive.o obj-$(CONFIG_PWM_SL28CPLD) += pwm-sl28cpld.o +obj-$(CONFIG_PWM_SOPHGO_SG2042) += pwm-sophgo-sg2042.o obj-$(CONFIG_PWM_SPEAR) += pwm-spear.o obj-$(CONFIG_PWM_SPRD) += pwm-sprd.o obj-$(CONFIG_PWM_STI) += pwm-sti.o diff --git a/drivers/pwm/pwm-sophgo-sg2042.c b/drivers/pwm/pwm-sophgo-sg2042.c new file mode 100644 index 000000000000..ce8cf8af3402 --- /dev/null +++ b/drivers/pwm/pwm-sophgo-sg2042.c @@ -0,0 +1,196 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Sophgo SG2042 PWM Controller Driver + * + * Copyright (C) 2024 Sophgo Technology Inc. + * Copyright (C) 2024 Chen Wang + * + * Limitations: + * - After reset, the output of the PWM channel is always high. + * The value of HLPERIOD/PERIOD is 0. + * - When HLPERIOD or PERIOD is reconfigured, PWM will start to + * output waveforms with the new configuration after completing + * the running period. + * - When PERIOD and HLPERIOD is set to 0, the PWM wave output will + * be stopped and the output is pulled to high. + * See the datasheet [1] for more details. + * [1]:https://github.com/sophgo/sophgo-doc/tree/main/SG2042/TRM + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +/* + * Offset RegisterName + * 0x0000 HLPERIOD0 + * 0x0004 PERIOD0 + * 0x0008 HLPERIOD1 + * 0x000C PERIOD1 + * 0x0010 HLPERIOD2 + * 0x0014 PERIOD2 + * 0x0018 HLPERIOD3 + * 0x001C PERIOD3 + * Four groups and every group is composed of HLPERIOD & PERIOD + */ +#define SG2042_PWM_HLPERIOD(chan) ((chan) * 8 + 0) +#define SG2042_PWM_PERIOD(chan) ((chan) * 8 + 4) + +#define SG2042_PWM_CHANNELNUM 4 + +/** + * struct sg2042_pwm_ddata - private driver data + * @base: base address of mapped PWM registers + * @clk_rate_hz: rate of base clock in HZ + */ +struct sg2042_pwm_ddata { + void __iomem *base; + unsigned long clk_rate_hz; +}; + +/* + * period_ticks: PERIOD + * hlperiod_ticks: HLPERIOD + */ +static void pwm_sg2042_config(struct sg2042_pwm_ddata *ddata, unsigned int chan, + u32 period_ticks, u32 hlperiod_ticks) +{ + void __iomem *base = ddata->base; + + writel(period_ticks, base + SG2042_PWM_PERIOD(chan)); + writel(hlperiod_ticks, base + SG2042_PWM_HLPERIOD(chan)); +} + +static int pwm_sg2042_apply(struct pwm_chip *chip, struct pwm_device *pwm, + const struct pwm_state *state) +{ + struct sg2042_pwm_ddata *ddata = pwmchip_get_drvdata(chip); + u32 hlperiod_ticks; + u32 period_ticks; + + if (state->polarity == PWM_POLARITY_INVERSED) + return -EINVAL; + + if (!state->enabled) { + pwm_sg2042_config(ddata, pwm->hwpwm, 0, 0); + return 0; + } + + /* + * Duration of High level (duty_cycle) = HLPERIOD x Period_of_input_clk + * Duration of One Cycle (period) = PERIOD x Period_of_input_clk + */ + period_ticks = min(mul_u64_u64_div_u64(ddata->clk_rate_hz, state->period, NSEC_PER_SEC), U32_MAX); + hlperiod_ticks = min(mul_u64_u64_div_u64(ddata->clk_rate_hz, state->duty_cycle, NSEC_PER_SEC), U32_MAX); + + dev_dbg(pwmchip_parent(chip), "chan[%u]: PERIOD=%u, HLPERIOD=%u\n", + pwm->hwpwm, period_ticks, hlperiod_ticks); + + pwm_sg2042_config(ddata, pwm->hwpwm, period_ticks, hlperiod_ticks); + + return 0; +} + +static int pwm_sg2042_get_state(struct pwm_chip *chip, struct pwm_device *pwm, + struct pwm_state *state) +{ + struct sg2042_pwm_ddata *ddata = pwmchip_get_drvdata(chip); + unsigned int chan = pwm->hwpwm; + u32 hlperiod_ticks; + u32 period_ticks; + + period_ticks = readl(ddata->base + SG2042_PWM_PERIOD(chan)); + hlperiod_ticks = readl(ddata->base + SG2042_PWM_HLPERIOD(chan)); + + if (!period_ticks) { + state->enabled = false; + return 0; + } + + if (hlperiod_ticks > period_ticks) + hlperiod_ticks = period_ticks; + + state->enabled = true; + state->period = DIV_ROUND_UP_ULL((u64)period_ticks * NSEC_PER_SEC, ddata->clk_rate_hz); + state->duty_cycle = DIV_ROUND_UP_ULL((u64)hlperiod_ticks * NSEC_PER_SEC, ddata->clk_rate_hz); + state->polarity = PWM_POLARITY_NORMAL; + + return 0; +} + +static const struct pwm_ops pwm_sg2042_ops = { + .apply = pwm_sg2042_apply, + .get_state = pwm_sg2042_get_state, +}; + +static const struct of_device_id sg2042_pwm_ids[] = { + { .compatible = "sophgo,sg2042-pwm" }, + { } +}; +MODULE_DEVICE_TABLE(of, sg2042_pwm_ids); + +static int pwm_sg2042_probe(struct platform_device *pdev) +{ + struct device *dev = &pdev->dev; + struct sg2042_pwm_ddata *ddata; + struct reset_control *rst; + struct pwm_chip *chip; + struct clk *clk; + int ret; + + chip = devm_pwmchip_alloc(dev, SG2042_PWM_CHANNELNUM, sizeof(*ddata)); + if (IS_ERR(chip)) + return PTR_ERR(chip); + ddata = pwmchip_get_drvdata(chip); + + ddata->base = devm_platform_ioremap_resource(pdev, 0); + if (IS_ERR(ddata->base)) + return PTR_ERR(ddata->base); + + clk = devm_clk_get_enabled(dev, "apb"); + if (IS_ERR(clk)) + return dev_err_probe(dev, PTR_ERR(clk), "Failed to get base clk\n"); + + ret = devm_clk_rate_exclusive_get(dev, clk); + if (ret) + return dev_err_probe(dev, ret, "Failed to get exclusive rate\n"); + + ddata->clk_rate_hz = clk_get_rate(clk); + /* period = PERIOD * NSEC_PER_SEC / clk_rate_hz */ + if (!ddata->clk_rate_hz || ddata->clk_rate_hz > NSEC_PER_SEC) + return dev_err_probe(dev, -EINVAL, + "Invalid clock rate: %lu\n", ddata->clk_rate_hz); + + rst = devm_reset_control_get_optional_shared_deasserted(dev, NULL); + if (IS_ERR(rst)) + return dev_err_probe(dev, PTR_ERR(rst), "Failed to get reset\n"); + + chip->ops = &pwm_sg2042_ops; + chip->atomic = true; + + ret = devm_pwmchip_add(dev, chip); + if (ret < 0) { + reset_control_assert(rst); + return dev_err_probe(dev, ret, "Failed to register PWM chip\n"); + } + + return 0; +} + +static struct platform_driver pwm_sg2042_driver = { + .driver = { + .name = "sg2042-pwm", + .of_match_table = sg2042_pwm_ids, + }, + .probe = pwm_sg2042_probe, +}; +module_platform_driver(pwm_sg2042_driver); + +MODULE_AUTHOR("Chen Wang"); +MODULE_DESCRIPTION("Sophgo SG2042 PWM driver"); +MODULE_LICENSE("GPL"); From patchwork Wed Feb 5 07:01:34 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chen Wang X-Patchwork-Id: 13960641 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 7AFDCC02192 for ; Wed, 5 Feb 2025 07:03:05 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:To:From:Reply-To:Cc:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=bM7ZBxEu87riEu0hTahsapZivFPuw+mvfFCqATzpWHA=; b=oCySwzUSfqRNWJ k0MGN2gEbIGhscS/bhhkpUVqL1nb8YcqeaJKtAD87bzSaN2YdGjaHZ8ZPJsAyURVlGaj1+ii1ZaTy 3M1PtS+ewg6Rt4K6PIG+XMB71EXSJQ+jDLVCedwPfqPIvEGQpz+BjV7f3B5VuwjU1p26ipzpVw8C7 QMg9LX9QPrvRO6zIldhsmEhqYh4S7Et8nIB0WXpfd+Ol/DnlQI9tY/cweSzKiyq+YPw+f843h0BZS 4nZoLvAdwFKd8uykKK2jmdN2suU5WLBfxBy7Ro2zZUQIHyMrhzG38Vtgk2ZR3stLnRHSZvqcxILT0 hNuyT/ybaqjWrAd5sFRA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tfZR6-00000002TX6-2HiI; Wed, 05 Feb 2025 07:03:00 +0000 Received: from mail-oi1-x22f.google.com ([2607:f8b0:4864:20::22f]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tfZPs-00000002TLJ-1EUs for linux-riscv@lists.infradead.org; Wed, 05 Feb 2025 07:01:45 +0000 Received: by mail-oi1-x22f.google.com with SMTP id 5614622812f47-3ebb1652729so3607653b6e.3 for ; Tue, 04 Feb 2025 23:01:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1738738903; x=1739343703; darn=lists.infradead.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=VetlIju5pkNjg/WmtiNabYY/80QVE5zZqTlQOK48sTE=; b=MDWWq79Qh/nprPylRN4Ma7XiNPuwKOvXZueXmZsw8aG+/I60+JD5wGPoM3xBIvE4VC FpL0w+rXSOwNvar9K9OHwu6zDzwdyLhOkUSS2owWvnX2QAuxzNLjJ7stIreDQG6WDFJa 6Qnj//OVY+Eq0IpR8fyOy6Y7f/Uu04R8dy+fdaKwUkWkSiyRcoMnjZN0771fvteifudy T0OUVo/uVMcvlWTVgK37dQtoXkhGA6IZ+H+lfK6baBJSfs0UIvDfldBV2HAP4Opve3r4 ui0N8ZRr6IHsH3uczJdRE2lSQtnjORARaG0j40v5S6UoW6ozVsqkQcIwfTwev3S1ZgqL fjwQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738738903; x=1739343703; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=VetlIju5pkNjg/WmtiNabYY/80QVE5zZqTlQOK48sTE=; b=EKfSi3ZKzc1i62MufzVl/ApW4w4dAAjafOH7vrg9kUVAgJrZYlk8o+O95Sp+w2sB6v E8UvtA8qoYp51PsDsqyayddp6WvrG1FrS1dEscZ1HtwWz8MwkghcHFlLiyFzUI57hsxh NTGal4gARmOZVhxI7G1TrgzFJT2PpBA0Tnp2dvGNpNzG+e6scTCc0nYEsWID5ldKpvBT d2sJHW+OBdIp7wKZj95M9ErTG3lIJlpPuN5nwB2EfEmK2JMY9uHhhhsaS8N/t5tYHFTo dIiiXIFm1rjLxrqv7LaXODeqFfIrOU/WhxPoN3pq7fOWMEh6tnUUsra+cQr9MKcEyico HUvA== X-Forwarded-Encrypted: i=1; AJvYcCUJGLy01ROsXJEh+i22IWIOF623imILX6CgOWOWNsbrb9Lz9vL2Fghxpaa21dxtC14/qHQ7fZ3Uq2cAiw==@lists.infradead.org X-Gm-Message-State: AOJu0YxGric0Koxhs76h0bZZnM7gClmBQtvEDsDqodRGtQJ6+LaKZDN6 J4T26lSjRNiViAbkvA0ffOu2XTCxBGoJwNz5eBpc4+ASGl+K7+ua X-Gm-Gg: ASbGncvJdG24Gw7jUAXWFjsQHumMjvKjTXStdtfEpytKJkZ5EhnChEvsE2m+CK71uJX wTvuae0C1/RDlvI5kop3xTZSHo8ExFB4YU8d2OCwtPcvocNUGhVjNxWGTMqEsOZg3u9V7VxNOPq HsoWQgszS5rcgAfvOrUWJwpAtBOsYWLrlKYdesFsJ1YXP4EiyZtnHOCa9ZQ/8UYTNMZb0ONdDpT kIQYmmP6Mnr3O+QA+Md0Ism6DghAsfPrbS6h8xPcMOFrGB8h6b0Sch+SC6Z47q0hyqMlj/XkXim zHBqbrT1lXXkzZ5m9vVdiCQqlA== X-Google-Smtp-Source: AGHT+IHsN/LcSCw5m80/mGufauWzvwto1G8RpGC+M5RvbFWxlmw2NwUKjbpX1R3EQj/I7XUX3H7gJw== X-Received: by 2002:a05:6808:3c8a:b0:3eb:638d:5e28 with SMTP id 5614622812f47-3f37c0e5a0bmr1104846b6e.4.1738738903247; Tue, 04 Feb 2025 23:01:43 -0800 (PST) Received: from localhost.localdomain ([122.8.183.87]) by smtp.gmail.com with ESMTPSA id 5614622812f47-3f33367f6c6sm3441313b6e.42.2025.02.04.23.01.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 04 Feb 2025 23:01:42 -0800 (PST) From: Chen Wang To: ukleinek@kernel.org, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, unicorn_wang@outlook.com, inochiama@outlook.com, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pwm@vger.kernel.org, linux-riscv@lists.infradead.org, chao.wei@sophgo.com, haijiao.liu@sophgo.com, xiaoguang.xing@sophgo.com, chunzhi.lin@sophgo.com Subject: [PATCH v7 3/3] riscv: sophgo: dts: add pwm controller for SG2042 SoC Date: Wed, 5 Feb 2025 15:01:34 +0800 Message-Id: X-Mailer: git-send-email 2.34.1 In-Reply-To: References: MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250204_230144_331580_02642249 X-CRM114-Status: UNSURE ( 8.09 ) X-CRM114-Notice: Please train this message. X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org From: Chen Wang SG2042 has one PWM controller, which has 4 pwm output channels. Signed-off-by: Chen Wang --- arch/riscv/boot/dts/sophgo/sg2042.dtsi | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/arch/riscv/boot/dts/sophgo/sg2042.dtsi b/arch/riscv/boot/dts/sophgo/sg2042.dtsi index e62ac51ac55a..4449c762d663 100644 --- a/arch/riscv/boot/dts/sophgo/sg2042.dtsi +++ b/arch/riscv/boot/dts/sophgo/sg2042.dtsi @@ -165,6 +165,15 @@ port2a: gpio-controller@0 { }; }; + pwm: pwm@703000c000 { + compatible = "sophgo,sg2042-pwm"; + reg = <0x70 0x3000c000 0x0 0x20>; + #pwm-cells = <3>; + clocks = <&clkgen GATE_CLK_APB_PWM>; + clock-names = "apb"; + resets = <&rstgen RST_PWM>; + }; + pllclk: clock-controller@70300100c0 { compatible = "sophgo,sg2042-pll"; reg = <0x70 0x300100c0 0x0 0x40>;