Use pmf(9) instead of powerhook_*.

This commit is contained in:
nonaka 2009-01-29 16:00:33 +00:00
parent 59393ffeff
commit 664df27b21
4 changed files with 78 additions and 89 deletions

View File

@ -1,4 +1,4 @@
/* $NetBSD: zaudio.c,v 1.6 2009/01/29 12:28:15 nonaka Exp $ */ /* $NetBSD: zaudio.c,v 1.7 2009/01/29 16:00:33 nonaka Exp $ */
/* $OpenBSD: zaurus_audio.c,v 1.8 2005/08/18 13:23:02 robert Exp $ */ /* $OpenBSD: zaurus_audio.c,v 1.8 2005/08/18 13:23:02 robert Exp $ */
/* /*
@ -60,8 +60,8 @@ __KERNEL_RCSID(0, "$NetBSD");
static int zaudio_match(device_t, cfdata_t, void *); static int zaudio_match(device_t, cfdata_t, void *);
static void zaudio_attach(device_t, device_t, void *); static void zaudio_attach(device_t, device_t, void *);
static int zaudio_detach(device_t, int); static bool zaudio_suspend(device_t dv PMF_FN_ARGS);
static void zaudio_power(int, void *); static bool zaudio_resume(device_t dv PMF_FN_ARGS);
#define ZAUDIO_OP_SPKR 0 #define ZAUDIO_OP_SPKR 0
#define ZAUDIO_OP_HP 1 #define ZAUDIO_OP_HP 1
@ -89,7 +89,6 @@ struct zaudio_softc {
/* i2c device softc */ /* i2c device softc */
struct pxa2x0_i2c_softc sc_i2c; struct pxa2x0_i2c_softc sc_i2c;
void *sc_powerhook;
int sc_playing; int sc_playing;
struct zaudio_volume sc_volume[2]; struct zaudio_volume sc_volume[2];
@ -101,7 +100,7 @@ struct zaudio_softc {
}; };
CFATTACH_DECL_NEW(zaudio, sizeof(struct zaudio_softc), CFATTACH_DECL_NEW(zaudio, sizeof(struct zaudio_softc),
zaudio_match, zaudio_attach, zaudio_detach, NULL); zaudio_match, zaudio_attach, NULL, NULL);
static struct audio_device wm8750_device = { static struct audio_device wm8750_device = {
"WM8750", "WM8750",
@ -221,12 +220,9 @@ zaudio_attach(device_t parent, device_t self, void *aux)
aprint_normal(": I2C, I2S, WM8750 Audio\n"); aprint_normal(": I2C, I2S, WM8750 Audio\n");
aprint_naive("\n"); aprint_naive("\n");
sc->sc_powerhook = powerhook_establish(device_xname(sc->sc_dev), if (!pmf_device_register(sc->sc_dev, zaudio_suspend, zaudio_resume))
zaudio_power, sc); aprint_error_dev(sc->sc_dev,
if (sc->sc_powerhook == NULL) { "couldn't establish power handler\n");
aprint_error_dev(sc->sc_dev, "unable to establish powerhook\n");
return;
}
sc->sc_i2s.sc_iot = pxa->pxa_iot; sc->sc_i2s.sc_iot = pxa->pxa_iot;
sc->sc_i2s.sc_dmat = pxa->pxa_dmat; sc->sc_i2s.sc_dmat = pxa->pxa_dmat;
@ -247,7 +243,6 @@ zaudio_attach(device_t parent, device_t self, void *aux)
pxa2x0_i2c_open(&sc->sc_i2c); pxa2x0_i2c_open(&sc->sc_i2c);
rv = wm8750_write(sc, RESET_REG, 0); rv = wm8750_write(sc, RESET_REG, 0);
pxa2x0_i2c_close(&sc->sc_i2c); pxa2x0_i2c_close(&sc->sc_i2c);
if (rv) { if (rv) {
aprint_error_dev(sc->sc_dev, "codec failed to respond\n"); aprint_error_dev(sc->sc_dev, "codec failed to respond\n");
goto fail_probe; goto fail_probe;
@ -279,43 +274,30 @@ fail_probe:
fail_i2c: fail_i2c:
pxa2x0_i2s_detach_sub(&sc->sc_i2s); pxa2x0_i2s_detach_sub(&sc->sc_i2s);
fail_i2s: fail_i2s:
powerhook_disestablish(sc->sc_powerhook); pmf_device_deregister(self);
} }
static int static bool
zaudio_detach(device_t self, int flags) zaudio_suspend(device_t dv PMF_FN_ARGS)
{ {
struct zaudio_softc *sc = device_private(self); struct zaudio_softc *sc = device_private(dv);
if (sc->sc_powerhook != NULL) {
powerhook_disestablish(sc->sc_powerhook);
sc->sc_powerhook = NULL;
}
pxa2x0_i2c_detach_sub(&sc->sc_i2c);
pxa2x0_i2s_detach_sub(&sc->sc_i2s);
return 0;
}
static void
zaudio_power(int why, void *arg)
{
struct zaudio_softc *sc = arg;
switch (why) {
case PWR_STANDBY:
case PWR_SUSPEND:
callout_stop(&sc->sc_to); callout_stop(&sc->sc_to);
zaudio_standby(sc); zaudio_standby(sc);
break;
case PWR_RESUME: return true;
}
static bool
zaudio_resume(device_t dv PMF_FN_ARGS)
{
struct zaudio_softc *sc = device_private(dv);
pxa2x0_i2s_init(&sc->sc_i2s); pxa2x0_i2s_init(&sc->sc_i2s);
pxa2x0_i2c_init(&sc->sc_i2c); pxa2x0_i2c_init(&sc->sc_i2c);
zaudio_init(sc); zaudio_init(sc);
break;
} return true;
} }
void void
@ -345,7 +327,6 @@ zaudio_init(struct zaudio_softc *sc)
/* Assume that the jack state has changed. */ /* Assume that the jack state has changed. */
zaudio_jack(sc); zaudio_jack(sc);
} }
static int static int

