[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     ! 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