adt7460 temperature target

[email protected] Sat, 25 Nov 2023 14:40:49 +0000 (UTC)
Newsgroups gmane.os.openbsd.ppc
Message-ID <f97054085e2733ff@pg4>
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;
 		}
 	}