View File

@ -1,4 +1,4 @@
/* $NetBSD: zkbd.c,v 1.8 2009/01/29 12:28:15 nonaka Exp $ */ /* $NetBSD: zkbd.c,v 1.9 2009/01/29 16:00:33 nonaka Exp $ */
/* $OpenBSD: zaurus_kbd.c,v 1.28 2005/12/21 20:36:03 deraadt Exp $ */ /* $OpenBSD: zaurus_kbd.c,v 1.28 2005/12/21 20:36:03 deraadt Exp $ */
/* /*
@ -18,7 +18,7 @@
*/ */
#include <sys/cdefs.h> #include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: zkbd.c,v 1.8 2009/01/29 12:28:15 nonaka Exp $"); __KERNEL_RCSID(0, "$NetBSD: zkbd.c,v 1.9 2009/01/29 16:00:33 nonaka Exp $");
#include "opt_wsdisplay_compat.h" #include "opt_wsdisplay_compat.h"
#include "lcd.h" #include "lcd.h"
@ -116,7 +116,6 @@ struct zkbd_softc {
char sc_rep[MAXKEYS]; char sc_rep[MAXKEYS];
int sc_nrep; int sc_nrep;
#endif #endif
void *sc_powerhook;
}; };
static struct zkbd_softc *zkbd_sc; static struct zkbd_softc *zkbd_sc;
@ -132,7 +131,7 @@ static void zkbd_poll(void *v);
static int zkbd_on(void *v); static int zkbd_on(void *v);
static int zkbd_sync(void *v); static int zkbd_sync(void *v);
static int zkbd_hinge(void *v); static int zkbd_hinge(void *v);
static void zkbd_power(int why, void *arg); static bool zkbd_resume(device_t dv PMF_FN_ARGS);
int zkbd_modstate; int zkbd_modstate;
@ -215,12 +214,9 @@ zkbd_attach(device_t parent, device_t self, void *aux)
return; return;
} }
sc->sc_powerhook = powerhook_establish(device_xname(sc->sc_dev), if (!pmf_device_register(sc->sc_dev, NULL, zkbd_resume))
zkbd_power, sc); aprint_error_dev(sc->sc_dev,
if (sc->sc_powerhook == NULL) { "couldn't establish power handler\n");
aprint_error_dev(sc->sc_dev, "unable to establish powerhook\n");
return;
}
sc->sc_okeystate = malloc(sc->sc_nsense * sc->sc_nstrobe, sc->sc_okeystate = malloc(sc->sc_nsense * sc->sc_nstrobe,
M_DEVBUF, M_NOWAIT); M_DEVBUF, M_NOWAIT);
@ -597,9 +593,12 @@ zkbd_cnpollc(void *v, int on)
{ {
} }
static void static bool
zkbd_power(int why, void *arg) zkbd_resume(device_t dv PMF_FN_ARGS)
{ {
struct zkbd_softc *sc = device_private(dv);
zkbd_hinge(arg); zkbd_hinge(sc);
return true;
} }

