summaryrefslogtreecommitdiff
path: root/sys/dev
diff options
context:
space:
mode:
Diffstat (limited to 'sys/dev')
-rw-r--r--sys/dev/pci/azalia.c70
1 files changed, 68 insertions, 2 deletions
diff --git a/sys/dev/pci/azalia.c b/sys/dev/pci/azalia.c
index d203deb2692..4bd29fb5383 100644
--- a/sys/dev/pci/azalia.c
+++ b/sys/dev/pci/azalia.c
@@ -1,4 +1,4 @@
-/* $NetBSD: azalia.c,v 1.57 2008/05/13 20:21:19 mjf Exp $ */
+/* $NetBSD: azalia.c,v 1.58 2008/06/02 11:33:22 jmcneill Exp $ */
/*-
* Copyright (c) 2005 The NetBSD Foundation, Inc.
@@ -41,13 +41,14 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: azalia.c,v 1.57 2008/05/13 20:21:19 mjf Exp $");
+__KERNEL_RCSID(0, "$NetBSD: azalia.c,v 1.58 2008/06/02 11:33:22 jmcneill Exp $");
#include <sys/param.h>
#include <sys/device.h>
#include <sys/fcntl.h>
#include <sys/malloc.h>
#include <sys/systm.h>
+#include <sys/module.h>
#include <dev/audio_if.h>
#include <dev/auconv.h>
#include <dev/pci/pcidevs.h>
@@ -2408,3 +2409,68 @@ azalia_params2fmt(const audio_params_t *param, uint16_t *fmt)
*fmt = ret;
return 0;
}
+
+#ifdef _MODULE
+
+MODULE(MODULE_CLASS_DRIVER, azalia, NULL);
+
+static const struct cfiattrdata audiobuscf_iattrdata = {
+ "audiobus", 0, { { NULL, NULL, 0 }, }
+};
+static const struct cfiattrdata * const azalia_attrs[] = {
+ &audiobuscf_iattrdata, NULL
+};
+CFDRIVER_DECL(azalia, DV_DULL, azalia_attrs);
+extern struct cfattach azalia_ca;
+static int azalialoc[] = { -1, -1 };
+static struct cfparent pciparent = {
+ "pci", "pci", DVUNIT_ANY
+};
+static struct cfdata azalia_cfdata[] = {
+ {
+ .cf_name = "azalia",
+ .cf_atname = "azalia",
+ .cf_unit = 0,
+ .cf_fstate = FSTATE_STAR,
+ .cf_loc = azalialoc,
+ .cf_flags = 0,
+ .cf_pspec = &pciparent,
+ },
+ { NULL }
+};
+
+static int
+azalia_modcmd(modcmd_t cmd, void *arg)
+{
+ int err;
+
+ switch (cmd) {
+ case MODULE_CMD_INIT:
+ err = config_cfdriver_attach(&azalia_cd);
+ if (err)
+ return err;
+ err = config_cfattach_attach("azalia", &azalia_ca);
+ if (err) {
+ config_cfdriver_detach(&azalia_cd);
+ return err;
+ }
+ err = config_cfdata_attach(azalia_cfdata, 1);
+ if (err) {
+ config_cfattach_detach("azalia", &azalia_ca);
+ config_cfdriver_detach(&azalia_cd);
+ return err;
+ }
+ return 0;
+ case MODULE_CMD_FINI:
+ err = config_cfdriver_detach(&azalia_cd);
+ if (err)
+ return err;
+ config_cfattach_detach("azalia", &azalia_ca);
+ config_cfdriver_detach(&azalia_cd);
+ return 0;
+ default:
+ return ENOTTY;
+ }
+}
+
+#endif