Changeset 84

Show
Ignore:
Timestamp:
10/23/06 23:07:11 (2 years ago)
Author:
vladest
Message:

SB code update
HDA code update
Some other updates

Location:
GPL/trunk
Files:
34 modified

Legend:

Unmodified
Added
Removed
  • GPL/trunk/alsa-kernel/core/control.c

    r77 r84  
    2727/* max number of user-defined controls */ 
    2828#define MAX_USER_CONTROLS       32 
    29  
    30 static inline struct snd_ctl_elem_id *snd_ctl_build_ioff(struct snd_ctl_elem_id *dst_id, 
    31                                                     struct snd_kcontrol *src_kctl, 
    32                                                     unsigned int offset) 
    33 { 
    34         *dst_id = src_kctl->id; 
    35         dst_id->index += offset; 
    36         dst_id->numid += offset; 
    37         return dst_id; 
    38 } 
    3929 
    4030extern int control_id_changed; 
     
    223213 * Returns the pointer of the newly generated instance, or NULL on failure. 
    224214 */ 
    225 struct snd_kcontrol *snd_ctl_new1(struct snd_kcontrol_new const * ncontrol, void *private_data) 
     215struct snd_kcontrol *snd_ctl_new1(struct snd_kcontrol_new const * ncontrol, 
     216                                  void *private_data) 
    226217{ 
    227218    struct snd_kcontrol kctl; 
     
    244235    kctl.get = ncontrol->get; 
    245236    kctl.put = ncontrol->put; 
    246     kctl.tlv = ncontrol->tlv; 
     237    kctl.tlv.p = 
     238        ncontrol->tlv.p; 
    247239    kctl.private_value = ncontrol->private_value; 
    248240    kctl.private_data = private_data; 
     
    10371029#endif 
    10381030 
    1039 static int snd_ctl_tlv_read(struct snd_card *card, 
    1040                             struct snd_ctl_tlv __user *_tlv) 
    1041 { 
    1042     struct snd_ctl_tlv tlv; 
    1043     struct snd_kcontrol *kctl; 
    1044     unsigned int len; 
    1045     int err = 0; 
    1046  
    1047     if (copy_from_user(&tlv, _tlv, sizeof(tlv))) 
    1048         return -EFAULT; 
    1049     if (tlv.length < sizeof(unsigned int) * 3) 
    1050         return -EINVAL; 
    1051     down_read(&card->controls_rwsem); 
    1052     kctl = snd_ctl_find_numid(card, tlv.numid); 
    1053     if (kctl == NULL) { 
    1054         err = -ENOENT; 
    1055         goto __kctl_end; 
    1056     } 
    1057     if (kctl->tlv == NULL) { 
    1058         err = -ENXIO; 
    1059         goto __kctl_end; 
    1060     } 
    1061     len = kctl->tlv[1] + 2 * sizeof(unsigned int); 
    1062     if (tlv.length < len) { 
    1063         err = -ENOMEM; 
    1064         goto __kctl_end; 
    1065     } 
    1066     if (copy_to_user(_tlv->tlv, kctl->tlv, len)) 
    1067         err = -EFAULT; 
    1068 __kctl_end: 
    1069     up_read(&card->controls_rwsem); 
    1070     return err; 
    1071 } 
     1031static int snd_ctl_tlv_ioctl(struct snd_ctl_file *file, 
     1032                             struct snd_ctl_tlv __user *_tlv, 
     1033                             int op_flag) 
     1034{ 
     1035        struct snd_card *card = file->card; 
     1036        struct snd_ctl_tlv tlv; 
     1037        struct snd_kcontrol *kctl; 
     1038        struct snd_kcontrol_volatile *vd; 
     1039        unsigned int len; 
     1040        int err = 0; 
     1041 
     1042        if (copy_from_user(&tlv, _tlv, sizeof(tlv))) 
     1043                return -EFAULT; 
     1044        if (tlv.length < sizeof(unsigned int) * 3) 
     1045                return -EINVAL; 
     1046        down_read(&card->controls_rwsem); 
     1047        kctl = snd_ctl_find_numid(card, tlv.numid); 
     1048        if (kctl == NULL) { 
     1049                err = -ENOENT; 
     1050                goto __kctl_end; 
     1051        } 
     1052        if (kctl->tlv.p == NULL) { 
     1053                err = -ENXIO; 
     1054                goto __kctl_end; 
     1055        } 
     1056        vd = &kctl->vd[tlv.numid - kctl->id.numid]; 
     1057        if ((op_flag == 0 && (vd->access & SNDRV_CTL_ELEM_ACCESS_TLV_READ) == 0) || 
     1058            (op_flag > 0 && (vd->access & SNDRV_CTL_ELEM_ACCESS_TLV_WRITE) == 0) || 
     1059            (op_flag < 0 && (vd->access & SNDRV_CTL_ELEM_ACCESS_TLV_COMMAND) == 0)) { 
     1060                err = -ENXIO; 
     1061                goto __kctl_end; 
     1062        } 
     1063        if (vd->access & SNDRV_CTL_ELEM_ACCESS_TLV_CALLBACK) { 
     1064                if (file && vd->owner != NULL && vd->owner != file) { 
     1065                        err = -EPERM; 
     1066                        goto __kctl_end; 
     1067                } 
     1068                err = kctl->tlv.c(kctl, op_flag, tlv.length, _tlv->tlv);  
     1069                if (err > 0) { 
     1070                        up_read(&card->controls_rwsem); 
     1071                        snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_TLV, &kctl->id); 
     1072                        return 0; 
     1073                } 
     1074        } else { 
     1075                if (op_flag) { 
     1076                        err = -ENXIO; 
     1077                        goto __kctl_end; 
     1078                } 
     1079                len = kctl->tlv.p[1] + 2 * sizeof(unsigned int); 
     1080                if (tlv.length < len) { 
     1081                        err = -ENOMEM; 
     1082                        goto __kctl_end; 
     1083                } 
     1084                if (copy_to_user(_tlv->tlv, kctl->tlv.p, len)) 
     1085                        err = -EFAULT; 
     1086        } 
     1087      __kctl_end: 
     1088        up_read(&card->controls_rwsem); 
     1089        return err; 
     1090} 
     1091 
    10721092 
    10731093static int snd_ctl_ioctl(struct inode *inode, struct file *file, 
     
    10931113    case SNDRV_CTL_IOCTL_ELEM_INFO: 
    10941114        return snd_ctl_elem_info(ctl, (struct snd_ctl_elem_info *) arg); 
    1095 #if 1 
    10961115    case SNDRV_CTL_IOCTL_ELEM_READ: 
    10971116        return snd_ctl_elem_read_user(ctl->card, argp); 
    10981117    case SNDRV_CTL_IOCTL_ELEM_WRITE: 
    10991118        return snd_ctl_elem_write_user(ctl, argp); 
    1100 #else 
    1101     case SNDRV_CTL_IOCTL_ELEM_READ: 
    1102         return snd_ctl_elem_read(ctl->card, (struct snd_ctl_elem_value *) arg); 
    1103     case SNDRV_CTL_IOCTL_ELEM_WRITE: 
    1104         return snd_ctl_elem_write(ctl, (struct snd_ctl_elem_value *) arg); 
    1105 #endif 
    11061119    case SNDRV_CTL_IOCTL_ELEM_LOCK: 
    11071120        return snd_ctl_elem_lock(ctl, (struct snd_ctl_elem_id *) arg); 
     
    11171130        return snd_ctl_subscribe_events(ctl, (int *) arg); 
    11181131    case SNDRV_CTL_IOCTL_TLV_READ: 
    1119         return snd_ctl_tlv_read(card, argp); 
     1132        return snd_ctl_tlv_ioctl(ctl, argp, 0); 
     1133    case SNDRV_CTL_IOCTL_TLV_WRITE: 
     1134        return snd_ctl_tlv_ioctl(ctl, argp, 1); 
     1135    case SNDRV_CTL_IOCTL_TLV_COMMAND: 
     1136        return snd_ctl_tlv_ioctl(ctl, argp, -1); 
    11201137    case SNDRV_CTL_IOCTL_POWER: 
    11211138        if (get_user(err, (int *)arg)) 
  • GPL/trunk/alsa-kernel/core/misc.c

    r34 r84  
    2121 
    2222#include <sound/driver.h> 
    23  
     23#include <sound/firmware.h> 
    2424int snd_task_name(struct task_struct *task, char *name, size_t size) 
    2525{ 
     
    669669} 
    670670 
     671int mod_firmware_load(const char *fn, char **fp) 
     672{ 
     673    return 0; 
     674} 
     675 
     676static int snd_try_load_firmware(const char *path, const char *name, 
     677                                 struct firmware *firmware) 
     678{ 
     679        char filename[30 + FIRMWARE_NAME_MAX]; 
     680 
     681        sprintf(filename, "%s/%s", path, name); 
     682        firmware->size = mod_firmware_load(filename, (char **)&firmware->data); 
     683        if (firmware->size) 
     684                printk(KERN_INFO "Loaded '%s'.", filename); 
     685        return firmware->size; 
     686} 
     687 
     688int request_firmware(const struct firmware **fw, const char *name) 
     689{ 
     690        struct firmware *firmware; 
     691 
     692        *fw = NULL; 
     693        firmware = kmalloc(sizeof *firmware, GFP_KERNEL); 
     694        if (!firmware) 
     695                return -ENOMEM; 
     696        if (!snd_try_load_firmware("/lib/firmware", name, firmware) && 
     697            !snd_try_load_firmware("/lib/hotplug/firmware", name, firmware) && 
     698            !snd_try_load_firmware("/usr/lib/hotplug/firmware", name, firmware)) { 
     699                kfree(firmware); 
     700                return -EIO; 
     701        } 
     702        *fw = firmware; 
     703        return 0; 
     704} 
     705 
     706void release_firmware(const struct firmware *fw) 
     707{ 
     708        if (fw) { 
     709                vfree(fw->data); 
     710                kfree(fw); 
     711        } 
     712} 
     713 
  • GPL/trunk/alsa-kernel/include/sound/asound.h

    r77 r84  
    754754#define SNDRV_CTL_ELEM_ACCESS_VOLATILE          (1<<2)  /* control value may be changed without a notification */ 
    755755#define SNDRV_CTL_ELEM_ACCESS_TIMESTAMP         (1<<2)  /* when was control changed */ 
     756#define SNDRV_CTL_ELEM_ACCESS_TLV_READ          (1<<4)  /* TLV read is possible */ 
     757#define SNDRV_CTL_ELEM_ACCESS_TLV_WRITE         (1<<5)  /* TLV write is possible */ 
     758#define SNDRV_CTL_ELEM_ACCESS_TLV_READWRITE     (SNDRV_CTL_ELEM_ACCESS_TLV_READ|SNDRV_CTL_ELEM_ACCESS_TLV_WRITE) 
     759#define SNDRV_CTL_ELEM_ACCESS_TLV_COMMAND       (1<<6)  /* TLV command is possible */ 
    756760#define SNDRV_CTL_ELEM_ACCESS_INACTIVE          (1<<8)  /* control does actually nothing, but may be updated */ 
    757761#define SNDRV_CTL_ELEM_ACCESS_LOCK              (1<<9)  /* write lock */ 
    758762#define SNDRV_CTL_ELEM_ACCESS_OWNER             (1<<10) /* write lock owner */ 
     763#define SNDRV_CTL_ELEM_ACCESS_TLV_CALLBACK      (1<<28) /* kernel use a TLV callback */  
    759764#define SNDRV_CTL_ELEM_ACCESS_USER              (1<<29) /* user space element */ 
    760765#define SNDRV_CTL_ELEM_ACCESS_DINDIRECT         (1<<30) /* indirect access for matrix dimensions in the info structure */ 
     
    864869        SNDRV_CTL_IOCTL_ELEM_REMOVE = _IOWR('U', 0x19, struct snd_ctl_elem_id), 
    865870        SNDRV_CTL_IOCTL_TLV_READ = _IOWR('U', 0x1a, struct snd_ctl_tlv), 
     871        SNDRV_CTL_IOCTL_TLV_WRITE = _IOWR('U', 0x1b, struct snd_ctl_tlv), 
     872        SNDRV_CTL_IOCTL_TLV_COMMAND = _IOWR('U', 0x1c, struct snd_ctl_tlv), 
    866873        SNDRV_CTL_IOCTL_HWDEP_NEXT_DEVICE = _IOWR('U', 0x20, int), 
    867874        SNDRV_CTL_IOCTL_HWDEP_INFO = _IOR('U', 0x21, struct snd_hwdep_info), 
     
    893900#define SNDRV_CTL_EVENT_MASK_INFO       (1<<1)  /* element info was changed */ 
    894901#define SNDRV_CTL_EVENT_MASK_ADD        (1<<2)  /* element was added */ 
     902#define SNDRV_CTL_EVENT_MASK_TLV        (1<<3)  /* element TLV tree was changed */ 
    895903#define SNDRV_CTL_EVENT_MASK_REMOVE     (~0U)   /* element was removed */ 
    896904 
  • GPL/trunk/alsa-kernel/include/sound/control.h

    r77 r84  
    2828typedef int (snd_kcontrol_get_t) (struct snd_kcontrol * kcontrol, struct snd_ctl_elem_value * ucontrol); 
    2929typedef int (snd_kcontrol_put_t) (struct snd_kcontrol * kcontrol, struct snd_ctl_elem_value * ucontrol); 
     30typedef int (snd_kcontrol_tlv_rw_t)(struct snd_kcontrol *kcontrol, 
     31                                    int op_flag, /* 0=read,1=write,-1=command */ 
     32                                    unsigned int size, 
     33                                    unsigned int __user *tlv); 
    3034 
    3135struct snd_kcontrol_new { 
     
    4044    snd_kcontrol_get_t *get; 
    4145    snd_kcontrol_put_t *put; 
    42     unsigned int *tlv; 
     46    union { 
     47        snd_kcontrol_tlv_rw_t *c; 
     48        unsigned int *p; 
     49    } tlv; 
    4350    unsigned long private_value; 
    4451}; 
     
    5764        snd_kcontrol_get_t *get; 
    5865        snd_kcontrol_put_t *put; 
    59         unsigned int *tlv; 
     66        union { 
     67                snd_kcontrol_tlv_rw_t *c; 
     68                unsigned int *p; 
     69        } tlv; 
    6070        unsigned long private_value; 
    6171#ifdef TARGET_OS2 
     
    140150} 
    141151 
     152static inline struct snd_ctl_elem_id *snd_ctl_build_ioff(struct snd_ctl_elem_id *dst_id, 
     153                                                    struct snd_kcontrol *src_kctl, 
     154                                                    unsigned int offset) 
     155{ 
     156        *dst_id = src_kctl->id; 
     157        dst_id->index += offset; 
     158        dst_id->numid += offset; 
     159        return dst_id; 
     160} 
     161 
    142162#endif                          /* __CONTROL_H */ 
  • GPL/trunk/alsa-kernel/include/sound/emu10k1.h

    r34 r84  
    188188                                                /* NOTE: The rest of the bits in this register  */ 
    189189                                                /* _are_ relevant under Linux.                  */ 
    190 #define HCFG_CODECFORMAT_MASK   0x00070000      /* CODEC format                                 */ 
     190#define HCFG_PUSH_BUTTON_ENABLE 0x00100000      /* Enables Volume Inc/Dec and Mute functions    */ 
     191#define HCFG_BAUD_RATE          0x00080000      /* 0 = 48kHz, 1 = 44.1kHz                       */ 
     192#define HCFG_EXPANDED_MEM       0x00040000      /* 1 = any 16M of 4G addr, 0 = 32M of 2G addr   */ 
     193#define HCFG_CODECFORMAT_MASK   0x00030000      /* CODEC format                                 */ 
     194 
     195/* Specific to Alice2, CA0102 */ 
     196#define HCFG_CODECFORMAT_AC97_1 0x00000000      /* AC97 CODEC format -- Ver 1.03                */ 
     197#define HCFG_CODECFORMAT_AC97_2 0x00010000      /* AC97 CODEC format -- Ver 2.1                 */ 
     198#define HCFG_AUTOMUTE_ASYNC     0x00008000      /* When set, the async sample rate convertors   */ 
     199                                                /* will automatically mute their output when    */ 
     200                                                /* they are not rate-locked to the external     */ 
     201                                                /* async audio source                           */ 
     202#define HCFG_AUTOMUTE_SPDIF     0x00004000      /* When set, the async sample rate convertors   */ 
     203                                                /* will automatically mute their output when    */ 
     204                                                /* the SPDIF V-bit indicates invalid audio      */ 
     205#define HCFG_EMU32_SLAVE        0x00002000      /* 0 = Master, 1 = Slave. Slave for EMU1010     */ 
     206#define HCFG_SLOW_RAMP          0x00001000      /* Increases Send Smoothing time constant       */ 
     207/* 0x00000800 not used on Alice2 */ 
     208#define HCFG_PHASE_TRACK_MASK   0x00000700      /* When set, forces corresponding input to      */ 
     209                                                /* phase track the previous input.              */ 
     210                                                /* I2S0 can phase track the last S/PDIF input   */ 
     211#define HCFG_I2S_ASRC_ENABLE    0x00000070      /* When set, enables asynchronous sample rate   */ 
     212                                                /* conversion for the corresponding             */ 
     213                                                /* I2S format input                             */ 
     214/* Rest of HCFG 0x0000000f same as below. LOCKSOUNDCACHE etc.  */ 
     215 
     216 
     217 
     218/* Older chips */ 
    191219#define HCFG_CODECFORMAT_AC97   0x00000000      /* AC97 CODEC format -- Primary Output          */ 
    192220#define HCFG_CODECFORMAT_I2S    0x00010000      /* I2S CODEC format -- Secondary (Rear) Output  */ 
     
    245273#define A_IOCFG_DISABLE_ANALOG  0x0040          /* = 'enable' for Audigy2 (chiprev=4)           */ 
    246274#define A_IOCFG_ENABLE_DIGITAL  0x0004 
     275#define A_IOCFG_ENABLE_DIGITAL_AUDIGY4  0x0080 
    247276#define A_IOCFG_UNKNOWN_20      0x0020 
    248277#define A_IOCFG_DISABLE_AC97_FRONT      0x0080  /* turn off ac97 front -> front (10k2.1)        */ 
     
    885914#define A_HIWORD_OPA_MASK       0x000007ff 
    886915 
     916/************************************************************************************************/ 
     917/* EMU1010m HANA FPGA registers                                                                 */ 
     918/************************************************************************************************/ 
     919#define EMU_HANA_DESTHI         0x00    /* 0000xxx  3 bits Link Destination */ 
     920#define EMU_HANA_DESTLO         0x01    /* 00xxxxx  5 bits */ 
     921#define EMU_HANA_SRCHI          0x02    /* 0000xxx  3 bits Link Source */ 
     922#define EMU_HANA_SRCLO          0x03    /* 00xxxxx  5 bits */ 
     923#define EMU_HANA_DOCK_PWR       0x04    /* 000000x  1 bits Audio Dock power */ 
     924#define EMU_HANA_DOCK_PWR_ON            0x01 /* Audio Dock power on */ 
     925#define EMU_HANA_WCLOCK         0x05    /* 0000xxx  3 bits Word Clock source select  */ 
     926                                        /* Must be written after power on to reset DLL */ 
     927                                        /* One is unable to detect the Audio dock without this */ 
     928#define EMU_HANA_WCLOCK_SRC_MASK        0x07 
     929#define EMU_HANA_WCLOCK_INT_48K         0x00 
     930#define EMU_HANA_WCLOCK_INT_44_1K       0x01 
     931#define EMU_HANA_WCLOCK_HANA_SPDIF_IN   0x02 
     932#define EMU_HANA_WCLOCK_HANA_ADAT_IN    0x03 
     933#define EMU_HANA_WCLOCK_SYNC_BNCN       0x04 
     934#define EMU_HANA_WCLOCK_2ND_HANA        0x05 
     935#define EMU_HANA_WCLOCK_SRC_RESERVED    0x06 
     936#define EMU_HANA_WCLOCK_OFF             0x07 /* For testing, forces fallback to DEFCLOCK */ 
     937#define EMU_HANA_WCLOCK_MULT_MASK       0x18 
     938#define EMU_HANA_WCLOCK_1X              0x00 
     939#define EMU_HANA_WCLOCK_2X              0x08 
     940#define EMU_HANA_WCLOCK_4X              0x10 
     941#define EMU_HANA_WCLOCK_MULT_RESERVED   0x18 
     942 
     943#define EMU_HANA_DEFCLOCK       0x06    /* 000000x  1 bits Default Word Clock  */ 
     944#define EMU_HANA_DEFCLOCK_48K           0x00 
     945#define EMU_HANA_DEFCLOCK_44_1K         0x01 
     946 
     947#define EMU_HANA_UNMUTE         0x07    /* 000000x  1 bits Mute all audio outputs  */ 
     948#define EMU_MUTE                        0x00 
     949#define EMU_UNMUTE                      0x01 
     950 
     951#define EMU_HANA_FPGA_CONFIG    0x08    /* 00000xx  2 bits Config control of FPGAs  */ 
     952#define EMU_HANA_FPGA_CONFIG_AUDIODOCK  0x01 /* Set in order to program FPGA on Audio Dock */ 
     953#define EMU_HANA_FPGA_CONFIG_HANA       0x02 /* Set in order to program FPGA on Hana */ 
     954 
     955#define EMU_HANA_IRQ_ENABLE     0x09    /* 000xxxx  4 bits IRQ Enable  */ 
     956#define EMU_HANA_IRQ_WCLK_CHANGED       0x01 
     957#define EMU_HANA_IRQ_ADAT               0x02 
     958#define EMU_HANA_IRQ_DOCK               0x04 
     959#define EMU_HANA_IRQ_DOCK_LOST          0x08 
     960 
     961#define EMU_HANA_SPDIF_MODE     0x0a    /* 00xxxxx  5 bits SPDIF MODE  */ 
     962#define EMU_HANA_SPDIF_MODE_TX_COMSUMER 0x00 
     963#define EMU_HANA_SPDIF_MODE_TX_PRO      0x01 
     964#define EMU_HANA_SPDIF_MODE_TX_NOCOPY   0x02 
     965#define EMU_HANA_SPDIF_MODE_RX_COMSUMER 0x00 
     966#define EMU_HANA_SPDIF_MODE_RX_PRO      0x04 
     967#define EMU_HANA_SPDIF_MODE_RX_NOCOPY   0x08 
     968#define EMU_HANA_SPDIF_MODE_RX_INVALID  0x10 
     969 
     970#define EMU_HANA_OPTICAL_TYPE   0x0b    /* 00000xx  2 bits ADAT or SPDIF in/out  */ 
     971#define EMU_HANA_OPTICAL_IN_SPDIF       0x00 
     972#define EMU_HANA_OPTICAL_IN_ADAT        0x01 
     973#define EMU_HANA_OPTICAL_OUT_SPDIF      0x00 
     974#define EMU_HANA_OPTICAL_OUT_ADAT       0x02 
     975 
     976#define EMU_HANA_MIDI_IN                0x0c    /* 000000x  1 bit  Control MIDI  */ 
     977#define EMU_HANA_MIDI_IN_FROM_HAMOA     0x00 /* HAMOA MIDI in to Alice 2 MIDI B */ 
     978#define EMU_HANA_MIDI_IN_FROM_DOCK      0x01 /* Audio Dock MIDI in to Alice 2 MIDI B */ 
     979 
     980#define EMU_HANA_DOCK_LEDS_1    0x0d    /* 000xxxx  4 bit  Audio Dock LEDs  */ 
     981#define EMU_HANA_DOCK_LEDS_1_MIDI1      0x01    /* MIDI 1 LED on */ 
     982#define EMU_HANA_DOCK_LEDS_1_MIDI2      0x02    /* MIDI 2 LED on */ 
     983#define EMU_HANA_DOCK_LEDS_1_SMPTE_IN   0x04    /* SMPTE IN LED on */ 
     984#define EMU_HANA_DOCK_LEDS_1_SMPTE_OUT  0x08    /* SMPTE OUT LED on */ 
     985 
     986#define EMU_HANA_DOCK_LEDS_2    0x0e    /* 0xxxxxx  6 bit  Audio Dock LEDs  */ 
     987#define EMU_HANA_DOCK_LEDS_2_44K        0x01    /* 44.1 kHz LED on */ 
     988#define EMU_HANA_DOCK_LEDS_2_48K        0x02    /* 48 kHz LED on */ 
     989#define EMU_HANA_DOCK_LEDS_2_96K        0x04    /* 96 kHz LED on */ 
     990#define EMU_HANA_DOCK_LEDS_2_192K       0x08    /* 192 kHz LED on */ 
     991#define EMU_HANA_DOCK_LEDS_2_LOCK       0x10    /* LOCK LED on */ 
     992#define EMU_HANA_DOCK_LEDS_2_EXT        0x20    /* EXT LED on */ 
     993 
     994#define EMU_HANA_DOCK_LEDS_3    0x0f    /* 0xxxxxx  6 bit  Audio Dock LEDs  */ 
     995#define EMU_HANA_DOCK_LEDS_3_CLIP_A     0x01    /* Mic A Clip LED on */ 
     996#define EMU_HANA_DOCK_LEDS_3_CLIP_B     0x02    /* Mic B Clip LED on */ 
     997#define EMU_HANA_DOCK_LEDS_3_SIGNAL_A   0x04    /* Signal A Clip LED on */ 
     998#define EMU_HANA_DOCK_LEDS_3_SIGNAL_B   0x08    /* Signal B Clip LED on */ 
     999#define EMU_HANA_DOCK_LEDS_3_MANUAL_CLIP        0x10    /* Manual Clip detection */ 
     1000#define EMU_HANA_DOCK_LEDS_3_MANUAL_SIGNAL      0x20    /* Manual Signal detection */ 
     1001 
     1002#define EMU_HANA_ADC_PADS       0x10    /* 0000xxx  3 bit  Audio Dock ADC 14dB pads */ 
     1003#define EMU_HANA_DOCK_ADC_PAD1  0x01    /* 14dB Attenuation on Audio Dock ADC 1 */ 
     1004#define EMU_HANA_DOCK_ADC_PAD2  0x02    /* 14dB Attenuation on Audio Dock ADC 2 */ 
     1005#define EMU_HANA_DOCK_ADC_PAD3  0x04    /* 14dB Attenuation on Audio Dock ADC 3 */ 
     1006#define EMU_HANA_0202_ADC_PAD1  0x08    /* 14dB Attenuation on 0202 ADC 1 */ 
     1007 
     1008#define EMU_HANA_DOCK_MISC      0x11    /* 0xxxxxx  6 bit  Audio Dock misc bits */ 
     1009#define EMU_HANA_DOCK_DAC1_MUTE 0x01    /* DAC 1 Mute */ 
     1010#define EMU_HANA_DOCK_DAC2_MUTE 0x02    /* DAC 2 Mute */ 
     1011#define EMU_HANA_DOCK_DAC3_MUTE 0x04    /* DAC 3 Mute */ 
     1012#define EMU_HANA_DOCK_DAC4_MUTE 0x08    /* DAC 4 Mute */ 
     1013#define EMU_HANA_DOCK_PHONES_192_DAC1   0x00    /* DAC 1 Headphones source at 192kHz */ 
     1014#define EMU_HANA_DOCK_PHONES_192_DAC2   0x10    /* DAC 2 Headphones source at 192kHz */ 
     1015#define EMU_HANA_DOCK_PHONES_192_DAC3   0x20    /* DAC 3 Headphones source at 192kHz */ 
     1016#define EMU_HANA_DOCK_PHONES_192_DAC4   0x30    /* DAC 4 Headphones source at 192kHz */ 
     1017 
     1018#define EMU_HANA_MIDI_OUT       0x12    /* 00xxxxx  5 bit  Source for each MIDI out port */ 
     1019#define EMU_HANA_MIDI_OUT_0202  0x01 /* 0202 MIDI from Alice 2. 0 = A, 1 = B */ 
     1020#define EMU_HANA_MIDI_OUT_DOCK1 0x02 /* Audio Dock MIDI1 front, from Alice 2. 0 = A, 1 = B */ 
     1021#define EMU_HANA_MIDI_OUT_DOCK2 0x04 /* Audio Dock MIDI2 rear, from Alice 2. 0 = A, 1 = B */ 
     1022#define EMU_HANA_MIDI_OUT_SYNC2 0x08 /* Sync card. Not the actual MIDI out jack. 0 = A, 1 = B */ 
     1023#define EMU_HANA_MIDI_OUT_LOOP  0x10 /* 0 = bits (3:0) normal. 1 = MIDI loopback enabled. */ 
     1024 
     1025#define EMU_HANA_DAC_PADS       0x13    /* 00xxxxx  5 bit  DAC 14dB attenuation pads */ 
     1026#define EMU_HANA_DOCK_DAC_PAD1  0x01    /* 14dB Attenuation on AudioDock DAC 1. Left and Right */ 
     1027#define EMU_HANA_DOCK_DAC_PAD2  0x02    /* 14dB Attenuation on AudioDock DAC 2. Left and Right */ 
     1028#define EMU_HANA_DOCK_DAC_PAD3  0x04    /* 14dB Attenuation on AudioDock DAC 3. Left and Right */ 
     1029#define EMU_HANA_DOCK_DAC_PAD4  0x08    /* 14dB Attenuation on AudioDock DAC 4. Left and Right */ 
     1030#define EMU_HANA_0202_DAC_PAD1  0x10    /* 14dB Attenuation on 0202 DAC 1. Left and Right */ 
     1031 
     1032/* 0x14 - 0x1f Unused R/W registers */ 
     1033#define EMU_HANA_IRQ_STATUS     0x20    /* 000xxxx  4 bits IRQ Status  */ 
     1034#if 0  /* Already defined for reg 0x09 IRQ_ENABLE */ 
     1035#define EMU_HANA_IRQ_WCLK_CHANGED       0x01 
     1036#define EMU_HANA_IRQ_ADAT               0x02 
     1037#define EMU_HANA_IRQ_DOCK               0x04 
     1038#define EMU_HANA_IRQ_DOCK_LOST          0x08 
     1039#endif 
     1040 
     1041#define EMU_HANA_OPTION_CARDS   0x21    /* 000xxxx  4 bits Presence of option cards */ 
     1042#define EMU_HANA_OPTION_HAMOA   0x01    /* HAMOA card present */ 
     1043#define EMU_HANA_OPTION_SYNC    0x02    /* Sync card present */ 
     1044#define EMU_HANA_OPTION_DOCK_ONLINE     0x04    /* Audio Dock online and FPGA configured */ 
     1045#define EMU_HANA_OPTION_DOCK_OFFLINE    0x08    /* Audio Dock online and FPGA not configured */ 
     1046 
     1047#define EMU_HANA_ID             0x22    /* 1010101  7 bits ID byte & 0x7f = 0x55 */ 
     1048 
     1049#define EMU_HANA_MAJOR_REV      0x23    /* 0000xxx  3 bit  Hana FPGA Major rev */ 
     1050#define EMU_HANA_MINOR_REV      0x24    /* 0000xxx  3 bit  Hana FPGA Minor rev */ 
     1051 
     1052#define EMU_DOCK_MAJOR_REV      0x25    /* 0000xxx  3 bit  Audio Dock FPGA Major rev */ 
     1053#define EMU_DOCK_MINOR_REV      0x26    /* 0000xxx  3 bit  Audio Dock FPGA Minor rev */ 
     1054 
     1055#define EMU_DOCK_BOARD_ID       0x27    /* 00000xx  2 bits Audio Dock ID pins */ 
     1056#define EMU_DOCK_BOARD_ID0      0x00    /* ID bit 0 */ 
     1057#define EMU_DOCK_BOARD_ID1      0x03    /* ID bit 1 */ 
     1058 
     1059#define EMU_HANA_WC_SPDIF_HI    0x28    /* 0xxxxxx  6 bit  SPDIF IN Word clock, upper 6 bits */ 
     1060#define EMU_HANA_WC_SPDIF_LO    0x29    /* 0xxxxxx  6 bit  SPDIF IN Word clock, lower 6 bits */ 
     1061 
     1062#define EMU_HANA_WC_ADAT_HI     0x2a    /* 0xxxxxx  6 bit  ADAT IN Word clock, upper 6 bits */ 
     1063#define EMU_HANA_WC_ADAT_LO     0x2b    /* 0xxxxxx  6 bit  ADAT IN Word clock, lower 6 bits */ 
     1064 
     1065#define EMU_HANA_WC_BNC_LO      0x2c    /* 0xxxxxx  6 bit  BNC IN Word clock, lower 6 bits */ 
     1066#define EMU_HANA_WC_BNC_HI      0x2d    /* 0xxxxxx  6 bit  BNC IN Word clock, upper 6 bits */ 
     1067 
     1068#define EMU_HANA2_WC_SPDIF_HI   0x2e    /* 0xxxxxx  6 bit  HANA2 SPDIF IN Word clock, upper 6 bits */ 
     1069#define EMU_HANA2_WC_SPDIF_LO   0x2f    /* 0xxxxxx  6 bit  HANA2 SPDIF IN Word clock, lower 6 bits */ 
     1070/* 0x30 - 0x3f Unused Read only registers */ 
     1071 
     1072/************************************************************************************************/ 
     1073/* EMU1010m HANA Destinations                                                                   */ 
     1074/************************************************************************************************/ 
     1075#define EMU_DST_ALICE2_EMU32_0  0x000f  /* 16 EMU32 channels to Alice2 +0 to +0xf */ 
     1076#define EMU_DST_ALICE2_EMU32_1  0x0000  /* 16 EMU32 channels to Alice2 +0 to +0xf */ 
     1077#define EMU_DST_ALICE2_EMU32_2  0x0001  /* 16 EMU32 channels to Alice2 +0 to +0xf */ 
     1078#define EMU_DST_ALICE2_EMU32_3  0x0002  /* 16 EMU32 channels to Alice2 +0 to +0xf */ 
     1079#define EMU_DST_ALICE2_EMU32_4  0x0003  /* 16 EMU32 channels to Alice2 +0 to +0xf */ 
     1080#define EMU_DST_ALICE2_EMU32_5  0x0004  /* 16 EMU32 channels to Alice2 +0 to +0xf */ 
     1081#define EMU_DST_ALICE2_EMU32_6  0x0005  /* 16 EMU32 channels to Alice2 +0 to +0xf */ 
     1082#define EMU_DST_ALICE2_EMU32_7  0x0006  /* 16 EMU32 channels to Alice2 +0 to +0xf */ 
     1083#define EMU_DST_ALICE2_EMU32_8  0x0007  /* 16 EMU32 channels to Alice2 +0 to +0xf */ 
     1084#define EMU_DST_ALICE2_EMU32_9  0x0008  /* 16 EMU32 channels to Alice2 +0 to +0xf */ 
     1085#define EMU_DST_ALICE2_EMU32_A  0x0009  /* 16 EMU32 channels to Alice2 +0 to +0xf */ 
     1086#define EMU_DST_ALICE2_EMU32_B  0x000a  /* 16 EMU32 channels to Alice2 +0 to +0xf */ 
     1087#define EMU_DST_ALICE2_EMU32_C  0x000b  /* 16 EMU32 channels to Alice2 +0 to +0xf */ 
     1088#define EMU_DST_ALICE2_EMU32_D  0x000c  /* 16 EMU32 channels to Alice2 +0 to +0xf */ 
     1089#define EMU_DST_ALICE2_EMU32_E  0x000d  /* 16 EMU32 channels to Alice2 +0 to +0xf */ 
     1090#define EMU_DST_ALICE2_EMU32_F  0x000e  /* 16 EMU32 channels to Alice2 +0 to +0xf */ 
     1091#define EMU_DST_DOCK_DAC1_LEFT1 0x0100  /* Audio Dock DAC1 Left, 1st or 48kHz only */ 
     1092#define EMU_DST_DOCK_DAC1_LEFT2 0x0101  /* Audio Dock DAC1 Left, 2nd or 96kHz */ 
     1093#define EMU_DST_DOCK_DAC1_LEFT3 0x0102  /* Audio Dock DAC1 Left, 3rd or 192kHz */ 
     1094#define EMU_DST_DOCK_DAC1_LEFT4 0x0103  /* Audio Dock DAC1 Left, 4th or 192kHz */ 
     1095#define EMU_DST_DOCK_DAC1_RIGHT1        0x0104  /* Audio Dock DAC1 Right, 1st or 48kHz only */ 
     1096#define EMU_DST_DOCK_DAC1_RIGHT2        0x0105  /* Audio Dock DAC1 Right, 2nd or 96kHz */ 
     1097#define EMU_DST_DOCK_DAC1_RIGHT3        0x0106  /* Audio Dock DAC1 Right, 3rd or 192kHz */ 
     1098#define EMU_DST_DOCK_DAC1_RIGHT4        0x0107  /* Audio Dock DAC1 Right, 4th or 192kHz */ 
     1099#define EMU_DST_DOCK_DAC2_LEFT1 0x0108  /* Audio Dock DAC2 Left, 1st or 48kHz only */ 
     1100#define EMU_DST_DOCK_DAC2_LEFT2 0x0109  /* Audio Dock DAC2 Left, 2nd or 96kHz */ 
     1101#define EMU_DST_DOCK_DAC2_LEFT3 0x010a  /* Audio Dock DAC2 Left, 3rd or 192kHz */ 
     1102#define EMU_DST_DOCK_DAC2_LEFT4 0x010b  /* Audio Dock DAC2 Left, 4th or 192kHz */ 
     1103#define EMU_DST_DOCK_DAC2_RIGHT1        0x010c  /* Audio Dock DAC2 Right, 1st or 48kHz only */ 
     1104#define EMU_DST_DOCK_DAC2_RIGHT2        0x010d  /* Audio Dock DAC2 Right, 2nd or 96kHz */ 
     1105#define EMU_DST_DOCK_DAC2_RIGHT3        0x010e  /* Audio Dock DAC2 Right, 3rd or 192kHz */ 
     1106#define EMU_DST_DOCK_DAC2_RIGHT4        0x010f  /* Audio Dock DAC2 Right, 4th or 192kHz */ 
     1107#define EMU_DST_DOCK_DAC3_LEFT1 0x0110  /* Audio Dock DAC1 Left, 1st or 48kHz only */ 
     1108#define EMU_DST_DOCK_DAC3_LEFT2 0x0111  /* Audio Dock DAC1 Left, 2nd or 96kHz */ 
     1109#define EMU_DST_DOCK_DAC3_LEFT3 0x0112  /* Audio Dock DAC1 Left, 3rd or 192kHz */ 
     1110#define EMU_DST_DOCK_DAC3_LEFT4 0x0113  /* Audio Dock DAC1 Left, 4th or 192kHz */ 
     1111#define EMU_DST_DOCK_PHONES_LEFT1       0x0112  /* Audio Dock PHONES Left, 1st or 48kHz only */ 
     1112#define EMU_DST_DOCK_PHONES_LEFT2       0x0113  /* Audio Dock PHONES Left, 2nd or 96kHz */ 
     1113#define EMU_DST_DOCK_DAC3_RIGHT1        0x0114  /* Audio Dock DAC1 Right, 1st or 48kHz only */ 
     1114#define EMU_DST_DOCK_DAC3_RIGHT2        0x0115  /* Audio Dock DAC1 Right, 2nd or 96kHz */ 
     1115#define EMU_DST_DOCK_DAC3_RIGHT3        0x0116  /* Audio Dock DAC1 Right, 3rd or 192kHz */ 
     1116#define EMU_DST_DOCK_DAC3_RIGHT4        0x0117  /* Audio Dock DAC1 Right, 4th or 192kHz */ 
     1117#define EMU_DST_DOCK_PHONES_RIGHT1      0x0116  /* Audio Dock PHONES Right, 1st or 48kHz only */ 
     1118#define EMU_DST_DOCK_PHONES_RIGHT2      0x0117  /* Audio Dock PHONES Right, 2nd or 96kHz */ 
     1119#define EMU_DST_DOCK_DAC4_LEFT1 0x0118  /* Audio Dock DAC2 Left, 1st or 48kHz only */ 
     1120#define EMU_DST_DOCK_DAC4_LEFT2 0x0119  /* Audio Dock DAC2 Left, 2nd or 96kHz */ 
     1121#define EMU_DST_DOCK_DAC4_LEFT3 0x011a  /* Audio Dock DAC2 Left, 3rd or 192kHz */ 
     1122#define EMU_DST_DOCK_DAC4_LEFT4 0x011b  /* Audio Dock DAC2 Left, 4th or 192kHz */ 
     1123#define EMU_DST_DOCK_SPDIF_LEFT1        0x011a  /* Audio Dock SPDIF Left, 1st or 48kHz only */ 
     1124#define EMU_DST_DOCK_SPDIF_LEFT2        0x011b  /* Audio Dock SPDIF Left, 2nd or 96kHz */ 
     1125#define EMU_DST_DOCK_DAC4_RIGHT1        0x011c  /* Audio Dock DAC2 Right, 1st or 48kHz only */ 
     1126#define EMU_DST_DOCK_DAC4_RIGHT2        0x011d  /* Audio Dock DAC2 Right, 2nd or 96kHz */ 
     1127#define EMU_DST_DOCK_DAC4_RIGHT3        0x011e  /* Audio Dock DAC2 Right, 3rd or 192kHz */ 
     1128#define EMU_DST_DOCK_DAC4_RIGHT4        0x011f  /* Audio Dock DAC2 Right, 4th or 192kHz */<