/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License (the "License").
* You may not use this file except in compliance with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/*
*/
#ifndef _SYS_AC97_H
#define _SYS_AC97_H
#ifdef __cplusplus
extern "C" {
#endif
#ifdef _KERNEL
/*
* This header file describes the AC-97 Codec register set. See the
* spec for a detailed description of each register.
*/
/*
* Defines for the registers.
*/
/* Reset Register Index 00h */
/* Master Volume Register Index 02h */
/* Headphone Volume Register Index 04h - Optional */
/* Mono Master Volume Register Index 06h - Optional */
/* Master Tone Control Register Index 08h - Optional */
/* PC Beep Register Index 0ah - Optional */
/* Phone Volume Register Index 0ch - Optional */
/* Mic Volume Register Index 0eh */
/* Line In Volume Register Index 10h */
/* CD Volume Register Index 12h */
/* Video Volume Register Index 14h - Optional */
/* Aux Volume Register Index 16h - Optional */
/* PCM Out Volume Register Index 18h */
/* Record Select Control Register Index 1ah */
/* Record Gain Register Index 1ch */
/* Record Gain Mic Register Index 1eh - Optional */
/* General Purpose Register Index 20h - Optional */
/* 3D Control Regsiter Index 22h - Optional */
/* Audio Interrupt and Paging Mechanism Index 24h - r2.3 */
/* Powerdown Control Status Register Index 26h */
/* Extended Audio Register Index 28h - Optional */
/* Extended Audio Status and Control Register Index 2ah - Optional */
/* Extended Front DAC Rate Register 2ch - Optional */
/* Extended Surround DAC Rate Register 2eh - Optional */
/* Extended LFE DAC Rate Register 30h - Optional */
/* Extended LR DAC Rate Register 32h - Optional */
/* Extended Mic ADC Rate Register 34h - Optional */
/* Extended Center and LFE Volume Register 36h - Optional */
/* Extended Left and Right Surround Volume Register 38h - Optional */
/*
* Modem only registers from 3ch - 58h.
*/
/* Extended Modem ID Register 3ch - Optional */
/* Extended Modem Status and Control Register 3eh - Optional */
/* Extended Modem Handset Sample Rate Register 44h - Optional */
/* Extended Modem GPIO Pin Configuration Register 4ch - Optional */
/* Extended Modem GPIO Pin Polarity Register 4eh - Optional */
/* Extended Modem GPIO Pin Sticky Register 50h - Optional */
/* Extended Modem GPIO Pin Wake-up Mask Register 52h - Optional */
/* Extended Modem GPIO Pin Status Mask Register 54h - Optional */
/* Extended Modem AFE Status and Control Register 56h - Optional */
/* Vendor Reserved Registers 5ah - 7ah - Optional */
/*
* Note that 60h - 6eh is also defined as the extended codec page area in
* AC'97 r2.3.
*/
/*
* Page 01 Extended Codec Registers
*/
/* Vendor ID1 Register 7ch */
/* Vendor ID2 Register 7eh */
/*
* Property names used by AC97. We should probably have a better way
* of dealing with some of these. (LINEIN_FUNC and MIC_FUNC should really
*/
/*
* Known Codec vendors.
*/
/*
* Known Codec IDs.
*/
/*
* Functions for drivers to interact with the common ac97 module.
*/
/*
* Old style initialization. The driver simply calls ac97_alloc()
* followed by ac97_init(). These interfaces should not be used in
* new drivers.
*/
/*
* New style initialization. The driver will call ac97_allocate(),
* then it can call ac97_register_controls() to register controls.
* Or, if it doesn't want all controls registered, it can find
* controls with ac97_find_control(), and register them individually
* with ac97_register_control(). ac97_alloc()
*
* Note that adjusting the set of controls should only be performed
* while the driver is single threaded, during attach or detach
* processing. The AC'97 framework does not provide any locks
* surrounding its internal list of controls. Note however that
* changes to the controls made from within the framework (e.g. by
* someone accessing the control via the audio framework) are safe.
*/
void *);
void ac97_probe_controls(ac97_t *);
void ac97_register_controls(ac97_t *);
void ac97_unregister_controls(ac97_t *);
void ac97_control_register(ac97_ctrl_t *);
void ac97_control_unregister(ac97_ctrl_t *);
void ac97_control_remove(ac97_ctrl_t *);
const char *ac97_control_name(ac97_ctrl_t *);
/*
* Bits common to both new style and old style initialization.
*/
void ac97_reset(ac97_t *);
int ac97_num_channels(ac97_t *);
#endif /* _KERNEL */
#ifdef __cplusplus
}
#endif
#endif /* _SYS_AC97_H */