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

📄 wm9712.c

📁 pxa270平台 windows mobile 5.2 wm9713 触摸屏+音频驱动
💻 C
📖 第 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: WM9712.c 3998 2006-10-03 13:00:37Z fb $
 *
 * This file specifies the per-device specific behaviour for the WM9712.
 *
 * Warning:
 *  This driver is specifically written for Wolfson Codecs. It is not a 
 *  general CODEC device driver.
 *
 * --------------------------------------------------------------------------*/

/*
 * Include files
 */
#include "WMCommon.h"
#include "WM97Power.h"
#include "WMPlatformACLink.h"
#include "WMAuxADC.h"
#include "WMTouch.h"
#include "WMTouchDefs.h"
#include "WMGPIO.h"
#include "WM97Audio.h"
#include "WM97AudioPaths.h"

#if WM9712_FAMILY

/*
 * Global definitions
 */

#if WM_USE_SHADOW_REGISTERS
/*
 * Shadow registers
 */
static const WM_SHADOW_REGISTERS s_WM9712Shadowed[] =
{
    { WM97_MASTER_VOLUME,           0x8000 },   /* 0x02 */
    { WM97_HEADPHONE,               0x8000 },   /* 0x04 */
    { WM97_MASTER_VOLUME_MONO,      0x8000 },   /* 0x06 */
    { WM97_DAC_TONE_CONTROL,        0x0F0F },   /* 0x08 */
    { WM97_PCBEEP,                  0xAAA0 },   /* 0x0A */
    { WM97_PHONE_VOLUME,            0xC008 },   /* 0x0C */
    { WM97_MIC_VOLUME,              0x6808 },   /* 0x0E */
    { WM97_LINEIN_VOLUME,           0xE808 },   /* 0x10 */
    { WM97_AUXDAC_VOLUME,           0xAAA0 },   /* 0x12 */
    { WM97_SIDETONE_VOLUME,         0xAD00 },   /* 0x14 */
    { WM9712_OUT3_VOLUME,           0x8000 },   /* 0x16 */
    { WM97_DAC_VOLUME,              0xE808 },   /* 0x18 */
    { WM97_REC_SELECT,              0x3000 },   /* 0x1A */
    { WM97_REC_GAIN,                0x8000 },   /* 0x1C */
    { WM97_GENERAL,                 0x0000 },   /* 0x20 */
    { WM97_3D_CONTROL,              0x0000 },   /* 0x22 */
    { WM97_GPIO_PIN_CONFIG,         0xF83E },   /* 0x4C */
    { WM97_GPIO_PIN_POLARITY,       0xFFFF },   /* 0x4E */
    { WM97_GPIO_PIN_STICKY,         0x0000 },   /* 0x50 */
    { WM97_GPIO_PIN_WAKEUP,         0x0000 },   /* 0x52 */
    { WM97_GPIO_PIN_ASSIGN,         0xF83E },   /* 0x56 */
    { WM97_ALC_CONTROL,             0xB032 },   /* 0x60 */
    { WM97_ALC_NOISE_GATE_CONTROL,  0x3E00 },   /* 0x62 */
    { WM97_AUXDAC_INPUT_CONTROL,    0x0000 }    /* 0x64 */
};
#endif /* WM_USE_SHADOW_REGISTERS */

/*
 * A table for the ADCs
 * 
 * Values are ADC select register value, ADC data register value
 * (or WM_AUXADC_INVALID for both if that AuxADC input is not
 * supported), and whether it requires pen down.
 */
