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

📄 wm8731.c

📁 pxa270平台 windows mobile 5.2 wm9713 触摸屏+音频驱动
💻 C
📖 第 1 页 / 共 2 页
字号:
    WM_PROFILE_ENTRY( "Mic1 record", WM_CHIP_WM8731, s_MicRecordActions ),
    WM_PROFILE_ENTRY( "Line record", WM_CHIP_WM8731, s_LineRecordActions ),
    WM_PROFILE_ENTRY( "Mic off", WM_CHIP_WM8731, s_StopRecordActions ),
    WM_PROFILE_ENTRY( "Mic1 off", WM_CHIP_WM8731, s_StopRecordActions ),
    WM_PROFILE_ENTRY( "Line off", WM_CHIP_WM8731, s_StopRecordActions ),
    WM_PROFILE_ENTRY( "Stop playback", WM_CHIP_WM8731, s_StopPlaybackActions ),
    WM_PROFILE_ENTRY( "Stop HiFi playback", WM_CHIP_WM8731, s_StopPlaybackActions ),
    WM_PROFILE_ENTRY( "Stop record", WM_CHIP_WM8731, s_StopRecordActions ),
    WM_PROFILE_ENTRY( "Stop HiFi record", WM_CHIP_WM8731, s_StopRecordActions ),
    WM_PROFILE_ENTRY( "Standby", WM_CHIP_WM8731, s_StandbyActions ),
    WM_PROFILE_ENTRY( "Low power", WM_CHIP_WM8731, s_PowerdownActions )
};

static const WM_PROFILE s_WM8711Profiles[] = 
{
    WM_PROFILE_ENTRY( "HiFi playback", WM_CHIP_WM8731, s_HiFiPlaybackActions ),
    WM_PROFILE_ENTRY( "Stop playback", WM_CHIP_WM8731, s_StopPlaybackActions ),
    WM_PROFILE_ENTRY( "Stop HiFi playback", WM_CHIP_WM8731, s_StopPlaybackActions ),
    WM_PROFILE_ENTRY( "Standby", WM_CHIP_WM8731, s_StandbyActions ),
    WM_PROFILE_ENTRY( "Low power", WM_CHIP_WM8731, s_PowerdownActions )
};

/*******************************************************************************
 * Stream to channel mappings.
 */
static const WM_STREAM_MAPPING s_WM8731StreamMappings[] =
{
    { WM_STREAM_HIFI_OUT,   WMAUDIO_I2S_STEREO_OUT },
    { WM_STREAM_HIFI_IN,    WMAUDIO_I2S_STEREO_IN  }
};

static const WM_STREAM_MAPPING s_WM8711StreamMappings[] =
{
    { WM_STREAM_HIFI_OUT,   WMAUDIO_I2S_STEREO_OUT }
};

/*******************************************************************************
 * Sample rates.
 */
#if (12288000 == WM_MCLK_FREQUENCY) || (18432000 == WM_MCLK_FREQUENCY) || (24576000 == WM_MCLK_FREQUENCY) || (36864000 == WM_MCLK_FREQUENCY)
static const WM_SAMPLE_RATE_PAIR s_SupportedRates[] =
{
    /* First the matched sample rates */
    {  8000,  8000 },
    { 32000, 32000 },
    { 48000, 48000 },
    { 96000, 96000 },
    /* Now the unmatched sample rates */
    {  8000, 48000 },
    { 48000,  8000 },
};

#elif (11289600 == WM_MCLK_FREQUENCY) || (16934400 == WM_MCLK_FREQUENCY) || (22579200 == WM_MCLK_FREQUENCY) || (33868800 == WM_MCLK_FREQUENCY)
static const WM_SAMPLE_RATE_PAIR s_SupportedRates[] =
{
    /* First the matched sample rates */
    {  8000,  8000 },
    { 44100, 44100 },
    { 88200, 88200 },
    /* Now the unmatched sample rates */
    {  8000, 44100 },
    { 44100,  8000 },
};

#elif (6144000 == WM_MCLK_FREQUENCY) || (9216000 == WM_MCLK_FREQUENCY)
static const WM_SAMPLE_RATE_PAIR s_SupportedRates[] =
{
    { 48000, 48000 },
};

#elif (5644800 == WM_MCLK_FREQUENCY) || (8467200 == WM_MCLK_FREQUENCY)
static const WM_SAMPLE_RATE_PAIR s_SupportedRates[] =
{
    { 44100, 44100 },
};

#elif (12000000 == WM_MCLK_FREQUENCY) || (24000000 == WM_MCLK_FREQUENCY)
static const WM_SAMPLE_RATE_PAIR s_SupportedRates[] =
{
    /* First the matched sample rates */
    {  8000,  8000 },
    { 32000, 32000 },
    { 44100, 44100 },
    { 48000, 48000 },
    { 88200, 88200 },
    { 96000, 96000 },
    /* Now the unmatched sample rates */
    {  8000, 44100 },
    {  8000, 48000 },
    { 44100,  8000 },
    { 48000,  8000 },
};

