⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wmchipdef.h

📁 pxa270平台 windows mobile 5.2 wm9713 触摸屏+音频驱动
💻 H
📖 第 1 页 / 共 2 页
字号:
/*-----------------------------------------------------------------------------
 * Copyright (c) Wolfson Microelectronics plc.  All rights reserved.
 *
 * This software as well as any related documentation is furnished under 
 * license and may only be used or copied in accordance with the terms of the 
 * license. The information in this file is furnished for informational use 
 * only, is subject to change without notice, and should not be construed as 
 * a commitment by Wolfson Microelectronics plc. Wolfson Microelectronics plc
 * assumes no responsibility or liability for any errors or inaccuracies that
 * may appear in this document or any software that may be provided in
 * association with this document. 
 *
 * Except as permitted by such license, no part of this document may be 
 * reproduced, stored in a retrieval system, or transmitted in any form or by 
 * any means without the express written consent of Wolfson Microelectronics plc. 
 *
 * $Id: WMChipDef.h 3998 2006-10-03 13:00:37Z fb $
 *
 * This file defines the information held about the different Wolfson devices.
 *
 * Warning:
 *  This driver is specifically written for Wolfson Codecs. It is not a 
 *  general CODEC device driver.
 *
 *---------------------------------------------------------------------------*/
#ifndef __WMCHIPDEF_H__
#define __WMCHIPDEF_H__

/*
 * Include files
 */
#include "WMTypes.h"
#include "WMAudio.h"
#include "WMAudioInternal.h"
#include "WMGPIO.h"
#include "WMAuxADC.h"
#include "WMPower.h"
#include "WMProfiles.h"

/*
 * Definitions
 */

/* 
 * Shadow Registers
 */
typedef struct tagWM_SHADOW_REGISTERS
{
    WM_REGTYPE      reg;
    WM_REGVAL       defaultValue;
} WM_SHADOW_REGISTERS;

/*
 * A description of each ADC
 */
typedef struct tagWM_AUXADC_DETAILS
{
    WM_REGVAL       adcSel;
    WM_REGVAL       adcAdr;
    short int       needPenDown;
} WM_AUXADC_DETAILS;

#define END_OF_REGISTERS    ((WM_REGTYPE)-1)

/*
 * The record source signals.
 */
typedef struct tagWM_RECSOURCE_SIGNALS
{
    WM_AUDIO_SIGNAL signal;
    WM_REGVAL       leftVal;
    WM_REGVAL       rightVal;
} WM_RECSOURCE_SIGNALS;

/*
 * The record source register details.
 */
typedef struct tagWM_RECSOURCE_DETAILS
{
    WM_REGTYPE      reg;
    WM_REGVAL       leftMask;
    WM_REGVAL       rightMask;
    WM_REGVAL       stereoMask;
} WM_RECSOURCE_DETAILS;

/*
 * Definitions of how the register controls a given signal.
 */
typedef unsigned int WM_SIGNAL_FLAGS;

#define WM_SIG_CHANNEL_MASK             WM_CHANNEL_ALL      /* 0xFF */

#define WM_SIG_TYPE_MASK                0x00000F00
#define WM_SIG_ANALOGUE_INPUT           0x00000100
#define WM_SIG_ANALOGUE_OUTPUT          0x00000200
#define WM_SIG_DAC            			0x00000300
#define WM_SIG_ADC           			0x00000400
#define WM_SIG_MIXER                    0x00000500

#define WM_SIG_HAS_UPDATE               0x00010000
#define WM_SIG_HAS_BOTH                 0x00020000
#define WM_SIG_VOLUME_MUTE              0x00040000  /* Special volume value mutes */

/*
 * Extra definitions for the signal details.
 */
#define WM_SIG_NO_ZERO_CROSS            0x0000
#define WM_SIG_NO_SPECIAL               0x0000

#define WM_SIG_SHIFT( _n )              _n

/*
 * The signal details.  Note there is one of these per signal per channel, so
 * a stereo signal will have both WM_CHANNEL_LEFT and WM_CHANNEL_RIGHT.
 */
typedef struct tagWM_SIGNAL_DETAILS
{
    WM_AUDIO_SIGNAL signal;		/* Signal in question */
    WM_SIGNAL_FLAGS flags;		/* Flags describing the signal, including the channel */
    WM_REGTYPE      reg;		/* Register containing the volume control, or WM_REG_INVALID if no volume control */
    unsigned int    shift;		/* Offset of start of field in bits */
    WM_REGVAL       mask;		/* Mask for field (already shifted) */
    WM_REGVAL       minval;		/* Lowest field value - may be highest volume */
    WM_REGVAL       maxval;		/* Highest field value - may be lowest volume */
    signed short    zerodB;		/* Value corresponding to zero dB (may be out of range in a few cases) */
    int             step;		/* No of 1/16dB between values */
    WM_REGTYPE      muteReg;	/* Register containing the mute, or WM_REG_INVALID if no mute */
    WM_REGVAL       mute;	    /* Register value corresponding to mute */
    WM_REGVAL       muteMask;   /* Register mask corresponding to mute for volume mutes */
    WM_REGVAL       zeroCross;	/* Register value corresponding to zero-cross, or WM_SIG_NO_ZERO_CROSS if not supported */
    WM_REGVAL       special;	/* Register value corresponding to BOTH or UPDATE bit, or WM_SIG_NO_SPECIAL */
} WM_SIGNAL_DETAILS;

/*
 * Shortcuts for signals which are supported but don't have volume control.
 */
#define WM_SIG_NO_VOLUME_MUTE( _signal, _flags, _muteReg, _mute )               \
    { _signal, _flags, WM_REG_INVALID, 0, 0, 0, 0, 0, 0,                        \
      _muteReg, _mute, _mute, WM_SIG_NO_ZERO_CROSS, WM_SIG_NO_SPECIAL           \
    }
#define WM_SIG_NO_VOLUME( _signal, _flags )                                     \
    WM_SIG_NO_VOLUME_MUTE( _signal, _flags, WM_REG_INVALID, 0 )

/*
 * Shortcuts for AC'97 outputs
 */
#define WM_SIG_AC97_BASE_OUT_MUTE_ZC( _signal, _flags, _reg, _shift, _muteReg, _mute, _zeroCross )        \
    { _signal,  _flags,   _reg,   _shift,     (WM97_VOLUME_MASK << _shift),     \
      WM97_MIN_OUTPUT_ATTENUATION, WM97_MAX_OUTPUT_ATTENUATION, WM97_OUTVOL_0DB,\
      WM_SIGNAL_LEVEL(-1.5),                                                    \
      _muteReg, _mute, _mute,                                                   \
      _zeroCross, WM_SIG_NO_SPECIAL                                             \
    }

#define WM_SIG_AC97_BASE_OUT_MUTE( _signal, _flags, _reg, _shift, _muteReg, _mute )        \
    WM_SIG_AC97_BASE_OUT_MUTE_ZC( _signal, _flags, _reg, _shift, _muteReg, _mute, WM97_ZERO_CROSS ) 

#define WM_SIG_AC97_BASE_OUT_MUTE_2ZC( _signal, _flags, _reg, _shift, _muteReg, _mute )        \
    WM_SIG_AC97_BASE_OUT_MUTE_ZC( _signal, _flags, _reg, _shift, _muteReg, _mute, WM9713_ZERO_CROSS_MONO << _shift ) 

#define WM_SIG_AC97_BASE_OUT( _signal, _flags, _reg, _shift )                   \
	WM_SIG_AC97_BASE_OUT_MUTE( _signal, _flags, _reg, _shift, _reg, WM97_STANDARD_MUTE )

