Annotation of sys/arch/macppc/dev/abtn.c, Revision 1.1
1.1 ! nbrk 1: /* $OpenBSD: abtn.c,v 1.11 2006/01/18 23:21:17 miod Exp $ */
! 2: /* $NetBSD: abtn.c,v 1.1 1999/07/12 17:48:26 tsubai Exp $ */
! 3:
! 4: /*-
! 5: * Copyright (c) 2002, Miodrag Vallat.
! 6: * Copyright (C) 1999 Tsubai Masanari. All rights reserved.
! 7: *
! 8: * Redistribution and use in source and binary forms, with or without
! 9: * modification, are permitted provided that the following conditions
! 10: * are met:
! 11: * 1. Redistributions of source code must retain the above copyright
! 12: * notice, this list of conditions and the following disclaimer.
! 13: * 2. Redistributions in binary form must reproduce the above copyright
! 14: * notice, this list of conditions and the following disclaimer in the
! 15: * documentation and/or other materials provided with the distribution.
! 16: * 3. The name of the author may not be used to endorse or promote products
! 17: * derived from this software without specific prior written permission.
! 18: *
! 19: * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
! 20: * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
! 21: * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
! 22: * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
! 23: * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
! 24: * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
! 25: * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
! 26: * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
! 27: * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
! 28: * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
! 29: */
! 30:
! 31: #include <sys/param.h>
! 32: #include <sys/device.h>
! 33: #include <sys/systm.h>
! 34:
! 35: #include <machine/bus.h>
! 36:
! 37: #include <dev/ofw/openfirm.h>
! 38: #include <macppc/macppc/ofw_machdep.h>
! 39:
! 40: #include <dev/adb/adb.h>
! 41:
! 42: #define ABTN_HANDLER_ID 31
! 43:
! 44: struct abtn_softc {
! 45: struct device sc_dev;
! 46:
! 47: int origaddr; /* ADB device type */
! 48: int adbaddr; /* current ADB address */
! 49: int handler_id;
! 50: };
! 51:
! 52: int abtn_match(struct device *, void *, void *);
! 53: void abtn_attach(struct device *, struct device *, void *);
! 54: void abtn_adbcomplete(caddr_t, caddr_t, int);
! 55:
! 56: struct cfattach abtn_ca = {
! 57: sizeof(struct abtn_softc), abtn_match, abtn_attach
! 58: };
! 59: struct cfdriver abtn_cd = {
! 60: NULL, "abtn", DV_DULL
! 61: };
! 62:
! 63: int
! 64: abtn_match(struct device *parent, void *cf, void *aux)
! 65: {
! 66: struct adb_attach_args *aa = aux;
! 67:
! 68: if (aa->origaddr == ADBADDR_MISC &&
! 69: aa->handler_id == ABTN_HANDLER_ID)
! 70: return 1;
! 71:
! 72: return 0;
! 73: }
! 74:
! 75: void
! 76: abtn_attach(struct device *parent, struct device *self, void *aux)
! 77: {
! 78: struct abtn_softc *sc = (struct abtn_softc *)self;
! 79: struct adb_attach_args *aa = aux;
! 80: ADBSetInfoBlock adbinfo;
! 81:
! 82: printf(": brightness/volume/eject buttons\n");
! 83:
! 84: sc->origaddr = aa->origaddr;
! 85: sc->adbaddr = aa->adbaddr;
! 86: sc->handler_id = aa->handler_id;
! 87:
! 88: adbinfo.siServiceRtPtr = (Ptr)abtn_adbcomplete;
! 89: adbinfo.siDataAreaAddr = (caddr_t)sc;
! 90:
! 91: set_adb_info(&adbinfo, sc->adbaddr);
! 92: }
! 93:
! 94: void
! 95: abtn_adbcomplete(caddr_t buffer, caddr_t data, int adb_command)
! 96: {
! 97: u_int cmd, brightness;
! 98:
! 99: cmd = buffer[1];
! 100:
! 101: switch (cmd) {
! 102: case 0x0a: /* decrease brightness */
! 103: brightness = cons_brightness;
! 104: if (brightness == MAX_BRIGHTNESS)
! 105: brightness++; /* get round values */
! 106: brightness -= STEP_BRIGHTNESS;
! 107: of_setbrightness(brightness);
! 108: break;
! 109:
! 110: case 0x09: /* increase brightness */
! 111: brightness = cons_brightness + STEP_BRIGHTNESS;
! 112: of_setbrightness(brightness);
! 113: break;
! 114:
! 115: #ifdef DEBUG
! 116: case 0x08: /* mute */
! 117: case 0x01: /* mute, AV hardware */
! 118: case 0x07: /* decrease volume */
! 119: case 0x02: /* decrease volume, AV hardware */
! 120: case 0x06: /* increase volume */
! 121: case 0x03: /* increase volume, AV hardware */
! 122: /* Need callback to do something with these */
! 123: break;
! 124:
! 125: case 0x0c: /* mirror display key */
! 126: /* Need callback to do something with this */
! 127: break;
! 128:
! 129: case 0x0b: /* eject tray */
! 130: /* Need callback to do something with this */
! 131: break;
! 132:
! 133: case 0x7f: /* numlock */
! 134: /* Need callback to do something with this */
! 135: break;
! 136:
! 137: default:
! 138: if ((cmd & ~0x7f) == 0)
! 139: printf("unknown ADB button 0x%x\n", cmd);
! 140: break;
! 141: #endif
! 142: }
! 143: }
CVSweb