static const WM_AUXADC_DETAILS s_adcDetailsWM9712[] =
{
    { WM_AUXADC_INVALID,    WM_AUXADC_INVALID,    FALSE }, /* WM_ADC_UNKNOWN */
    { WM_AUXADC_X_COORD,    WM_AUXADC_X_COORD,      TRUE },     /* WM_ADC_X_COORD */
    { WM_AUXADC_Y_COORD,    WM_AUXADC_Y_COORD,      TRUE },     /* WM_ADC_Y_COORD */
    { WM_AUXADC_INVALID,    WM_AUXADC_INVALID,      FALSE },    /* WM_ADC_TOUCH */
    { WM_AUXADC_PRESSURE,   WM_AUXADC_PRESSURE,     TRUE },     /* WM_ADC_PRESSURE */
    { WM_AUXADC_BMON,       WM_AUXADC_BMON,         FALSE },    /* WM_ADC_BMON */
    { WM_AUXADC_INVALID,    WM_AUXADC_INVALID,      FALSE },    /* WM_ADC_AUXADC */
    { WM_AUXADC_INVALID,    WM_AUXADC_INVALID,      FALSE },    /* WM_ADC_PHONE */
    { WM_AUXADC_INVALID,    WM_AUXADC_INVALID,      FALSE },    /* WM_ADC_PCBEEP */
    { WM_AUXADC_COMP1,      WM_AUXADC_COMP1,        FALSE },    /* WM_ADC_COMP1 */
    { WM_AUXADC_COMP2,      WM_AUXADC_COMP2,        FALSE },    /* WM_ADC_COMP2 */
    { WM_AUXADC_WIPER,      WM_AUXADC_WIPER,        FALSE },    /* WM_ADC_WIPER */
    { WM_AUXADC_COMP1,      WM_AUXADC_COMP1,        FALSE },    /* WM_ADC_AUX1 */
    { WM_AUXADC_COMP2,      WM_AUXADC_COMP2,        FALSE },    /* WM_ADC_AUX2 */
    { WM_AUXADC_AUX3,       WM_AUXADC_AUX3,         FALSE },    /* WM_ADC_AUX3 */
    { WM_AUXADC_WIPER,      WM_AUXADC_WIPER,        FALSE }     /* WM_ADC_AUX4 */
};

/*
 * Tables for the record sources
 */

static WM_RECSOURCE_DETAILS s_WM9712RecordSourceDetails =
{
    WM97_REC_SELECT, 
    WM97_RECSRCL_MASK,
    WM97_RECSRCR_MASK,
    WM97_RECSRC_MASK
};

static const WM_RECSOURCE_SIGNALS s_WM9712RecordSourceSignals[] =
{
    { WM_AUDIO_MIC1,            WM97_RECSRCL_MIC,       WM97_RECSRCR_MIC },
    { WM_AUDIO_MIC2,            WM97_RECSRCL_MIC,       WM97_RECSRCR_MIC },
    { WM_AUDIO_SPEAKER,         WM97_RECSRCL_LINEOUT,   WM97_RECSRCR_LINEOUT },
    { WM_AUDIO_SPEAKER_MIXER,   WM97_RECSRCL_LINEOUT,   WM97_RECSRCR_LINEOUT },
    { WM_AUDIO_LINEIN,          WM97_RECSRCL_LINEIN,    WM97_RECSRCR_LINEIN },
    { WM_AUDIO_HEADPHONE,       WM97_RECSRCL_HEADPHONE, WM97_RECSRCR_HEADPHONE },
    { WM_AUDIO_HEADPHONE_MIXER, WM97_RECSRCL_HEADPHONE, WM97_RECSRCR_HEADPHONE },
    { WM_AUDIO_PHONEOUT,        WM97_RECSRCL_PHONEMIX,  WM97_RECSRCR_PHONEMIX },
    { WM_AUDIO_PHONE_MIXER,     WM97_RECSRCL_PHONEMIX,  WM97_RECSRCR_PHONEMIX },
    { WM_AUDIO_MONOOUT,         WM97_RECSRCL_PHONEMIX,  WM97_RECSRCR_PHONEMIX },
    { WM_AUDIO_PHONEIN,         WM97_RECSRCL_PHONE,     WM97_RECSRCR_PHONE }
};

/*
 * A table for the signals
 */
