linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH V3 1/2] dt-bindings: clk: versaclock5: Add optional load capacitance property
@ 2021-02-07 18:51 Adam Ford
  2021-02-07 18:51 ` [PATCH V3 2/2] clk: vc5: Add support for optional load capacitance Adam Ford
                   ` (2 more replies)
  0 siblings, 3 replies; 9+ messages in thread
From: Adam Ford @ 2021-02-07 18:51 UTC (permalink / raw)
  To: linux-clk
  Cc: aford, Adam Ford, Luca Ceresoli, Michael Turquette, Stephen Boyd,
	Rob Herring, devicetree, linux-kernel

There are two registers which can set the load capacitance for
XTAL1 and XTAL2. These are optional registers when using an
external crystal.  Since XTAL1 and XTAL2 will set to the same value,
update the binding to support a single property called
xtal-load-femtofarads.

Signed-off-by: Adam Ford <aford173@gmail.com>
---
V3:  No Change
V2:  No Change

A couple people suggested that I not use the $ref, but without it,
the bindings check failed with errors.

diff --git a/Documentation/devicetree/bindings/clock/idt,versaclock5.yaml b/Documentation/devicetree/bindings/clock/idt,versaclock5.yaml
index 2ac1131fd922..c268debe5b8d 100644
--- a/Documentation/devicetree/bindings/clock/idt,versaclock5.yaml
+++ b/Documentation/devicetree/bindings/clock/idt,versaclock5.yaml
@@ -59,6 +59,12 @@ properties:
     minItems: 1
     maxItems: 2
 
+  idt,xtal-load-femtofarads:
+    $ref: /schemas/types.yaml#/definitions/uint32
+    minimum: 9000
+    maximum: 22760
+    description: Optional load capacitor for XTAL1 and XTAL2
+
 patternProperties:
   "^OUT[1-4]$":
     type: object
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH V3 2/2] clk: vc5: Add support for optional load capacitance
  2021-02-07 18:51 [PATCH V3 1/2] dt-bindings: clk: versaclock5: Add optional load capacitance property Adam Ford
