Skip to contentSkip to conversation

dt-bindings: hwmon: add tmp464.yaml

PATCH Superseded Guenter Roeck 2 participants 6 messages Feb 18, 2022

Subsystems (3)

v4 of 7 Superseded Latest is v7 →

lore
Share & tools
lore

Guenter Roeck

author maintainer
#0 lore raw

PATCH v4 1/2 dt-bindings: hwmon: add tmp464.yaml

From: Agathe Porte <[email protected]>

Add basic description of the tmp464 driver DT bindings.

---
v4:
- No changes

v3:
- Addedd support for TMP468.
- Changed number of channels from 0..3 (which was wrong anyway) to 0..8.
- Changed value range for ti,n-factor to int8, with an example for a negative value.
- Added myself as driver maintainer.

 .../devicetree/bindings/hwmon/ti,tmp464.yaml  | 109 ++++++++++++++++++
 MAINTAINERS                                   |   7 ++
 2 files changed, 116 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/hwmon/ti,tmp464.yaml
Documentation/devicetree/bindings/hwmon/ti,tmp464.yaml new file +109 -0
new file mode 100644
index 000000000000..8ce4be729494
@@ -0,0 +1,109 @@
+# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/hwmon/ti,tmp464.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: TMP464 and TMP468 temperature sensors
+
+maintainers:
+  - Agathe Porte <[email protected]>
+
+description: |
+  ±0.0625°C Remote and Local temperature sensor
+  https://www.ti.com/lit/ds/symlink/tmp464.pdf
+  https://www.ti.com/lit/ds/symlink/tmp468.pdf
+
+properties:
+  compatible:
+    enum:
+      - ti,tmp464
+      - ti,tmp468
+
+  reg:
+    maxItems: 1
+
+  '#address-cells':
+    const: 1
+
+  '#size-cells':
+    const: 0
+
+required:
+  - compatible
+  - reg
+
+additionalProperties: false
+
+patternProperties:
+  "^channel@([0-8])$":
+    type: object
+    description: |
+      Represents channels of the device and their specific configuration.
+
+    properties:
+      reg:
+        description: |
+          The channel number. 0 is local channel, 1-8 are remote channels.
+        items:
+          minimum: 0
+          maximum: 8
+
+      label:
+        description: |
+          A descriptive name for this channel, like "ambient" or "psu".
+
+      ti,n-factor:
+        description: |
+          The value (two's complement) to be programmed in the channel specific N correction register.
+          For remote channels only.
+        $ref: /schemas/types.yaml#/definitions/int8
+        items:
+          minimum: -128
+          maximum: 127
+
+    required:
+      - reg
+
+    additionalProperties: false
+
+examples:
+  - |
+    i2c {
+      #address-cells = <1>;
+      #size-cells = <0>;
+
+      sensor@4b {
+        compatible = "ti,tmp464";
+        reg = <0x4b>;
+      };
+    };
+  - |
+    i2c {
+      #address-cells = <1>;
+      #size-cells = <0>;
+
+      sensor@4b {
+        compatible = "ti,tmp464";
+        reg = <0x4b>;
+        #address-cells = <1>;
+        #size-cells = <0>;
+
+        channel@0 {
+          reg = <0x0>;
+          ti,n-factor = /bits/ 8 <(-10)>;
+          label = "local";
+        };
+
+        channel@1 {
+          reg = <0x1>;
+          ti,n-factor = /bits/ 8 <0x0>;
+          label = "somelabel";
+        };
+
+        channel@2 {
+          reg = <0x2>;
+          status = "disabled";
+        };
+      };
+    };
MAINTAINERS +7 -0
index fca970a46e77..f51bc7c7e439 100644
@@ -19489,6 +19489,13 @@ S:	Maintained
 F:	Documentation/hwmon/tmp401.rst
 F:	drivers/hwmon/tmp401.c
 
+TMP464 HARDWARE MONITOR DRIVER
+M:	Agathe Porte <[email protected]>
+M:	Guenter Roeck <[email protected]>
+L:	[email protected]
+S:	Maintained
+F:	Documentation/devicetree/bindings/hwmon/ti,tmp464.yaml
+
 TMP513 HARDWARE MONITOR DRIVER
 M:	Eric Tremblay <[email protected]>
 L:	[email protected]
Signature · 1 line
2.35.1
author maintainer
#1 lore raw

PATCH v4 2/2 hwmon: Add driver for Texas Instruments TMP464 and TMP468

Add support for Texas Instruments TMP464 and TMP468 temperature sensor ICs.

TI's TMP464 is an I2C temperature sensor chip. This chip is similar to TI's TMP421 chip, but with 16bit-wide registers (instead of 8bit-wide registers). The chip has one local sensor and four remote sensors. TMP468 is similar to TMP464 but has one local and eight remote sensors.

Originally-from: Agathe Porte <[email protected]>

Cc Agathe Porte <[email protected]>
Cc Krzysztof Adamski <[email protected]>

---
v4:
- Fixed reading n-factor information from devicetree
[Use of_property_read_u8 instead of of_property_read_s32 to read the
property value, and write n-factor value into the upper 8 bit of the n-factor register]
- Fixed displaying label attributes

v3:
- Added support for TMP468
- Added support for various limits, temperature hysteresis, alarm attributes, and update interval
- Use regmap instead of local caching
- Use static chip configuration
- Unlock check if needed when loading driver, and lock it when unloading it
- Call tmp464_init_client() before calling tmp464_probe_from_dt() since the latter changes registers, which requires the chip to be unlocked.
- Restore configuration register when unloading driver
- ti,n-factor is optional, so don't fail if the property is not present

Notes:
- Tested with real TMP468. Module tested for TMP464. Devicetree code tested with rudimentary qemu implementation.

 Documentation/hwmon/index.rst  |   1 +
 Documentation/hwmon/tmp464.rst |  73 ++++
 MAINTAINERS                    |   2 +
 drivers/hwmon/Kconfig          |  11 +
 drivers/hwmon/Makefile         |   1 +
 drivers/hwmon/tmp464.c         | 690 +++++++++++++++++++++++++++++++++
 6 files changed, 778 insertions(+)
 create mode 100644 Documentation/hwmon/tmp464.rst
 create mode 100644 drivers/hwmon/tmp464.c
Documentation/hwmon/index.rst +1 -0
index df20022c741f..37590db85e65 100644
@@ -193,6 +193,7 @@ Hardware Monitoring Kernel Drivers
    tmp108
    tmp401
    tmp421
+   tmp464
    tmp513
    tps23861
    tps40422
Documentation/hwmon/tmp464.rst new file +73 -0

73 lines not on this page · raw message

MAINTAINERS +2 -0
index f51bc7c7e439..9b51bf5ca3b8 100644
@@ -19495,6 +19495,8 @@ M:	Guenter Roeck <[email protected]>
 L:	[email protected]
 S:	Maintained
 F:	Documentation/devicetree/bindings/hwmon/ti,tmp464.yaml
+F:	Documentation/hwmon/tmp464.rst
+F:	drivers/hwmon/tmp464.c
 
 TMP513 HARDWARE MONITOR DRIVER
 M:	Eric Tremblay <[email protected]>
drivers/hwmon/Kconfig +11 -0
index 8df25f1079ba..b84932fd0c13 100644
@@ -1979,6 +1979,17 @@ config SENSORS_TMP421
 	  This driver can also be built as a module. If so, the module
 	  will be called tmp421.
 
+config SENSORS_TMP464
+	tristate "Texas Instruments TMP464 and compatible"
+	depends on I2C
+	select REGMAP_I2C
+	help
+	  If you say yes here you get support for Texas Instruments TMP464
+	  and TMP468 temperature sensor chips.
+
+	  This driver can also be built as a module. If so, the module
+	  will be called tmp464.
+
 config SENSORS_TMP513
 	tristate "Texas Instruments TMP513 and compatibles"
 	depends on I2C
drivers/hwmon/Makefile +1 -0
index 185f946d698b..a1f2d6686227 100644
@@ -194,6 +194,7 @@ obj-$(CONFIG_SENSORS_TMP103)	+= tmp103.o
 obj-$(CONFIG_SENSORS_TMP108)	+= tmp108.o
 obj-$(CONFIG_SENSORS_TMP401)	+= tmp401.o
 obj-$(CONFIG_SENSORS_TMP421)	+= tmp421.o
+obj-$(CONFIG_SENSORS_TMP464)	+= tmp464.o
 obj-$(CONFIG_SENSORS_TMP513)	+= tmp513.o
 obj-$(CONFIG_SENSORS_VEXPRESS)	+= vexpress-hwmon.o
 obj-$(CONFIG_SENSORS_VIA_CPUTEMP)+= via-cputemp.o
drivers/hwmon/tmp464.c new file +690 -0

690 lines not on this page · raw message

Signature · 1 line
2.35.1
#2 lore raw

Re: [PATCH v4 2/2] hwmon: Add driver for Texas Instruments TMP464 and TMP468

Hi Guenter,

Le 18/02/2022 à 07:58, Guenter Roeck a écrit :

Quoted 13 lines

Add support for Texas Instruments TMP464 and TMP468 temperature sensor ICs.

TI's TMP464 is an I2C temperature sensor chip. This chip is similar to TI's TMP421 chip, but with 16bit-wide registers (instead of 8bit-wide registers). The chip has one local sensor and four remote sensors. TMP468 is similar to TMP464 but has one local and eight remote sensors.

Originally-from: Agathe Porte <[email protected]>

Cc Agathe Porte <[email protected]>
Cc Krzysztof Adamski <[email protected]>
Quoted 6 lines

---
v4:
- Fixed reading n-factor information from devicetree
[Use of_property_read_u8 instead of of_property_read_s32 to read the
property value, and write n-factor value into the upper 8 bit of the n-factor register]

Changing n-factor with DT seems to work:

temp2_input=38500 (nfactor=10)
temp2_input=35500 (nfactor=-10)

Driver probes just fine with this attribute set.

drivers/hwmon/tmp464.c line 509

Quoted 9 lines
drivers/hwmon/tmp464.c new file +9 -0
+static int tmp464_probe_child_from_dt(struct device *dev,
+				      struct device_node *child,
+				      struct tmp464_data *data)
+
+{
+	struct regmap *regmap = data->regmap;
+	u32 channel;
+	u8 nfactor;
+	s32 val;

val is not used according to the compiler, and thus should be removed (module does not compile with -Werror)

PS: TMP464 samples will be sent by DHL today and should arrive to you on Feb, 23rd.

Best regards,

Agathe.

author maintainer
#3 lore raw

Re: [PATCH v4 2/2] hwmon: Add driver for Texas Instruments TMP464 and TMP468

Quoted 30 lines · Agathe Porte

Hi Guenter,

Le 18/02/2022 à 07:58, Guenter Roeck a écrit :

Quoted 13 lines

Add support for Texas Instruments TMP464 and TMP468 temperature sensor ICs.

TI's TMP464 is an I2C temperature sensor chip. This chip is similar to TI's TMP421 chip, but with 16bit-wide registers (instead of 8bit-wide registers). The chip has one local sensor and four remote sensors. TMP468 is similar to TMP464 but has one local and eight remote sensors.

Originally-from: Agathe Porte <[email protected]>

Cc Agathe Porte <[email protected]>
Cc Krzysztof Adamski <[email protected]>
Quoted 6 lines

---
v4:
- Fixed reading n-factor information from devicetree
   [Use of_property_read_u8 instead of of_property_read_s32 to read the property value, and write n-factor value into the upper 8 bit of the n-factor register]

Changing n-factor with DT seems to work:

temp2_input=38500 (nfactor=10)
temp2_input=35500 (nfactor=-10)

Driver probes just fine with this attribute set.

Quoted 12 lines

drivers/hwmon/tmp464.c line 509

Quoted 9 lines
drivers/hwmon/tmp464.c new file +9 -0
+static int tmp464_probe_child_from_dt(struct device *dev,
+                      struct device_node *child,
+                      struct tmp464_data *data)
+
+{
+    struct regmap *regmap = data->regmap;
+    u32 channel;
+    u8 nfactor;
+    s32 val;

val is not used according to the compiler, and thus should be removed (module does not compile with -Werror)

Fixed.

Quoted 2 lines

PS: TMP464 samples will be sent by DHL today and should arrive to you on Feb, 23rd.

Thanks a lot!

Guenter

#4 lore raw
In reply to Guenter Roeck

Hi Guenter,

Le 18/02/2022 à 07:58, Guenter Roeck a écrit :

Quoted 11 lines

From: Agathe Porte <[email protected]>

Add basic description of the tmp464 driver DT bindings.

---
v4:
- No changes

Documentation/devicetree/bindings/hwmon/ti,tmp464.yaml line 96

Quoted 5 lines
Documentation/devicetree/bindings/hwmon/ti,tmp464.yaml new file +5 -0
+        channel@0 {
+          reg = <0x0>;
+          ti,n-factor = /bits/ 8 <(-10)>;
+          label = "local";
+        };

Setting the n-factor for the local channel is not supported, so we should remove this attribute for this example and move it to another channel.

Here is the output on a hardware test:

[165599.122883] tmp464 16-0049: n-factor can't be set for internal channel
[165599.123833] tmp464: probe of 16-0049 failed with error -22

Documentation/devicetree/bindings/hwmon/ti,tmp464.yaml line 102

Quoted 6 lines
Documentation/devicetree/bindings/hwmon/ti,tmp464.yaml new file +6 -0
+
+        channel@1 {
+          reg = <0x1>;
+          ti,n-factor = /bits/ 8 <0x0>;
+          label = "somelabel";
+        };

No particular issue when defining a property for channel that is not internal during driver probe.

Documentation/devicetree/bindings/hwmon/ti,tmp464.yaml line 107

Quoted 5 lines
Documentation/devicetree/bindings/hwmon/ti,tmp464.yaml new file +5 -0
+
+        channel@2 {
+          reg = <0x2>;
+          status = "disabled";
+        };

Works as expected on target:

root@fct-0a:/sys/class/hwmon/hwmon2 >cat temp3_input
cat: temp3_input: No data available

Best regards,

Agathe.

author maintainer
#5 lore raw
Quoted 14 lines · Agathe Porte

Hi Guenter,

Le 18/02/2022 à 07:58, Guenter Roeck a écrit :

Quoted 11 lines

From: Agathe Porte <[email protected]>

Add basic description of the tmp464 driver DT bindings.

---
v4:
- No changes

Quoted 8 lines
Quoted 5 lines

+        channel@0 {
+          reg = <0x0>;
+          ti,n-factor = /bits/ 8 <(-10)>;
+          label = "local";
+        };

Setting the n-factor for the local channel is not supported, so we should remove this attribute for this example and move it to another channel.

Done, thanks!

Guenter

Quoted 27 lines

Here is the output on a hardware test:

[165599.122883] tmp464 16-0049: n-factor can't be set for internal channel
[165599.123833] tmp464: probe of 16-0049 failed with error -22
Quoted 6 lines

+
+        channel@1 {
+          reg = <0x1>;
+          ti,n-factor = /bits/ 8 <0x0>;
+          label = "somelabel";
+        };

No particular issue when defining a property for channel that is not internal during driver probe.

Quoted 5 lines

+
+        channel@2 {
+          reg = <0x2>;
+          status = "disabled";
+        };

Works as expected on target:

root@fct-0a:/sys/class/hwmon/hwmon2 >cat temp3_input
cat: temp3_input: No data available

Best regards,

Agathe.