|
|
1.1 ! root 1: /* ! 2: * ADB bus definitions for Open Hack'Ware ! 3: * ! 4: * Copyright (c) 2004-2005 Jocelyn Mayer ! 5: * ! 6: * This program is free software; you can redistribute it and/or ! 7: * modify it under the terms of the GNU General Public License V2 ! 8: * as published by the Free Software Foundation ! 9: * ! 10: * This program is distributed in the hope that it will be useful, ! 11: * but WITHOUT ANY WARRANTY; without even the implied warranty of ! 12: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! 13: * GNU General Public License for more details. ! 14: * ! 15: * You should have received a copy of the GNU General Public License ! 16: * along with this program; if not, write to the Free Software ! 17: * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA, 02110-1301 USA ! 18: */ ! 19: ! 20: typedef struct adb_bus_t adb_bus_t; ! 21: typedef struct adb_dev_t adb_dev_t; ! 22: ! 23: #define ADB_BUF_SIZE 8 ! 24: struct adb_bus_t { ! 25: void *host; ! 26: int (*req)(void *host, const uint8_t *snd_buf, int len, uint8_t *rcv_buf); ! 27: adb_dev_t *devices; ! 28: }; ! 29: ! 30: struct adb_dev_t { ! 31: adb_dev_t *next; ! 32: adb_bus_t *bus; ! 33: uint8_t addr; ! 34: uint8_t type; ! 35: void *state; ! 36: }; ! 37: ! 38: #define ADB_BUF_SIZE 8 ! 39: ! 40: /* ADB commands */ ! 41: enum { ! 42: ADB_SEND_RESET = 0x00, ! 43: ADB_FLUSH = 0x01, ! 44: ADB_LISTEN = 0x08, ! 45: ADB_TALK = 0x0C, ! 46: }; ! 47: /* ADB default IDs before relocation */ ! 48: enum { ! 49: ADB_PROTECT = 0x01, ! 50: ADB_KEYBD = 0x02, ! 51: ADB_MOUSE = 0x03, ! 52: ADB_ABS = 0x04, ! 53: ADB_MODEM = 0x05, ! 54: ADB_RES = 0x06, ! 55: ADB_MISC = 0x07, ! 56: }; ! 57: /* ADB special device handlers IDs */ ! 58: enum { ! 59: ADB_CHADDR = 0x00, ! 60: ADB_CHADDR_ACTIV = 0xFD, ! 61: ADB_CHADDR_NOCOLL = 0xFE, ! 62: ADB_SELF_TEST = 0xFF, ! 63: }; ! 64: ! 65: int adb_cmd (adb_dev_t *dev, uint8_t cmd, uint8_t reg, ! 66: uint8_t *buf, int len); ! 67: void adb_bus_reset (adb_bus_t *bus); ! 68: adb_bus_t *adb_bus_new (void *host, ! 69: int (*req)(void *host, const uint8_t *snd_buf, ! 70: int len, uint8_t *rcv_buf)); ! 71: int adb_bus_init (char *path, adb_bus_t *bus); ! 72: ! 73: static inline int adb_reset (adb_bus_t *bus) ! 74: { ! 75: adb_dev_t fake_device; ! 76: ! 77: memset(&fake_device, 0, sizeof(adb_dev_t)); ! 78: fake_device.bus = bus; ! 79: ! 80: return adb_cmd(&fake_device, ADB_SEND_RESET, 0, NULL, 0); ! 81: } ! 82: ! 83: static inline int adb_flush (adb_dev_t *dev) ! 84: { ! 85: return adb_cmd(dev, ADB_FLUSH, 0, NULL, 0); ! 86: } ! 87: ! 88: static inline int adb_reg_get (adb_dev_t *dev, uint8_t reg, uint8_t *buf) ! 89: { ! 90: return adb_cmd(dev, ADB_TALK, reg, buf, 0); ! 91: } ! 92: ! 93: static inline int adb_reg_set (adb_dev_t *dev, uint8_t reg, ! 94: uint8_t *buf, int len) ! 95: { ! 96: return adb_cmd(dev, ADB_LISTEN, reg, buf, len); ! 97: } ! 98: ! 99: #ifdef DEBUG_ADB ! 100: #define ADB_DPRINTF(fmt, args...) \ ! 101: do { printk("ADB - %s: " fmt, __func__ , ##args); } while (0) ! 102: #else ! 103: #define ADB_DPRINTF(fmt, args...) do { } while (0) ! 104: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.