summaryrefslogtreecommitdiff
path: root/sys/arch/macppc/dev
diff options
context:
space:
mode:
Diffstat (limited to 'sys/arch/macppc/dev')
-rw-r--r--sys/arch/macppc/dev/abtn.c36
1 files changed, 28 insertions, 8 deletions
diff --git a/sys/arch/macppc/dev/abtn.c b/sys/arch/macppc/dev/abtn.c
index 37e0c77dc70..6b021e0d5b6 100644
--- a/sys/arch/macppc/dev/abtn.c
+++ b/sys/arch/macppc/dev/abtn.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: abtn.c,v 1.11 2006/01/18 23:21:17 miod Exp $ */
+/* $OpenBSD: abtn.c,v 1.12 2009/01/10 18:00:59 robert Exp $ */
/* $NetBSD: abtn.c,v 1.1 1999/07/12 17:48:26 tsubai Exp $ */
/*-
@@ -31,6 +31,7 @@
#include <sys/param.h>
#include <sys/device.h>
#include <sys/systm.h>
+#include <sys/workq.h>
#include <machine/bus.h>
@@ -39,6 +40,10 @@
#include <dev/adb/adb.h>
+#include "audio.h"
+#include "cd.h"
+#include "wskbd.h"
+
#define ABTN_HANDLER_ID 31
struct abtn_softc {
@@ -53,6 +58,13 @@ int abtn_match(struct device *, void *, void *);
void abtn_attach(struct device *, struct device *, void *);
void abtn_adbcomplete(caddr_t, caddr_t, int);
+#if NWSKBD > 0
+extern int cd_eject(void);
+#if NAUDIO > 0
+extern int wskbd_set_mixervolume(long dir);
+#endif
+#endif
+
struct cfattach abtn_ca = {
sizeof(struct abtn_softc), abtn_match, abtn_attach
};
@@ -112,32 +124,40 @@ abtn_adbcomplete(caddr_t buffer, caddr_t data, int adb_command)
of_setbrightness(brightness);
break;
-#ifdef DEBUG
+#if NAUDIO > 0 && NWSKBD > 0
case 0x08: /* mute */
case 0x01: /* mute, AV hardware */
+ workq_add_task(NULL, 0, (workq_fn)wskbd_set_mixervolume,
+ (void *)(long)0, NULL);
+ break;
case 0x07: /* decrease volume */
case 0x02: /* decrease volume, AV hardware */
+ workq_add_task(NULL, 0, (workq_fn)wskbd_set_mixervolume,
+ (void *)(long)-1, NULL);
+ break;
case 0x06: /* increase volume */
case 0x03: /* increase volume, AV hardware */
- /* Need callback to do something with these */
+ workq_add_task(NULL, 0, (workq_fn)wskbd_set_mixervolume,
+ (void *)(long)1, NULL);
break;
-
+#endif
case 0x0c: /* mirror display key */
/* Need callback to do something with this */
break;
-
+#if NWSKBD > 0 && NCD > 0
case 0x0b: /* eject tray */
- /* Need callback to do something with this */
+ workq_add_task(NULL, 0, (workq_fn)cd_eject, NULL, NULL);
break;
-
+#endif
case 0x7f: /* numlock */
/* Need callback to do something with this */
break;
default:
+#ifdef DEBUG
if ((cmd & ~0x7f) == 0)
printf("unknown ADB button 0x%x\n", cmd);
- break;
#endif
+ break;
}
}