From nobody Fri Jan 2 05:06:37 2026 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 54892CDB482 for ; Sat, 14 Oct 2023 18:20:16 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233325AbjJNSUP (ORCPT ); Sat, 14 Oct 2023 14:20:15 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:56464 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233208AbjJNSUL (ORCPT ); Sat, 14 Oct 2023 14:20:11 -0400 Received: from mail-ed1-x533.google.com (mail-ed1-x533.google.com [IPv6:2a00:1450:4864:20::533]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E1638D7 for ; Sat, 14 Oct 2023 11:20:08 -0700 (PDT) Received: by mail-ed1-x533.google.com with SMTP id 4fb4d7f45d1cf-53d9f001b35so5413440a12.2 for ; Sat, 14 Oct 2023 11:20:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pqrs.dk; s=google; t=1697307607; x=1697912407; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=rEd5JAdwoWbnbfWI9ZMh38QiojqTPoc3XzE3CzLAESk=; b=Pkoesfa3oxocrnKIcD7NlCZeVDIeGvEj2o3YPpQc8WBXloJUyjSrtVQ70XrYaNPr7h pHKakbHIZTp4brjS5AWwagB1I9faFr8YobUqtK76s0cQcnlE/nbYrnzJy/W7ZuYYujgl F26Eoz7gMckrNaezvG3D2DIPlEUdIziLMStfOS3x2SvMpFn6NFhn37Msh3JnsNUIipxW g2nbTmeecAfHbnQ1JwnOHuH5l+xVChDzzDbQESRffuNrOcX4MZfzHh/b2U9JTOiRF7ab B1hj0mILgFNWAL1SlsZCBKPVA4HwbGAZOGae96bdqhQrm4uyQemTSMGG5q37t8s2VVJr Cc9A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1697307607; x=1697912407; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=rEd5JAdwoWbnbfWI9ZMh38QiojqTPoc3XzE3CzLAESk=; b=YzNa6J36dWEqHZhkExsZmyRI1nJveB9OD8yziFF/VcIuuA7cBW82+NWRYD5egxKJde F3TnxVRLy31HrIZHzeCrLJze8yptVLR/pnFO8OPyIpKP6/PmWT/SG84DNh25R4xcFfQM FrSiI/FEoCgNsIkNapTbTmeeSHKF2Cagl5A9NwTdRmUz3lBWwGHzdEF7TgzWVmVfVw2r cDRYCQMV3lC7EqDGooq4wsEzVfomPZGWdbOopywjDZxzkYbP++QVm1sliJoIIP2l/fVT Pod4b5obK2UDtaHz3skt38OtKOiT1suj9ApB0Xadlg+HP7kagTf4ow53p3y/OPQLsv+b 9Gmw== X-Gm-Message-State: AOJu0Yzhb/SSSOs99pLcAuwbbQfM8RpEEsVqtO8sG1mvVU1gkBz4qBxL OyUcCGlgC3qbWj95UEskbDV6/A== X-Google-Smtp-Source: AGHT+IEujxdLwjOGEeCP+hd5rDiO7RVHUPnxwhLULr9ow3mkBt1dt/Jl0pGIKYSuS4vGMmeHZRlzyQ== X-Received: by 2002:a50:8e58:0:b0:53e:327c:7bbc with SMTP id 24-20020a508e58000000b0053e327c7bbcmr5084053edx.16.1697307606993; Sat, 14 Oct 2023 11:20:06 -0700 (PDT) Received: from capella.localdomain (80.71.142.18.ipv4.parknet.dk. [80.71.142.18]) by smtp.gmail.com with ESMTPSA id i13-20020a056402054d00b005231e3d89efsm13032574edx.31.2023.10.14.11.20.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 14 Oct 2023 11:20:06 -0700 (PDT) From: =?utf-8?q?Alvin_=C5=A0ipraga?= Date: Sat, 14 Oct 2023 20:19:41 +0200 Subject: [PATCH v4 1/3] dt-bindings: clock: si5351: convert to yaml MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20231014-alvin-clk-si5351-no-pll-reset-v4-1-a3567024007d@bang-olufsen.dk> References: <20231014-alvin-clk-si5351-no-pll-reset-v4-0-a3567024007d@bang-olufsen.dk> In-Reply-To: <20231014-alvin-clk-si5351-no-pll-reset-v4-0-a3567024007d@bang-olufsen.dk> To: Michael Turquette , Stephen Boyd , Rob Herring , Krzysztof Kozlowski , Conor Dooley , =?utf-8?q?Alvin_=C5=A0ipraga?= Cc: Sebastian Hesselbarth , Rabeeh Khoury , Jacob Siverskog , Sergej Sawazki , linux-clk@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.12.3 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Alvin =C5=A0ipraga The following additional properties are described: - clock-names - clock-frequency of the clkout child nodes In order to suppress warnings from the DT schema validator, the clkout child nodes are prescribed names clkout@[0-7] rather than clkout[0-7]. The example is refined as follows: - correct the usage of property pll-master -> silabs,pll-master - give an example of how the silabs,pll-reset property can be used I made myself maintainer of the file as I cannot presume that anybody else wants the responsibility. Cc: Sebastian Hesselbarth Cc: Rabeeh Khoury Signed-off-by: Alvin =C5=A0ipraga --- .../devicetree/bindings/clock/silabs,si5351.txt | 126 ----------- .../devicetree/bindings/clock/silabs,si5351.yaml | 245 +++++++++++++++++= ++++ 2 files changed, 245 insertions(+), 126 deletions(-) diff --git a/Documentation/devicetree/bindings/clock/silabs,si5351.txt b/Do= cumentation/devicetree/bindings/clock/silabs,si5351.txt deleted file mode 100644 index bfda6af76bee..000000000000 --- a/Documentation/devicetree/bindings/clock/silabs,si5351.txt +++ /dev/null @@ -1,126 +0,0 @@ -Binding for Silicon Labs Si5351a/b/c programmable i2c clock generator. - -Reference -[1] Si5351A/B/C Data Sheet - https://www.skyworksinc.com/-/media/Skyworks/SL/documents/public/data-= sheets/Si5351-B.pdf - -The Si5351a/b/c are programmable i2c clock generators with up to 8 output -clocks. Si5351a also has a reduced pin-count package (MSOP10) where only -3 output clocks are accessible. The internal structure of the clock -generators can be found in [1]. - -=3D=3DI2C device node=3D=3D - -Required properties: -- compatible: shall be one of the following: - "silabs,si5351a" - Si5351a, QFN20 package - "silabs,si5351a-msop" - Si5351a, MSOP10 package - "silabs,si5351b" - Si5351b, QFN20 package - "silabs,si5351c" - Si5351c, QFN20 package -- reg: i2c device address, shall be 0x60 or 0x61. -- #clock-cells: from common clock binding; shall be set to 1. -- clocks: from common clock binding; list of parent clock - handles, shall be xtal reference clock or xtal and clkin for - si5351c only. Corresponding clock input names are "xtal" and - "clkin" respectively. -- #address-cells: shall be set to 1. -- #size-cells: shall be set to 0. - -Optional properties: -- silabs,pll-source: pair of (number, source) for each pll. Allows - to overwrite clock source of pll A (number=3D0) or B (number=3D1). - -=3D=3DChild nodes=3D=3D - -Each of the clock outputs can be overwritten individually by -using a child node to the I2C device node. If a child node for a clock -output is not set, the eeprom configuration is not overwritten. - -Required child node properties: -- reg: number of clock output. - -Optional child node properties: -- silabs,clock-source: source clock of the output divider stage N, shall be - 0 =3D multisynth N - 1 =3D multisynth 0 for output clocks 0-3, else multisynth4 - 2 =3D xtal - 3 =3D clkin (si5351c only) -- silabs,drive-strength: output drive strength in mA, shall be one of {2,4= ,6,8}. -- silabs,multisynth-source: source pll A(0) or B(1) of corresponding multi= synth - divider. -- silabs,pll-master: boolean, multisynth can change pll frequency. -- silabs,pll-reset: boolean, clock output can reset its pll. -- silabs,disable-state : clock output disable state, shall be - 0 =3D clock output is driven LOW when disabled - 1 =3D clock output is driven HIGH when disabled - 2 =3D clock output is FLOATING (HIGH-Z) when disabled - 3 =3D clock output is NEVER disabled - -=3D=3DExample=3D=3D - -/* 25MHz reference crystal */ -ref25: ref25M { - compatible =3D "fixed-clock"; - #clock-cells =3D <0>; - clock-frequency =3D <25000000>; -}; - -i2c-master-node { - - /* Si5351a msop10 i2c clock generator */ - si5351a: clock-generator@60 { - compatible =3D "silabs,si5351a-msop"; - reg =3D <0x60>; - #address-cells =3D <1>; - #size-cells =3D <0>; - #clock-cells =3D <1>; - - /* connect xtal input to 25MHz reference */ - clocks =3D <&ref25>; - clock-names =3D "xtal"; - - /* connect xtal input as source of pll0 and pll1 */ - silabs,pll-source =3D <0 0>, <1 0>; - - /* - * overwrite clkout0 configuration with: - * - 8mA output drive strength - * - pll0 as clock source of multisynth0 - * - multisynth0 as clock source of output divider - * - multisynth0 can change pll0 - * - set initial clock frequency of 74.25MHz - */ - clkout0 { - reg =3D <0>; - silabs,drive-strength =3D <8>; - silabs,multisynth-source =3D <0>; - silabs,clock-source =3D <0>; - silabs,pll-master; - clock-frequency =3D <74250000>; - }; - - /* - * overwrite clkout1 configuration with: - * - 4mA output drive strength - * - pll1 as clock source of multisynth1 - * - multisynth1 as clock source of output divider - * - multisynth1 can change pll1 - */ - clkout1 { - reg =3D <1>; - silabs,drive-strength =3D <4>; - silabs,multisynth-source =3D <1>; - silabs,clock-source =3D <0>; - pll-master; - }; - - /* - * overwrite clkout2 configuration with: - * - xtal as clock source of output divider - */ - clkout2 { - reg =3D <2>; - silabs,clock-source =3D <2>; - }; - }; -}; diff --git a/Documentation/devicetree/bindings/clock/silabs,si5351.yaml b/D= ocumentation/devicetree/bindings/clock/silabs,si5351.yaml new file mode 100644 index 000000000000..16d1142c4a2f --- /dev/null +++ b/Documentation/devicetree/bindings/clock/silabs,si5351.yaml @@ -0,0 +1,245 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/clock/silabs,si5351.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Silicon Labs Si5351A/B/C programmable I2C clock generators + +description: | + The Silicon Labs Si5351A/B/C are programmable I2C clock generators with = up to + 8 outputs. Si5351A also has a reduced pin-count package (10-MSOP) where = only 3 + output clocks are accessible. The internal structure of the clock genera= tors + can be found in [1]. + + [1] Si5351A/B/C Data Sheet + https://www.skyworksinc.com/-/media/Skyworks/SL/documents/public/dat= a-sheets/Si5351-B.pdf + +maintainers: + - Alvin =C5=A0ipraga + +properties: + compatible: + enum: + - silabs,si5351a # Si5351A, 20-QFN package + - silabs,si5351a-msop # Si5351A, 10-MSOP package + - silabs,si5351b # Si5351B, 20-QFN package + - silabs,si5351c # Si5351C, 20-QFN package + + reg: + enum: + - 0x60 + - 0x61 + + "#address-cells": + const: 1 + + "#size-cells": + const: 0 + + "#clock-cells": + const: 1 + + clocks: true + + clock-names: + minItems: 1 + items: + - const: xtal + - const: clkin + + silabs,pll-source: + $ref: /schemas/types.yaml#/definitions/uint32-matrix + description: | + A list of cell pairs containing a PLL index and its source. Allows to + overwrite clock source of the internal PLLs. + items: + items: + - description: PLL A (0) or PLL B (1) + enum: [ 0, 1 ] + - description: PLL source, XTAL (0) or CLKIN (1, Si5351C only). + enum: [ 0, 1 ] + +patternProperties: + "^clkout@[0-7]$": + type: object + + additionalProperties: false + + properties: + reg: + description: Clock output number. + + clock-frequency: true + + silabs,clock-source: + $ref: /schemas/types.yaml#/definitions/uint32 + description: | + Source clock of the this output's divider stage. + + 0 - use multisynth N for this output, where N is the output numb= er + 1 - use either multisynth 0 (if output number is 0-3) or multisy= nth 4 + (otherwise) for this output + 2 - use XTAL for this output + 3 - use CLKIN for this output (Si5351C only) + + silabs,drive-strength: + $ref: /schemas/types.yaml#/definitions/uint32 + enum: [ 2, 4, 6, 8 ] + description: Output drive strength in mA. + + silabs,multisynth-source: + $ref: /schemas/types.yaml#/definitions/uint32 + enum: [ 0, 1 ] + description: + Source PLL A (0) or B (1) for the corresponding multisynth divid= er. + + silabs,pll-master: + type: boolean + description: | + The frequency of the source PLL is allowed to be changed by the + multisynth when setting the rate of this clock output. + + silabs,pll-reset: + type: boolean + description: Reset the source PLL when enabling this clock output. + + silabs,disable-state: + $ref: /schemas/types.yaml#/definitions/uint32 + enum: [ 0, 1, 2, 3 ] + description: | + Clock output disable state. The state can be one of: + + 0 - clock output is driven LOW when disabled + 1 - clock output is driven HIGH when disabled + 2 - clock output is FLOATING (HIGH-Z) when disabled + 3 - clock output is never disabled + + allOf: + - if: + properties: + compatible: + contains: + const: silabs,si5351a-msop + then: + properties: + reg: + maximum: 2 + else: + properties: + reg: + maximum: 7 + + - if: + properties: + compatible: + contains: + const: silabs,si5351c + then: + properties: + silabs,clock-source: + enum: [ 0, 1, 2, 3 ] + else: + properties: + silabs,clock-source: + enum: [ 0, 1, 2 ] + + required: + - reg + +allOf: + - if: + properties: + compatible: + contains: + enum: + - silabs,si5351a + - silabs,si5351a-msop + - silabs,si5351b + then: + properties: + clocks: + maxItems: 1 + clock-names: + maxItems: 1 + else: + properties: + clocks: + maxItems: 2 + clock-names: + maxItems: 2 + +required: + - reg + - "#address-cells" + - "#size-cells" + - "#clock-cells" + - clocks + - clock-names + +unevaluatedProperties: false + +examples: + - | + i2c { + #address-cells =3D <1>; + #size-cells =3D <0>; + + clock-generator@60 { + compatible =3D "silabs,si5351a-msop"; + reg =3D <0x60>; + #address-cells =3D <1>; + #size-cells =3D <0>; + #clock-cells =3D <1>; + + /* Connect XTAL input to 25MHz reference */ + clocks =3D <&ref25>; + clock-names =3D "xtal"; + + /* Use XTAL input as source of PLL0 and PLL1 */ + silabs,pll-source =3D <0 0>, <1 0>; + + /* + * Overwrite CLK0 configuration with: + * - 8 mA output drive strength + * - PLL0 as clock source of multisynth 0 + * - Multisynth 0 as clock source of output divider + * - Multisynth 0 can change PLL0 + * - Set initial clock frequency of 74.25MHz + */ + clkout@0 { + reg =3D <0>; + silabs,drive-strength =3D <8>; + silabs,multisynth-source =3D <0>; + silabs,clock-source =3D <0>; + silabs,pll-master; + clock-frequency =3D <74250000>; + }; + + /* + * Overwrite CLK1 configuration with: + * - 4 mA output drive strength + * - PLL1 as clock source of multisynth 1 + * - Multisynth 1 as clock source of output divider + * - Multisynth 1 can change PLL1 + * - Reset PLL1 when enabling this clock output + */ + clkout@1 { + reg =3D <1>; + silabs,drive-strength =3D <4>; + silabs,multisynth-source =3D <1>; + silabs,clock-source =3D <0>; + silabs,pll-master; + silabs,pll-reset; + }; + + /* + * Overwrite CLK2 configuration with: + * - XTAL as clock source of output divider + */ + clkout@2 { + reg =3D <2>; + silabs,clock-source =3D <2>; + }; + }; + }; --=20 2.42.0 From nobody Fri Jan 2 05:06:37 2026 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 48876C41513 for ; Sat, 14 Oct 2023 18:20:24 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233372AbjJNSUS (ORCPT ); Sat, 14 Oct 2023 14:20:18 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:56482 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233313AbjJNSUM (ORCPT ); Sat, 14 Oct 2023 14:20:12 -0400 Received: from mail-ed1-x529.google.com (mail-ed1-x529.google.com [IPv6:2a00:1450:4864:20::529]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 90273D9 for ; Sat, 14 Oct 2023 11:20:10 -0700 (PDT) Received: by mail-ed1-x529.google.com with SMTP id 4fb4d7f45d1cf-53406799540so5473435a12.1 for ; Sat, 14 Oct 2023 11:20:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pqrs.dk; s=google; t=1697307609; x=1697912409; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=Qw+fDH/r+gzxyf/T+BAcRpzcq5bTXGRmDpE3OCLJAMg=; b=Wr3v/jRU7B3uCfdrq7W8NwuxIY1MLS9OImrHmJAT+3lrFxL+cLapzJEwtZTmFv/1QJ Ox9nNWXUhrskupClbj2Pkui9SzkYg8yW0Nn8HtUcrgpE0QRN68SztngEsTJZ7k97WnCh jkw5d+RR7UabYy9NOJlRdBrxvkbvZPS3tXhWHdfnobN+6ZUPYWf/iuafA3Mn5ncEmVMO Z+Qhoxup62hx+BNxRMwhIttcH7FKbVPcB0+1deCUA8t6bB5a81qC/Hr2rpY44rQCOCyp ScdsGCKBWdFqLGwn+hlnrNunJx0UsEERRrzFBgxWjkkg34qWiittFzs3JRzs7ECs28V0 3huA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1697307609; x=1697912409; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Qw+fDH/r+gzxyf/T+BAcRpzcq5bTXGRmDpE3OCLJAMg=; b=JZ+qpBbp4rX9nLZGtl1jept2fRQg4AEOPrFXLbdXKvw06FE0xhy658W7Cf9tc9wGhB VywYEzQFdzEHX5qn3CAjDIJVYAG+0lCPzGsdXsa3Qpzju4DYbclvYjxdS1K3Nnx+62Cf XSZ8M9IjcDSmEPJcExrsHjb2MGhgSyWKwDxl8XORvAZNQMnTScnbKwFfHxRiJmL58pJz a6ZlDS57rSjDmmcgKQ6MDuhQIPnUEmNxI4IsOzN8M3wec0L0Mysou7Vh85gd7QZJtejf bkeKTaiVkw2Ctz8mJZn3eWgu4ohc6RIpISobeMkLd4RyTNxhFSkT3qFchjEc88RtLRhG EuDQ== X-Gm-Message-State: AOJu0YwIy55gVkQ52zlgmhpSleycfPp6abqwOfgihjxqmW9IJbb8ZYvI 9uYedcdyHnmMLOjdzZkZMleyiQ== X-Google-Smtp-Source: AGHT+IEDgB08BWV57pIT8VR5SiZ0VYVeOxPAQAE2cb43JnfmB97/DfS9tSTZzA/3vbgHLkd8TDgt3A== X-Received: by 2002:a05:6402:1806:b0:525:73dd:4f71 with SMTP id g6-20020a056402180600b0052573dd4f71mr24319113edy.14.1697307608881; Sat, 14 Oct 2023 11:20:08 -0700 (PDT) Received: from capella.localdomain (80.71.142.18.ipv4.parknet.dk. [80.71.142.18]) by smtp.gmail.com with ESMTPSA id i13-20020a056402054d00b005231e3d89efsm13032574edx.31.2023.10.14.11.20.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 14 Oct 2023 11:20:07 -0700 (PDT) From: =?utf-8?q?Alvin_=C5=A0ipraga?= Date: Sat, 14 Oct 2023 20:19:42 +0200 Subject: [PATCH v4 2/3] dt-bindings: clock: si5351: add PLL reset mode property MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20231014-alvin-clk-si5351-no-pll-reset-v4-2-a3567024007d@bang-olufsen.dk> References: <20231014-alvin-clk-si5351-no-pll-reset-v4-0-a3567024007d@bang-olufsen.dk> In-Reply-To: <20231014-alvin-clk-si5351-no-pll-reset-v4-0-a3567024007d@bang-olufsen.dk> To: Michael Turquette , Stephen Boyd , Rob Herring , Krzysztof Kozlowski , Conor Dooley , =?utf-8?q?Alvin_=C5=A0ipraga?= Cc: Sebastian Hesselbarth , Rabeeh Khoury , Jacob Siverskog , Sergej Sawazki , linux-clk@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.12.3 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Alvin =C5=A0ipraga For applications where the PLL must be adjusted without glitches in the clock output(s), a new silabs,pll-reset-mode property is added. It can be used to specify whether or not the PLL should be reset after adjustment. Resetting is known to cause glitches. For compatibility with older device trees, it must be assumed that the default PLL reset mode is to unconditionally reset after adjustment. Cc: Sebastian Hesselbarth Cc: Rabeeh Khoury Cc: Jacob Siverskog Cc: Sergej Sawazki Signed-off-by: Alvin =C5=A0ipraga --- .../devicetree/bindings/clock/silabs,si5351.yaml | 24 ++++++++++++++++++= ++++ 1 file changed, 24 insertions(+) diff --git a/Documentation/devicetree/bindings/clock/silabs,si5351.yaml b/D= ocumentation/devicetree/bindings/clock/silabs,si5351.yaml index 16d1142c4a2f..9621b534f30e 100644 --- a/Documentation/devicetree/bindings/clock/silabs,si5351.yaml +++ b/Documentation/devicetree/bindings/clock/silabs,si5351.yaml @@ -60,6 +60,27 @@ properties: - description: PLL source, XTAL (0) or CLKIN (1, Si5351C only). enum: [ 0, 1 ] =20 + silabs,pll-reset-mode: + $ref: /schemas/types.yaml#/definitions/uint32-matrix + minItems: 1 + description: | + A list of cell pairs containing a PLL index and its reset mode. + items: + items: + - description: PLL A (0) or PLL B (1) + enum: [ 0, 1 ] + - description: | + Reset mode for the PLL. Mode can be one of: + + 0 - reset whenever PLL rate is adjusted (default mode) + 1 - do not reset when PLL rate is adjusted + + In mode 1, the PLL is only reset if the silabs,pll-reset is + specified in one of the clock output child nodes that also sou= rces + the PLL. This mode may be preferable if output clocks are expe= cted + to be adjusted without glitches. + enum: [ 0, 1 ] + patternProperties: "^clkout@[0-7]$": type: object @@ -199,6 +220,9 @@ examples: /* Use XTAL input as source of PLL0 and PLL1 */ silabs,pll-source =3D <0 0>, <1 0>; =20 + /* Don't reset PLL1 on rate adjustment */ + silabs,pll-reset-mode =3D <1 1>; + /* * Overwrite CLK0 configuration with: * - 8 mA output drive strength --=20 2.42.0 From nobody Fri Jan 2 05:06:37 2026 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2AA1ECDB474 for ; Sat, 14 Oct 2023 18:20:24 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233386AbjJNSUW (ORCPT ); Sat, 14 Oct 2023 14:20:22 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:56498 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233326AbjJNSUQ (ORCPT ); Sat, 14 Oct 2023 14:20:16 -0400 Received: from mail-ed1-x532.google.com (mail-ed1-x532.google.com [IPv6:2a00:1450:4864:20::532]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 08598D6 for ; Sat, 14 Oct 2023 11:20:12 -0700 (PDT) Received: by mail-ed1-x532.google.com with SMTP id 4fb4d7f45d1cf-53db3811d8fso6455016a12.1 for ; Sat, 14 Oct 2023 11:20:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pqrs.dk; s=google; t=1697307610; x=1697912410; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=fXvJpV0gpvSkUrAaGppJnbjeNlJABP+T2f/Ne1XnKTw=; b=RI+jY0sMHVhhAR+3ZdaRjXN+4ZDMvXXS+S9JzsDaLsLQC+SQkL1p+ILcmy2jvgi67H qNqgtC6DpPT7Aem17eCkKDUX5NgnXGYwRoSqn4NxaFEkLa2IsSZQ8AsP/VLICVueJhen fZCCmX/qjan5ZGlCAnBt3Bm+7TmpSgg9IEtmByH2+fOu8JKRnXl9DaLfLtH9AeMXVuU8 +oh4s3E13nIQl+7diD0YmQQINVDWmtInZWKSuzV8DhGtNjqXX764ygZQKT3mg7Z+oDno Pl+THsy/XiDeuSPvN1EviOKtZYc3VpRLvl//WcurH+2lktVeC3D/g7ENO2x9hyhe4cUt tAvA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1697307610; x=1697912410; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=fXvJpV0gpvSkUrAaGppJnbjeNlJABP+T2f/Ne1XnKTw=; b=Cq2VfDbV/Bar/Ax8j+82EAEbyUkGnK1E5XNkN/sT9xkQGYuZxXgUhanP57KFwkL+sj 2WUiyZDRXMQ62/EhBtpX5L2Ty66BS5yQGEYYJXP+GroZMRyPNEhpVikmXtstVmdB3NgH cBFUXTMyXuVYU45HV2/TJIV0Mpjk1bkMixXttBsLtC6XRxdJgmv6EJkuLftnBhf8tHdV ZTYurm5KcmqsgfYPyhURtFS0S43/aGOCDp6Xp5ycGug01vA54mBjufY6Kd2M8jQEJmsE ZFQaMOQqIyc8UTo22bOwHUFouDsrRzU9bDW72OvlQ8vADpLPqkO5GTySrt1rAakjNUEZ ypNQ== X-Gm-Message-State: AOJu0YxXkdLrO2y+GiukRuOJHXr+xc+F55FWiffpvpCYWFf4XYmKTqL+ KodYIlAuOiTwn1ioXzU7qqgafw== X-Google-Smtp-Source: AGHT+IFpMPMxqmm1/q2aXFgzeolFogULQXPqEmGQ0Sn8Amf9QTXO64WJwphv1hY4vv8lNMCSYe1+fA== X-Received: by 2002:a50:cd16:0:b0:53e:2309:fae with SMTP id z22-20020a50cd16000000b0053e23090faemr2918367edi.16.1697307610575; Sat, 14 Oct 2023 11:20:10 -0700 (PDT) Received: from capella.localdomain (80.71.142.18.ipv4.parknet.dk. [80.71.142.18]) by smtp.gmail.com with ESMTPSA id i13-20020a056402054d00b005231e3d89efsm13032574edx.31.2023.10.14.11.20.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 14 Oct 2023 11:20:09 -0700 (PDT) From: =?utf-8?q?Alvin_=C5=A0ipraga?= Date: Sat, 14 Oct 2023 20:19:43 +0200 Subject: [PATCH v4 3/3] clk: si5351: allow PLLs to be adjusted without reset MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20231014-alvin-clk-si5351-no-pll-reset-v4-3-a3567024007d@bang-olufsen.dk> References: <20231014-alvin-clk-si5351-no-pll-reset-v4-0-a3567024007d@bang-olufsen.dk> In-Reply-To: <20231014-alvin-clk-si5351-no-pll-reset-v4-0-a3567024007d@bang-olufsen.dk> To: Michael Turquette , Stephen Boyd , Rob Herring , Krzysztof Kozlowski , Conor Dooley , =?utf-8?q?Alvin_=C5=A0ipraga?= Cc: Sebastian Hesselbarth , Rabeeh Khoury , Jacob Siverskog , Sergej Sawazki , linux-clk@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.12.3 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Alvin =C5=A0ipraga Introduce a new PLL reset mode flag which controls whether or not to reset a PLL after adjusting its rate. The mode can be configured through platform data or device tree. Since commit 6dc669a22c77 ("clk: si5351: Add PLL soft reset"), the driver unconditionally resets a PLL whenever its rate is adjusted. The rationale was that a PLL reset was required to get three outputs working at the same time. Before this change, the driver never reset the PLLs. Commit b26ff127c52c ("clk: si5351: Apply PLL soft reset before enabling the outputs") subsequently introduced an option to reset the PLL when enabling a clock output that sourced it. Here, the rationale was that this is required to get a deterministic phase relationship between multiple output clocks. This clearly shows that it is useful to reset the PLLs in applications where multiple clock outputs are used. However, the Si5351 also allows for glitch-free rate adjustment of its PLLs if one avoids resetting the PLL. In our audio application where a single Si5351 clock output is used to supply a runtime adjustable bit clock, this unconditional PLL reset behaviour introduces unwanted glitches in the clock output. It would appear that the problem being solved in the former commit may be solved by using the optional device tree property introduced in the latter commit, obviating the need for an unconditional PLL reset after rate adjustment. But it's not OK to break the default behaviour of the driver, and it cannot be assumed that all device trees are using the property introduced in the latter commit. Hence, the new behaviour is made opt-in. Cc: Sebastian Hesselbarth Cc: Rabeeh Khoury Cc: Jacob Siverskog Cc: Sergej Sawazki Signed-off-by: Alvin =C5=A0ipraga Acked-by: Sebastian Hesselbarth --- drivers/clk/clk-si5351.c | 47 ++++++++++++++++++++++++++++++++= +--- include/linux/platform_data/si5351.h | 2 ++ 2 files changed, 46 insertions(+), 3 deletions(-) diff --git a/drivers/clk/clk-si5351.c b/drivers/clk/clk-si5351.c index cbf7cde01157..bed0fe3bfa08 100644 --- a/drivers/clk/clk-si5351.c +++ b/drivers/clk/clk-si5351.c @@ -506,6 +506,8 @@ static int si5351_pll_set_rate(struct clk_hw *hw, unsig= ned long rate, { struct si5351_hw_data *hwdata =3D container_of(hw, struct si5351_hw_data, hw); + struct si5351_platform_data *pdata =3D + hwdata->drvdata->client->dev.platform_data; u8 reg =3D (hwdata->num =3D=3D 0) ? SI5351_PLLA_PARAMETERS : SI5351_PLLB_PARAMETERS; =20 @@ -518,9 +520,10 @@ static int si5351_pll_set_rate(struct clk_hw *hw, unsi= gned long rate, (hwdata->params.p2 =3D=3D 0) ? SI5351_CLK_INTEGER_MODE : 0); =20 /* Do a pll soft reset on the affected pll */ - si5351_reg_write(hwdata->drvdata, SI5351_PLL_RESET, - hwdata->num =3D=3D 0 ? SI5351_PLL_RESET_A : - SI5351_PLL_RESET_B); + if (pdata->pll_reset[hwdata->num]) + si5351_reg_write(hwdata->drvdata, SI5351_PLL_RESET, + hwdata->num =3D=3D 0 ? SI5351_PLL_RESET_A : + SI5351_PLL_RESET_B); =20 dev_dbg(&hwdata->drvdata->client->dev, "%s - %s: p1 =3D %lu, p2 =3D %lu, p3 =3D %lu, parent_rate =3D %lu, rate = =3D %lu\n", @@ -1222,6 +1225,44 @@ static int si5351_dt_parse(struct i2c_client *client, } } =20 + /* + * Parse PLL reset mode. For compatibility with older device trees, the + * default is to always reset a PLL after setting its rate. + */ + pdata->pll_reset[0] =3D true; + pdata->pll_reset[1] =3D true; + + of_property_for_each_u32(np, "silabs,pll-reset-mode", prop, p, num) { + if (num >=3D 2) { + dev_err(&client->dev, + "invalid pll %d on pll-reset-mode prop\n", num); + return -EINVAL; + } + + p =3D of_prop_next_u32(prop, p, &val); + if (!p) { + dev_err(&client->dev, + "missing pll-reset-mode for pll %d\n", num); + return -EINVAL; + } + + switch (val) { + case 0: + /* Reset PLL whenever its rate is adjusted */ + pdata->pll_reset[num] =3D true; + break; + case 1: + /* Don't reset PLL whenever its rate is adjusted */ + pdata->pll_reset[num] =3D false; + break; + default: + dev_err(&client->dev, + "invalid pll-reset-mode %d for pll %d\n", val, + num); + return -EINVAL; + } + } + /* per clkout properties */ for_each_child_of_node(np, child) { if (of_property_read_u32(child, "reg", &num)) { diff --git a/include/linux/platform_data/si5351.h b/include/linux/platform_= data/si5351.h index c71a2dd66143..5f412a615532 100644 --- a/include/linux/platform_data/si5351.h +++ b/include/linux/platform_data/si5351.h @@ -105,10 +105,12 @@ struct si5351_clkout_config { * @clk_xtal: xtal input clock * @clk_clkin: clkin input clock * @pll_src: array of pll source clock setting + * @pll_reset: array indicating if plls should be reset after setting the = rate * @clkout: array of clkout configuration */ struct si5351_platform_data { enum si5351_pll_src pll_src[2]; + bool pll_reset[2]; struct si5351_clkout_config clkout[8]; }; =20 --=20 2.42.0