diff mbox series

[v1,3/3] dt-bindings: thermal: sun8i: Add binding for D1/T113s THS controller

Message ID 20230610141739.999268-4-bigunclemax@gmail.com (mailing list archive)
State Superseded
Headers show
Series Add D1/T113s thermal sensor controller support | expand

Checks

Context Check Description
conchuod/cover_letter success Series has a cover letter
conchuod/tree_selection success Guessed tree name to be for-next at HEAD d5e45e810e0e
conchuod/fixes_present success Fixes tag not required for -next series
conchuod/maintainers_pattern success MAINTAINERS pattern errors before the patch: 6 and now 6
conchuod/verify_signedoff success Signed-off-by tag matches author and committer
conchuod/kdoc success Errors and warnings before: 0 this patch: 0
conchuod/build_rv64_clang_allmodconfig success Errors and warnings before: 8 this patch: 8
conchuod/module_param success Was 0 now: 0
conchuod/build_rv64_gcc_allmodconfig success Errors and warnings before: 8 this patch: 8
conchuod/build_rv32_defconfig success Build OK
conchuod/dtb_warn_rv64 success Errors and warnings before: 19 this patch: 11
conchuod/header_inline success No static functions without inline keyword in header files
conchuod/checkpatch success total: 0 errors, 0 warnings, 0 checks, 48 lines checked
conchuod/build_rv64_nommu_k210_defconfig success Build OK
conchuod/verify_fixes success No Fixes tag
conchuod/build_rv64_nommu_virt_defconfig success Build OK

Commit Message

Maksim Kiselev June 10, 2023, 2:17 p.m. UTC
From: Maxim Kiselev <bigunclemax@gmail.com>

Add a binding for D1/T113s thermal sensor controller.

Signed-off-by: Maxim Kiselev <bigunclemax@gmail.com>
Signed-off-by: Maksim Kiselev <bigunclemax@gmail.com>
---
 .../thermal/allwinner,sun8i-a83t-ths.yaml     | 20 ++++++++++++++++++-
 1 file changed, 19 insertions(+), 1 deletion(-)

Comments

Conor Dooley June 10, 2023, 2:52 p.m. UTC | #1
On Sat, Jun 10, 2023 at 05:17:34PM +0300, Maksim Kiselev wrote:
> From: Maxim Kiselev <bigunclemax@gmail.com>
> 
> Add a binding for D1/T113s thermal sensor controller.
> 
> Signed-off-by: Maxim Kiselev <bigunclemax@gmail.com>
> Signed-off-by: Maksim Kiselev <bigunclemax@gmail.com>

Why do you have 2 sign-offs that are both you w/ different spellings?
Content looks fine to me, other than one commit below.

> ---
>  .../thermal/allwinner,sun8i-a83t-ths.yaml     | 20 ++++++++++++++++++-
>  1 file changed, 19 insertions(+), 1 deletion(-)
> 
> diff --git a/Documentation/devicetree/bindings/thermal/allwinner,sun8i-a83t-ths.yaml b/Documentation/devicetree/bindings/thermal/allwinner,sun8i-a83t-ths.yaml
> index fbd4212285e2..001faa37fc27 100644
> --- a/Documentation/devicetree/bindings/thermal/allwinner,sun8i-a83t-ths.yaml
> +++ b/Documentation/devicetree/bindings/thermal/allwinner,sun8i-a83t-ths.yaml
> @@ -16,6 +16,7 @@ properties:
>        - allwinner,sun8i-a83t-ths
>        - allwinner,sun8i-h3-ths
>        - allwinner,sun8i-r40-ths
> +      - allwinner,sun20i-d1-ths
>        - allwinner,sun50i-a64-ths
>        - allwinner,sun50i-a100-ths
>        - allwinner,sun50i-h5-ths
> @@ -61,6 +62,7 @@ allOf:
>          compatible:
>            contains:
>              enum:
> +              - allwinner,sun20i-d1-ths
>                - allwinner,sun50i-a100-ths
>                - allwinner,sun50i-h6-ths
>  
> @@ -84,7 +86,9 @@ allOf:
>        properties:
>          compatible:
>            contains:
> -            const: allwinner,sun8i-h3-ths
> +            enum:
> +              - allwinner,sun8i-h3-ths
> +              - allwinner,sun20i-d1-ths
>  
>      then:
>        properties:
> @@ -103,6 +107,7 @@ allOf:
>              enum:
>                - allwinner,sun8i-h3-ths
>                - allwinner,sun8i-r40-ths
> +              - allwinner,sun20i-d1-ths
>                - allwinner,sun50i-a64-ths
>                - allwinner,sun50i-a100-ths
>                - allwinner,sun50i-h5-ths
> @@ -159,4 +164,17 @@ examples:
>           #thermal-sensor-cells = <1>;
>      };
>  
> +  - |
> +    thermal-sensor@2009400 {
> +          compatible = "allwinner,sun20i-d1-ths";
> +          reg = <0x02009400 0x400>;
> +          interrupts = <0 90 0>;
> +          clocks = <&ccu 0>;
> +          clock-names = "bus";
> +          resets = <&ccu 2>;
> +          nvmem-cells = <&ths_calibration>;
> +          nvmem-cell-names = "calibration";
> +          #thermal-sensor-cells = <0>;

Is this calibration required, or optional, for the d1?

Cheers,
Conor.

> +    };
> +
>  ...
> -- 
> 2.39.2
>
Maksim Kiselev June 10, 2023, 3:30 p.m. UTC | #2
сб, 10 июн. 2023 г. в 17:52, Conor Dooley <conor@kernel.org>:

