Add audioamd at obio attachment. Now we have working audio on 4/600's :

audioamd0 at obio0 slot 0 offset 0x500000 level 13 softpri 4
  audio0 at audioamd0: full duplex
This commit is contained in:
jdc 2002-10-15 13:49:52 +00:00
parent db87a0f069
commit d1f466e658
2 changed files with 44 additions and 2 deletions

View File

@ -1,4 +1,4 @@
# $NetBSD: files.sparc,v 1.118 2002/10/03 16:13:24 uwe Exp $
# $NetBSD: files.sparc,v 1.119 2002/10/15 13:49:52 jdc Exp $
# @(#)files.sparc 8.1 (Berkeley) 7/19/93
# sparc-specific configuration info
@ -216,6 +216,7 @@ file arch/sparc/dev/esp_obio.c esp_obio
device audioamd: audiobus, am7930
attach audioamd at mainbus with audioamd_mainbus
attach audioamd at obio with audioamd_obio
attach audioamd at sbus with audioamd_sbus
file arch/sparc/dev/audioamd.c audioamd
file arch/sparc/sparc/amd7930intr.s audioamd

View File

@ -1,4 +1,4 @@
/* $NetBSD: audioamd.c,v 1.12 2002/10/02 16:02:12 thorpej Exp $ */
/* $NetBSD: audioamd.c,v 1.13 2002/10/15 13:49:52 jdc Exp $ */
/* NetBSD: am7930_sparc.c,v 1.44 1999/03/14 22:29:00 jonathan Exp */
/*
@ -107,6 +107,8 @@ struct audioamd_softc {
void audioamd_mainbus_attach __P((struct device *,
struct device *, void *));
int audioamd_mainbus_match __P((struct device *, struct cfdata *, void *));
void audioamd_obio_attach __P((struct device *, struct device *, void *));
int audioamd_obio_match __P((struct device *, struct cfdata *, void *));
void audioamd_sbus_attach __P((struct device *, struct device *, void *));
int audioamd_sbus_match __P((struct device *, struct cfdata *, void *));
void audioamd_attach(struct audioamd_softc *sc, int);
@ -114,6 +116,9 @@ void audioamd_attach(struct audioamd_softc *sc, int);
CFATTACH_DECL(audioamd_mainbus, sizeof(struct audioamd_softc),
audioamd_mainbus_match, audioamd_mainbus_attach, NULL, NULL);
CFATTACH_DECL(audioamd_obio, sizeof(struct audioamd_softc),
audioamd_obio_match, audioamd_obio_attach, NULL, NULL);
CFATTACH_DECL(audioamd_sbus, sizeof(struct audioamd_softc),
audioamd_sbus_match, audioamd_sbus_attach, NULL, NULL);
@ -201,6 +206,20 @@ audioamd_mainbus_match(parent, cf, aux)
return (strcmp(AUDIO_ROM_NAME, ma->ma_name) == 0);
}
int
audioamd_obio_match(parent, cf, aux)
struct device *parent;
struct cfdata *cf;
void *aux;
{
union obio_attach_args *uoba = aux;
if (uoba->uoba_isobio4 != 0)
return (0);
return (strcmp("audio", uoba->uoba_sbus.sa_name) == 0);
}
int
audioamd_sbus_match(parent, cf, aux)
struct device *parent;
@ -236,6 +255,28 @@ audioamd_mainbus_attach(parent, self, aux)
audioamd_attach(sc, ma->ma_pri);
}
void
audioamd_obio_attach(parent, self, aux)
struct device *parent, *self;
void *aux;
{
union obio_attach_args *uoba = aux;
struct sbus_attach_args *sa = &uoba->uoba_sbus;
struct audioamd_softc *sc = (struct audioamd_softc *)self;
bus_space_handle_t bh;
sc->sc_bt = sa->sa_bustag;
if (sbus_bus_map(sa->sa_bustag,
sa->sa_slot, sa->sa_offset,
AM7930_DREG_SIZE,
0, &bh) != 0) {
printf("%s: cannot map registers\n", self->dv_xname);
return;
}
sc->sc_bh = bh;
audioamd_attach(sc, sa->sa_pri);
}
void
audioamd_sbus_attach(parent, self, aux)