devicetree.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v4 0/3] Add OF support for Microchip emc2305 fan controller
@ 2025-03-13 12:57 florin.leotescu
  2025-03-13 12:57 ` [PATCH v4 1/3] dt-bindings: hwmon: Add Microchip emc2305 support florin.leotescu
                   ` (2 more replies)
  0 siblings, 3 replies; 10+ messages in thread
From: florin.leotescu @ 2025-03-13 12:57 UTC (permalink / raw)
  To: Jean Delvare, Guenter Roeck, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Michael Shych, linux-hwmon, devicetree,
	linux-kernel
  Cc: viorel.suman, carlos.song, linux-arm-kernel, imx, festevam,
	Florin Leotescu

From: Florin Leotescu <florin.leotescu@nxp.com>

This patch series add initial OF support for Microchip emc2305 fan controller.

Changes since v3:
- Removed thermal_cooling_device_register_fail label since is no longer needed
  and replaced goto with imediate return, as recommended by Guenter Roeck. 
- Redefined compatible property in dt-binding, as recommended by Frank Li.
- Updated driver of compatible list.
- Renamed node name in the dt-binding example, as recommended by Connor Dooley.
- Corrected dt-binding commit subject.
- Added dt-binding fan descriptions and $ref to fan schema, 
  as Connor Dooley & Krzysztof Kozlowski recommended.
  Used similar as on maxim,max6639 and nuvoton,nct7363. 
- Updated dt-binding example.

Changes since v2:
- Removed the introduction of new properties for now and we only 
  enable basic OF support.
- Link to previous version: 
  https://lore.kernel.org/linux-arm-kernel/20250219133221.2641041-3-florin.leotescu@oss.nxp.com/T/

Florin Leotescu (3):
  dt-bindings: hwmon: Add Microchip emc2305 support
  hwmon: emc2305: Add OF support
  hwmon: emc2305: Use devm_thermal_of_cooling_device_register

 .../bindings/hwmon/microchip,emc2305.yaml     | 104 ++++++++++++++++++
 drivers/hwmon/emc2305.c                       |  38 ++-----
 2 files changed, 114 insertions(+), 28 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/hwmon/microchip,emc2305.yaml

-- 
2.34.1


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

* [PATCH v4 1/3] dt-bindings: hwmon: Add Microchip emc2305 support
  2025-03-13 12:57 [PATCH v4 0/3] Add OF support for Microchip emc2305 fan controller florin.leotescu