View File

@ -1,4 +1,4 @@
/* $NetBSD: zlcd.c,v 1.8 2009/01/29 12:28:15 nonaka Exp $ */ /* $NetBSD: zlcd.c,v 1.9 2009/01/29 16:00:33 nonaka Exp $ */
/* $OpenBSD: zaurus_lcd.c,v 1.20 2006/06/02 20:50:14 miod Exp $ */ /* $OpenBSD: zaurus_lcd.c,v 1.20 2006/06/02 20:50:14 miod Exp $ */
/* NetBSD: lubbock_lcd.c,v 1.1 2003/08/09 19:38:53 bsh Exp */ /* NetBSD: lubbock_lcd.c,v 1.1 2003/08/09 19:38:53 bsh Exp */
@ -43,7 +43,7 @@
*/ */
#include <sys/cdefs.h> #include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: zlcd.c,v 1.8 2009/01/29 12:28:15 nonaka Exp $"); __KERNEL_RCSID(0, "$NetBSD: zlcd.c,v 1.9 2009/01/29 16:00:33 nonaka Exp $");
#include <sys/param.h> #include <sys/param.h>
#include <sys/systm.h> #include <sys/systm.h>
@ -154,6 +154,9 @@ static void lcd_attach(device_t, device_t, void *);
CFATTACH_DECL_NEW(zlcd, sizeof(struct pxa2x0_lcd_softc), CFATTACH_DECL_NEW(zlcd, sizeof(struct pxa2x0_lcd_softc),
lcd_match, lcd_attach, NULL, NULL); lcd_match, lcd_attach, NULL, NULL);
static bool lcd_suspend(device_t dv PMF_FN_ARGS);
static bool lcd_resume(device_t dv PMF_FN_ARGS);
void lcd_cnattach(void); void lcd_cnattach(void);
int lcd_max_brightness(void); int lcd_max_brightness(void);
int lcd_get_brightness(void); int lcd_get_brightness(void);
@ -162,7 +165,6 @@ void lcd_set_brightness_internal(int);
int lcd_get_backlight(void); int lcd_get_backlight(void);
void lcd_set_backlight(int); void lcd_set_backlight(int);
void lcd_blank(int); void lcd_blank(int);
void lcd_power(int, void *);
static int static int
lcd_match(device_t parent, cfdata_t cf, void *aux) lcd_match(device_t parent, cfdata_t cf, void *aux)
@ -191,7 +193,8 @@ lcd_attach(device_t parent, device_t self, void *aux)
/* Start with approximately 40% of full brightness. */ /* Start with approximately 40% of full brightness. */
lcd_set_brightness(3); lcd_set_brightness(3);
(void) powerhook_establish(device_xname(sc->dev), lcd_power, sc); if (!pmf_device_register(sc->dev, lcd_suspend, lcd_resume))
aprint_error_dev(sc->dev, "couldn't establish power handler\n");
} }
void void
@ -201,6 +204,31 @@ lcd_cnattach(void)
pxa2x0_lcd_cnattach(&lcd_std_screen, CURRENT_DISPLAY); pxa2x0_lcd_cnattach(&lcd_std_screen, CURRENT_DISPLAY);
} }
/*
* power management
*/
static bool
lcd_suspend(device_t dv PMF_FN_ARGS)
{
struct pxa2x0_lcd_softc *sc = device_private(dv);
lcd_set_brightness(0);
pxa2x0_lcd_suspend(sc);
return true;
}
static bool
lcd_resume(device_t dv PMF_FN_ARGS)
{
struct pxa2x0_lcd_softc *sc = device_private(dv);
pxa2x0_lcd_resume(sc);
lcd_set_brightness(lcd_get_brightness());
return true;
}
/* /*
* wsdisplay accessops overrides * wsdisplay accessops overrides
*/ */
@ -493,21 +521,3 @@ lcd_blank(int blank)
lcd_set_brightness(lcd_get_brightness()); lcd_set_brightness(lcd_get_brightness());
} }
} }
void
lcd_power(int why, void *v)
{
switch (why) {
case PWR_SUSPEND:
case PWR_STANDBY:
lcd_set_brightness(0);
pxa2x0_lcd_power(why, v);
break;
case PWR_RESUME:
pxa2x0_lcd_power(why, v);
lcd_set_brightness(lcd_get_brightness());
break;
}
}

