[BACK]Return to ac97.h CVS log [TXT][DIR] Up to [local] / sys / dev / ic

Annotation of sys/dev/ic/ac97.h, Revision 1.1.1.1

1.1       nbrk        1: /*     $OpenBSD: ac97.h,v 1.19 2006/04/27 21:40:00 matthieu Exp $      */
                      2:
                      3: /*
                      4:  * Copyright (c) 1999 Constantine Sapuntzakis
                      5:  *
                      6:  * Author:     Constantine Sapuntzakis <csapuntz@stanford.edu>
                      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:  *
                     17:  * THIS SOFTWARE IS PROVIDED BY CONSTANTINE SAPUNTZAKIS AND CONTRIBUTORS
                     18:  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
                     19:  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
                     20:  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS
                     21:  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
                     22:  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
                     23:  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
                     24:  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
                     25:  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
                     26:  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
                     27:  * POSSIBILITY OF SUCH DAMAGE.
                     28:  */
                     29:
                     30: struct ac97_codec_if;
                     31:
                     32: /*
                     33:  * This is the interface used to attach the AC97 compliant CODEC.
                     34:  */
                     35: enum ac97_host_flags {
                     36:        AC97_HOST_DONT_READ = 0x1,
                     37:        AC97_HOST_DONT_READANY = 0x2,
                     38:        AC97_HOST_SWAPPED_CHANNELS = 0x4,
                     39:        AC97_HOST_DONT_ENABLE_SPDIF = 0x8
                     40: };
                     41:
                     42: struct ac97_host_if {
                     43:        void  *arg;
                     44:
                     45:        int (*attach)(void *arg, struct ac97_codec_if *codecif);
                     46:        int (*read)(void *arg, u_int8_t reg, u_int16_t *val);
                     47:        int (*write)(void *arg, u_int8_t reg, u_int16_t val);
                     48:        void (*reset)(void *arg);
                     49:
                     50:        enum ac97_host_flags (*flags)(void *arg);
                     51: };
                     52:
                     53: /*
                     54:  * This is the interface exported by the AC97 compliant CODEC
                     55:  */
                     56:
                     57: struct ac97_codec_if_vtbl {
                     58:        int (*mixer_get_port)(struct ac97_codec_if *addr, mixer_ctrl_t *cp);
                     59:        int (*mixer_set_port)(struct ac97_codec_if *addr, mixer_ctrl_t *cp);
                     60:        int (*query_devinfo)(struct ac97_codec_if *addr, mixer_devinfo_t *cp);
                     61:        int (*get_portnum_by_name)(struct ac97_codec_if *addr, char *class,
                     62:            char *device, char *qualifier);
                     63:
                     64:        /*
                     65:         *     The AC97 codec driver records the various port settings.
                     66:         * This function can be used to restore the port settings, e.g.
                     67:         * after resume from a laptop suspend to disk.
                     68:         */
                     69:        void (*restore_ports)(struct ac97_codec_if *addr);
                     70: };
                     71:
                     72: struct ac97_codec_if {
                     73:        struct ac97_codec_if_vtbl *vtbl;
                     74: };
                     75:
                     76: int ac97_attach(struct ac97_host_if *);
                     77: int ac97_set_rate(struct ac97_codec_if *, struct audio_params *, int);
                     78:
                     79: #define        AC97_REG_RESET                  0x00
                     80: #define        AC97_CAPS_MICIN                 0x0001
                     81: #define        AC97_CAPS_TONECTRL              0x0004
                     82: #define        AC97_CAPS_SIMSTEREO             0x0008
                     83: #define        AC97_CAPS_HEADPHONES            0x0010
                     84: #define        AC97_CAPS_LOUDNESS              0x0020
                     85: #define        AC97_CAPS_DAC18                 0x0040
                     86: #define        AC97_CAPS_DAC20                 0x0080
                     87: #define        AC97_CAPS_ADC18                 0x0100
                     88: #define        AC97_CAPS_ADC20                 0x0200
                     89: #define        AC97_CAPS_ENHANCEMENT_MASK      0xfc00
                     90: #define        AC97_CAPS_ENHANCEMENT_SHIFT     10
                     91: #define        AC97_CAPS_ENHANCEMENT(reg)      (((reg) >> 10) & 0x1f)
                     92: #define        AC97_REG_MASTER_VOLUME          0x02
                     93: #define        AC97_REG_HEADPHONE_VOLUME       0x04
                     94: #define        AC97_REG_MASTER_VOLUME_MONO     0x06
                     95: #define        AC97_REG_MASTER_TONE            0x08
                     96: #define        AC97_REG_PCBEEP_VOLUME          0x0a
                     97: #define        AC97_REG_PHONE_VOLUME           0x0c
                     98: #define        AC97_REG_MIC_VOLUME             0x0e
                     99: #define        AC97_REG_LINEIN_VOLUME          0x10
                    100: #define        AC97_REG_CD_VOLUME              0x12
                    101: #define        AC97_REG_VIDEO_VOLUME           0x14
                    102: #define        AC97_REG_AUX_VOLUME             0x16
                    103: #define        AC97_REG_PCMOUT_VOLUME          0x18
                    104: #define        AC97_REG_RECORD_SELECT          0x1a
                    105: #define        AC97_REG_RECORD_GAIN            0x1c
                    106: #define        AC97_REG_RECORD_GAIN_MIC        0x1e
                    107: #define        AC97_REG_GP                     0x20
                    108: #define        AC97_REG_3D_CONTROL             0x22
                    109: #define        AC97_REG_MODEM_SAMPLE_RATE      0x24
                    110: #define        AC97_REG_POWER                  0x26
                    111: #define        AC97_POWER_ADC                  0x0001
                    112: #define        AC97_POWER_DAC                  0x0002
                    113: #define        AC97_POWER_ANL                  0x0004
                    114: #define        AC97_POWER_REF                  0x0008
                    115: #define        AC97_POWER_IN                   0x0100
                    116: #define        AC97_POWER_OUT                  0x0200
                    117: #define        AC97_POWER_MIXER                0x0400
                    118: #define        AC97_POWER_MIXER_VREF           0x0800
                    119: #define        AC97_POWER_ACLINK               0x1000
                    120: #define        AC97_POWER_CLK                  0x2000
                    121: #define        AC97_POWER_AUX                  0x4000
                    122: #define        AC97_POWER_EAMP                 0x8000
                    123:        /* Extended Audio Register Set */
                    124: #define        AC97_REG_EXT_AUDIO_ID           0x28
                    125: #define        AC97_REG_EXT_AUDIO_CTRL         0x2a
                    126: #define        AC97_EXT_AUDIO_VRA              0x0001
                    127: #define        AC97_EXT_AUDIO_DRA              0x0002
                    128: #define        AC97_EXT_AUDIO_SPDIF            0x0004
                    129: #define        AC97_EXT_AUDIO_VRM              0x0008
                    130: #define        AC97_EXT_AUDIO_DSA0             0x0010
                    131: #define        AC97_EXT_AUDIO_DSA1             0x0020
                    132: #define        AC97_EXT_AUDIO_CDAC             0x0040
                    133: #define        AC97_EXT_AUDIO_SDAC             0x0080
                    134: #define        AC97_EXT_AUDIO_LDAC             0x0100
                    135: #define        AC97_EXT_AUDIO_AMAP             0x0200
                    136: #define        AC97_EXT_AUDIO_REV_11           0x0000
                    137: #define        AC97_EXT_AUDIO_REV_22           0x0400
                    138: #define        AC97_EXT_AUDIO_REV_23           0x0800
                    139: #define        AC97_EXT_AUDIO_REV_MASK         0x0c00
                    140: #define        AC97_EXT_AUDIO_ID               0xc000
                    141: #define        AC97_EXT_AUDIO_BITS             "\020\01vra\02dra\03spdif\04vrm\05dsa0\06dsa1\07cdac\010sdac\011ldac\012amap\013rev0\014rev1\017id0\020id1"
                    142: #define        AC97_SINGLERATE                 48000
                    143: #define        AC97_REG_FRONT_DAC_RATE         0x2c
                    144: #define        AC97_REG_SURROUND_DAC_RATE      0x2e
                    145: #define        AC97_REG_PCM_DAC_RATE           0x30
                    146: #define        AC97_REG_PCM_ADC_RATE           0x32
                    147: #define        AC97_REG_MIC_ADC_RATE           0x34
                    148: #define        AC97_REG_CENTER_LFE_VOLUME      0x36
                    149: #define        AC97_REG_SURROUND_VOLUME        0x38
                    150: #define        AC97_REG_SPDIF_CTRL             0x3a
                    151: #define        AC97_REG_SPDIF_CTRL_BITS        "\02\01pro\02/audio\03copy\04pre\014l\017drs\020valid"
                    152:
                    153: #define        AC97_REG_VENDOR_ID1             0x7c
                    154: #define        AC97_REG_VENDOR_ID2             0x7e
                    155: #define        AC97_VENDOR_ID_MASK             0xffffff00
                    156:
                    157: /* Analog Devices codec specific data */
                    158: #define AC97_AD_REG_MISC       0x76
                    159: #define AC97_AD_MISC_MBG0      0x0001  /* 0 */
                    160: #define AC97_AD_MISC_MBG1      0x0002  /* 1 */
                    161: #define AC97_AD_MISC_VREFD     0x0004  /* 2 */
                    162: #define AC97_AD_MISC_VREFH     0x0008  /* 3 */
                    163: #define AC97_AD_MISC_SRU       0x0010  /* 4 */
                    164: #define AC97_AD_MISC_LOSEL     0x0020  /* 5 */
                    165: #define AC97_AD_MISC_2CMIC     0x0040  /* 6 */
                    166: #define AC97_AD_MISC_SPRD      0x0080  /* 7 */
                    167: #define AC97_AD_MISC_DMIX0     0x0100  /* 8 */
                    168: #define AC97_AD_MISC_DMIX1     0x0200  /* 9 */
                    169: #define AC97_AD_MISC_HPSEL     0x0400  /*10 */
                    170: #define AC97_AD_MISC_CLDIS     0x0800  /*11 */
                    171: #define AC97_AD_MISC_LODIS     0x1000  /*12 */
                    172: #define AC97_AD_MISC_MSPLT     0x2000  /*13 */
                    173: #define AC97_AD_MISC_AC97NC    0x4000  /*14 */
                    174: #define AC97_AD_MISC_DACZ      0x8000  /*15 */
                    175:
                    176: /* Avance Logic codec specific data*/
                    177: #define        AC97_AV_REG_MULTICH     0x6a
                    178: #define        AC97_AV_MULTICH_MAGIC   0x8000
                    179: #define        AC97_AV_REG_MISC        0x7a
                    180: #define        AC97_AV_MISC_SPDIFEN    0x0002
                    181: #define        AC97_AV_MISC_VREFDIS    0x1000
                    182:
                    183: /* Conexant codec specific data */
                    184: #define AC97_CX_REG_MISC       0x5c
                    185: #define AC97_CX_PCM            0x00
                    186: #define AC97_CX_AC3            0x02
                    187: #define AC97_CX_MASK           0x03
                    188: #define AC97_CX_COPYRIGHT      0x04
                    189: #define AC97_CX_SPDIFEN                0x08

CVSweb