@ 2025-03-13 12:57 ` florin.leotescu
  2025-03-13 16:39   ` Frank Li
  2025-03-14  8:07   ` Krzysztof Kozlowski
  2025-03-13 12:57 ` [PATCH v4 2/3] hwmon: emc2305: Add OF support florin.leotescu
  2025-03-13 12:57 ` [PATCH v4 3/3] hwmon: emc2305: Use devm_thermal_of_cooling_device_register florin.leotescu
  2 siblings, 2 replies; 10+ messages in thread
From: florin.leotescu @ 2025-03-13 12:57 UTC (permalink / raw)
  To: Jean Delvare, Guenter Roeck, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Michael Shych, linux-hwmon, devicetree,
	linux-kernel
  Cc: viorel.suman, carlos.song, linux-arm-kernel, imx, festevam,
	Florin Leotescu

From: Florin Leotescu <florin.leotescu@nxp.com>

Introduce yaml schema for Microchip emc2305 pwm fan controller.

Signed-off-by: Florin Leotescu <florin.leotescu@nxp.com>
---
 .../bindings/hwmon/microchip,emc2305.yaml     | 104 ++++++++++++++++++
 1 file changed, 104 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/hwmon/microchip,emc2305.yaml

diff --git a/Documentation/devicetree/bindings/hwmon/microchip,emc2305.yaml b/Documentation/devicetree/bindings/hwmon/microchip,emc2305.yaml
new file mode 100644
index 000000000000..3107fcafcf6a
--- /dev/null
+++ b/Documentation/devicetree/bindings/hwmon/microchip,emc2305.yaml
@@ -0,0 +1,104 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+
+$id: http://devicetree.org/schemas/hwmon/microchip,emc2305.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Microchip EMC2305 SMBus compliant PWM fan controller
+
+maintainers:
+  - Michael Shych <michaelsh@nvidia.com>
+
+description:
+  Microchip EMC2301/2/3/5 pwm controller which supports
+  up to five programmable fan control circuits.
+
+properties:
+  compatible:
+    oneOf:
+      - enum:
+          - microchip,emc2305
+      - items:
+          - enum:
+              - microchip,emc2303
+              - microchip,emc2302
+              - microchip,emc2301
+          - const: microchip,emc2305
+
+  reg:
+    maxItems: 1
+
+  '#address-cells':
+    const: 1
+
+  '#size-cells':
+    const: 0
+
+  '#pwm-cells':
+    const: 2
+
+patternProperties:
+  "^fan@[0-4]$":
+    $ref: fan-common.yaml#
+    unevaluatedProperties: false
+    properties:
+      reg:
+        description:
+          The fan number.
+
+    required:
+      - reg
+      - pwms
+
+required:
+  - compatible
+  - reg
+
+additionalProperties: false
+
+examples:
+  - |
+    i2c {
+        #address-cells = <1>;
+        #size-cells = <0>;
+
+        fan_controller: fan-controller@2f {
+            compatible = "microchip,emc2305";
+            reg = <0x2f>;
+            #address-cells = <1>;
+            #size-cells = <0>;
+            #pwm-cells = <2>;
+
+            fan@0 {
+                #cooling-cells = <2>;
+                reg = <0x0>;
+                pwms = <&fan_controller 1 1>;
+            };
+
+            fan@1 {
+                #cooling-cells = <2>;
+                reg = <0x1>;
+                pwms = <&fan_controller 1 1>;
+            };
+
+            fan@2 {
+                #cooling-cells = <2>;
+                reg = <0x2>;
+                pwms = <&fan_controller 1 1>;
+            };
+
+            fan@3 {
+                #cooling-cells = <2>;
+                reg = <0x3>;
+                pwms = <&fan_controller 1 1>;
+            };
+
+            fan@4 {
+                #cooling-cells = <2>;
+                reg = <0x4>;
+                pwms = <&fan_controller 1 1>;
+            };
+        };
+    };
+...
-- 
2.34.1


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

* [PATCH v4 2/3] hwmon: emc2305: Add OF support
  2025-03-13 12:57 [PATCH v4 0/3] Add OF support for Microchip emc2305 fan controller florin.leotescu
  2025-03-13 12:57 ` [PATCH v4 1/3] dt-bindings: hwmon: Add Microchip emc2305 support florin.leotescu
@ 2025-03-13 12:57 ` florin.leotescu
  2025-03-13 16:33   ` Frank Li
  2025-03-13 12:57 ` [PATCH v4 3/3] hwmon: emc2305: Use devm_thermal_of_cooling_device_register florin.leotescu
  2 siblings, 1 reply; 10+ messages in thread
From: florin.leotescu @ 2025-03-13 12:57 UTC (permalink / raw)
  To: Jean Delvare, Guenter Roeck, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Michael Shych, linux-hwmon, devicetree,
	linux-kernel
  Cc: viorel.suman, carlos.song, linux-arm-kernel, imx, festevam,
	Florin Leotescu

From: Florin Leotescu <florin.leotescu@nxp.com>

Introduce OF support for Microchip emc2305 pwm fan controller.

Signed-off-by: Florin Leotescu <florin.leotescu@nxp.com>
---
 drivers/hwmon/emc2305.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/drivers/hwmon/emc2305.c b/drivers/hwmon/emc2305.c
index 4d39fbd83769..f8a4c76fcadd 100644
--- a/drivers/hwmon/emc2305.c
+++ b/drivers/hwmon/emc2305.c
@@ -607,9 +607,16 @@ static void emc2305_remove(struct i2c_client *client)
 		emc2305_unset_tz(dev);
 }
 
+static const struct of_device_id of_emc2305_match_table[] = {
+	{ .compatible = "microchip,emc2305", },
+	{},
+};
+MODULE_DEVICE_TABLE(of, of_emc2305_match_table);
+
 static struct i2c_driver emc2305_driver = {
 	.driver = {
 		.name = "emc2305",
+		.of_match_table = of_emc2305_match_table,
 	},
 	.probe = emc2305_probe,
 	.remove	  = emc2305_remove,
-- 
2.34.1


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

* [PATCH v4 3/3] hwmon: emc2305: Use devm_thermal_of_cooling_device_register
  2025-03-13 12:57 [PATCH v4 0/3] Add OF support for Microchip emc2305 fan controller florin.leotescu
  2025-03-13 12:57 ` [PATCH v4 1/3] dt-bindings: hwmon: Add Microchip emc2305 support florin.leotescu
  2025-03-13 12:57 ` [PATCH v4 2/3] hwmon: emc2305: Add OF support florin.leotescu
@ 2025-03-13 12:57 ` florin.leotescu
  2 siblings, 0 replies; 10+ messages in thread
From: florin.leotescu @ 2025-03-13 12:57 UTC (permalink / raw)
  To: Jean Delvare, Guenter Roeck, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Michael Shych, linux-hwmon, devicetree,
	linux-kernel
  Cc: viorel.suman, carlos.song, linux-arm-kernel, imx, festevam,
	Florin Leotescu, Frank Li

From: Florin Leotescu <florin.leotescu@nxp.com>

Prepare the emc2305 driver to use configuration from Device Tree nodes.
Switch to devm_thermal_of_cooling_device_register to simplify the
cleanup procedure, allowing the removal of emc2305_unset_tz and
emc2305_remove, which are no longer needed.

Signed-off-by: Florin Leotescu <florin.leotescu@nxp.com>
Reviewed-by: Frank Li <Frank.Li@nxp.com>
---
 drivers/hwmon/emc2305.c | 33 ++++-----------------------------
 1 file changed, 4 insertions(+), 29 deletions(-)

diff --git a/drivers/hwmon/emc2305.c b/drivers/hwmon/emc2305.c
index f8a4c76fcadd..234c54956a4b 100644
--- a/drivers/hwmon/emc2305.c
+++ b/drivers/hwmon/emc2305.c
@@ -112,8 +112,6 @@ static char *emc2305_fan_name[] = {
 	"emc2305_fan5",
 };
 
-static void emc2305_unset_tz(struct device *dev);
-
 static int emc2305_get_max_channel(const struct emc2305_data *data)
 {
 	return data->pwm_num;
@@ -293,8 +291,9 @@ static int emc2305_set_single_tz(struct device *dev, int idx)
 	pwm = data->pwm_min[cdev_idx];
 
 	data->cdev_data[cdev_idx].cdev =
-		thermal_cooling_device_register(emc2305_fan_name[idx], data,
-						&emc2305_cooling_ops);
+		devm_thermal_of_cooling_device_register(dev, dev->of_node,
+							emc2305_fan_name[idx], data,
+							&emc2305_cooling_ops);
 
 	if (IS_ERR(data->cdev_data[cdev_idx].cdev)) {
 		dev_err(dev, "Failed to register cooling device %s\n", emc2305_fan_name[idx]);
@@ -332,24 +331,9 @@ static int emc2305_set_tz(struct device *dev)
 	for (i = 0; i < data->pwm_num; i++) {
 		ret = emc2305_set_single_tz(dev, i + 1);
 		if (ret)
-			goto thermal_cooling_device_register_fail;
+			return ret;
 	}
 	return 0;
-
-thermal_cooling_device_register_fail:
-	emc2305_unset_tz(dev);
-	return ret;
-}
-
-static void emc2305_unset_tz(struct device *dev)
-{
-	struct emc2305_data *data = dev_get_drvdata(dev);
-	int i;
-
-	/* Unregister cooling device. */
-	for (i = 0; i < EMC2305_PWM_MAX; i++)
-		if (data->cdev_data[i].cdev)
-			thermal_cooling_device_unregister(data->cdev_data[i].cdev);
 }
 
 static umode_t
@@ -599,14 +583,6 @@ static int emc2305_probe(struct i2c_client *client)
 	return 0;
 }
 
