Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/arch/zaurus/dev Defer device initializations which impli...
details: https://anonhg.NetBSD.org/src/rev/8d6014670d74
branches: trunk
changeset: 773033:8d6014670d74
user: tsutsui <tsutsui%NetBSD.org@localhost>
date: Wed Jan 25 15:58:10 2012 +0000
description:
Defer device initializations which implicitly depend on scoop or ioexp
via config_finalize_register(9).
diffstat:
sys/arch/zaurus/dev/zaudio.c | 17 ++++++++++++++---
sys/arch/zaurus/dev/zrc.c | 25 ++++++++++++++++++-------
sys/arch/zaurus/dev/ztp.c | 41 ++++++++++++++++++++++++++---------------
3 files changed, 58 insertions(+), 25 deletions(-)
diffs (188 lines):
diff -r 89a88edb82d4 -r 8d6014670d74 sys/arch/zaurus/dev/zaudio.c
--- a/sys/arch/zaurus/dev/zaudio.c Wed Jan 25 15:51:24 2012 +0000
+++ b/sys/arch/zaurus/dev/zaudio.c Wed Jan 25 15:58:10 2012 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: zaudio.c,v 1.17 2012/01/21 18:56:51 nonaka Exp $ */
+/* $NetBSD: zaudio.c,v 1.18 2012/01/25 15:58:10 tsutsui Exp $ */
/* $OpenBSD: zaurus_audio.c,v 1.8 2005/08/18 13:23:02 robert Exp $ */
/*
@@ -50,7 +50,7 @@
#include "opt_zaudio.h"
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: zaudio.c,v 1.17 2012/01/21 18:56:51 nonaka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: zaudio.c,v 1.18 2012/01/25 15:58:10 tsutsui Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -132,6 +132,7 @@
CFATTACH_DECL_NEW(zaudio, sizeof(struct zaudio_softc),
zaudio_match, zaudio_attach, NULL, NULL);
+static int zaudio_finalize(device_t);
static bool zaudio_suspend(device_t, const pmf_qual_t *);
static bool zaudio_resume(device_t, const pmf_qual_t *);
static void zaudio_volume_up(device_t);
@@ -381,7 +382,8 @@
(void) pxa2x0_gpio_intr_establish(GPIO_HP_IN_C3000, IST_EDGE_BOTH,
IPL_BIO, zaudio_jack_intr, sc);
- zaudio_init(sc);
+ /* zaudio_init() implicitly depends on ioexp or scoop */
+ config_finalize_register(self, zaudio_finalize);
audio_attach_mi(&wm8750_hw_if, sc, self);
@@ -405,6 +407,15 @@
pmf_device_deregister(self);
}
+static int
+zaudio_finalize(device_t dv)
+{
+ struct zaudio_softc *sc = device_private(dv);
+
+ zaudio_init(sc);
+ return 0;
+}
+
static bool
zaudio_suspend(device_t dv, const pmf_qual_t *qual)
{
diff -r 89a88edb82d4 -r 8d6014670d74 sys/arch/zaurus/dev/zrc.c
--- a/sys/arch/zaurus/dev/zrc.c Wed Jan 25 15:51:24 2012 +0000
+++ b/sys/arch/zaurus/dev/zrc.c Wed Jan 25 15:58:10 2012 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: zrc.c,v 1.7 2011/06/19 16:20:09 nonaka Exp $ */
+/* $NetBSD: zrc.c,v 1.8 2012/01/25 15:58:10 tsutsui Exp $ */
/* $OpenBSD: zaurus_remote.c,v 1.1 2005/11/17 05:26:31 uwe Exp $ */
/*
@@ -18,7 +18,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: zrc.c,v 1.7 2011/06/19 16:20:09 nonaka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: zrc.c,v 1.8 2012/01/25 15:58:10 tsutsui Exp $");
#include <sys/param.h>
#include <sys/device.h>
@@ -101,6 +101,7 @@
CFATTACH_DECL_NEW(zrc, sizeof(struct zrc_softc),
zrc_match, zrc_attach, NULL, NULL);
+static int zrc_finalize(device_t);
static int zrc_intr(void *);
static void zrc_timeout(void *);
static int zrc_scan(void);
@@ -190,11 +191,8 @@
return;
}
- /* Enable the pullup while waiting for an interrupt. */
- if (ZAURUS_ISC1000)
- ioexp_akin_pullup(1);
- else
- scoop_akin_pullup(1);
+ /* defer enabling pullup until ioexp or scoop is attached */
+ config_finalize_register(self, zrc_finalize);
sc->sc_keydown = KEY_RELEASE;
@@ -207,6 +205,19 @@
}
static int
+zrc_finalize(device_t dv)
+{
+
+ /* Enable the pullup while waiting for an interrupt. */
+ if (ZAURUS_ISC1000)
+ ioexp_akin_pullup(1);
+ else
+ scoop_akin_pullup(1);
+
+ return 0;
+}
+
+static int
zrc_intr(void *v)
{
struct zrc_softc *sc = v;
diff -r 89a88edb82d4 -r 8d6014670d74 sys/arch/zaurus/dev/ztp.c
--- a/sys/arch/zaurus/dev/ztp.c Wed Jan 25 15:51:24 2012 +0000
+++ b/sys/arch/zaurus/dev/ztp.c Wed Jan 25 15:58:10 2012 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: ztp.c,v 1.10 2010/02/24 22:37:56 dyoung Exp $ */
+/* $NetBSD: ztp.c,v 1.11 2012/01/25 15:58:10 tsutsui Exp $ */
/* $OpenBSD: zts.c,v 1.9 2005/04/24 18:55:49 uwe Exp $ */
/*
@@ -18,7 +18,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ztp.c,v 1.10 2010/02/24 22:37:56 dyoung Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ztp.c,v 1.11 2012/01/25 15:58:10 tsutsui Exp $");
#include "lcd.h"
@@ -114,6 +114,7 @@
CFATTACH_DECL_NEW(ztp, sizeof(struct ztp_softc),
ztp_match, ztp_attach, NULL, NULL);
+static int ztp_finalize(device_t);
static int ztp_enable(void *);
static void ztp_disable(void *);
static bool ztp_suspend(device_t dv, const pmf_qual_t *);
@@ -149,19 +150,8 @@
callout_init(&sc->sc_tp_poll, 0);
callout_setfunc(&sc->sc_tp_poll, ztp_poll, sc);
- /* Initialize ADS7846 Difference Reference mode */
- (void)zssp_ic_send(ZSSP_IC_ADS7846,
- (1<<ADSCTRL_ADR_SH) | (1<<ADSCTRL_STS_SH));
- delay(5000);
- (void)zssp_ic_send(ZSSP_IC_ADS7846,
- (3<<ADSCTRL_ADR_SH) | (1<<ADSCTRL_STS_SH));
- delay(5000);
- (void)zssp_ic_send(ZSSP_IC_ADS7846,
- (4<<ADSCTRL_ADR_SH) | (1<<ADSCTRL_STS_SH));
- delay(5000);
- (void)zssp_ic_send(ZSSP_IC_ADS7846,
- (5<<ADSCTRL_ADR_SH) | (1<<ADSCTRL_STS_SH));
- delay(5000);
+ /* defer initialization until all other devices are attached */
+ config_finalize_register(self, ztp_finalize);
a.accessops = &ztp_accessops;
a.accesscookie = sc;
@@ -183,6 +173,27 @@
}
static int
+ztp_finalize(device_t dv)
+{
+
+ /* Initialize ADS7846 Difference Reference mode */
+ (void)zssp_ic_send(ZSSP_IC_ADS7846,
+ (1<<ADSCTRL_ADR_SH) | (1<<ADSCTRL_STS_SH));
+ delay(5000);
+ (void)zssp_ic_send(ZSSP_IC_ADS7846,
+ (3<<ADSCTRL_ADR_SH) | (1<<ADSCTRL_STS_SH));
+ delay(5000);
+ (void)zssp_ic_send(ZSSP_IC_ADS7846,
+ (4<<ADSCTRL_ADR_SH) | (1<<ADSCTRL_STS_SH));
+ delay(5000);
+ (void)zssp_ic_send(ZSSP_IC_ADS7846,
+ (5<<ADSCTRL_ADR_SH) | (1<<ADSCTRL_STS_SH));
+ delay(5000);
+
+ return 0;
+}
+
+static int
ztp_enable(void *v)
{
struct ztp_softc *sc = (struct ztp_softc *)v;
Home |
Main Index |
Thread Index |
Old Index