PERFORCE change 123805 for review

Constantine A. Murenin cnst at FreeBSD.org
Fri Jul 20 16:45:17 UTC 2007


http://perforce.freebsd.org/chv.cgi?CH=123805

Change 123805 by cnst at dale on 2007/07/20 16:44:36

	use device_set_desc, as suggested by imp@
	
	Because description is printed during probe, 
	split out lm_probe() from lm_attach(). 
	
	Also, use device_printf() in a bus_space_map(9) error message
	that had nothing prepended to it previously. 
	
	%dmesg | fgrep lm | fgrep isa | tail -n1
	lm0: <Winbond W83627DHG Hardware Monitor> at port 0x290 on isa0

Affected files ...

.. //depot/projects/soc2007/cnst-sensors/sys.dev.lm/lm78.c#4 edit
.. //depot/projects/soc2007/cnst-sensors/sys.dev.lm/lm78_isa.c#2 edit
.. //depot/projects/soc2007/cnst-sensors/sys.dev.lm/lm78var.h#2 edit

Differences ...

==== //depot/projects/soc2007/cnst-sensors/sys.dev.lm/lm78.c#4 (text+ko) ====

@@ -1,4 +1,4 @@
-/*	$P4: //depot/projects/soc2007/cnst-sensors/sys.dev.lm/lm78.c#3 $	*/
+/*	$P4: //depot/projects/soc2007/cnst-sensors/sys.dev.lm/lm78.c#4 $	*/
 /*	$FreeBSD$	*/
 /*	$OpenBSD: lm78.c,v 1.18 2007/05/26 22:47:39 cnst Exp $	*/
 
@@ -389,14 +389,19 @@
 };
 
 void
