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