Hello. It's been about 6 months since I tweaked adt(4) to control the temperature target that the cooling system uses to regulate itself, following the source code of G4FanControl which may be found around online.
This makes it possible to power the fans on earlier and thus improve thermals and, hopefully, lifespan of the system which -given these macppc machines are quite old and increasingly rare- I would argue is worth preserving. I myself find it quite comfortable at 46 degC Perhaps it would be better to add a sysctl to control the temperature target? This diff is a fully functional proof of concept I guess, would really appreciate your thoughts. All the best Index: dev/i2c/adt7460.c =================================================================== RCS file: /cvs/src/sys/dev/i2c/adt7460.c,v retrieving revision 1.22 diff -u -p -r1.22 adt7460.c --- dev/i2c/adt7460.c 6 Apr 2022 18:59:28 -0000 1.22 +++ dev/i2c/adt7460.c 23 Nov 2023 16:23:48 -0000 @@ -34,6 +34,9 @@ #define ADT7460_REM1_TEMP 0x25 #define ADT7460_LOCAL_TEMP 0x26 #define ADT7460_REM2_TEMP 0x27 +#define ADT7460_REM1_TEMP_TRG 0x68 +#define ADT7460_LOCAL_TEMP_TRG 0x67 +#define ADT7460_REM2_TEMP_TRG 0x69 #define ADT7460_TACH1L 0x28 #define ADT7460_TACH1H 0x29 #define ADT7460_TACH2L 0x2a @@ -193,6 +196,16 @@ adt_attach(struct device *parent, struct sc->sc_addr, &cmd, sizeof cmd, &data, sizeof data, 0)) { iic_release_bus(sc->sc_tag, 0); printf(": cannot set control register\n"); + return; + } + } + + for (cmd = ADT7460_LOCAL_TEMP_TRG; cmd <= ADT7460_REM2_TEMP_TRG; cmd++){ + data = 46; /* temperature target in deg C*/ + if (iic_exec(sc->sc_tag, I2C_OP_WRITE_WITH_STOP, + sc->sc_addr, &cmd, sizeof cmd, &data, sizeof data, 0)) { + iic_release_bus(sc->sc_tag, 0); + printf(": cannot set temperature target register\n"); return; } }