@ 2021-02-07 18:51 ` Adam Ford
  2021-02-08 12:00   ` Luca Ceresoli
  2021-02-11 20:10   ` Stephen Boyd
  2021-02-10 20:18 ` [PATCH V3 1/2] dt-bindings: clk: versaclock5: Add optional load capacitance property Rob Herring
  2021-02-11 20:09 ` Stephen Boyd
  2 siblings, 2 replies; 9+ messages in thread
From: Adam Ford @ 2021-02-07 18:51 UTC (permalink / raw)
  To: linux-clk
  Cc: aford, Adam Ford, Luca Ceresoli, Michael Turquette, Stephen Boyd,
	Rob Herring, devicetree, linux-kernel

There are two registers which can set the load capacitance for
XTAL1 and XTAL2. These are optional registers when using an
external crystal.  Parse the device tree and set the
corresponding registers accordingly.

Signed-off-by: Adam Ford <aford173@gmail.com>
---
V3:  Fix whitespace.  Use regmap_update_bits instead of performing
     a manual read-modify-write.
V2:  Make the math subtract 9000 since we have a DIV_ROUND_CLOSEST
     This also allows us to remove the check for 9430 since values
     between 9000 and 9430 will round up and down.
     Make write VC5_XTAL_X1_LOAD_CAP and VC5_XTAL_X2_LOAD_CAP
     a read-modify-write to not worry about the contents of
     bits[1:0].
     
diff --git a/drivers/clk/clk-versaclock5.c b/drivers/clk/clk-versaclock5.c
index 43db67337bc0..344cd6c61188 100644
--- a/drivers/clk/clk-versaclock5.c
+++ b/drivers/clk/clk-versaclock5.c
@@ -759,6 +759,63 @@ static int vc5_update_power(struct device_node *np_output,
 	return 0;
 }
 
+static int vc5_map_cap_value(u32 femtofarads)
+{
+	int mapped_value;
+
+	/*
+	 * The datasheet explicitly states 9000 - 25000 with 0.5pF
+	 * steps, but the Programmer's guide shows the steps are 0.430pF.
+	 * After getting feedback from Renesas, the .5pF steps were the
+	 * goal, but 430nF was the actual values.
+	 * Because of this, the actual range goes to 22760 instead of 25000
+	 */
+	if (femtofarads < 9000 || femtofarads > 22760)
+		return -EINVAL;
+
+	/*
+	 * The Programmer's guide shows XTAL[5:0] but in reality,
+	 * XTAL[0] and XTAL[1] are both LSB which makes the math
+	 * strange.  With clarfication from Renesas, setting the
+	 * values should be simpler by ignoring XTAL[0]
+	 */
+	mapped_value = DIV_ROUND_CLOSEST(femtofarads - 9000, 430);
+
+	/*
+	 * Since the calculation ignores XTAL[0], there is one
+	 * special case where mapped_value = 32.  In reality, this means
+	 * the real mapped value should be 111111b.  In other cases,
+	 * the mapped_value needs to be shifted 1 to the left.
+	 */
+	if (mapped_value > 31)
+		mapped_value = 0x3f;
+	else
+		mapped_value <<= 1;
+
+	return mapped_value;
+}
+static int vc5_update_cap_load(struct device_node *node, struct vc5_driver_data *vc5)
+{
+	u32 value;
+	int mapped_value;
+
+	if (!of_property_read_u32(node, "idt,xtal-load-femtofarads", &value)) {
+		mapped_value = vc5_map_cap_value(value);
+		if (mapped_value < 0)
+			return mapped_value;
+
+		/*
+		 * The mapped_value is really the high 6 bits of
+		 * VC5_XTAL_X1_LOAD_CAP and VC5_XTAL_X2_LOAD_CAP, so
+		 * shift the value 2 places.
+		 */
+		regmap_update_bits(vc5->regmap, VC5_XTAL_X1_LOAD_CAP, ~0x03, mapped_value << 2);
+		regmap_update_bits(vc5->regmap, VC5_XTAL_X2_LOAD_CAP, ~0x03, mapped_value << 2);
+	}
+
+	return 0;
+}
+
 static int vc5_update_slew(struct device_node *np_output,
 			   struct vc5_out_data *clk_out)
 {
@@ -884,6 +941,13 @@ static int vc5_probe(struct i2c_client *client, const struct i2c_device_id *id)
 		return -EINVAL;
 	}
 
+	/* Configure Optional Loading Capacitance for external XTAL */
+	if (!(vc5->chip_info->flags & VC5_HAS_INTERNAL_XTAL)) {
+		ret = vc5_update_cap_load(client->dev.of_node, vc5);
+		if (ret)
+			goto err_clk_register;
+	}
+
 	init.name = kasprintf(GFP_KERNEL, "%pOFn.mux", client->dev.of_node);
 	init.ops = &vc5_mux_ops;
 	init.flags = 0;
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [PATCH V3 2/2] clk: vc5: Add support for optional load capacitance
  2021-02-07 18:51 ` [PATCH V3 2/2] clk: vc5: Add support for optional load capacitance Adam Ford
@ 2021-02-08 12:00   ` Luca Ceresoli
  2021-02-11 20:10   ` Stephen Boyd
  1 sibling, 0 replies; 9+ messages in thread
From: Luca Ceresoli @ 2021-02-08 12:00 UTC (permalink / raw)
  To: Adam Ford, linux-clk
  Cc: aford, Michael Turquette, Stephen Boyd, Rob Herring, devicetree,
	linux-kernel

Hi Adam,
On 07/02/21 19:51, Adam Ford wrote:
> There are two registers which can set the load capacitance for
> XTAL1 and XTAL2. These are optional registers when using an
> external crystal.  Parse the device tree and set the
> corresponding registers accordingly.
> 
> Signed-off-by: Adam Ford <aford173@gmail.com>

Reviewed-by: Luca Ceresoli <luca@lucaceresoli.net>

