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