#define WM_SIG_AC97_MONO_OUT( _signal, _flags, _reg, _shift )                   \
    WM_SIG_AC97_BASE_OUT( _signal, _flags | WM_CHANNEL_MONO, _reg, _shift )

#define WM_SIG_AC97_LEFT_OUT( _signal, _flags, _reg )         \
    WM_SIG_AC97_BASE_OUT( _signal, _flags | WM_CHANNEL_LEFT, _reg, WM97_LEFT_VOLUME_SHIFT )

#define WM_SIG_AC97_LEFT_OUT_STEREO_MUTE( _signal, _flags, _reg )         \
    WM_SIG_AC97_BASE_OUT_MUTE_2ZC( _signal, _flags | WM_CHANNEL_LEFT, _reg, WM97_LEFT_VOLUME_SHIFT, _reg, WM9713_MUTE_LEFT_MASK )

#define WM_SIG_AC97_RIGHT_OUT( _signal, _flags, _reg )        \
    WM_SIG_AC97_BASE_OUT( _signal, _flags | WM_CHANNEL_RIGHT, _reg, WM97_RIGHT_VOLUME_SHIFT )

#define WM_SIG_AC97_RIGHT_OUT_STEREO_MUTE( _signal, _flags, _reg )        \
    WM_SIG_AC97_BASE_OUT_MUTE_2ZC( _signal, _flags | WM_CHANNEL_RIGHT, _reg, WM97_RIGHT_VOLUME_SHIFT, _reg, WM9713_MUTE_RIGHT_MASK )

#define WM_SIG_AC97_STEREO_OUT( _signal, _flags, _reg )       \
    WM_SIG_AC97_LEFT_OUT( _signal, _flags, _reg ),            \
    WM_SIG_AC97_RIGHT_OUT( _signal, _flags, _reg )

#define WM_SIG_AC97_STEREO_OUT_STEREO_MUTE( _signal, _flags, _reg )       \
    WM_SIG_AC97_LEFT_OUT_STEREO_MUTE( _signal, _flags, _reg ),            \
    WM_SIG_AC97_RIGHT_OUT_STEREO_MUTE( _signal, _flags, _reg )

/*
 * Shortcuts for AC'97 inputs
 */
#define WM_SIG_AC97_BASE_IN_REG_MUTE( _signal, _flags, _reg, _muteReg, _mute, _shift )\
    { _signal, _flags, _reg, _shift, (WM97_INPUT_VOLUME_MASK << _shift),              \
      WM97_MAX_INPUT_GAIN, WM97_MIN_INPUT_GAIN, WM97_VOL_IN_0DB,                \
      WM_SIGNAL_LEVEL(-1.5),                                                    \
      _muteReg, _mute, _mute, WM_SIG_NO_ZERO_CROSS, WM_SIG_NO_SPECIAL           \
    }
#define WM_SIG_AC97_BASE_IN_MUTE( _signal, _flags, _reg, _mute, _shift )        \
    WM_SIG_AC97_BASE_IN_REG_MUTE( _signal, _flags, _reg, _reg, _mute, _shift )
    
#define WM_SIG_AC97_MONO_IN_REG_MUTE( _signal, _flags, _reg, _muteReg, _mute, _shift )\
    WM_SIG_AC97_BASE_IN_REG_MUTE( _signal, _flags | WM_CHANNEL_MONO, _reg, _muteReg, _mute, _shift )
#define WM_SIG_AC97_MONO_IN_MUTE( _signal, _flags, _reg, _mute, _shift )        \
    WM_SIG_AC97_MONO_IN_REG_MUTE( _signal, _flags, _reg, _reg, _mute, _shift )

#define WM_SIG_AC97_STEREO_IN_MUTE( _signal, _flags, _reg, _mute )              \
    WM_SIG_AC97_BASE_IN_MUTE( _signal, _flags | WM_CHANNEL_LEFT,  _reg, _mute, WM97_LEFT_VOLUME_SHIFT ),\
    WM_SIG_AC97_BASE_IN_MUTE( _signal, _flags | WM_CHANNEL_RIGHT, _reg, _mute, WM97_RIGHT_VOLUME_SHIFT )
    