#else
#   error Unsupported MCLK frequency for WM8731.
#endif

/*******************************************************************************
 * Details of supported interfaces.
 */
static const WM_INTERFACE_DETAILS s_CodecInterfaces[] =
{
    {
        WM_AUDIOIF_HIFI,
        s_SupportedRates,
        WM_ARRAY_COUNT( s_SupportedRates ),
        WM_IF_EXCLUSIVE_RATES | WM_IF_DUPLEX
    }
};

static const WM_INTERFACE_DETAILS s_DACInterfaces[] =
{
    {
        WM_AUDIOIF_HIFI,
        s_SupportedRates,
        WM_ARRAY_COUNT( s_SupportedRates ),
        WM_IF_EXCLUSIVE_RATES | WM_IF_PLAYBACK
    }
};

/*
 * Tables for the record sources
 */
static WM_RECSOURCE_DETAILS s_WM8731RecordSourceDetails = {0};

/*
 * A table for the signals.
 */
static const WM_SIGNAL_DETAILS s_WM8731Signals[] =
{
    /* Inputs */
    { WM_AUDIO_LINEIN,                  WM_SIG_ANALOGUE_INPUT | WM_CHANNEL_LEFT | WM_SIG_HAS_BOTH,
      WM8731_LEFT_INPUT_VOLUME,         WM_SIG_SHIFT( 0 ),      WM8731_INVOL_MASK,
      0x0,    0x1F,  WM8731_INVOL_0DB,  WM_SIGNAL_LEVEL(1.5),
      WM8731_LEFT_INPUT_VOLUME,         WM8731_INVOL_MUTE,      WM8731_INVOL_MUTE,
      WM_SIG_NO_ZERO_CROSS,             WM8731_VOLUME_BOTH
    },
    { WM_AUDIO_LINEIN,                  WM_SIG_ANALOGUE_INPUT | WM_CHANNEL_RIGHT | WM_SIG_HAS_BOTH,
      WM8731_RIGHT_INPUT_VOLUME,        WM_SIG_SHIFT( 0 ),      WM8731_INVOL_MASK,
      0x0,    0x1F,  WM8731_INVOL_0DB,  WM_SIGNAL_LEVEL(1.5),
      WM8731_RIGHT_INPUT_VOLUME,        WM8731_INVOL_MUTE,      WM8731_INVOL_MUTE,
      WM_SIG_NO_ZERO_CROSS,             WM8731_VOLUME_BOTH
    },
    { WM_AUDIO_MIC,                     WM_SIG_ANALOGUE_INPUT | WM_CHANNEL_MONO,
      WM8731_ANALOGUE_PATH_CONTROL,     WM_SIG_SHIFT( 0 ),      WM8731_INVOL_MASK,
      0x0,  WM8731_MIC_BOOST,  0,       WM_SIGNAL_LEVEL(20),
      WM8731_ANALOGUE_PATH_CONTROL,     WM8731_MUTE_MIC,        WM8731_MUTE_MIC,
      WM_SIG_NO_ZERO_CROSS,             WM_SIG_NO_SPECIAL
    },
    /* DACs are inputs to the analogue domain - i.e. they generate analogue signals */
    WM_SIG_NO_VOLUME_MUTE(
        WM_AUDIO_HIFI_DAC,              WM_SIG_DAC | WM_CHANNEL_STEREO,
        WM8731_DIGITAL_PATH_CONTROL,    WM8731_DAC_MUTE
    ),

    /* Outputs */
    { WM_AUDIO_HEADPHONE,               WM_SIG_ANALOGUE_OUTPUT | WM_CHANNEL_LEFT | WM_SIG_HAS_BOTH | WM_SIG_VOLUME_MUTE,
      WM8731_LEFT_HEADPHONE_VOLUME,     WM_SIG_SHIFT( 0 ),      WM8731_OUTVOL_MASK,
      0x30,  0x7F,  WM8731_OUTVOL_0DB,  WM_SIGNAL_LEVEL(1),
      WM8731_LEFT_HEADPHONE_VOLUME,     0,                      WM8731_OUTVOL_MASK,
      WM8731_OUTVOL_ZERO_CROSS,         WM8731_VOLUME_BOTH,
    },
    { WM_AUDIO_HEADPHONE,               WM_SIG_ANALOGUE_OUTPUT | WM_CHANNEL_RIGHT | WM_SIG_HAS_BOTH | WM_SIG_VOLUME_MUTE,
      WM8731_RIGHT_HEADPHONE_VOLUME,    WM_SIG_SHIFT( 0 ),      WM8731_OUTVOL_MASK,
      0x30,  0x7F,  WM8731_OUTVOL_0DB,  WM_SIGNAL_LEVEL(1),
      WM8731_RIGHT_HEADPHONE_VOLUME,    0,                      WM8731_OUTVOL_MASK,
      WM8731_OUTVOL_ZERO_CROSS,         WM8731_VOLUME_BOTH,
    },
    /* ADCs are outputs from the analogue domain - i.e. they receive analogue signals */
    WM_SIG_NO_VOLUME( WM_AUDIO_HIFI_ADC, WM_SIG_ADC | WM_CHANNEL_STEREO ),
};       