-static void emc2305_remove(struct i2c_client *client)
-{
-	struct device *dev = &client->dev;
-
-	if (IS_REACHABLE(CONFIG_THERMAL))
-		emc2305_unset_tz(dev);
-}
-
 static const struct of_device_id of_emc2305_match_table[] = {
 	{ .compatible = "microchip,emc2305", },
 	{},
@@ -619,7 +595,6 @@ static struct i2c_driver emc2305_driver = {
 		.of_match_table = of_emc2305_match_table,
 	},
 	.probe = emc2305_probe,
-	.remove	  = emc2305_remove,
 	.id_table = emc2305_ids,
 };
 
-- 
2.34.1


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

* Re: [PATCH v4 2/3] hwmon: emc2305: Add OF support
  2025-03-13 12:57 ` [PATCH v4 2/3] hwmon: emc2305: Add OF support florin.leotescu
@ 2025-03-13 16:33   ` Frank Li
  0 siblings, 0 replies; 10+ messages in thread
From: Frank Li @ 2025-03-13 16:33 UTC (permalink / raw)
  To: florin.leotescu
  Cc: Jean Delvare, Guenter Roeck, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Michael Shych, linux-hwmon, devicetree,
	linux-kernel, viorel.suman, carlos.song, linux-arm-kernel, imx,
	festevam, Florin Leotescu

On Thu, Mar 13, 2025 at 02:57:45PM +0200, florin.leotescu@oss.nxp.com wrote:
> From: Florin Leotescu <florin.leotescu@nxp.com>
>
> Introduce OF support for Microchip emc2305 pwm fan controller.
>
> Signed-off-by: Florin Leotescu <florin.leotescu@nxp.com>

Reviewed-by: Frank Li <Frank.Li@nxp.com>

