Module Name:    src
Committed By:   christos
Date:           Sat Jan  2 01:43:42 UTC 2010

Modified Files:
        src/sys/dev/sbus: dbri.c

Log Message:
convert to pmf


To generate a diff of this commit:
cvs rdiff -u -r1.25 -r1.26 src/sys/dev/sbus/dbri.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/sbus/dbri.c
diff -u src/sys/dev/sbus/dbri.c:1.25 src/sys/dev/sbus/dbri.c:1.26
--- src/sys/dev/sbus/dbri.c:1.25	Sun Sep 20 04:24:04 2009
+++ src/sys/dev/sbus/dbri.c	Fri Jan  1 20:43:42 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: dbri.c,v 1.25 2009/09/20 08:24:04 tsutsui Exp $	*/
+/*	$NetBSD: dbri.c,v 1.26 2010/01/02 01:43:42 christos Exp $	*/
 
 /*
  * Copyright (C) 1997 Rudolf Koenig (rfkoe...@immd4.informatik.uni-erlangen.de)
@@ -34,7 +34,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: dbri.c,v 1.25 2009/09/20 08:24:04 tsutsui Exp $");
+__KERNEL_RCSID(0, "$NetBSD: dbri.c,v 1.26 2010/01/02 01:43:42 christos Exp $");
 
 #include "audio.h"
 #if NAUDIO > 0
@@ -162,7 +162,9 @@
 static paddr_t	dbri_mappage(void *, void *, off_t, int);
 static void	dbri_set_power(struct dbri_softc *, int);
 static void	dbri_bring_up(struct dbri_softc *);
-static void	dbri_powerhook(int, void *);
+static void	dbri_sus(int, void *);
+static bool	dbri_suspend(device_t PMF_FN_PROTO);
+static bool	dbri_resume(device_t PMF_FN_PROTO);
 
 /* stupid support routines */
 static uint32_t	reverse_bytes(uint32_t, int);
@@ -294,7 +296,10 @@
 		sc->sc_have_powerctl = 1;
 		sc->sc_powerstate = 0;
 		dbri_set_power(sc, 1);
-		powerhook_establish(device_xname(self), dbri_powerhook, sc);
+		if (!pmf_device_register(self, dbri_suspend, dbri_resume)) {
+			aprint_error_dev(self,
+			    "cannot set power mgmt handler\n");
+		}
 	} else {
 		/* we can't control power so we're always up */
 		sc->sc_have_powerctl = 0;
@@ -374,7 +379,6 @@
 	sc->sc_refcount = 0;
 	sc->sc_playing = 0;
 	sc->sc_recording = 0;
-	sc->sc_pmgrstate = PWR_RESUME;
 	config_interrupts(self, &dbri_config_interrupts);
 
 	return;
@@ -2169,45 +2173,38 @@
 	sc->sc_recording = 0;
 }
 
-static void
-dbri_powerhook(int why, void *cookie)
+static bool
+dbri_suspend(device_t self PMF_FN_ARGS)
 {
-	struct dbri_softc *sc = cookie;
+	struct dbri_softc *sc = device_private(self);
 
-	if (why == sc->sc_pmgrstate)
-		return;
+	dbri_set_power(sc, 0);
+	return true;
+}
 
-	switch(why)
-	{
-		case PWR_SUSPEND:
-			dbri_set_power(sc, 0);
-			break;
-		case PWR_RESUME:
-			if (sc->sc_powerstate != 0)
-				break;
-			aprint_verbose("resume: %d\n", sc->sc_refcount);
-			sc->sc_pmgrstate = PWR_RESUME;
-			if (sc->sc_playing) {
-				volatile uint32_t *cmd;
-				int s;
-
-				dbri_bring_up(sc);
-				s = splsched();
-				cmd = dbri_command_lock(sc);
-				*(cmd++) = DBRI_CMD(DBRI_COMMAND_SDP,
-				    0, sc->sc_pipe[4].sdp |
-				    DBRI_SDP_VALID_POINTER |
-				    DBRI_SDP_EVERY | DBRI_SDP_CLEAR);
-				*(cmd++) = sc->sc_dmabase +
-				    dbri_dma_off(xmit, 0);
-				dbri_command_send(sc, cmd);
-				splx(s);
-			}
-			break;
-		default:
-			return;
+static bool
+dbri_resume(device_t self PMF_FN_ARGS)
+{
+	if (sc->sc_powerstate != 0)
+		break;
+	aprint_verbose("resume: %d\n", sc->sc_refcount);
+	if (sc->sc_playing) {
+		volatile uint32_t *cmd;
+		int s;
+
+		dbri_bring_up(sc);
+		s = splsched();
+		cmd = dbri_command_lock(sc);
+		*(cmd++) = DBRI_CMD(DBRI_COMMAND_SDP,
+		    0, sc->sc_pipe[4].sdp |
+		    DBRI_SDP_VALID_POINTER |
+		    DBRI_SDP_EVERY | DBRI_SDP_CLEAR);
+		*(cmd++) = sc->sc_dmabase +
+		    dbri_dma_off(xmit, 0);
+		dbri_command_send(sc, cmd);
+		splx(s);
 	}
-	sc->sc_pmgrstate = why;
+	return true;
 }
 
 #endif /* NAUDIO > 0 */

Reply via email to