/*-----------------------------------------------------------------------------
 * Function:    InitChipdefWM8731
 *
 * Initialises the chipdef structure for the WM8731.
 *
 * Parameters:
 *      pChipDef        chipdef structure to fill in.
 *
 * Returns:     void
 *---------------------------------------------------------------------------*/
void InitChipdefWM8731( WM_CHIPDEF *pChipDef )
{
    /* Identifying information */
    pChipDef->deviceType            = WM_CHIP_WM8731;
    pChipDef->deviceName            = "WM8731/WM8734";
    pChipDef->maxRegister           = WM8731_MAX_REGISTER;
    pChipDef->regOffset             = 1;
    pChipDef->defaultPower          = WM_POWER_LINK | WM_POWER_CLOCK;
    
    /* Register details */
    pChipDef->regAddrShift          = 9;
    pChipDef->regAddrMask           = 0xFE00;
    pChipDef->regDataMask           = 0x01FF;
    pChipDef->resetReg              = WM8731_RESET;

    /* Shadow Registers */
#if WM_USE_SHADOW_REGISTERS
    pChipDef->pShadowedRegisters    = s_WM8731Shadowed;
    pChipDef->nShadowedRegisters    = WM_ARRAY_COUNT( s_WM8731Shadowed );
#endif /* WM_USE_SHADOW_REGISTERS */

    /* Profiles */
    pChipDef->profiles              = s_WM8731Profiles;
    pChipDef->nProfiles             = WM_ARRAY_COUNT( s_WM8731Profiles );

#if WM_AUXADC
    /* Auxiliary ADCs */
    pChipDef->pAuxADCDetails        = NULL;
    pChipDef->adcCount              = 0;
#endif /* WM_AUXADC */

#if WM_AUDIO
    /* Interfaces */
    pChipDef->pInterfaces           = s_CodecInterfaces;
    pChipDef->nInterfaces           = WM_ARRAY_COUNT( s_CodecInterfaces );

    /* Signals */
    pChipDef->pRecSourceSignals     = NULL;
    pChipDef->recSourceSignalCount  = 0;
    pChipDef->recSourceDetails      = s_WM8731RecordSourceDetails;
    pChipDef->pSignalDetails        = s_WM8731Signals;
    pChipDef->signalCount           = WM_ARRAY_COUNT( s_WM8731Signals );
    pChipDef->pMicControlDetails    = NULL;
    pChipDef->micControlCount       = 0;
    
    /* Audio streams */
    pChipDef->pStreamMappings       = s_WM8731StreamMappings;
    pChipDef->streamCount           = WM_ARRAY_COUNT( s_WM8731StreamMappings );
    
    /* Default sample rates */
    pChipDef->defADCRate            = WM_MCLK_FREQUENCY/256;
    pChipDef->defHiFiDACRate        = WM_MCLK_FREQUENCY/256;
    pChipDef->defVoiceDACRate       = WM_SAMPLE_RATE_UNKNOWN;
    pChipDef->defMonoDACRate        = WM_SAMPLE_RATE_UNKNOWN;
#endif /* WM_AUDIO */
    
    /* GPIOs */
    pChipDef->pGPIODetails          = NULL;
    pChipDef->gpioCount             = 0;

    /*
     * The device-specific functions
     */
    pChipDef->vtable.fnPowerInit            = NULL;
    pChipDef->vtable.fnPowerUp              = WM8731PowerUp;
    pChipDef->vtable.fnPowerDown            = WM8731PowerDown;
    pChipDef->vtable.fnGetPower             = WM8731GetCurrentPower;   

#if WM_AUDIO
    pChipDef->vtable.fnConfigureInterface   = WM8731ConfigureInterface;
    pChipDef->vtable.fnUnconfigureInterface = WM8731UnconfigureInterface;
    pChipDef->vtable.fnEnableStream         = NULL;
    pChipDef->vtable.fnDisableStream        = NULL;
    pChipDef->vtable.fnSetSampleRate        = WM8731SetSampleRate;
    pChipDef->vtable.fnGetSampleRate        = NULL; /* We rely on the cached values */
    pChipDef->vtable.fnSetLineInRecPaths    = NULL;
    pChipDef->vtable.fnClearLineInRecPaths  = NULL;
    pChipDef->vtable.fnSetMicRecPaths       = NULL;
    pChipDef->vtable.fnClearMicRecPaths     = NULL;
#endif /* WM_AUDIO */

#if WM_AUXADC && WM_STREAM_AUXADC
    pChipDef->vtable.fnReadCTCAuxADC        = NULL;
#endif /* WM_AUXADC && WM_STREAM_AUXADC */
}

#endif /* WM8731_FAMILY */

/*------------------------------ END OF FILE ---------------------------------*/

⌨️ 快捷键说明

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