View File

@ -1,4 +1,4 @@
/* $NetBSD: zssp.c,v 1.5 2009/01/29 12:51:15 nonaka Exp $ */ /* $NetBSD: zssp.c,v 1.6 2009/01/29 16:00:33 nonaka Exp $ */
/* $OpenBSD: zaurus_ssp.c,v 1.6 2005/04/08 21:58:49 uwe Exp $ */ /* $OpenBSD: zaurus_ssp.c,v 1.6 2005/04/08 21:58:49 uwe Exp $ */
/* /*
@ -18,7 +18,7 @@
*/ */
#include <sys/cdefs.h> #include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: zssp.c,v 1.5 2009/01/29 12:51:15 nonaka Exp $"); __KERNEL_RCSID(0, "$NetBSD: zssp.c,v 1.6 2009/01/29 16:00:33 nonaka Exp $");
#include <sys/param.h> #include <sys/param.h>
#include <sys/systm.h> #include <sys/systm.h>
@ -54,7 +54,7 @@ CFATTACH_DECL_NEW(zssp, sizeof(struct zssp_softc),
zssp_match, zssp_attach, NULL, NULL); zssp_match, zssp_attach, NULL, NULL);
static void zssp_init(void); static void zssp_init(void);
static void zssp_powerhook(int, void *); static bool zssp_resume(device_t dv PMF_FN_ARGS);
static struct zssp_softc *zssp_sc; static struct zssp_softc *zssp_sc;
@ -86,10 +86,9 @@ zssp_attach(device_t parent, device_t self, void *aux)
return; return;
} }
if (powerhook_establish(device_xname(sc->sc_dev), zssp_powerhook, sc) if (!pmf_device_register(sc->sc_dev, NULL, zssp_resume))
== NULL) { aprint_error_dev(sc->sc_dev,
aprint_error_dev(sc->sc_dev, "can't establish power hook\n"); "couldn't establish power handler\n");
}
zssp_init(); zssp_init();
} }
@ -116,16 +115,16 @@ zssp_init(void)
pxa2x0_gpio_set_function(GPIO_TG_CS_C3000, GPIO_OUT|GPIO_SET); pxa2x0_gpio_set_function(GPIO_TG_CS_C3000, GPIO_OUT|GPIO_SET);
} }
static void static bool
zssp_powerhook(int why, void *arg) zssp_resume(device_t dv PMF_FN_ARGS)
{ {
int s; int s;
if (why == PWR_RESUME) {
s = splhigh(); s = splhigh();
zssp_init(); zssp_init();
splx(s); splx(s);
}
return true;
} }
/* /*