-lm_attach(struct lm_softc *sc)
+lm_probe(struct lm_softc *sc)
 {
-	u_int i, config;
-
-	printf("%s", device_get_nameunit(sc->sc_dev));
+	int i;
+	
 	for (i = 0; i < sizeof(lm_chips) / sizeof(lm_chips[0]); i++)
 		if (lm_chips[i].chip_match(sc))
 			break;
+}
+
+void
+lm_attach(struct lm_softc *sc)
+{
+	u_int i, config;
 
 	/* No point in doing anything if we don't have any sensors. */
 	if (sc->numsensors == 0)
@@ -412,6 +417,8 @@
 	sc->lm_writereg(sc, LM_CONFIG, config | 0x01);
 
 	/* Add sensors */
+	strlcpy(sc->sensordev.xname, device_get_nameunit(sc->sc_dev),
+	    sizeof(sc->sensordev.xname));
 	for (i = 0; i < sc->numsensors; ++i)
 		sensor_attach(&sc->sensordev, &sc->sensors[i]);
 	sensordev_install(&sc->sensordev);
@@ -446,25 +453,30 @@
 lm_match(struct lm_softc *sc)
 {
 	int chipid;
+	const char *cdesc;
+	char fulldesc[64];
 
 	/* See if we have an LM78 or LM79. */
 	chipid = sc->lm_readreg(sc, LM_CHIPID) & LM_CHIPID_MASK;
 	switch(chipid) {
 	case LM_CHIPID_LM78:
-		printf(": LM78\n");
+		cdesc = "LM78";
 		break;
 	case LM_CHIPID_LM78J:
-		printf(": LM78J\n");
+		cdesc = "LM78J";
 		break;
 	case LM_CHIPID_LM79:
-		printf(": LM79\n");
+		cdesc = "LM79";
 		break;
 	case LM_CHIPID_LM81:
-		printf(": LM81\n");
+		cdesc = "LM81";
 		break;
 	default:
 		return 0;
 	}
+	snprintf(fulldesc, sizeof(fulldesc),
+	    "National Semiconductor %s Hardware Monitor", cdesc);
+	device_set_desc_copy(sc->sc_dev, fulldesc);
 
 	lm_setup_sensors(sc, lm78_sensors);
 	sc->refresh_sensor_data = lm_refresh_sensor_data;
@@ -475,9 +487,12 @@
 def_match(struct lm_softc *sc)
 {
 	int chipid;
+	char fulldesc[64];
 
 	chipid = sc->lm_readreg(sc, LM_CHIPID) & LM_CHIPID_MASK;
-	printf(": unknown chip (ID %d)\n", chipid);
+	snprintf(fulldesc, sizeof(fulldesc),
+	    "unknown Hardware Monitor (ID 0x%x)\n", chipid);
+	device_set_desc_copy(sc->sc_dev, fulldesc);
 
 	lm_setup_sensors(sc, lm78_sensors);
 	sc->refresh_sensor_data = lm_refresh_sensor_data;
@@ -488,6 +503,9 @@
 wb_match(struct lm_softc *sc)
 {
 	int banksel, vendid, devid;
+	const char *cdesc;
+	char desc[64];
+	char fulldesc[64];
 
 	/* Read vendor ID */
 	banksel = sc->lm_readreg(sc, WB_BANKSEL);
@@ -508,23 +526,23 @@
 	DPRINTF((" winbond chip id 0x%x\n", sc->chipid));
 	switch(sc->chipid) {
 	case WB_CHIPID_W83627HF:
-		printf(": W83627HF\n");
+		cdesc = "W83627HF";
 		lm_setup_sensors(sc, w83627hf_sensors);
 		break;
 	case WB_CHIPID_W83627THF:
-		printf(": W83627THF\n");
+		cdesc = "W83627THF";
 		lm_setup_sensors(sc, w83637hf_sensors);
 		break;
 	case WB_CHIPID_W83627EHF:
-		printf(": W83627EHF\n");
+		cdesc = "W83627EHF";
 		lm_setup_sensors(sc, w83627ehf_sensors);
 		break;
 	case WB_CHIPID_W83627DHG:
-		printf(": W83627DHG\n");
+		cdesc = "W83627DHG";
 		lm_setup_sensors(sc, w83627dhg_sensors);
 		break;
 	case WB_CHIPID_W83637HF:
-		printf(": W83637HF\n");
+		cdesc = "W83637HF";
 		sc->lm_writereg(sc, WB_BANKSEL, WB_BANKSEL_B0);
 		if (sc->lm_readreg(sc, WB_BANK0_CONFIG) & WB_CONFIG_VMR9)
 			sc->vrm9 = 1;
@@ -532,53 +550,66 @@
 		lm_setup_sensors(sc, w83637hf_sensors);
 		break;
 	case WB_CHIPID_W83697HF:
-		printf(": W83697HF\n");
+		cdesc = "W83697HF";
 		lm_setup_sensors(sc, w83697hf_sensors);
 		break;
 	case WB_CHIPID_W83781D:
 	case WB_CHIPID_W83781D_2:
-		printf(": W83781D\n");
+		cdesc = "W83781D";
 		lm_setup_sensors(sc, w83781d_sensors);
 		break;
 	case WB_CHIPID_W83782D:
-		printf(": W83782D\n");
+		cdesc = "W83782D";
 		lm_setup_sensors(sc, w83782d_sensors);
 		break;
 	case WB_CHIPID_W83783S:
-		printf(": W83783S\n");
+		cdesc = "W83783S";
 		lm_setup_sensors(sc, w83783s_sensors);
 		break;
 	case WB_CHIPID_W83791D:
-		printf(": W83791D\n");
+		cdesc = "W83791D";
 		lm_setup_sensors(sc, w83791d_sensors);
 		break;
 	case WB_CHIPID_W83791SD:
-		printf(": W83791SD\n");
+		cdesc = "W83791SD";
 		break;
 	case WB_CHIPID_W83792D:
 		if (devid >= 0x10 && devid <= 0x29)
-			printf(": W83792D rev %c\n", 'A' + devid - 0x10);
+			snprintf(desc, sizeof(desc),
+			    "W83792D rev %c", 'A' + devid - 0x10);
 		else
-			printf(": W83792D rev 0x%x\n", devid);
+			snprintf(desc, sizeof(desc),
+			    "W83792D rev 0x%x", devid);
+		cdesc = desc;
 		lm_setup_sensors(sc, w83792d_sensors);
 		break;
 	case WB_CHIPID_AS99127F:
 		if (vendid == WB_VENDID_ASUS) {
-			printf(": AS99127F\n");
+			cdesc = "AS99127F";
 			lm_setup_sensors(sc, w83781d_sensors);
 		} else {
-			printf(": AS99127F rev 2\n");
+			cdesc = "AS99127F rev 2";
 			lm_setup_sensors(sc, as99127f_sensors);
 		}
 		break;
 	default:
-		printf(": unknown Winbond chip (ID 0x%x)\n", sc->chipid);
+		snprintf(fulldesc, sizeof(fulldesc),
+		    "unknown Winbond Hardware Monitor (Chip ID 0x%x)\n", sc->chipid);
+		device_set_desc_copy(sc->sc_dev, fulldesc);
 		/* Handle as a standard LM78. */
 		lm_setup_sensors(sc, lm78_sensors);
 		sc->refresh_sensor_data = lm_refresh_sensor_data;
 		return 1;
 	}
 
+	if (cdesc[0] == 'W')
+		snprintf(fulldesc, sizeof(fulldesc),
+		    "Winbond %s Hardware Monitor", cdesc);
+	else
+		snprintf(fulldesc, sizeof(fulldesc),
+		    "ASUS %s Hardware Monitor", cdesc);
+	device_set_desc_copy(sc->sc_dev, fulldesc);
+
 	sc->refresh_sensor_data = wb_refresh_sensor_data;
 	return 1;
 }
@@ -588,9 +619,6 @@
 {
 	int i;
 
-	strlcpy(sc->sensordev.xname, device_get_nameunit(sc->sc_dev),
-	    sizeof(sc->sensordev.xname));
-
 	for (i = 0; sensors[i].desc; i++) {
 		sc->sensors[i].type = sensors[i].type;
 		strlcpy(sc->sensors[i].desc, sensors[i].desc,

==== //depot/projects/soc2007/cnst-sensors/sys.dev.lm/lm78_isa.c#2 (text+ko) ====

@@ -1,4 +1,4 @@
-/*	$P4: //depot/projects/soc2007/cnst-sensors/sys.dev.lm/lm78_isa.c#1 $	*/
+/*	$P4: //depot/projects/soc2007/cnst-sensors/sys.dev.lm/lm78_isa.c#2 $	*/
 /*	$FreeBSD$	*/
 /*	$OpenBSD: lm78_isa.c,v 1.2 2007/07/01 21:48:57 cnst Exp $	*/
 
@@ -87,6 +87,7 @@
 int
 lm_isa_probe(struct device *dev)
 {
+	struct lm_isa_softc *sc = device_get_softc(dev);
 	bus_space_tag_t iot;
 	bus_addr_t iobase;
 	bus_space_handle_t ioh;
@@ -148,6 +149,14 @@
 	return (1);
 
  found:
+	/* Bus-independent probe */
+	sc->sc_lmsc.sc_dev = dev;
+	sc->sc_iot = iot;
+	sc->sc_ioh = ioh;
+	sc->sc_lmsc.lm_writereg = lm_isa_writereg;
+	sc->sc_lmsc.lm_readreg = lm_isa_readreg;
+	lm_probe(&sc->sc_lmsc);
+
 	bus_space_unmap(iot, ioh, 8);
 
 #ifdef fixme
@@ -172,7 +181,6 @@
 	u_int8_t sbusaddr;
 #endif
 
-	sc->sc_lmsc.sc_dev = dev;
 	sc->sc_iot = I386_BUS_SPACE_IO;
 
 	if (device_get_unit(dev) == 0)
@@ -181,13 +189,11 @@
 		return (1);
 
 	if (bus_space_map(sc->sc_iot, iobase, 8, 0, &sc->sc_ioh)) {
-		printf(": can't map i/o space\n");
+		device_printf(dev, "can't map i/o space\n");
 		return (1);
 	}
 
-	/* Bus-independant attachment */
-	sc->sc_lmsc.lm_writereg = lm_isa_writereg;
-	sc->sc_lmsc.lm_readreg = lm_isa_readreg;
+	/* Bus-independent attachment */
 	lm_attach(&sc->sc_lmsc);
 
 #ifdef notyet

==== //depot/projects/soc2007/cnst-sensors/sys.dev.lm/lm78var.h#2 (text+ko) ====

@@ -1,4 +1,4 @@
-/*	$P4: //depot/projects/soc2007/cnst-sensors/sys.dev.lm/lm78var.h#1 $	*/
+/*	$P4: //depot/projects/soc2007/cnst-sensors/sys.dev.lm/lm78var.h#2 $	*/
 /*	$FreeBSD$	*/
 /*	$OpenBSD: lm78var.h,v 1.12 2007/05/25 02:26:43 cnst Exp $	*/
 
@@ -154,5 +154,6 @@
 	u_int8_t vrm9;
 };
 
+void lm_probe(struct lm_softc *);
 void lm_attach(struct lm_softc *);
 int lm_detach(struct lm_softc *);


More information about the p4-projects mailing list