-- 
Luca

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH V3 1/2] dt-bindings: clk: versaclock5: Add optional load capacitance property
  2021-02-07 18:51 [PATCH V3 1/2] dt-bindings: clk: versaclock5: Add optional load capacitance property Adam Ford
  2021-02-07 18:51 ` [PATCH V3 2/2] clk: vc5: Add support for optional load capacitance Adam Ford
@ 2021-02-10 20:18 ` Rob Herring
  2021-02-10 20:40   ` Adam Ford
  2021-02-11 20:09 ` Stephen Boyd
  2 siblings, 1 reply; 9+ messages in thread
From: Rob Herring @ 2021-02-10 20:18 UTC (permalink / raw)
  To: Adam Ford
  Cc: linux-clk, aford, Luca Ceresoli, Michael Turquette, Stephen Boyd,
	devicetree, linux-kernel

On Sun, Feb 07, 2021 at 12:51:38PM -0600, Adam Ford wrote:
> There are two registers which can set the load capacitance for
> XTAL1 and XTAL2. These are optional registers when using an
> external crystal.  Since XTAL1 and XTAL2 will set to the same value,
> update the binding to support a single property called
> xtal-load-femtofarads.
> 
> Signed-off-by: Adam Ford <aford173@gmail.com>
> ---
> V3:  No Change
> V2:  No Change
> 
> A couple people suggested that I not use the $ref, but without it,
> the bindings check failed with errors.
> 
> diff --git a/Documentation/devicetree/bindings/clock/idt,versaclock5.yaml b/Documentation/devicetree/bindings/clock/idt,versaclock5.yaml
> index 2ac1131fd922..c268debe5b8d 100644
> --- a/Documentation/devicetree/bindings/clock/idt,versaclock5.yaml
> +++ b/Documentation/devicetree/bindings/clock/idt,versaclock5.yaml
> @@ -59,6 +59,12 @@ properties:
>      minItems: 1
>      maxItems: 2
>  
> +  idt,xtal-load-femtofarads:
> +    $ref: /schemas/types.yaml#/definitions/uint32

Don't need a type with standard unit suffix.

> +    minimum: 9000
> +    maximum: 22760
> +    description: Optional load capacitor for XTAL1 and XTAL2
> +
>  patternProperties:
>    "^OUT[1-4]$":
>      type: object
> -- 
> 2.25.1
> 

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH V3 1/2] dt-bindings: clk: versaclock5: Add optional load capacitance property
  2021-02-10 20:18 ` [PATCH V3 1/2] dt-bindings: clk: versaclock5: Add optional load capacitance property Rob Herring
@ 2021-02-10 20:40   ` Adam Ford
  2021-02-11  2:35     ` Stephen Boyd
  2021-02-11 14:52     ` Rob Herring
  0 siblings, 2 replies; 9+ messages in thread
From: Adam Ford @ 2021-02-10 20:40 UTC (permalink / raw)
  To: Rob Herring
  Cc: linux-clk, Adam Ford-BE, Luca Ceresoli, Michael Turquette,
	Stephen Boyd, devicetree, Linux Kernel Mailing List

On Wed, Feb 10, 2021 at 2:18 PM Rob Herring <robh@kernel.org> wrote:
>
> On Sun, Feb 07, 2021 at 12:51:38PM -0600, Adam Ford wrote:
> > There are two registers which can set the load capacitance for
> > XTAL1 and XTAL2. These are optional registers when using an
> > external crystal.  Since XTAL1 and XTAL2 will set to the same value,
> > update the binding to support a single property called
> > xtal-load-femtofarads.
> >
> > Signed-off-by: Adam Ford <aford173@gmail.com>
> > ---
> > V3:  No Change
> > V2:  No Change
> >
> > A couple people suggested that I not use the $ref, but without it,
> > the bindings check failed with errors.
> >
> > diff --git a/Documentation/devicetree/bindings/clock/idt,versaclock5.yaml b/Documentation/devicetree/bindings/clock/idt,versaclock5.yaml
> > index 2ac1131fd922..c268debe5b8d 100644
> > --- a/Documentation/devicetree/bindings/clock/idt,versaclock5.yaml
> > +++ b/Documentation/devicetree/bindings/clock/idt,versaclock5.yaml
> > @@ -59,6 +59,12 @@ properties:
> >      minItems: 1
> >      maxItems: 2
> >
> > +  idt,xtal-load-femtofarads:
> > +    $ref: /schemas/types.yaml#/definitions/uint32
>
> Don't need a type with standard unit suffix.

