Module Name:    src
Committed By:   macallan
Date:           Fri Mar  9 22:27:15 UTC 2018

Modified Files:
        src/sys/dev/i2c: adadc.c

Log Message:
remove some unused code, add comments for credits & explanations


To generate a diff of this commit:
cvs rdiff -u -r1.1 -r1.2 src/sys/dev/i2c/adadc.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/dev/i2c/adadc.c
diff -u src/sys/dev/i2c/adadc.c:1.1 src/sys/dev/i2c/adadc.c:1.2
--- src/sys/dev/i2c/adadc.c:1.1	Fri Mar  9 20:16:54 2018
+++ src/sys/dev/i2c/adadc.c	Fri Mar  9 22:27:15 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: adadc.c,v 1.1 2018/03/09 20:16:54 macallan Exp $ */
+/* $NetBSD: adadc.c,v 1.2 2018/03/09 22:27:15 macallan Exp $ */
 
 /*-
  * Copyright (c) 2018 Michael Lorenz
@@ -26,10 +26,15 @@
  * POSSIBILITY OF SUCH DAMAGE.
  */
 
-/* a driver for Analog Devices AD7417 temperature sensors / ADCs */
+/*
+ * a driver for Analog Devices AD7417 temperature sensors / ADCs
+ * very much macppc only for now since we need calibaration data to make sense
+ * of the ADC inputs
+ * info on how to get these from FreeBSD and Linux
+ */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: adadc.c,v 1.1 2018/03/09 20:16:54 macallan Exp $");
+__KERNEL_RCSID(0, "$NetBSD: adadc.c,v 1.2 2018/03/09 22:27:15 macallan Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -93,6 +98,7 @@ static const char * dstemp_compats[] = {
 	NULL
 };
 
+/* calibaration table from Darwin via Linux */
 static int slope[5] = {0, 0, 0x0320, 0x00a0, 0x1f40};
 
 static int
@@ -101,7 +107,11 @@ adadc_match(device_t parent, cfdata_t ma
 	struct i2c_attach_args *ia = aux;
 
 	if (ia->ia_name == NULL) {
-		/* no ID registers on this chip */
+		/*
+		 * XXX
+		 * this driver is pretty much useless without OF, should
+		 * probably remove this
+		 */
 		if ((ia->ia_addr & 0x2b) == 0x2b)
 			return 1;
 		return 0;
@@ -118,7 +128,6 @@ adadc_attach(device_t parent, device_t s
 	envsys_data_t *s;
 	int error, ch, cpuid;
 	uint32_t eeprom[40];
-	uint8_t cmd, data;
 	char loc[256];
 	int which_cpu;
 
@@ -129,16 +138,17 @@ adadc_attach(device_t parent, device_t s
 	aprint_naive("\n");
 	aprint_normal(": AD7417\n");
 
-	cmd = ADADC_CONFIG;
-	error = iic_exec(sc->sc_i2c, I2C_OP_READ_WITH_STOP,
-	    sc->sc_addr, &cmd, 1, &data, 1, 0);
-
 	sc->sc_sme = sysmon_envsys_create();
 	sc->sc_sme->sme_name = device_xname(self);
 	sc->sc_sme->sme_cookie = sc;
 	sc->sc_sme->sme_refresh = adadc_sensors_refresh;
 	sc->sc_nsensors = 0;
 
+	/*
+	 * XXX
+	 * without OpenFirmware telling us how to interpret the ADC inputs we
+	 * should probably just expose the temperature and four ENVSYS_INTEGERs
+	 */
 	which_cpu = 0;
 	ch = OF_child(ia->ia_cookie);
 	while (ch != 0) {
@@ -146,6 +156,10 @@ adadc_attach(device_t parent, device_t s
 			int reg = 0;
 			OF_getprop(ch, "reg", &reg, sizeof(reg));
 			s = &sc->sc_sensors[sc->sc_nsensors];
+			/*
+			 * this setup matches my 2x 2.5GHz PCI-X G5, Linux and
+			 * FreeBSD hardcode these as well so we should be safe
+			 */
 			switch (reg) {
 			case 0:
 				if (strstr(loc, "CPU B") != NULL)
@@ -220,6 +234,10 @@ adadc_sensors_refresh(struct sysmon_envs
 			/* 16.16 fixed point */
 			edata->value_cur = (temp >> 12) * 62500 + 273150000;
 		} else {
+			/*
+			 * the input is 10bit, so converting to 8.4 fixed point
+			 * is more than enough
+			 */
 			int temp = rdata * slope[edata->private];
 			edata->value_cur = (temp >> 12) * 62500;
 		}
@@ -228,6 +246,7 @@ adadc_sensors_refresh(struct sysmon_envs
 		/* just read the temperature register */
 		error = iic_exec(sc->sc_i2c, I2C_OP_READ_WITH_STOP,
 		    sc->sc_addr, &cmd, 1, &data, 2, 0);
+		/* 8.2 bit fixed point Celsius -> microkelvin */
 		edata->value_cur = ((data >> 6) * 250000) + 273150000;
 	}
 	iic_release_bus(sc->sc_i2c, 0);

Reply via email to