...

>
> Signed-off-by: Maxim Kiselev <bigunclemax@gmail.com>
> Signed-off-by: Maksim Kiselev <bigunclemax@gmail.com>
>
>> Why do you have 2 sign-offs that are both you w/ different spellings?

Sorry for that. I accidentally signed it twice.

...

> +  - |
> +    thermal-sensor@2009400 {
> +          compatible = "allwinner,sun20i-d1-ths";
> +          reg = <0x02009400 0x400>;
> +          interrupts = <0 90 0>;
> +          clocks = <&ccu 0>;
> +          clock-names = "bus";
> +          resets = <&ccu 2>;
> +          nvmem-cells = <&ths_calibration>;
> +          nvmem-cell-names = "calibration";
> +          #thermal-sensor-cells = <0>;
>
>> Is this calibration required, or optional, for the d1?

Calibration data for the D1 is optional as for the H6.
(But without it, the sensor data will be inaccurate).
Conor Dooley June 10, 2023, 5:59 p.m. UTC | #3
On Sat, Jun 10, 2023 at 06:30:48PM +0300, Maxim Kiselev wrote:
> сб, 10 июн. 2023 г. в 17:52, Conor Dooley <conor@kernel.org>:
> 
> ...
> 
> >
> > Signed-off-by: Maxim Kiselev <bigunclemax@gmail.com>
> > Signed-off-by: Maksim Kiselev <bigunclemax@gmail.com>
> >
> >> Why do you have 2 sign-offs that are both you w/ different spellings?
> 
> Sorry for that. I accidentally signed it twice.
> 
> ...
> 
> > +  - |
> > +    thermal-sensor@2009400 {
> > +          compatible = "allwinner,sun20i-d1-ths";
> > +          reg = <0x02009400 0x400>;
> > +          interrupts = <0 90 0>;
> > +          clocks = <&ccu 0>;
> > +          clock-names = "bus";
> > +          resets = <&ccu 2>;
> > +          nvmem-cells = <&ths_calibration>;
> > +          nvmem-cell-names = "calibration";
> > +          #thermal-sensor-cells = <0>;
> >
> >> Is this calibration required, or optional, for the d1?
> 
> Calibration data for the D1 is optional as for the H6.
> (But without it, the sensor data will be inaccurate).

Okay. Modulo the signoff:
Reviewed-by: Conor Dooley <conor.dooley@microchip.com>

Cheers,
Conor.
Conor Dooley June 10, 2023, 6:01 p.m. UTC | #4
On Sat, Jun 10, 2023 at 06:59:29PM +0100, Conor Dooley wrote:
> On Sat, Jun 10, 2023 at 06:30:48PM +0300, Maxim Kiselev wrote:
> > сб, 10 июн. 2023 г. в 17:52, Conor Dooley <conor@kernel.org>:
> > 
> > ...
> > 
> > >
> > > Signed-off-by: Maxim Kiselev <bigunclemax@gmail.com>
> > > Signed-off-by: Maksim Kiselev <bigunclemax@gmail.com>
> > >
> > >> Why do you have 2 sign-offs that are both you w/ different spellings?
> > 
> > Sorry for that. I accidentally signed it twice.
> > 
> > ...
> > 
> > > +  - |
> > > +    thermal-sensor@2009400 {
> > > +          compatible = "allwinner,sun20i-d1-ths";
> > > +          reg = <0x02009400 0x400>;
> > > +          interrupts = <0 90 0>;
> > > +          clocks = <&ccu 0>;
> > > +          clock-names = "bus";
> > > +          resets = <&ccu 2>;
> > > +          nvmem-cells = <&ths_calibration>;
> > > +          nvmem-cell-names = "calibration";
> > > +          #thermal-sensor-cells = <0>;
> > >
> > >> Is this calibration required, or optional, for the d1?
> > 
> > Calibration data for the D1 is optional as for the H6.
> > (But without it, the sensor data will be inaccurate).
> 
> Okay. Modulo the signoff:
> Reviewed-by: Conor Dooley <conor.dooley@microchip.com>

Wait, that's not what I meant to say... Clearly turned my brain off for
a moment. If it is not going to function correctly without the
calibration data, why not make the calibration data required for the
d1's ths?

Cheers,
Conor.
Maksim Kiselev June 10, 2023, 8:31 p.m. UTC | #5
сб, 10 июн. 2023 г. в 21:01, Conor Dooley <conor@kernel.org>:

...

> > > > +  - |
> > > > +    thermal-sensor@2009400 {
> > > > +          compatible = "allwinner,sun20i-d1-ths";
> > > > +          reg = <0x02009400 0x400>;
> > > > +          interrupts = <0 90 0>;
> > > > +          clocks = <&ccu 0>;
> > > > +          clock-names = "bus";
> > > > +          resets = <&ccu 2>;
> > > > +          nvmem-cells = <&ths_calibration>;
> > > > +          nvmem-cell-names = "calibration";
> > > > +          #thermal-sensor-cells = <0>;
> > > >
> > > >> Is this calibration required, or optional, for the d1?
> > >
> > > Calibration data for the D1 is optional as for the H6.
> > > (But without it, the sensor data will be inaccurate).
> >
> > Okay. Modulo the signoff:
> > Reviewed-by: Conor Dooley <conor.dooley@microchip.com>
>
> Wait, that's not what I meant to say... Clearly turned my brain off for
> a moment. If it is not going to function correctly without the
> calibration data, why not make the calibration data required for the
> d1's ths?

I don't really know why, but the calibration data is optional for
other controllers.
So I just did it the same way.
Here is explanation comment about it from the driver:
        /*
         * Even if the external calibration data stored in sid is
         * not accessible, the THS hardware can still work, although
         * the data won't be so accurate.
         *
         * The default value of calibration register is 0x800 for
         * every sensor, and the calibration value is usually 0x7xx
         * or 0x8xx, so they won't be away from the default value
         * for a lot.
         *
         * So here we do not return error if the calibration data is
         * not available, except the probe needs deferring.
         */
Conor Dooley June 10, 2023, 10:13 p.m. UTC | #6
On Sat, Jun 10, 2023 at 11:31:03PM +0300, Maxim Kiselev wrote:
> сб, 10 июн. 2023 г. в 21:01, Conor Dooley <conor@kernel.org>:
> 
> ...
> 
> > > > > +  - |
> > > > > +    thermal-sensor@2009400 {
> > > > > +          compatible = "allwinner,sun20i-d1-ths";
> > > > > +          reg = <0x02009400 0x400>;
> > > > > +          interrupts = <0 90 0>;
> > > > > +          clocks = <&ccu 0>;
> > > > > +          clock-names = "bus";
> > > > > +          resets = <&ccu 2>;
> > > > > +          nvmem-cells = <&ths_calibration>;
> > > > > +          nvmem-cell-names = "calibration";
> > > > > +          #thermal-sensor-cells = <0>;
> > > > >
> > > > >> Is this calibration required, or optional, for the d1?
> > > >
> > > > Calibration data for the D1 is optional as for the H6.
> > > > (But without it, the sensor data will be inaccurate).
> > >
> > > Okay. Modulo the signoff:
> > > Reviewed-by: Conor Dooley <conor.dooley@microchip.com>
> >
> > Wait, that's not what I meant to say... Clearly turned my brain off for
> > a moment. If it is not going to function correctly without the
> > calibration data, why not make the calibration data required for the
> > d1's ths?
> 
> I don't really know why, but the calibration data is optional for
> other controllers.
> So I just did it the same way.
> Here is explanation comment about it from the driver:
>         /*
>          * Even if the external calibration data stored in sid is
>          * not accessible, the THS hardware can still work, although
>          * the data won't be so accurate.
>          *
>          * The default value of calibration register is 0x800 for
>          * every sensor, and the calibration value is usually 0x7xx
>          * or 0x8xx, so they won't be away from the default value
>          * for a lot.
>          *
>          * So here we do not return error if the calibration data is
>          * not available, except the probe needs deferring.
>          */

Wait, so if there is no calibration data then this thing will just defer
probing, ad infinitum? Looks like everything other than the a33 has the
cells in the dts, and the software seems to expect the cells.
What am I missing?
Maksim Kiselev June 11, 2023, 7:53 a.m. UTC | #7
вс, 11 июн. 2023 г. в 01:14, Conor Dooley <conor@kernel.org>:
>
> On Sat, Jun 10, 2023 at 11:31:03PM +0300, Maxim Kiselev wrote:
> > сб, 10 июн. 2023 г. в 21:01, Conor Dooley <conor@kernel.org>:
> >
> > ...
> >
> > > > > > +  - |
> > > > > > +    thermal-sensor@2009400 {
> > > > > > +          compatible = "allwinner,sun20i-d1-ths";
> > > > > > +          reg = <0x02009400 0x400>;
> > > > > > +          interrupts = <0 90 0>;
> > > > > > +          clocks = <&ccu 0>;
> > > > > > +          clock-names = "bus";
> > > > > > +          resets = <&ccu 2>;
> > > > > > +          nvmem-cells = <&ths_calibration>;
> > > > > > +          nvmem-cell-names = "calibration";
> > > > > > +          #thermal-sensor-cells = <0>;
> > > > > >
> > > > > >> Is this calibration required, or optional, for the d1?
> > > > >
> > > > > Calibration data for the D1 is optional as for the H6.
> > > > > (But without it, the sensor data will be inaccurate).
> > > >
> > > > Okay. Modulo the signoff:
> > > > Reviewed-by: Conor Dooley <conor.dooley@microchip.com>
> > >
> > > Wait, that's not what I meant to say... Clearly turned my brain off for
> > > a moment. If it is not going to function correctly without the
> > > calibration data, why not make the calibration data required for the
> > > d1's ths?
> >
> > I don't really know why, but the calibration data is optional for
> > other controllers.
> > So I just did it the same way.
> > Here is explanation comment about it from the driver:
> >         /*
> >          * Even if the external calibration data stored in sid is
> >          * not accessible, the THS hardware can still work, although
> >          * the data won't be so accurate.
> >          *
> >          * The default value of calibration register is 0x800 for
> >          * every sensor, and the calibration value is usually 0x7xx
> >          * or 0x8xx, so they won't be away from the default value
> >          * for a lot.
> >          *
> >          * So here we do not return error if the calibration data is
> >          * not available, except the probe needs deferring.
> >          */
>
> Wait, so if there is no calibration data then this thing will just defer
> probing, ad infinitum? Looks like everything other than the a33 has the
> cells in the dts, and the software seems to expect the cells.
> What am I missing?

Not quite. If we don't have a calibration cell in the dts, then we
just skip the calibration.
We will only get EPROBE_DEFER if we have calibration in the dts.
Here is the whole function code:

static int sun8i_ths_calibrate(struct ths_device *tmdev)
{
    struct nvmem_cell *calcell;
    struct device *dev = tmdev->dev;
    u16 *caldata;
    size_t callen;
    int ret = 0;

    calcell = devm_nvmem_cell_get(dev, "calibration");
    if (IS_ERR(calcell)) {
        if (PTR_ERR(calcell) == -EPROBE_DEFER)
            return -EPROBE_DEFER;
        /*
         * Even if the external calibration data stored in sid is
         * not accessible, the THS hardware can still work, although
         * the data won't be so accurate.
         *
         * The default value of calibration register is 0x800 for
         * every sensor, and the calibration value is usually 0x7xx
         * or 0x8xx, so they won't be away from the default value
         * for a lot.
         *
         * So here we do not return error if the calibration data is
         * not available, except the probe needs deferring.
         */
        goto out;
    }

    caldata = nvmem_cell_read(calcell, &callen);
    if (IS_ERR(caldata)) {
        ret = PTR_ERR(caldata);
        goto out;
    }

    tmdev->chip->calibrate(tmdev, caldata, callen);

    kfree(caldata);
out:
    return ret;
}
Conor Dooley June 11, 2023, 10:18 a.m. UTC | #8
On Sun, Jun 11, 2023 at 10:53:56AM +0300, Maxim Kiselev wrote:
> вс, 11 июн. 2023 г. в 01:14, Conor Dooley <conor@kernel.org>:
> >
> > On Sat, Jun 10, 2023 at 11:31:03PM +0300, Maxim Kiselev wrote:
> > > сб, 10 июн. 2023 г. в 21:01, Conor Dooley <conor@kernel.org>:
> > >
> > > ...
> > >
> > > > > > > +  - |
> > > > > > > +    thermal-sensor@2009400 {
> > > > > > > +          compatible = "allwinner,sun20i-d1-ths";
> > > > > > > +          reg = <0x02009400 0x400>;
> > > > > > > +          interrupts = <0 90 0>;
> > > > > > > +          clocks = <&ccu 0>;
> > > > > > > +          clock-names = "bus";
> > > > > > > +          resets = <&ccu 2>;
> > > > > > > +          nvmem-cells = <&ths_calibration>;
> > > > > > > +          nvmem-cell-names = "calibration";
> > > > > > > +          #thermal-sensor-cells = <0>;
> > > > > > >
> > > > > > >> Is this calibration required, or optional, for the d1?
> > > > > >
> > > > > > Calibration data for the D1 is optional as for the H6.
> > > > > > (But without it, the sensor data will be inaccurate).
> > > > >
> > > > > Okay. Modulo the signoff:
> > > > > Reviewed-by: Conor Dooley <conor.dooley@microchip.com>
> > > >
> > > > Wait, that's not what I meant to say... Clearly turned my brain off for
> > > > a moment. If it is not going to function correctly without the
> > > > calibration data, why not make the calibration data required for the
> > > > d1's ths?
> > >
> > > I don't really know why, but the calibration data is optional for
> > > other controllers.
> > > So I just did it the same way.
> > > Here is explanation comment about it from the driver:
> > >         /*
> > >          * Even if the external calibration data stored in sid is
> > >          * not accessible, the THS hardware can still work, although
> > >          * the data won't be so accurate.
> > >          *
> > >          * The default value of calibration register is 0x800 for
> > >          * every sensor, and the calibration value is usually 0x7xx
> > >          * or 0x8xx, so they won't be away from the default value
> > >          * for a lot.
> > >          *
> > >          * So here we do not return error if the calibration data is
> > >          * not available, except the probe needs deferring.
> > >          */
> >
> > Wait, so if there is no calibration data then this thing will just defer
> > probing, ad infinitum? Looks like everything other than the a33 has the
> > cells in the dts, and the software seems to expect the cells.
> > What am I missing?
> 
> Not quite. If we don't have a calibration cell in the dts, then we
> just skip the calibration.
> We will only get EPROBE_DEFER if we have calibration in the dts.

Ah that makes a lot more sense, thanks.
diff mbox series

Patch

diff --git a/Documentation/devicetree/bindings/thermal/allwinner,sun8i-a83t-ths.yaml b/Documentation/devicetree/bindings/thermal/allwinner,sun8i-a83t-ths.yaml
index fbd4212285e2..001faa37fc27 100644
--- a/Documentation/devicetree/bindings/thermal/allwinner,sun8i-a83t-ths.yaml
+++ b/Documentation/devicetree/bindings/thermal/allwinner,sun8i-a83t-ths.yaml
@@ -16,6 +16,7 @@  properties:
       - allwinner,sun8i-a83t-ths
       - allwinner,sun8i-h3-ths
       - allwinner,sun8i-r40-ths
+      - allwinner,sun20i-d1-ths
       - allwinner,sun50i-a64-ths
       - allwinner,sun50i-a100-ths
       - allwinner,sun50i-h5-ths
@@ -61,6 +62,7 @@  allOf:
         compatible:
           contains:
             enum:
+              - allwinner,sun20i-d1-ths
               - allwinner,sun50i-a100-ths
               - allwinner,sun50i-h6-ths
 
@@ -84,7 +86,9 @@  allOf:
       properties:
         compatible:
           contains:
-            const: allwinner,sun8i-h3-ths
+            enum:
+              - allwinner,sun8i-h3-ths
+              - allwinner,sun20i-d1-ths
 
     then:
       properties:
@@ -103,6 +107,7 @@  allOf:
             enum:
               - allwinner,sun8i-h3-ths
               - allwinner,sun8i-r40-ths
+              - allwinner,sun20i-d1-ths
               - allwinner,sun50i-a64-ths
               - allwinner,sun50i-a100-ths
               - allwinner,sun50i-h5-ths
@@ -159,4 +164,17 @@  examples:
          #thermal-sensor-cells = <1>;
     };
 
+  - |
+    thermal-sensor@2009400 {
+          compatible = "allwinner,sun20i-d1-ths";
+          reg = <0x02009400 0x400>;
+          interrupts = <0 90 0>;
+          clocks = <&ccu 0>;
+          clock-names = "bus";
+          resets = <&ccu 2>;
+          nvmem-cells = <&ths_calibration>;
+          nvmem-cell-names = "calibration";
+          #thermal-sensor-cells = <0>;
+    };
+
 ...