#define WM_SIG_AC97_BASE_IN( _signal, _flags, _reg, _shift )                    \
    WM_SIG_AC97_BASE_IN_MUTE( _signal, _flags, _reg, WM97_STANDARD_MUTE, _shift )

#define WM_SIG_AC97_MONO_IN( _signal, _flags, _reg, _shift )                    \
    WM_SIG_AC97_MONO_IN_MUTE( _signal, _flags, _reg, WM97_STANDARD_MUTE, _shift )

#define WM_SIG_AC97_STEREO_IN( _signal, _flags, _reg )                          \
    WM_SIG_AC97_BASE_IN( _signal, _flags | WM_CHANNEL_LEFT,  _reg, WM97_LEFT_VOLUME_SHIFT ),\
    WM_SIG_AC97_BASE_IN( _signal, _flags | WM_CHANNEL_RIGHT, _reg, WM97_RIGHT_VOLUME_SHIFT )

#define WM_SIG_AC97_MULTIPLE_BASE( _signal, _flags, _reg, _shift )              \
    { _signal,  _flags,                                                         \
      _reg,     _shift,     (WM97_PGA_VOL_MASK << _shift),                      \
      WM97_PGA_VOL_PLUS6DB,  WM97_PGA_VOL_MINUS15DB, WM97_PGA_VOL_0DB,          \
      WM_SIGNAL_LEVEL(-3),                                                      \
      _reg, (WM97_PGA_VOL_MUTE << _shift), (WM97_PGA_VOL_MUTE << _shift),       \
      WM_SIG_NO_ZERO_CROSS,   WM_SIG_NO_SPECIAL                                 \
    }
    
#define WM_SIG_AC97_MULTIPLE( _signal, _flags, _reg )                           \
    WM_SIG_AC97_MULTIPLE_BASE( _signal, _flags, _reg, 4 ),                      \
    WM_SIG_AC97_MULTIPLE_BASE( _signal, _flags, _reg, 8 ),                      \
    WM_SIG_AC97_MULTIPLE_BASE( _signal, _flags, _reg, 12 )
    
#define WM_SIG_AC97_PCBEEP_STD( _reg )                                          \
    { WM_AUDIO_PCBEEP,  WM_SIG_ANALOGUE_INPUT | WM_CHANNEL_MONO,                \
      _reg,     WM97_PCBEEP_OFFSET,         WM97_PCBEEP_MASK,                   \
      WM97_MAX_PCBEEP_STANDARD, WM97_MIN_PCBEEP_STANDARD,                       \
      WM97_PCBEEP_0DB_STANDARD,  WM_SIGNAL_LEVEL(-3),                           \
      _reg, WM97_STANDARD_MUTE, WM97_STANDARD_MUTE,                             \
     WM_SIG_NO_ZERO_CROSS,   WM_SIG_NO_SPECIAL\
    }
    
#define WM_SIG_AC97_PCBEEP_MULTIPLE_BASE( _reg, _shift )                        \
    WM_SIG_AC97_MULTIPLE_BASE( WM_AUDIO_PCBEEP,  WM_SIG_ANALOGUE_INPUT | WM_CHANNEL_MONO, _reg, _shift )
    
#define WM_SIG_AC97_PCBEEP_MULTIPLE( _reg )                                     \
    WM_SIG_AC97_PCBEEP_MULTIPLE_BASE( _reg, 4 ),                                \
    WM_SIG_AC97_PCBEEP_MULTIPLE_BASE( _reg, 8 ),                                \
    WM_SIG_AC97_PCBEEP_MULTIPLE_BASE( _reg, 12 )