static const WM_SIGNAL_DETAILS s_WM9712Signals[] =
{
    /* Inputs */
    WM_SIG_AC97_STEREO_IN_MUTE      ( WM_AUDIO_LINEIN,              WM_SIG_ANALOGUE_INPUT,    WM97_LINEIN_VOLUME, WM97_LINEIN_MUTE ),
    WM_SIG_AC97_MONO_IN_MUTE        ( WM_AUDIO_PHONEIN,             WM_SIG_ANALOGUE_INPUT,    WM97_PHONE_VOLUME,  WM9712_PHONE_MUTE,  WM_SIG_SHIFT( 0 ) ),
    WM_SIG_AC97_MONO_IN_MUTE        ( WM_AUDIO_MIC1,                WM_SIG_ANALOGUE_INPUT,    WM97_MIC_VOLUME,    WM9712_MIC1_MUTE,   WM_SIG_SHIFT( 0 ) ),
    WM_SIG_AC97_MONO_IN_MUTE        ( WM_AUDIO_MIC2,                WM_SIG_ANALOGUE_INPUT,    WM97_MIC_VOLUME,    WM9712_MIC2_MUTE,   WM_SIG_SHIFT( 0 ) ),
    WM_SIG_AC97_PCBEEP_MULTIPLE     ( WM97_PCBEEP ),
    /* DACs are inputs to the analogue domain - i.e. they generate analogue signals */
    WM_SIG_AC97_STEREO_IN_MUTE      ( WM_AUDIO_HIFI_DAC,            WM_SIG_DAC,               WM97_DAC_VOLUME,    WM97_DAC_MUTE ),
    WM_SIG_AC97_MULTIPLE            ( WM_AUDIO_MONO_DAC,            WM_SIG_DAC | WM_CHANNEL_MONO, WM97_AUXDAC_VOLUME ),

    /* Outputs */
    WM_SIG_AC97_STEREO_OUT          ( WM_AUDIO_SPEAKER,             WM_SIG_ANALOGUE_OUTPUT,   WM97_SPEAKER_VOLUME ),
    WM_SIG_AC97_STEREO_OUT          ( WM_AUDIO_HEADPHONE,           WM_SIG_ANALOGUE_OUTPUT,   WM97_HEADPHONE ),
    WM_SIG_AC97_MONO_OUT            ( WM_AUDIO_MONOOUT,             WM_SIG_ANALOGUE_OUTPUT,   WM97_MASTER_VOLUME_MONO,    WM_SIG_SHIFT( 0 ) ),
    WM_SIG_AC97_MONO_OUT            ( WM_AUDIO_OUT3,                WM_SIG_ANALOGUE_OUTPUT,   WM9712_OUT3_VOLUME,         WM_SIG_SHIFT( 0 ) ),
    /* ADCs are outputs from the analogue domain - i.e. they receive analogue signals */
    WM_SIG_AC97_STANDARD_ADC_STEREO_ZC  ( WM97_REC_GAIN ),
    WM_SIG_AC97_EXTENDED_ADC_STEREO     ( WM97_REC_GAIN ),
};

/*
 * The microphone select details.
 */
static const WM_MIC_CONTROL_DETAILS s_WM9712MicControl[] =
{
    { 
        WM_AUDIO_MIC1,                                      /* Mic Id             */
        WM97_MIC_VOLUME,                                    /* Mic select Reg     */
        WM9712_MIC_SEL_MIC1,                                /* Mic select Bits    */
        WM9712_MIC_SEL_MASK,                                /* Mic select Mask    */
        (WM_AUDIO_MIC_REC_PGA | WM_AUDIO_MIC_REC_ALC),      /* Mic info  Flags    */
        WM_REG_INVALID,                                     /* Rec Boost Reg      */
        0,                                                  /* Rec Boost Bit      */
        WM97_REC_GAIN,                                      /* Rec PGA Reg        */
        WM97_SET_ADC_EXTENDED_HIGH,                         /* Rec PGA Val        */
        WM97_ALC_CONTROL,                                   /* ALC Control Reg    */
        WM97_ALC_CTRL_VOICE,                                /* ALC Control Val    */
        WM97_ALC_NOISE_GATE_CONTROL,                        /* ALC Noise Gate Reg */
        (WM97_ALC_ALCSEL_STEREO | WM97_ALC_NOISE_GATE_VOICE), /* ALC Noise Gate Val */

⌨️ 快捷键说明

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