> ---
>  drivers/hwmon/emc2305.c | 7 +++++++
>  1 file changed, 7 insertions(+)
>
> diff --git a/drivers/hwmon/emc2305.c b/drivers/hwmon/emc2305.c
> index 4d39fbd83769..f8a4c76fcadd 100644
> --- a/drivers/hwmon/emc2305.c
> +++ b/drivers/hwmon/emc2305.c
> @@ -607,9 +607,16 @@ static void emc2305_remove(struct i2c_client *client)
>  		emc2305_unset_tz(dev);
>  }
>
> +static const struct of_device_id of_emc2305_match_table[] = {
> +	{ .compatible = "microchip,emc2305", },
> +	{},
> +};
> +MODULE_DEVICE_TABLE(of, of_emc2305_match_table);
> +
>  static struct i2c_driver emc2305_driver = {
>  	.driver = {
>  		.name = "emc2305",
> +		.of_match_table = of_emc2305_match_table,
>  	},
>  	.probe = emc2305_probe,
>  	.remove	  = emc2305_remove,
> --
> 2.34.1
>

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

* Re: [PATCH v4 1/3] dt-bindings: hwmon: Add Microchip emc2305 support
  2025-03-13 12:57 ` [PATCH v4 1/3] dt-bindings: hwmon: Add Microchip emc2305 support florin.leotescu
@ 2025-03-13 16:39   ` Frank Li
  2025-03-14  8:07   ` Krzysztof Kozlowski
  1 sibling, 0 replies; 10+ messages in thread
From: Frank Li @ 2025-03-13 16:39 UTC (permalink / raw)
  To: florin.leotescu
  Cc: Jean Delvare, Guenter Roeck, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Michael Shych, linux-hwmon, devicetree,
	linux-kernel, viorel.suman, carlos.song, linux-arm-kernel, imx,
	festevam, Florin Leotescu

On Thu, Mar 13, 2025 at 02:57:44PM +0200, florin.leotescu@oss.nxp.com wrote:
> From: Florin Leotescu <florin.leotescu@nxp.com>
>
> Introduce yaml schema for Microchip emc2305 pwm fan controller.
>
> Signed-off-by: Florin Leotescu <florin.leotescu@nxp.com>
> ---
>  .../bindings/hwmon/microchip,emc2305.yaml     | 104 ++++++++++++++++++
>  1 file changed, 104 insertions(+)
>  create mode 100644 Documentation/devicetree/bindings/hwmon/microchip,emc2305.yaml
>
> diff --git a/Documentation/devicetree/bindings/hwmon/microchip,emc2305.yaml b/Documentation/devicetree/bindings/hwmon/microchip,emc2305.yaml
> new file mode 100644
> index 000000000000..3107fcafcf6a
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/hwmon/microchip,emc2305.yaml
> @@ -0,0 +1,104 @@
> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> +%YAML 1.2
> +---
> +
> +$id: http://devicetree.org/schemas/hwmon/microchip,emc2305.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: Microchip EMC2305 SMBus compliant PWM fan controller
> +
> +maintainers:
> +  - Michael Shych <michaelsh@nvidia.com>
> +
> +description:
> +  Microchip EMC2301/2/3/5 pwm controller which supports
> +  up to five programmable fan control circuits.
> +
> +properties:
> +  compatible:
> +    oneOf:
> +      - enum:
> +          - microchip,emc2305
> +      - items:
> +          - enum:
> +              - microchip,emc2303
> +              - microchip,emc2302
> +              - microchip,emc2301
> +          - const: microchip,emc2305
> +
> +  reg:
> +    maxItems: 1
> +
> +  '#address-cells':
> +    const: 1
> +
> +  '#size-cells':
> +    const: 0
> +
> +  '#pwm-cells':
> +    const: 2
> +
> +patternProperties:
> +  "^fan@[0-4]$":
> +    $ref: fan-common.yaml#
> +    unevaluatedProperties: false
> +    properties:
> +      reg:
> +        description:
> +          The fan number.
> +
> +    required:
> +      - reg
> +      - pwms
> +
> +required:
> +  - compatible
> +  - reg
> +
> +additionalProperties: false
> +
> +examples:
> +  - |
> +    i2c {
> +        #address-cells = <1>;
> +        #size-cells = <0>;
> +
> +        fan_controller: fan-controller@2f {
> +            compatible = "microchip,emc2305";
> +            reg = <0x2f>;
> +            #address-cells = <1>;
> +            #size-cells = <0>;
> +            #pwm-cells = <2>;
> +
> +            fan@0 {
> +                #cooling-cells = <2>;
> +                reg = <0x0>;
> +                pwms = <&fan_controller 1 1>;
> +            };
> +
> +            fan@1 {
> +                #cooling-cells = <2>;
> +                reg = <0x1>;
> +                pwms = <&fan_controller 1 1>;
> +            };
> +
> +            fan@2 {
> +                #cooling-cells = <2>;
> +                reg = <0x2>;
> +                pwms = <&fan_controller 1 1>;
> +            };
> +
> +            fan@3 {
> +                #cooling-cells = <2>;
> +                reg = <0x3>;
> +                pwms = <&fan_controller 1 1>;
> +            };
> +
> +            fan@4 {
> +                #cooling-cells = <2>;
> +                reg = <0x4>;
> +                pwms = <&fan_controller 1 1>;
> +            };

I think one child node should be enough for example.

Reviewed-by: Frank Li <Frank.Li@nxp.com>

> +        };
> +    };
> +...
> --
> 2.34.1
>

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

* Re: [PATCH v4 1/3] dt-bindings: hwmon: Add Microchip emc2305 support
  2025-03-13 12:57 ` [PATCH v4 1/3] dt-bindings: hwmon: Add Microchip emc2305 support florin.leotescu
  2025-03-13 16:39   ` Frank Li
@ 2025-03-14  8:07   ` Krzysztof Kozlowski
  2025-03-14 15:02     ` Florin Leotescu (OSS)
  1 sibling, 1 reply; 10+ messages in thread
From: Krzysztof Kozlowski @ 2025-03-14  8:07 UTC (permalink / raw)
  To: florin.leotescu
  Cc: Jean Delvare, Guenter Roeck, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Michael Shych, linux-hwmon, devicetree,
	linux-kernel, viorel.suman, carlos.song, linux-arm-kernel, imx,
	festevam, Florin Leotescu

On Thu, Mar 13, 2025 at 02:57:44PM +0200, florin.leotescu@oss.nxp.com wrote:
> +  '#size-cells':
> +    const: 0
> +
> +  '#pwm-cells':
> +    const: 2
> +
> +patternProperties:
> +  "^fan@[0-4]$":

Keep consistent quotes, either ' or "

> +    $ref: fan-common.yaml#
> +    unevaluatedProperties: false
> +    properties:
> +      reg:
> +        description:
> +          The fan number.
> +
> +    required:
> +      - reg
> +      - pwms
> +
> +required:
> +  - compatible
> +  - reg
> +
> +additionalProperties: false
> +
> +examples:
> +  - |
> +    i2c {
> +        #address-cells = <1>;
> +        #size-cells = <0>;
> +
> +        fan_controller: fan-controller@2f {
> +            compatible = "microchip,emc2305";
> +            reg = <0x2f>;
> +            #address-cells = <1>;
> +            #size-cells = <0>;
> +            #pwm-cells = <2>;
> +
> +            fan@0 {
> +                #cooling-cells = <2>;
> +                reg = <0x0>;

Please follow DTS coding style, so reg is here the first property.

> +                pwms = <&fan_controller 1 1>;

It's the same PWM for all fans? So isn't it basically one fan? How do
you exactly control them independently, if the same PWM channel is used?

> +            };
> +
> +            fan@1 {
> +                #cooling-cells = <2>;
> +                reg = <0x1>;
> +                pwms = <&fan_controller 1 1>;


Best regards,
Krzysztof


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

* RE: [PATCH v4 1/3] dt-bindings: hwmon: Add Microchip emc2305 support
  2025-03-14  8:07   ` Krzysztof Kozlowski
@ 2025-03-14 15:02     ` Florin Leotescu (OSS)
  2025-03-14 15:17       ` Guenter Roeck
  0 siblings, 1 reply; 10+ messages in thread
From: Florin Leotescu (OSS) @ 2025-03-14 15:02 UTC (permalink / raw)
  To: Krzysztof Kozlowski, Florin Leotescu (OSS)
  Cc: Jean Delvare, Guenter Roeck, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Michael Shych, linux-hwmon@vger.kernel.org,
	devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
	Viorel Suman, Carlos Song, linux-arm-kernel@lists.infradead.org,
	imx@lists.linux.dev, festevam@gmail.com, Florin Leotescu

>> +  '#size-cells':
>> +    const: 0
>> +
>> +  '#pwm-cells':
>> +    const: 2
>> +
>> +patternProperties:
>> +  "^fan@[0-4]$":
> 
> Keep consistent quotes, either ' or "
>

Thank you! I will correct that.

>> +    $ref: fan-common.yaml#
>> +    unevaluatedProperties: false
>> +    properties:
>> +      reg:
>> +        description:
>> +          The fan number.
>> +
>> +    required:
>> +      - reg
>> +      - pwms
>> +
>> +required:
>> +  - compatible
>> +  - reg
>> +
>> +additionalProperties: false
>> +
>> +examples:
>> +  - |
>> +    i2c {
>> +        #address-cells = <1>;
>> +        #size-cells = <0>;
>> +
>> +        fan_controller: fan-controller@2f {
>> +            compatible = "microchip,emc2305";
>> +            reg = <0x2f>;
>> +            #address-cells = <1>;
>> +            #size-cells = <0>;
>> +            #pwm-cells = <2>;
>> +
>> +            fan@0 {
>> +                #cooling-cells = <2>;
>> +                reg = <0x0>;
>
> Please follow DTS coding style, so reg is here the first property.
>

Ok, I will correct it. Thanks!

>> +                pwms = <&fan_controller 1 1>;
>
> It's the same PWM for all fans? So isn't it basically one fan? How do you exactly control them independently, if the same PWM channel is used?
>

It is the same PWM controller, but each fan has a different PWM channel. According to datasheet, the EMC2305 could control up to five programmable fan control circuits.
The driver will parse all fan child nodes during probe and use reg to differentiate the channels, similar as it is done on max6639 hwmon driver. 
The 'pwms' arguments in the example are used to select the polarity and pwm output, which will be parsed in the driver to generate the bits for the registers used to select pwm output and pwm polarity. 
(... <&fan_controller [pwm_polarity] [pwm_output]> ...).  Now, I realized that I should use: <&fan_controller [pwm_channel] [pwm_frequency] [pwm_polarity] [pwm_output]>. I will also document the arguments in #pwm-cells description. 
Thanks!

>> +            };
>> +
>> +            fan@1 {
>> +                #cooling-cells = <2>;
>> +                reg = <0x1>;
>> +                pwms = <&fan_controller 1 1>;

Best regards,
Florin

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

* Re: [PATCH v4 1/3] dt-bindings: hwmon: Add Microchip emc2305 support
  2025-03-14 15:02     ` Florin Leotescu (OSS)
@ 2025-03-14 15:17       ` Guenter Roeck
  2025-03-16 17:31         ` Krzysztof Kozlowski
  0 siblings, 1 reply; 10+ messages in thread
From: Guenter Roeck @ 2025-03-14 15:17 UTC (permalink / raw)
  To: Florin Leotescu (OSS), Krzysztof Kozlowski
  Cc: Jean Delvare, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
	Michael Shych, linux-hwmon@vger.kernel.org,
	devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
	Viorel Suman, Carlos Song, linux-arm-kernel@lists.infradead.org,
	imx@lists.linux.dev, festevam@gmail.com, Florin Leotescu

On 3/14/25 08:02, Florin Leotescu (OSS) wrote:
>>> +  '#size-cells':
>>> +    const: 0
>>> +
>>> +  '#pwm-cells':
>>> +    const: 2
>>> +
>>> +patternProperties:
>>> +  "^fan@[0-4]$":
>>
>> Keep consistent quotes, either ' or "
>>
> 
> Thank you! I will correct that.
> 
>>> +    $ref: fan-common.yaml#
>>> +    unevaluatedProperties: false
>>> +    properties:
>>> +      reg:
>>> +        description:
>>> +          The fan number.
>>> +
>>> +    required:
>>> +      - reg
>>> +      - pwms
>>> +
>>> +required:
>>> +  - compatible
>>> +  - reg
>>> +
>>> +additionalProperties: false
>>> +
>>> +examples:
>>> +  - |
>>> +    i2c {
>>> +        #address-cells = <1>;
>>> +        #size-cells = <0>;
>>> +
>>> +        fan_controller: fan-controller@2f {
>>> +            compatible = "microchip,emc2305";
>>> +            reg = <0x2f>;
>>> +            #address-cells = <1>;
>>> +            #size-cells = <0>;
>>> +            #pwm-cells = <2>;
>>> +
>>> +            fan@0 {
>>> +                #cooling-cells = <2>;
>>> +                reg = <0x0>;
>>
>> Please follow DTS coding style, so reg is here the first property.
>>
> 
> Ok, I will correct it. Thanks!
> 
>>> +                pwms = <&fan_controller 1 1>;
>>
>> It's the same PWM for all fans? So isn't it basically one fan? How do you exactly control them independently, if the same PWM channel is used?
>>
> 
> It is the same PWM controller, but each fan has a different PWM channel. According to datasheet, the EMC2305 could control up to five programmable fan control circuits.
> The driver will parse all fan child nodes during probe and use reg to differentiate the channels, similar as it is done on max6639 hwmon driver.
> The 'pwms' arguments in the example are used to select the polarity and pwm output, which will be parsed in the driver to generate the bits for the registers used to select pwm output and pwm polarity.
> (... <&fan_controller [pwm_polarity] [pwm_output]> ...).  Now, I realized that I should use: <&fan_controller [pwm_channel] [pwm_frequency] [pwm_polarity] [pwm_output]>. I will also document the arguments in #pwm-cells description.
> Thanks!
> 

Please also document that the channel assignment is fixed. Technically it
doesn't even make sense to specify the pwm channel (it is fixed and
matches "reg"). I don't know if the channel number can be omitted from pwms.
All you really need is polarity, frequency, and output type.

I am not really sure what to do if the channel number is mandatory.
If it is, I'd suggest to document it as mandated but not needed/used,
and then ignore it in the code.

Thanks,
Guenter


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

* Re: [PATCH v4 1/3] dt-bindings: hwmon: Add Microchip emc2305 support
  2025-03-14 15:17       ` Guenter Roeck
@ 2025-03-16 17:31         ` Krzysztof Kozlowski
  0 siblings, 0 replies; 10+ messages in thread
From: Krzysztof Kozlowski @ 2025-03-16 17:31 UTC (permalink / raw)
  To: Guenter Roeck, Florin Leotescu (OSS)
  Cc: Jean Delvare, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
	Michael Shych, linux-hwmon@vger.kernel.org,
	devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
	Viorel Suman, Carlos Song, linux-arm-kernel@lists.infradead.org,
	imx@lists.linux.dev, festevam@gmail.com, Florin Leotescu

On 14/03/2025 16:17, Guenter Roeck wrote:
>>>> +                pwms = <&fan_controller 1 1>;
>>>
>>> It's the same PWM for all fans? So isn't it basically one fan? How do you exactly control them independently, if the same PWM channel is used?
>>>
>>
>> It is the same PWM controller, but each fan has a different PWM channel. According to datasheet, the EMC2305 could control up to five programmable fan control circuits.
>> The driver will parse all fan child nodes during probe and use reg to differentiate the channels, similar as it is done on max6639 hwmon driver.
>> The 'pwms' arguments in the example are used to select the polarity and pwm output, which will be parsed in the driver to generate the bits for the registers used to select pwm output and pwm polarity.
>> (... <&fan_controller [pwm_polarity] [pwm_output]> ...).  Now, I realized that I should use: <&fan_controller [pwm_channel] [pwm_frequency] [pwm_polarity] [pwm_output]>. I will also document the arguments in #pwm-cells description.
>> Thanks!
>>
> 
> Please also document that the channel assignment is fixed. Technically it
> doesn't even make sense to specify the pwm channel (it is fixed and
> matches "reg"). I don't know if the channel number can be omitted from pwms.
> All you really need is polarity, frequency, and output type.
> 
> I am not really sure what to do if the channel number is mandatory.
> If it is, I'd suggest to document it as mandated but not needed/used,
> and then ignore it in the code.

Skipping channel would be fine for me, but then mention this in the
'reg' description.



Best regards,
Krzysztof

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

end of thread, other threads:[~2025-03-16 17:31 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-03-13 12:57 [PATCH v4 0/3] Add OF support for Microchip emc2305 fan controller florin.leotescu
2025-03-13 12:57 ` [PATCH v4 1/3] dt-bindings: hwmon: Add Microchip emc2305 support florin.leotescu
2025-03-13 16:39   ` Frank Li
2025-03-14  8:07   ` Krzysztof Kozlowski
2025-03-14 15:02     ` Florin Leotescu (OSS)
2025-03-14 15:17       ` Guenter Roeck
2025-03-16 17:31         ` Krzysztof Kozlowski
2025-03-13 12:57 ` [PATCH v4 2/3] hwmon: emc2305: Add OF support florin.leotescu
2025-03-13 16:33   ` Frank Li
2025-03-13 12:57 ` [PATCH v4 3/3] hwmon: emc2305: Use devm_thermal_of_cooling_device_register florin.leotescu

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).