also, there's a bit of extra copying from auich(4).  in auich, adj_rate
is the rate after adjusting for the base rate not being 48kHz.  there
is not such adjustment in auglx.

I do not have an auglx(4), so testing is appreciated.

-- 
jake...@sdf.lonestar.org
SDF Public Access UNIX System - http://sdf.lonestar.org

Index: auglx.c
===================================================================
RCS file: /cvs/src/sys/dev/pci/auglx.c,v
retrieving revision 1.6
diff -u -p auglx.c
--- auglx.c     7 Sep 2010 16:21:44 -0000       1.6
+++ auglx.c     12 Sep 2010 05:34:12 -0000
@@ -197,9 +197,6 @@ struct auglx_softc {
        struct ac97_codec_if    *codec_if;
        struct ac97_host_if      host_if;
 
-       /* power mgmt */
-       u_int16_t                sc_ext_ctrl;
-
        int                      sc_dmamap_flags;
 };
 
@@ -551,7 +548,6 @@ auglx_set_params(void *v, int setmode, int usemode, st
        struct auglx_softc *sc = v;
        int error;
        u_int orate;
-       u_int adj_rate;
 
        if (setmode & AUMODE_PLAY) {
                play->factor = 1;
@@ -726,28 +722,25 @@ auglx_set_params(void *v, int setmode, int usemode, st
                play->bps = AUDIO_BPS(play->precision);
                play->msb = 1;
 
-               orate = adj_rate = play->sample_rate;
+               orate = play->sample_rate;
 
-               play->sample_rate = adj_rate;
+               play->sample_rate = orate;
                error = ac97_set_rate(sc->codec_if,
                    AC97_REG_PCM_LFE_DAC_RATE, &play->sample_rate);
                if (error)
                        return error;
 
-               play->sample_rate = adj_rate;
+               play->sample_rate = orate;
                error = ac97_set_rate(sc->codec_if,
                    AC97_REG_PCM_SURR_DAC_RATE, &play->sample_rate);
                if (error)
                        return error;
 
-               play->sample_rate = adj_rate;
+               play->sample_rate = orate;
                error = ac97_set_rate(sc->codec_if,
                    AC97_REG_PCM_FRONT_DAC_RATE, &play->sample_rate);
                if (error)
                        return error;
-
-               if (play->sample_rate == adj_rate)
-                       play->sample_rate = orate;
        }
 
        if (setmode & AUMODE_RECORD) {
@@ -903,12 +896,10 @@ auglx_set_params(void *v, int setmode, int usemode, st
                rec->bps = AUDIO_BPS(rec->precision);
                rec->msb = 1;
 
-               orate = rec->sample_rate;
                error = ac97_set_rate(sc->codec_if, AC97_REG_PCM_LR_ADC_RATE,
                    &rec->sample_rate);
                if (error)
                        return error;
-               rec->sample_rate = orate;
        }
 
        return 0;
@@ -1343,17 +1334,22 @@ int
 auglx_activate(struct device *self, int act)
 {
        struct auglx_softc *sc = (struct auglx_softc *)self;
+       int rv = 0;
 
        switch (act) {
+       case DVACT_ACTIVATE:
+               break;
+       case DVACT_QUIESCE:
+               rv = config_activate_children(self, act);
+               break;
        case DVACT_SUSPEND:
-               auglx_read_codec(sc, AC97_REG_EXT_AUDIO_CTRL, &sc->sc_ext_ctrl);
                break;
        case DVACT_RESUME:
-               auglx_reset_codec(sc);
-               delay(1000);
-               (sc->codec_if->vtbl->restore_ports)(sc->codec_if);
-               auglx_write_codec(sc, AC97_REG_EXT_AUDIO_CTRL, sc->sc_ext_ctrl);
+               ac97_resume(&sc->host_if, sc->codec_if);
+               rv = config_activate_children(self, act);
                break;
+       case DVACT_DEACTIVATE:
+               break;
        }
-       return 0;
+       return (rv);
 }

Reply via email to