* [PATCH v4 1/3] dt-bindings: vendor-prefixes: Document Argon40 @ 2025-06-21 17:19 Marek Vasut 2025-06-21 17:19 ` [PATCH v4 2/3] dt-bindings: pwm: argon40,fan-hat: Document Argon40 Fan HAT Marek Vasut 2025-06-21 17:19 ` [PATCH v4 3/3] pwm: argon-fan-hat: Add Argon40 Fan HAT support Marek Vasut 0 siblings, 2 replies; 10+ messages in thread From: Marek Vasut @ 2025-06-21 17:19 UTC (permalink / raw) To: linux-pwm Cc: Marek Vasut, Conor Dooley, Uwe Kleine-König, Conor Dooley, Krzysztof Kozlowski, Rob Herring, devicetree, linux-renesas-soc Argon 40 Technologies Limited is a SBC expansion board vendor. Document the prefix. For details see https://argon40.com . Acked-by: Conor Dooley <conor.dooley@microchip.com> Signed-off-by: Marek Vasut <marek.vasut+renesas@mailbox.org> --- Cc: "Uwe Kleine-König" <ukleinek@kernel.org> Cc: Conor Dooley <conor+dt@kernel.org> Cc: Krzysztof Kozlowski <krzk+dt@kernel.org> Cc: Rob Herring <robh@kernel.org> Cc: devicetree@vger.kernel.org Cc: linux-pwm@vger.kernel.org Cc: linux-renesas-soc@vger.kernel.org --- V2: Add AB from Conor V3: No change V4: No change --- Documentation/devicetree/bindings/vendor-prefixes.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Documentation/devicetree/bindings/vendor-prefixes.yaml b/Documentation/devicetree/bindings/vendor-prefixes.yaml index 3f23f6f93b62..27e2ad136931 100644 --- a/Documentation/devicetree/bindings/vendor-prefixes.yaml +++ b/Documentation/devicetree/bindings/vendor-prefixes.yaml @@ -149,6 +149,8 @@ patternProperties: description: Arctic Sand "^arcx,.*": description: arcx Inc. / Archronix Inc. + "^argon40,.*": + description: Argon 40 Technologies Limited "^ariaboard,.*": description: Shanghai Novotech Co., Ltd. (Ariaboard) "^aries,.*": -- 2.47.2 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH v4 2/3] dt-bindings: pwm: argon40,fan-hat: Document Argon40 Fan HAT 2025-06-21 17:19 [PATCH v4 1/3] dt-bindings: vendor-prefixes: Document Argon40 Marek Vasut @ 2025-06-21 17:19 ` Marek Vasut 2025-06-27 20:02 ` Rob Herring (Arm) 2025-06-21 17:19 ` [PATCH v4 3/3] pwm: argon-fan-hat: Add Argon40 Fan HAT support Marek Vasut 1 sibling, 1 reply; 10+ messages in thread From: Marek Vasut @ 2025-06-21 17:19 UTC (permalink / raw) To: linux-pwm Cc: Marek Vasut, Uwe Kleine-König, Conor Dooley, Krzysztof Kozlowski, Rob Herring, devicetree, linux-renesas-soc Document trivial PWM on Argon40 Fan HAT, which is a RaspberryPi blower fan hat which can be controlled over I2C. Signed-off-by: Marek Vasut <marek.vasut+renesas@mailbox.org> --- Cc: "Uwe Kleine-König" <ukleinek@kernel.org> Cc: Conor Dooley <conor+dt@kernel.org> Cc: Krzysztof Kozlowski <krzk+dt@kernel.org> Cc: Rob Herring <robh@kernel.org> Cc: devicetree@vger.kernel.org Cc: linux-pwm@vger.kernel.org Cc: linux-renesas-soc@vger.kernel.org --- V2: Implement dedicated binding document V3: Update the description and pwm-cells V4: Drop | from description and fix up pwm-cells = <2> in example --- .../bindings/pwm/argon40,fan-hat.yaml | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 Documentation/devicetree/bindings/pwm/argon40,fan-hat.yaml diff --git a/Documentation/devicetree/bindings/pwm/argon40,fan-hat.yaml b/Documentation/devicetree/bindings/pwm/argon40,fan-hat.yaml new file mode 100644 index 000000000000..7dbc7c2cd802 --- /dev/null +++ b/Documentation/devicetree/bindings/pwm/argon40,fan-hat.yaml @@ -0,0 +1,48 @@ +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/pwm/argon40,fan-hat.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Argon40 Fan HAT PWM controller + +maintainers: + - Marek Vasut <marek.vasut+renesas@mailbox.org> + +description: + The trivial PWM on Argon40 Fan HAT, which is a RaspberryPi blower fan + hat which can be controlled over I2C, generates a fixed 30 kHz period + PWM signal with configurable 0..100% duty cycle to control the fan + speed. + +allOf: + - $ref: pwm.yaml# + +properties: + compatible: + const: argon40,fan-hat + + reg: + maxItems: 1 + + "#pwm-cells": + const: 3 + +required: + - compatible + - reg + +additionalProperties: false + +examples: + - | + i2c { + #address-cells = <1>; + #size-cells = <0>; + + pwm@1a { + compatible = "argon40,fan-hat"; + reg = <0x1a>; + #pwm-cells = <3>; + }; + }; -- 2.47.2 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH v4 2/3] dt-bindings: pwm: argon40,fan-hat: Document Argon40 Fan HAT 2025-06-21 17:19 ` [PATCH v4 2/3] dt-bindings: pwm: argon40,fan-hat: Document Argon40 Fan HAT Marek Vasut @ 2025-06-27 20:02 ` Rob Herring (Arm) 0 siblings, 0 replies; 10+ messages in thread From: Rob Herring (Arm) @ 2025-06-27 20:02 UTC (permalink / raw) To: Marek Vasut Cc: linux-renesas-soc, Conor Dooley, devicetree, Uwe Kleine-König, linux-pwm, Krzysztof Kozlowski On Sat, 21 Jun 2025 19:19:55 +0200, Marek Vasut wrote: > Document trivial PWM on Argon40 Fan HAT, which is a RaspberryPi > blower fan hat which can be controlled over I2C. > > Signed-off-by: Marek Vasut <marek.vasut+renesas@mailbox.org> > --- > Cc: "Uwe Kleine-König" <ukleinek@kernel.org> > Cc: Conor Dooley <conor+dt@kernel.org> > Cc: Krzysztof Kozlowski <krzk+dt@kernel.org> > Cc: Rob Herring <robh@kernel.org> > Cc: devicetree@vger.kernel.org > Cc: linux-pwm@vger.kernel.org > Cc: linux-renesas-soc@vger.kernel.org > --- > V2: Implement dedicated binding document > V3: Update the description and pwm-cells > V4: Drop | from description and fix up pwm-cells = <2> in example > --- > .../bindings/pwm/argon40,fan-hat.yaml | 48 +++++++++++++++++++ > 1 file changed, 48 insertions(+) > create mode 100644 Documentation/devicetree/bindings/pwm/argon40,fan-hat.yaml > Reviewed-by: Rob Herring (Arm) <robh@kernel.org> ^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH v4 3/3] pwm: argon-fan-hat: Add Argon40 Fan HAT support 2025-06-21 17:19 [PATCH v4 1/3] dt-bindings: vendor-prefixes: Document Argon40 Marek Vasut 2025-06-21 17:19 ` [PATCH v4 2/3] dt-bindings: pwm: argon40,fan-hat: Document Argon40 Fan HAT Marek Vasut @ 2025-06-21 17:19 ` Marek Vasut 2025-06-23 9:11 ` Uwe Kleine-König 1 sibling, 1 reply; 10+ messages in thread From: Marek Vasut @ 2025-06-21 17:19 UTC (permalink / raw) To: linux-pwm Cc: Marek Vasut, Uwe Kleine-König, Conor Dooley, Krzysztof Kozlowski, Rob Herring, devicetree, linux-renesas-soc Add trivial PWM driver for Argon40 Fan HAT, which is a RaspberryPi blower fan hat which can be controlled over I2C. Model this device as a PWM, so the pwm-fan can be attached to it and handle thermal zones and RPM management in a generic manner. Signed-off-by: Marek Vasut <marek.vasut+renesas@mailbox.org> --- Cc: "Uwe Kleine-König" <ukleinek@kernel.org> Cc: Conor Dooley <conor+dt@kernel.org> Cc: Krzysztof Kozlowski <krzk+dt@kernel.org> Cc: Rob Herring <robh@kernel.org> Cc: devicetree@vger.kernel.org Cc: linux-pwm@vger.kernel.org Cc: linux-renesas-soc@vger.kernel.org --- V2: - Switch to waveform ops - Add shutdown hook to force the fan to maximum RPM on shutdown instead of stopping it, to be on the safe side V3: - Find the 30 kHz fixed period PWM, use that - Add comments - Consolidate argon_fan_hat_write() V4: - Add if (wf->duty_length_ns > ARGON40_FAN_HAT_PERIOD_NS) overflow check - Use i2c_smbus_write_byte_data() - Rename struct pwm_chip *pc to struct pwm_chip *chip - Remove tab alignment from argon_fan_hat_pwm_ops {} - Define ARGON40_FAN_HAT_REG_DUTY_CYCLE macro --- drivers/pwm/Kconfig | 9 +++ drivers/pwm/Makefile | 1 + drivers/pwm/pwm-argon-fan-hat.c | 120 ++++++++++++++++++++++++++++++++ 3 files changed, 130 insertions(+) create mode 100644 drivers/pwm/pwm-argon-fan-hat.c diff --git a/drivers/pwm/Kconfig b/drivers/pwm/Kconfig index 6e113f8b4baf..3ef1757502eb 100644 --- a/drivers/pwm/Kconfig +++ b/drivers/pwm/Kconfig @@ -66,6 +66,15 @@ config PWM_APPLE To compile this driver as a module, choose M here: the module will be called pwm-apple. +config PWM_ARGON_FAN_HAT + tristate "Argon40 Fan HAT support" + depends on I2C && OF + help + Generic PWM framework driver for Argon40 Fan HAT. + + To compile this driver as a module, choose M here: the module + will be called pwm-argon-fan-hat. + config PWM_ATMEL tristate "Atmel PWM support" depends on ARCH_AT91 || COMPILE_TEST diff --git a/drivers/pwm/Makefile b/drivers/pwm/Makefile index 96160f4257fc..ff4f47e5fb7a 100644 --- a/drivers/pwm/Makefile +++ b/drivers/pwm/Makefile @@ -3,6 +3,7 @@ obj-$(CONFIG_PWM) += core.o obj-$(CONFIG_PWM_AB8500) += pwm-ab8500.o obj-$(CONFIG_PWM_ADP5585) += pwm-adp5585.o obj-$(CONFIG_PWM_APPLE) += pwm-apple.o +obj-$(CONFIG_PWM_ARGON_FAN_HAT) += pwm-argon-fan-hat.o obj-$(CONFIG_PWM_ATMEL) += pwm-atmel.o obj-$(CONFIG_PWM_ATMEL_HLCDC_PWM) += pwm-atmel-hlcdc.o obj-$(CONFIG_PWM_ATMEL_TCB) += pwm-atmel-tcb.o diff --git a/drivers/pwm/pwm-argon-fan-hat.c b/drivers/pwm/pwm-argon-fan-hat.c new file mode 100644 index 000000000000..1bf07c769497 --- /dev/null +++ b/drivers/pwm/pwm-argon-fan-hat.c @@ -0,0 +1,120 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (C) 2025 Marek Vasut + * + * Limitations: + * - no support for offset/polarity + * - fixed 30 kHz period + * + * Argon Fan HAT https://argon40.com/products/argon-fan-hat + */ + +#include <linux/err.h> +#include <linux/i2c.h> +#include <linux/module.h> +#include <linux/pwm.h> + +#define ARGON40_FAN_HAT_PERIOD_NS 33333 /* ~30 kHz */ + +#define ARGON40_FAN_HAT_REG_DUTY_CYCLE 0x80 + +static int argon_fan_hat_round_waveform_tohw(struct pwm_chip *chip, + struct pwm_device *pwm, + const struct pwm_waveform *wf, + void *_wfhw) +{ + u8 *wfhw = _wfhw; + + if (wf->duty_length_ns > ARGON40_FAN_HAT_PERIOD_NS) + *wfhw = 100; + else + *wfhw = mul_u64_u64_div_u64(wf->duty_length_ns, 100, ARGON40_FAN_HAT_PERIOD_NS); + + return 0; +} + +static int argon_fan_hat_round_waveform_fromhw(struct pwm_chip *chip, + struct pwm_device *pwm, + const void *_wfhw, + struct pwm_waveform *wf) +{ + const u8 *wfhw = _wfhw; + + wf->period_length_ns = ARGON40_FAN_HAT_PERIOD_NS; + wf->duty_length_ns = DIV64_U64_ROUND_UP(wf->period_length_ns * *wfhw, 100); + wf->duty_offset_ns = 0; + + return 0; +} + +static int argon_fan_hat_write(struct i2c_client *i2c, const u8 wfhw) +{ + return i2c_smbus_write_byte_data(i2c, ARGON40_FAN_HAT_REG_DUTY_CYCLE, wfhw); +} + +static int argon_fan_hat_write_waveform(struct pwm_chip *chip, + struct pwm_device *pwm, + const void *_wfhw) +{ + struct i2c_client *i2c = pwmchip_get_drvdata(chip); + const u8 *wfhw = _wfhw; + + return argon_fan_hat_write(i2c, *wfhw); +} + +static const struct pwm_ops argon_fan_hat_pwm_ops = { + .sizeof_wfhw = sizeof(u8), + .round_waveform_fromhw = argon_fan_hat_round_waveform_fromhw, + .round_waveform_tohw = argon_fan_hat_round_waveform_tohw, + .write_waveform = argon_fan_hat_write_waveform, + /* + * The controller does not provide any way to read info back, + * reading from the controller stops the fan, therefore there + * is no .read_waveform here. + */ +}; + +static int argon_fan_hat_i2c_probe(struct i2c_client *i2c) +{ + struct pwm_chip *chip = devm_pwmchip_alloc(&i2c->dev, 1, 0); + int ret; + + if (IS_ERR(chip)) + return PTR_ERR(chip); + + chip->ops = &argon_fan_hat_pwm_ops; + pwmchip_set_drvdata(chip, i2c); + + ret = devm_pwmchip_add(&i2c->dev, chip); + if (ret) + return dev_err_probe(&i2c->dev, ret, "Could not add PWM chip\n"); + + return 0; +} + +static void argon_fan_hat_i2c_shutdown(struct i2c_client *i2c) +{ + argon_fan_hat_write(i2c, 100); +} + +static const struct of_device_id argon_fan_hat_dt_ids[] = { + { .compatible = "argon40,fan-hat" }, + { }, +}; +MODULE_DEVICE_TABLE(of, argon_fan_hat_dt_ids); + +static struct i2c_driver argon_fan_hat_driver = { + .driver = { + .name = "argon-fan-hat", + .probe_type = PROBE_PREFER_ASYNCHRONOUS, + .of_match_table = argon_fan_hat_dt_ids, + }, + .probe = argon_fan_hat_i2c_probe, + .shutdown = argon_fan_hat_i2c_shutdown, +}; + +module_i2c_driver(argon_fan_hat_driver); + +MODULE_AUTHOR("Marek Vasut <marek.vasut+renesas@mailbox.org>"); +MODULE_DESCRIPTION("Argon40 Fan HAT"); +MODULE_LICENSE("GPL"); -- 2.47.2 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH v4 3/3] pwm: argon-fan-hat: Add Argon40 Fan HAT support 2025-06-21 17:19 ` [PATCH v4 3/3] pwm: argon-fan-hat: Add Argon40 Fan HAT support Marek Vasut @ 2025-06-23 9:11 ` Uwe Kleine-König 2025-06-23 17:30 ` Marek Vasut 0 siblings, 1 reply; 10+ messages in thread From: Uwe Kleine-König @ 2025-06-23 9:11 UTC (permalink / raw) To: Marek Vasut Cc: linux-pwm, Conor Dooley, Krzysztof Kozlowski, Rob Herring, devicetree, linux-renesas-soc [-- Attachment #1: Type: text/plain, Size: 347 bytes --] Hello, when I replied to v3 this v4 was already on the list which I missed. My concern applies here, too, though. On Sat, Jun 21, 2025 at 07:19:56PM +0200, Marek Vasut wrote: > +static void argon_fan_hat_i2c_shutdown(struct i2c_client *i2c) > +{ > + argon_fan_hat_write(i2c, 100); > +} If you drop this, I'm willing to apply. Best regards Uwe [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 488 bytes --] ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v4 3/3] pwm: argon-fan-hat: Add Argon40 Fan HAT support 2025-06-23 9:11 ` Uwe Kleine-König @ 2025-06-23 17:30 ` Marek Vasut 2025-06-23 19:53 ` Uwe Kleine-König 0 siblings, 1 reply; 10+ messages in thread From: Marek Vasut @ 2025-06-23 17:30 UTC (permalink / raw) To: Uwe Kleine-König Cc: linux-pwm, Conor Dooley, Krzysztof Kozlowski, Rob Herring, devicetree, linux-renesas-soc On 6/23/25 11:11 AM, Uwe Kleine-König wrote: > Hello, Hello Uwe, > when I replied to v3 this v4 was already on the list which I missed. My > concern applies here, too, though. > > On Sat, Jun 21, 2025 at 07:19:56PM +0200, Marek Vasut wrote: >> +static void argon_fan_hat_i2c_shutdown(struct i2c_client *i2c) >> +{ >> + argon_fan_hat_write(i2c, 100); >> +} > > If you drop this, I'm willing to apply. Dropping this would make the hardware which uses this device more susceptible to thermal damage, e.g. in case it gets stuck during reboot and does not boot Linux afterward. I don't want to risk such thermal damage. -- Best regards, Marek Vasut ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v4 3/3] pwm: argon-fan-hat: Add Argon40 Fan HAT support 2025-06-23 17:30 ` Marek Vasut @ 2025-06-23 19:53 ` Uwe Kleine-König 2025-06-23 20:44 ` Marek Vasut 0 siblings, 1 reply; 10+ messages in thread From: Uwe Kleine-König @ 2025-06-23 19:53 UTC (permalink / raw) To: Marek Vasut Cc: linux-pwm, Conor Dooley, Krzysztof Kozlowski, Rob Herring, devicetree, linux-renesas-soc [-- Attachment #1: Type: text/plain, Size: 1786 bytes --] Hello Marek, On Mon, Jun 23, 2025 at 07:30:33PM +0200, Marek Vasut wrote: > On 6/23/25 11:11 AM, Uwe Kleine-König wrote: > > when I replied to v3 this v4 was already on the list which I missed. My > > concern applies here, too, though. > > > > On Sat, Jun 21, 2025 at 07:19:56PM +0200, Marek Vasut wrote: > > > +static void argon_fan_hat_i2c_shutdown(struct i2c_client *i2c) > > > +{ > > > + argon_fan_hat_write(i2c, 100); > > > +} > > > > If you drop this, I'm willing to apply. > > Dropping this would make the hardware which uses this device more > susceptible to thermal damage, e.g. in case it gets stuck during reboot and > does not boot Linux afterward. I don't want to risk such thermal damage. We agree here. But the right place to address this is the pwm-fan driver. A PWM is supposed to do exactly and only what its consumer wants it to do (in the limits set by hardware). Officially a PWM driver doesn't know the polarity of a fan, so `argon_fan_hat_write(i2c, 100)` might fully enable or complete disable the fan. The fan-driver knows the polarity. The PWM driver doesn't even know that it controls a fan. And the next guy takes the argon device and controls a motor with it --- and wonders that the vehicle gives full-speed at shutdown. So I hope we also agree that the pwm-fan driver (or an even more generic place if possible that applies to all fan drivers) is the right layer to fix this. And note that the pwm-fan driver already has such a decision implemented, it's just the wrong one from your POV as it disables the fan at shutdown. For me this is another confirmation that having a shutdown callback in the PWM driver is wrong. The two affected drivers shouldn't fight about what is the right policy. Best regards Uwe [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 488 bytes --] ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v4 3/3] pwm: argon-fan-hat: Add Argon40 Fan HAT support 2025-06-23 19:53 ` Uwe Kleine-König @ 2025-06-23 20:44 ` Marek Vasut 2025-06-24 6:50 ` Geert Uytterhoeven 2025-06-25 7:19 ` Uwe Kleine-König 0 siblings, 2 replies; 10+ messages in thread From: Marek Vasut @ 2025-06-23 20:44 UTC (permalink / raw) To: Uwe Kleine-König Cc: linux-pwm, Conor Dooley, Krzysztof Kozlowski, Rob Herring, devicetree, linux-renesas-soc On 6/23/25 9:53 PM, Uwe Kleine-König wrote: > Hello Marek, Hello Uwe, > On Mon, Jun 23, 2025 at 07:30:33PM +0200, Marek Vasut wrote: >> On 6/23/25 11:11 AM, Uwe Kleine-König wrote: >>> when I replied to v3 this v4 was already on the list which I missed. My >>> concern applies here, too, though. >>> >>> On Sat, Jun 21, 2025 at 07:19:56PM +0200, Marek Vasut wrote: >>>> +static void argon_fan_hat_i2c_shutdown(struct i2c_client *i2c) >>>> +{ >>>> + argon_fan_hat_write(i2c, 100); >>>> +} >>> >>> If you drop this, I'm willing to apply. >> >> Dropping this would make the hardware which uses this device more >> susceptible to thermal damage, e.g. in case it gets stuck during reboot and >> does not boot Linux afterward. I don't want to risk such thermal damage. > > We agree here. But the right place to address this is the pwm-fan > driver. A PWM is supposed to do exactly and only what its consumer wants > it to do (in the limits set by hardware). Officially a PWM driver > doesn't know the polarity of a fan, so `argon_fan_hat_write(i2c, 100)` > might fully enable or complete disable the fan. The fan-driver knows the > polarity. The PWM driver doesn't even know that it controls a fan. And > the next guy takes the argon device and controls a motor with it --- and > wonders that the vehicle gives full-speed at shutdown. I suspect this cannot happen without non-standard hardware change of this device, see the link which shows what this device is, it is an integrated PWM+fan device: Argon Fan HAT https://argon40.com/products/argon-fan-hat > So I hope we also agree that the pwm-fan driver (or an even more generic > place if possible that applies to all fan drivers) is the right layer to > fix this. And note that the pwm-fan driver already has such a decision > implemented, it's just the wrong one from your POV as it disables the > fan at shutdown. For me this is another confirmation that having a > shutdown callback in the PWM driver is wrong. The two affected drivers > shouldn't fight about what is the right policy. I would fully agree with this argument for a generic PWM controller, but this isn't one, this is a combined PWM+fan device. The PWM driver is the last one that is being shut down, it is being shut down after the pwm-fan driver. If the pwm-fan driver fails for whatever reason, the PWM driver -- in this case driver for a combined PWM+fan device -- should make sure that the hardware does not melt. So I would argue that, for this specific device, the shutdown hook here is correct. I would propose to keep the shutdown hook here, and extend the pwm-fan driver to be aligned with the behavior of the shutdown hook here. Does that work for you ? ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v4 3/3] pwm: argon-fan-hat: Add Argon40 Fan HAT support 2025-06-23 20:44 ` Marek Vasut @ 2025-06-24 6:50 ` Geert Uytterhoeven 2025-06-25 7:19 ` Uwe Kleine-König 1 sibling, 0 replies; 10+ messages in thread From: Geert Uytterhoeven @ 2025-06-24 6:50 UTC (permalink / raw) To: Marek Vasut Cc: Uwe Kleine-König, linux-pwm, Conor Dooley, Krzysztof Kozlowski, Rob Herring, devicetree, linux-renesas-soc Hi Marek, On Mon, 23 Jun 2025 at 22:44, Marek Vasut <marek.vasut@mailbox.org> wrote: > On 6/23/25 9:53 PM, Uwe Kleine-König wrote: > > On Mon, Jun 23, 2025 at 07:30:33PM +0200, Marek Vasut wrote: > >> On 6/23/25 11:11 AM, Uwe Kleine-König wrote: > >>> when I replied to v3 this v4 was already on the list which I missed. My > >>> concern applies here, too, though. > >>> > >>> On Sat, Jun 21, 2025 at 07:19:56PM +0200, Marek Vasut wrote: > >>>> +static void argon_fan_hat_i2c_shutdown(struct i2c_client *i2c) > >>>> +{ > >>>> + argon_fan_hat_write(i2c, 100); > >>>> +} > >>> > >>> If you drop this, I'm willing to apply. > >> > >> Dropping this would make the hardware which uses this device more > >> susceptible to thermal damage, e.g. in case it gets stuck during reboot and > >> does not boot Linux afterward. I don't want to risk such thermal damage. > > > > We agree here. But the right place to address this is the pwm-fan > > driver. A PWM is supposed to do exactly and only what its consumer wants > > it to do (in the limits set by hardware). Officially a PWM driver > > doesn't know the polarity of a fan, so `argon_fan_hat_write(i2c, 100)` > > might fully enable or complete disable the fan. The fan-driver knows the > > polarity. The PWM driver doesn't even know that it controls a fan. And > > the next guy takes the argon device and controls a motor with it --- and > > wonders that the vehicle gives full-speed at shutdown. > > I suspect this cannot happen without non-standard hardware change of > this device, see the link which shows what this device is, it is an > integrated PWM+fan device: > > Argon Fan HAT https://argon40.com/products/argon-fan-hat > > > So I hope we also agree that the pwm-fan driver (or an even more generic > > place if possible that applies to all fan drivers) is the right layer to > > fix this. And note that the pwm-fan driver already has such a decision > > implemented, it's just the wrong one from your POV as it disables the > > fan at shutdown. For me this is another confirmation that having a > > shutdown callback in the PWM driver is wrong. The two affected drivers > > shouldn't fight about what is the right policy. > > I would fully agree with this argument for a generic PWM controller, but > this isn't one, this is a combined PWM+fan device. > > The PWM driver is the last one that is being shut down, it is being shut > down after the pwm-fan driver. If the pwm-fan driver fails for whatever > reason, the PWM driver -- in this case driver for a combined PWM+fan > device -- should make sure that the hardware does not melt. So I would > argue that, for this specific device, the shutdown hook here is correct. > > I would propose to keep the shutdown hook here, and extend the pwm-fan > driver to be aligned with the behavior of the shutdown hook here. Does > that work for you ? Perhaps modelling it as a pwm-driver was not the right thing to do? Gr{oetje,eeting}s, Geert -- Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that. -- Linus Torvalds ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v4 3/3] pwm: argon-fan-hat: Add Argon40 Fan HAT support 2025-06-23 20:44 ` Marek Vasut 2025-06-24 6:50 ` Geert Uytterhoeven @ 2025-06-25 7:19 ` Uwe Kleine-König 1 sibling, 0 replies; 10+ messages in thread From: Uwe Kleine-König @ 2025-06-25 7:19 UTC (permalink / raw) To: Marek Vasut Cc: linux-pwm, Conor Dooley, Krzysztof Kozlowski, Rob Herring, devicetree, linux-renesas-soc [-- Attachment #1: Type: text/plain, Size: 4253 bytes --] Hello Marek, On Mon, Jun 23, 2025 at 10:44:28PM +0200, Marek Vasut wrote: > On 6/23/25 9:53 PM, Uwe Kleine-König wrote: > > On Mon, Jun 23, 2025 at 07:30:33PM +0200, Marek Vasut wrote: > > > On 6/23/25 11:11 AM, Uwe Kleine-König wrote: > > > > when I replied to v3 this v4 was already on the list which I missed. My > > > > concern applies here, too, though. > > > > > > > > On Sat, Jun 21, 2025 at 07:19:56PM +0200, Marek Vasut wrote: > > > > > +static void argon_fan_hat_i2c_shutdown(struct i2c_client *i2c) > > > > > +{ > > > > > + argon_fan_hat_write(i2c, 100); > > > > > +} > > > > > > > > If you drop this, I'm willing to apply. > > > > > > Dropping this would make the hardware which uses this device more > > > susceptible to thermal damage, e.g. in case it gets stuck during reboot and > > > does not boot Linux afterward. I don't want to risk such thermal damage. > > > > We agree here. But the right place to address this is the pwm-fan > > driver. A PWM is supposed to do exactly and only what its consumer wants > > it to do (in the limits set by hardware). Officially a PWM driver > > doesn't know the polarity of a fan, so `argon_fan_hat_write(i2c, 100)` > > might fully enable or complete disable the fan. The fan-driver knows the > > polarity. The PWM driver doesn't even know that it controls a fan. And > > the next guy takes the argon device and controls a motor with it --- and > > wonders that the vehicle gives full-speed at shutdown. > > I suspect this cannot happen without non-standard hardware change of this > device, see the link which shows what this device is, it is an integrated > PWM+fan device: > > Argon Fan HAT https://argon40.com/products/argon-fan-hat I know people using hardware in different ways than specified by the vendor, so this is a weak argument. > > So I hope we also agree that the pwm-fan driver (or an even more generic > > place if possible that applies to all fan drivers) is the right layer to > > fix this. And note that the pwm-fan driver already has such a decision > > implemented, it's just the wrong one from your POV as it disables the > > fan at shutdown. For me this is another confirmation that having a > > shutdown callback in the PWM driver is wrong. The two affected drivers > > shouldn't fight about what is the right policy. > > I would fully agree with this argument for a generic PWM controller, but > this isn't one, this is a combined PWM+fan device. You model it as PWM + fan, and that's fine. I don't want special sauce in the PWM driver part. And you don't need special sauce in the PWM driver part to ensure the fan to spin up at shutdown. > The PWM driver is the last one that is being shut down, it is being shut > down after the pwm-fan driver. Did you notice that the i2c bus driver is shut down still later? I suggest to ensure there that the fan isn't disabled. /s > If the pwm-fan driver fails for whatever > reason, the PWM driver -- in this case driver for a combined PWM+fan device > -- should make sure that the hardware does not melt. So I would argue that, > for this specific device, the shutdown hook here is correct. The most likely problem in the pwm-fan driver is that the i2c bus is broken, the pwm driver doesn't help here either. How far do you want to go? Force the driver to =y in .config? Probe it even when it's missing in the device tree? Provide the fan device if PWM_FAN is disabled? From a software architecture POV splitting responsibilities to different components is the right thing to do. This helps to keep maintainability efforts within bounds, doesn't surprise developers that research the fan behaviour and so check the fan driver, and increase reusability and solving problems only once. Also the next PWM driver author creating an i2c based PWM driver won't copy the shutdown hook from the argon40 driver which probably is even more wrong for that one. > I would propose to keep the shutdown hook here, and extend the pwm-fan > driver to be aligned with the behavior of the shutdown hook here. Does that > work for you ? I stand to my request: Drop the shutdown hook and adapt the pwm-fan driver to your needs. Best regards Uwe [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 488 bytes --] ^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2025-06-27 20:02 UTC | newest] Thread overview: 10+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2025-06-21 17:19 [PATCH v4 1/3] dt-bindings: vendor-prefixes: Document Argon40 Marek Vasut 2025-06-21 17:19 ` [PATCH v4 2/3] dt-bindings: pwm: argon40,fan-hat: Document Argon40 Fan HAT Marek Vasut 2025-06-27 20:02 ` Rob Herring (Arm) 2025-06-21 17:19 ` [PATCH v4 3/3] pwm: argon-fan-hat: Add Argon40 Fan HAT support Marek Vasut 2025-06-23 9:11 ` Uwe Kleine-König 2025-06-23 17:30 ` Marek Vasut 2025-06-23 19:53 ` Uwe Kleine-König 2025-06-23 20:44 ` Marek Vasut 2025-06-24 6:50 ` Geert Uytterhoeven 2025-06-25 7:19 ` Uwe Kleine-König
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).