If I remove that line, the binding check fails.

adam
>
> > +    minimum: 9000
> > +    maximum: 22760
> > +    description: Optional load capacitor for XTAL1 and XTAL2
> > +
> >  patternProperties:
> >    "^OUT[1-4]$":
> >      type: object
> > --
> > 2.25.1
> >

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH V3 1/2] dt-bindings: clk: versaclock5: Add optional load capacitance property
  2021-02-10 20:40   ` Adam Ford
@ 2021-02-11  2:35     ` Stephen Boyd
  2021-02-11 14:52     ` Rob Herring
  1 sibling, 0 replies; 9+ messages in thread
From: Stephen Boyd @ 2021-02-11  2:35 UTC (permalink / raw)
  To: Adam Ford, Rob Herring
  Cc: linux-clk, Adam Ford-BE, Luca Ceresoli, Michael Turquette,
	devicetree, Linux Kernel Mailing List

Quoting Adam Ford (2021-02-10 12:40:38)
> On Wed, Feb 10, 2021 at 2:18 PM Rob Herring <robh@kernel.org> wrote:
> >
> > On Sun, Feb 07, 2021 at 12:51:38PM -0600, Adam Ford wrote:
> > > There are two registers which can set the load capacitance for
> > > XTAL1 and XTAL2. These are optional registers when using an
> > > external crystal.  Since XTAL1 and XTAL2 will set to the same value,
> > > update the binding to support a single property called
> > > xtal-load-femtofarads.
> > >
> > > Signed-off-by: Adam Ford <aford173@gmail.com>
> > > ---
> > > V3:  No Change
> > > V2:  No Change
> > >
> > > A couple people suggested that I not use the $ref, but without it,
> > > the bindings check failed with errors.
> > >
> > > diff --git a/Documentation/devicetree/bindings/clock/idt,versaclock5.yaml b/Documentation/devicetree/bindings/clock/idt,versaclock5.yaml
> > > index 2ac1131fd922..c268debe5b8d 100644
> > > --- a/Documentation/devicetree/bindings/clock/idt,versaclock5.yaml
> > > +++ b/Documentation/devicetree/bindings/clock/idt,versaclock5.yaml
> > > @@ -59,6 +59,12 @@ properties:
> > >      minItems: 1
> > >      maxItems: 2
> > >
> > > +  idt,xtal-load-femtofarads:
> > > +    $ref: /schemas/types.yaml#/definitions/uint32
> >
> > Don't need a type with standard unit suffix.
> 
> If I remove that line, the binding check fails.
> 

Is your dt-schema up to date?

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH V3 1/2] dt-bindings: clk: versaclock5: Add optional load capacitance property
  2021-02-10 20:40   ` Adam Ford
  2021-02-11  2:35     ` Stephen Boyd
@ 2021-02-11 14:52     ` Rob Herring
  1 sibling, 0 replies; 9+ messages in thread
From: Rob Herring @ 2021-02-11 14:52 UTC (permalink / raw)
  To: Adam Ford
  Cc: linux-clk, Adam Ford-BE, Luca Ceresoli, Michael Turquette,
	Stephen Boyd, devicetree, Linux Kernel Mailing List