#define WM_SIG_AC97_STANDARD_ADC_BASE( _flags, _reg, _shift, _zeroCross )       \
{   WM_AUDIO_HIFI_ADC, _flags, _reg, _shift,                                    \
    ( WM97_MAX_STANDARD_ADC_GAIN << _shift ), WM97_MIN_STANDARD_ADC_GAIN,       \
    WM97_MAX_STANDARD_ADC_GAIN, WM97_STANDARD_ADC_0DB, WM_SIGNAL_LEVEL(-1.5),   \
    _reg, WM97_STANDARD_MUTE, WM97_STANDARD_MUTE, _zeroCross, WM_SIG_NO_SPECIAL \
}

#define  WM_SIG_AC97_STANDARD_ADC_STEREO( _reg )                                \
    WM_SIG_AC97_STANDARD_ADC_BASE( WM_SIG_ADC | WM_CHANNEL_LEFT,  _reg,         \
                                   WM97_LEFT_VOLUME_SHIFT,                      \
                                   WM_SIG_NO_ZERO_CROSS ),                      \
    WM_SIG_AC97_STANDARD_ADC_BASE( WM_SIG_ADC | WM_CHANNEL_RIGHT, _reg,         \
                                   WM97_RIGHT_VOLUME_SHIFT,                     \
                                   WM_SIG_NO_ZERO_CROSS )

#define  WM_SIG_AC97_STANDARD_ADC_STEREO_ZC( _reg )                             \
    WM_SIG_AC97_STANDARD_ADC_BASE( WM_SIG_ADC | WM_CHANNEL_LEFT,  _reg,         \
                                   WM97_LEFT_VOLUME_SHIFT,                      \
                                   WM97_ZERO_CROSS ),                           \
    WM_SIG_AC97_STANDARD_ADC_BASE( WM_SIG_ADC | WM_CHANNEL_RIGHT, _reg,         \
                                   WM97_RIGHT_VOLUME_SHIFT,                     \
                                   WM97_ZERO_CROSS )

#define WM_SIG_AC97_EXTENDED_ADC_BASE( _flags, _reg, _shift )                   \
{   WM_AUDIO_HIFI_ADC_EXTENDED, _flags, _reg, _shift,                           \
    ( WM97_MAX_EXTENDED_ADC_GAIN << _shift ),                                   \
    WM97_MIN_EXTENDED_ADC_GAIN, WM97_MAX_EXTENDED_ADC_GAIN,                     \
    WM97_EXTENDED_ADC_0DB, WM_SIGNAL_LEVEL(-0.75), _reg, WM97_STANDARD_MUTE,    \
    WM97_STANDARD_MUTE, WM97_ZERO_CROSS, WM_SIG_NO_SPECIAL                      \
}

#define  WM_SIG_AC97_EXTENDED_ADC_STEREO( _reg )                                \
    WM_SIG_AC97_EXTENDED_ADC_BASE( WM_SIG_ADC | WM_CHANNEL_LEFT,  _reg,         \
                                   WM97_LEFT_VOLUME_SHIFT ),                    \
    WM_SIG_AC97_EXTENDED_ADC_BASE( WM_SIG_ADC | WM_CHANNEL_RIGHT, _reg,         \
                                   WM97_RIGHT_VOLUME_SHIFT )

/*
 * The microphone control details.
 */
typedef struct tagWM_MIC_CONTROL_DETAILS
{
    WM_AUDIO_SIGNAL  mic;
    WM_REGTYPE       micSelectReg;
    WM_REGVAL        micSelectBits;
    WM_REGVAL        micSelectMask;
    WM_MIC_INFO      micInfoFlags;
    WM_REGTYPE       recBoostReg;       /* Record path boost Register */
    WM_REGVAL        recBoostBit;       /* Record path boost bit  */
    WM_REGTYPE       recPGAReg;
    WM_REGVAL        recPGAVal;
    WM_REGTYPE       alcControlReg;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -