diff --git a/sys/dev/pci/pccbb.c b/sys/dev/pci/pccbb.c index f2ac4e86787e..59db20770903 100644 --- a/sys/dev/pci/pccbb.c +++ b/sys/dev/pci/pccbb.c @@ -1,4 +1,4 @@ -/* $NetBSD: pccbb.c,v 1.128 2006/04/05 22:16:42 dyoung Exp $ */ +/* $NetBSD: pccbb.c,v 1.129 2006/06/17 17:06:51 jmcneill Exp $ */ /* * Copyright (c) 1998, 1999 and 2000 @@ -31,7 +31,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: pccbb.c,v 1.128 2006/04/05 22:16:42 dyoung Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pccbb.c,v 1.129 2006/06/17 17:06:51 jmcneill Exp $"); /* #define CBB_DEBUG @@ -3419,8 +3419,12 @@ pccbb_powerhook(why, arg) pci_conf_capture(sc->sc_pc, sc->sc_tag, &sc->sc_pciconf); - /* ToDo: deactivate or suspend child devices */ + if (sc->sc_chipset == CB_RX5C47X) + sc->sc_ricoh_misc_ctrl = pci_conf_read(sc->sc_pc, + sc->sc_tag, + RICOH_PCI_MISC_CTRL); + /* ToDo: deactivate or suspend child devices */ } if (why == PWR_RESUME) { @@ -3450,8 +3454,13 @@ pccbb_powerhook(why, arg) goto norestore; } } - pci_conf_restore(sc->sc_pc, sc->sc_tag, &sc->sc_pciconf); + norestore: + pci_conf_restore(sc->sc_pc, sc->sc_tag, &sc->sc_pciconf); + if (sc->sc_chipset == CB_RX5C47X) { + pci_conf_write(sc->sc_pc, sc->sc_tag, + RICOH_PCI_MISC_CTRL, sc->sc_ricoh_misc_ctrl); + } if (pci_conf_read (sc->sc_pc, sc->sc_tag, PCI_SOCKBASE) == 0) /* BIOS did not recover this register */ diff --git a/sys/dev/pci/pccbbreg.h b/sys/dev/pci/pccbbreg.h index e0db6e075e48..49689709711f 100644 --- a/sys/dev/pci/pccbbreg.h +++ b/sys/dev/pci/pccbbreg.h @@ -1,4 +1,4 @@ -/* $NetBSD: pccbbreg.h,v 1.10 2006/04/25 04:22:15 dyoung Exp $ */ +/* $NetBSD: pccbbreg.h,v 1.11 2006/06/17 17:06:52 jmcneill Exp $ */ /* * Copyright (c) 1999 HAYAKAWA Koichi. All rights reserved. * @@ -137,6 +137,11 @@ #define CB_BCRI_RL_3E0_ENA 0x08000000 #define CB_BCRI_RL_3E2_ENA 0x10000000 + +/* PCI configuration register definition for Ricoh 5C475 */ +#define RICOH_PCI_MISC_CTRL 0x82 + + /* * Special resister definition for Toshiba ToPIC95/97 * These values are borrowed from pcmcia-cs/Linux. diff --git a/sys/dev/pci/pccbbvar.h b/sys/dev/pci/pccbbvar.h index 38c0d368b3b7..88d0d4a8acca 100644 --- a/sys/dev/pci/pccbbvar.h +++ b/sys/dev/pci/pccbbvar.h @@ -1,4 +1,4 @@ -/* $NetBSD: pccbbvar.h,v 1.25 2005/12/11 12:22:50 christos Exp $ */ +/* $NetBSD: pccbbvar.h,v 1.26 2006/06/17 17:06:52 jmcneill Exp $ */ /* * Copyright (c) 1999 HAYAKAWA Koichi. All rights reserved. * @@ -165,6 +165,7 @@ struct pccbb_softc { int sc_pwrmgt_offs; /* Offset for power management capability */ struct pci_conf_state sc_pciconf; + pcireg_t sc_ricoh_misc_ctrl; }; /*