On Wed, Feb 10, 2021 at 2:40 PM Adam Ford <aford173@gmail.com> wrote:
>
> On Wed, Feb 10, 2021 at 2:18 PM Rob Herring <robh@kernel.org> wrote:
> >
> > On Sun, Feb 07, 2021 at 12:51:38PM -0600, Adam Ford wrote:
> > > There are two registers which can set the load capacitance for
> > > XTAL1 and XTAL2. These are optional registers when using an
> > > external crystal.  Since XTAL1 and XTAL2 will set to the same value,
> > > update the binding to support a single property called
> > > xtal-load-femtofarads.
> > >
> > > Signed-off-by: Adam Ford <aford173@gmail.com>
> > > ---
> > > V3:  No Change
> > > V2:  No Change
> > >
> > > A couple people suggested that I not use the $ref, but without it,
> > > the bindings check failed with errors.
> > >
> > > diff --git a/Documentation/devicetree/bindings/clock/idt,versaclock5.yaml b/Documentation/devicetree/bindings/clock/idt,versaclock5.yaml
> > > index 2ac1131fd922..c268debe5b8d 100644
> > > --- a/Documentation/devicetree/bindings/clock/idt,versaclock5.yaml
> > > +++ b/Documentation/devicetree/bindings/clock/idt,versaclock5.yaml
> > > @@ -59,6 +59,12 @@ properties:
> > >      minItems: 1
> > >      maxItems: 2
> > >
> > > +  idt,xtal-load-femtofarads:
> > > +    $ref: /schemas/types.yaml#/definitions/uint32
> >
> > Don't need a type with standard unit suffix.
>
> If I remove that line, the binding check fails.

Ah, looks like femtofarads got added to property-units.txt but not the
schemas. I'll add it, but fine to leave this as-is for now.

Reviewed-by: Rob Herring <robh@kernel.org>

Rob

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH V3 1/2] dt-bindings: clk: versaclock5: Add optional load capacitance property
  2021-02-07 18:51 [PATCH V3 1/2] dt-bindings: clk: versaclock5: Add optional load capacitance property Adam Ford
  2021-02-07 18:51 ` [PATCH V3 2/2] clk: vc5: Add support for optional load capacitance Adam Ford
  2021-02-10 20:18 ` [PATCH V3 1/2] dt-bindings: clk: versaclock5: Add optional load capacitance property Rob Herring
@ 2021-02-11 20:09 ` Stephen Boyd
  2 siblings, 0 replies; 9+ messages in thread
From: Stephen Boyd @ 2021-02-11 20:09 UTC (permalink / raw)
  To: Adam Ford, linux-clk
  Cc: aford, Adam Ford, Luca Ceresoli, Michael Turquette, Rob Herring,
	devicetree, linux-kernel

Quoting Adam Ford (2021-02-07 10:51:38)
> There are two registers which can set the load capacitance for
> XTAL1 and XTAL2. These are optional registers when using an
> external crystal.  Since XTAL1 and XTAL2 will set to the same value,
> update the binding to support a single property called
> xtal-load-femtofarads.
> 
> Signed-off-by: Adam Ford <aford173@gmail.com>
> ---

Applied to clk-next

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH V3 2/2] clk: vc5: Add support for optional load capacitance
  2021-02-07 18:51 ` [PATCH V3 2/2] clk: vc5: Add support for optional load capacitance Adam Ford
  2021-02-08 12:00   ` Luca Ceresoli
@ 2021-02-11 20:10   ` Stephen Boyd
  1 sibling, 0 replies; 9+ messages in thread
From: Stephen Boyd @ 2021-02-11 20:10 UTC (permalink / raw)
  To: Adam Ford, linux-clk
  Cc: aford, Adam Ford, Luca Ceresoli, Michael Turquette, Rob Herring,
	devicetree, linux-kernel

Quoting Adam Ford (2021-02-07 10:51:39)
> There are two registers which can set the load capacitance for
> XTAL1 and XTAL2. These are optional registers when using an
> external crystal.  Parse the device tree and set the
> corresponding registers accordingly.
> 
> Signed-off-by: Adam Ford <aford173@gmail.com>
> ---

Applied to clk-next

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2021-02-11 20:13 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-02-07 18:51 [PATCH V3 1/2] dt-bindings: clk: versaclock5: Add optional load capacitance property Adam Ford
2021-02-07 18:51 ` [PATCH V3 2/2] clk: vc5: Add support for optional load capacitance Adam Ford
2021-02-08 12:00   ` Luca Ceresoli
2021-02-11 20:10   ` Stephen Boyd
2021-02-10 20:18 ` [PATCH V3 1/2] dt-bindings: clk: versaclock5: Add optional load capacitance property Rob Herring
2021-02-10 20:40   ` Adam Ford
2021-02-11  2:35     ` Stephen Boyd
2021-02-11 14:52     ` Rob Herring
2021-02-11 20:09 ` Stephen Boyd

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).