Re: [PATCH v4 0/5] ARM: Add GPIO support

From: Linus Walleij
Date: Thu Jun 22 2023 - 03:14:03 EST


On Wed, Jun 21, 2023 at 11:35 PM <nick.hawkins@xxxxxxx> wrote:

> The gxp-fan-ctrl driver in HWMON no longer will report fan presence
> or fan failure states as these GPIOs providing this information will be
> consumed by the host. It will be the hosts function to keep track of
> fan presence and status.

I understand the approach such that you have also constructed a
userspace cooling daemon that will consume the fan and GPIO
information to drive the hardware monitoring and that is what you
mean when you say "the host" will do it.

This is a *bad idea*.

While I can't stop you since these are indeed userspace interfaces we
provide, I urge you to look into my earlier proposal to use a thermal
zone to manage the cooling inside the kernel and get rid of all that
custom userspace.

The kernel has all that is needed to regulate the thermal zone with
PID and on/off regulation. It will work even if the userspace crashes
completely, which is what you want. The code is reviewed by a large
community and very well tested.

I think I showed this example before from
arch/arm/boot/dts/gemini-dlink-dns-313.dts:

thermal-zones {
chassis-thermal {
/* Poll every 20 seconds */
polling-delay = <20000>;
/* Poll every 2nd second when cooling */
polling-delay-passive = <2000>;

thermal-sensors = <&g751>;

/* Tripping points from the fan.script in the rootfs */
trips {
chassis_alert0: chassis-alert0 {
/* At 43 degrees turn on low speed */
temperature = <43000>;
hysteresis = <3000>;
type = "active";
};
chassis_alert1: chassis-alert1 {
/* At 47 degrees turn on high speed */
temperature = <47000>;
hysteresis = <3000>;
type = "active";
};
chassis_crit: chassis-crit {
/* Just shut down at 60 degrees */
temperature = <60000>;
hysteresis = <2000>;
type = "critical";
};
};

cooling-maps {
map0 {
trip = <&chassis_alert0>;
cooling-device = <&fan0 1 1>;
};
map1 {
trip = <&chassis_alert1>;
cooling-device = <&fan0 2 2>;
};
};
};
};

This uses a thermal sensor and a fan with two speeds.

Adding a "presence" GPIO to the thermal zone core to enable and
disable it which is what your use case needs should be pretty trivial.

Yours,
Linus Walleij