📄 wmtypes.h
字号:
/*-----------------------------------------------------------------------------
* 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: WMTypes.h 852 2004-11-10 16:47:46Z ian $
*
* Type definitions for the Wolfson Device Control Library interfaces.
*
*
* Warning:
* This driver is specifically written for Wolfson Codecs. It is not a
* general CODEC device driver.
*
*---------------------------------------------------------------------------*/
#ifndef __WMTYPES_H__
#define __WMTYPES_H__
/*
* Include files
*/
#include "WMCheckConfig.h" /* If this fails, run CopyHeaders.bat */
#include "WMStatus.h"
#include "WMVersion.h"
/*
* Useful definitions.
*/
typedef unsigned int WM_UINT; /* Do not use. Left in for backwards compatiblity only */
typedef unsigned short WM_USHORT; /* Do not use. Left in for backwards compatiblity only */
typedef unsigned int WM_DWORD;
typedef void *WM_HANDLE;
typedef WM_HANDLE WM_DEVICE_HANDLE;
#define WM_HANDLE_INVALID ((WM_DEVICE_HANDLE) 0)
typedef int WM_BOOL;
#ifndef TRUE
#define TRUE 1
#define FALSE 0
#endif
/*
* Our own max function so we don't need to worry about it being called
* different things on different platforms.
*/
#define WM_MAX(a,b) (((a)>(b))?(a):(b))
/*
* A macro to calculate the number of entries in an array.
*/
#define WM_ARRAY_COUNT(_array) (sizeof(_array)/sizeof(_array[0]))
/*
* The driver IDs.
*/
typedef unsigned int WM_DRIVER_ID;
#define WM_DRIVER_TOUCH 0
#define WM_DRIVER_AUDIO 1
#define WM_DRIVER_AUXADC 2
#define WM_DRIVER_BATTERY 3
#define WM_DRIVER_RAW 4
#define WM_DRIVER_INTERNAL 5
#define WM_DRIVER_MASK(_driver) (1U<<(_driver))
/*
* The types to use for registers
*/
typedef WM_USHORT WM_REGTYPE;
typedef WM_USHORT WM_REGVAL;
#define WM_REG_INVALID ((WM_REGTYPE)-1)
/*
* Codec IDs
*/
typedef enum tagCodecId
{
WM97_PRIMARY_CODEC = 1,
WM97_SECONDARY_CODEC
} WM_CODEC_ID;
/* Chip IDs */
typedef unsigned short WM_CHIPTYPE;
#define WOLFSON_MICRO 0x574D /* 'WM' */
#define WM_CHIP_UNSUPPORTED 0
#define WM_CHIP_UNKNOWN 0
#define WM_CHIP_WM9703 0x4C03
#define WM_CHIP_WM9704 0x4C04
#define WM_CHIP_WM9705 0x4C05
#define WM_CHIP_WM9707 WM_CHIP_WM9703
#define WM_CHIP_WM9708 WM_CHIP_WM9703
#define WM_CHIP_WM9709 0x4C09
#define WM_CHIP_WM9710 WM_CHIP_WM9705
#define WM_CHIP_WM9711 WM_CHIP_WM9712
#define WM_CHIP_WM9712 0x4C12
#define WM_CHIP_WM9713 0x4C13
#define WM_CHIP_WM9714 WM_CHIP_WM9713
#define WM_CHIP_WM9717 WM_CHIP_WM9703
#define WM_CHIP_WM8711 0x8711
#define WM_CHIP_WM8721 WM_CHIP_WM8711
#define WM_CHIP_WM8731 0x8731
#define WM_CHIP_WM8734 WM_CHIP_WM8731
#define WM_CHIP_WM8753 0x8753
#define WM_CHIP_WMI2S_HW_ONLY 0xFFE0 /* unknown I2S device hardware-only */
#define WM_CHIP_WMI2S_7BIT_ADDR 0xFFE7 /* unknown I2S device 7-bit addr/9-bit data */
#define WM_CHIP_WMI2S_8BIT_ADDR 0xFFE8 /* unknown I2S device 8-bit addr/8-bit data */
#define WM_CHIP_STRING( _ID ) ( \
( WM_CHIP_WM9713 == (_ID) ) ? "WM9713/WM9714" : \
( WM_CHIP_WM9712 == (_ID) ) ? "WM9711/WM9712" : \
( WM_CHIP_WM9705 == (_ID) ) ? "WM9705/WM9710" : \
( WM_CHIP_WM9703 == (_ID) ) ? "WM9703/WM9707/WM9708/WM9717" : \
( WM_CHIP_WM8753 == (_ID) ) ? "WM8753" : \
( WM_CHIP_WM8731 == (_ID) ) ? "WM8731/WM8734" : \
( WM_CHIP_WM8711 == (_ID) ) ? "WM8711/WM8721" : \
( WM_CHIP_WMI2S_HW_ONLY == (_ID) ) ? "Wolfson I2S HW control" : \
( WM_CHIP_WMI2S_7BIT_ADDR == (_ID) ) ? "Wolfson I2S 7-bit addr" : \
( WM_CHIP_WMI2S_8BIT_ADDR == (_ID) ) ? "Wolfson I2S 8-bit addr" : \
"unknown device" )
#define WM_CHIP_IS_AC97( _ID ) ( 0x4C00 == ( (_ID) & 0xFF00 ) || 0x9700 == (_ID) )
#define WM_CHIP_HAS_READBACK( _ID ) ( WM_CHIP_IS_AC97( _ID ) || WM_DEV_I2S == (_ID) )
#define WM_CHIP_IS_HW_ONLY( _ID ) ( WM_CHIP_WMI2S_HW_ONLY == (_ID) )
/* Chip revisions */
typedef unsigned short WM_CHIPREV;
#define WM_REV_UNKNOWN 0
#define WM_REV_A 'A'
#define WM_REV_B 'B'
#define WM_REV_C 'C'
#define WM_REV_D 'D'
#define WM_REV_E 'E'
/*
* The device IDs.
*/
typedef unsigned int WM_DEVICE_ID;
#define WM_DEV_ORDINAL_MASK 0xF0000000
#define WM_DEV_CHIP_MASK 0x0000FFFF
#define WM_DEV_PRIMARY 0x10000000
#define WM_DEV_SECONDARY 0x20000000
#define WM_DEV_UNKNOWN 0
#define WM_DEV_AC97 0x9700
#define WM_DEV_I2S 0x8000 // Generic I2S with readback of ID register 0
#define WM_DEV_MAKE_DEVICE( _chip, _ordinal ) ( \
WM_CHIP_IS_AC97( _chip ) ? ( WM_DEV_AC97 | (_ordinal) ) : \
WM_CHIP_HAS_READBACK( _chip ) ? ( WM_DEV_I2S | (_ordinal) ) : \
((_chip) | (_ordinal)) \
)
#define WM_DEV_PRIMARY_DEVICE( _devID ) WM_DEV_MAKE_DEVICE( (_devID), WM_DEV_PRIMARY )
#define WM_DEV_SECONDARY_DEVICE( _devID ) WM_DEV_MAKE_DEVICE( (_devID), WM_DEV_SECONDARY )
#define WM_DEV_GET_ORDINAL( _devID ) ((_devID) & WM_DEV_ORDINAL_MASK )
#define WM_DEV_GET_CHIP( _devID ) ((_devID) & WM_DEV_CHIP_MASK )
#define WM_DEVICE_IS_AC97( _devID ) WM_CHIP_IS_AC97( WM_DEV_GET_CHIP( _devID ) )
#define WM_DEVICE_HAS_READBACK( _devID ) WM_CHIP_HAS_READBACK( WM_DEV_GET_CHIP( _devID ) )
#define WM_DEVICE_IS_HW_ONLY( _devID ) WM_CHIP_IS_HW_ONLY( WM_DEV_GET_CHIP( _devID ) )
#define WM_DEV_AC97_PRIMARY WM_DEV_PRIMARY_DEVICE( WM_DEV_AC97 )
#define WM_DEV_AC97_SECONDARY WM_DEV_SECONDARY_DEVICE( WM_DEV_AC97 )
#define WM_DEV_I2S_PRIMARY WM_DEV_PRIMARY_DEVICE( WM_DEV_I2S )
#define WM_DEV_I2S_SECONDARY WM_DEV_SECONDARY_DEVICE( WM_DEV_I2S )
#define WM_DEV_WM8711_PRIMARY WM_DEV_PRIMARY_DEVICE( WM_CHIP_WM8711 )
#define WM_DEV_WM8711_SECONDARY WM_DEV_SECONDARY_DEVICE( WM_CHIP_WM8711 )
#define WM_DEV_WM8721_PRIMARY WM_DEV_PRIMARY_DEVICE( WM_CHIP_WM8721 )
#define WM_DEV_WM8721_SECONDARY WM_DEV_SECONDARY_DEVICE( WM_CHIP_WM8721 )
#define WM_DEV_WM8731_PRIMARY WM_DEV_PRIMARY_DEVICE( WM_CHIP_WM8731 )
#define WM_DEV_WM8731_SECONDARY WM_DEV_SECONDARY_DEVICE( WM_CHIP_WM8731 )
#define WM_DEV_WM8734_PRIMARY WM_DEV_PRIMARY_DEVICE( WM_CHIP_WM8734 )
#define WM_DEV_WM8734_SECONDARY WM_DEV_SECONDARY_DEVICE( WM_CHIP_WM8734 )
#define WM_DEV_WM8753_PRIMARY WM_DEV_PRIMARY_DEVICE( WM_CHIP_WM8753 )
#define WM_DEV_WM8753_SECONDARY WM_DEV_SECONDARY_DEVICE( WM_CHIP_WM8753 )
#define WM_DEV_WMI2S_7BIT_ADDR_PRIMARY WM_DEV_PRIMARY_DEVICE( WM_CHIP_WMI2S_7BIT_ADDR )
#define WM_DEV_WMI2S_7BIT_ADDR_SECONDARY WM_DEV_SECONDARY_DEVICE( WM_CHIP_WMI2S_7BIT_ADDR )
#define WM_DEV_WMI2S_8BIT_ADDR_PRIMARY WM_DEV_PRIMARY_DEVICE( WM_CHIP_WMI2S_8BIT_ADDR )
#define WM_DEV_WMI2S_8BIT_ADDR_SECONDARY WM_DEV_SECONDARY_DEVICE( WM_CHIP_WMI2S_8BIT_ADDR )
#define WM_DEV_WMI2S_HW_ONLY WM_DEV_MAKE_DEVICE( WM_CHIP_WMI2S_HW_ONLY, 0 )
/* Bit Positions */
#define WM_BIT_0 ( 1u << 0 )
#define WM_BIT_1 ( 1u << 1 )
#define WM_BIT_2 ( 1u << 2 )
#define WM_BIT_3 ( 1u << 3 )
#define WM_BIT_4 ( 1u << 4 )
#define WM_BIT_5 ( 1u << 5 )
#define WM_BIT_6 ( 1u << 6 )
#define WM_BIT_7 ( 1u << 7 )
#define WM_BIT_8 ( 1u << 8 )
#define WM_BIT_9 ( 1u << 9 )
#define WM_BIT_10 ( 1u << 10 )
#define WM_BIT_11 ( 1u << 11 )
#define WM_BIT_12 ( 1u << 12 )
#define WM_BIT_13 ( 1u << 13 )
#define WM_BIT_14 ( 1u << 14 )
#define WM_BIT_15 ( 1u << 15 )
#define WM_BIT_16 ( 1u << 16 )
#define WM_BIT_17 ( 1u << 17 )
#define WM_BIT_18 ( 1u << 18 )
#define WM_BIT_19 ( 1u << 19 )
#define WM_BIT_20 ( 1u << 20 )
#define WM_BIT_21 ( 1u << 21 )
#define WM_BIT_22 ( 1u << 22 )
#define WM_BIT_23 ( 1u << 23 )
#define WM_BIT_24 ( 1u << 24 )
#define WM_BIT_25 ( 1u << 25 )
#define WM_BIT_26 ( 1u << 26 )
#define WM_BIT_27 ( 1u << 27 )
#define WM_BIT_28 ( 1u << 28 )
#define WM_BIT_29 ( 1u << 29 )
#define WM_BIT_30 ( 1u << 30 )
#define WM_BIT_31 ( 1u << 31 )
/* Register bit positions */
#define WM_REGISTERBIT_0 ((WM_REGVAL) WM_BIT_0)
#define WM_REGISTERBIT_1 ((WM_REGVAL) WM_BIT_1)
#define WM_REGISTERBIT_2 ((WM_REGVAL) WM_BIT_2)
#define WM_REGISTERBIT_3 ((WM_REGVAL) WM_BIT_3)
#define WM_REGISTERBIT_4 ((WM_REGVAL) WM_BIT_4)
#define WM_REGISTERBIT_5 ((WM_REGVAL) WM_BIT_5)
#define WM_REGISTERBIT_6 ((WM_REGVAL) WM_BIT_6)
#define WM_REGISTERBIT_7 ((WM_REGVAL) WM_BIT_7)
#define WM_REGISTERBIT_8 ((WM_REGVAL) WM_BIT_8)
#define WM_REGISTERBIT_9 ((WM_REGVAL) WM_BIT_9)
#define WM_REGISTERBIT_10 ((WM_REGVAL) WM_BIT_10)
#define WM_REGISTERBIT_11 ((WM_REGVAL) WM_BIT_11)
#define WM_REGISTERBIT_12 ((WM_REGVAL) WM_BIT_12)
#define WM_REGISTERBIT_13 ((WM_REGVAL) WM_BIT_13)
#define WM_REGISTERBIT_14 ((WM_REGVAL) WM_BIT_14)
#define WM_REGISTERBIT_15 ((WM_REGVAL) WM_BIT_15)
/* Value to set registers to signify an uninitialised [UNKNOWN] state */
#define WM_REGISTER_UNSET 0xCCCC
/* 2 Wire device Address */
typedef unsigned short WM_2WIRE_ADDR;
/*
* Registers used to test successful device initialisation
* Choose one that does not exist.
*
* For 2 Wire devices register 0x7F may be in use, so use 0x7E instead.
*/
#define WM_I2S_INIT_TEST_REGISTER 0x7E
/*
* Function prototypes
*/
#ifdef __cplusplus
extern "C" {
#endif
#ifdef __cplusplus
} /* extern "C" */
#endif
#endif /* __WMTYPES_H__ */
/*------------------------------ END OF FILE ---------------------------------*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -