ASR_BASE

Change-Id: Icf3719cc0afe3eeb3edc7fa80a2eb5199ca9dda1
diff --git a/marvell/services/audio/libacm/acm/inc/acm_aph.h b/marvell/services/audio/libacm/acm/inc/acm_aph.h
new file mode 100644
index 0000000..964d194
--- /dev/null
+++ b/marvell/services/audio/libacm/acm/inc/acm_aph.h
@@ -0,0 +1,333 @@
+/*
+* All Rights Reserved
+*
+* MARVELL CONFIDENTIAL
+* Copyright 2012 Marvell International Ltd All Rights Reserved.
+* The source code contained or described herein and all documents related to
+* the source code ("Material") are owned by Marvell International Ltd or its
+* suppliers or licensors. Title to the Material remains with Marvell International Ltd
+* or its suppliers and licensors. The Material contains trade secrets and
+* proprietary and confidential information of Marvell or its suppliers and
+* licensors. The Material is protected by worldwide copyright and trade secret
+* laws and treaty provisions. No part of the Material may be used, copied,
+* reproduced, modified, published, uploaded, posted, transmitted, distributed,
+* or disclosed in any way without Marvell's prior express written permission.
+*
+* No license under any patent, copyright, trade secret or other intellectual
+* property right is granted to or conferred upon you by disclosure or delivery
+* of the Materials, either expressly, by implication, inducement, estoppel or
+* otherwise. Any license under such intellectual property rights must be
+* express and approved by Marvell in writing.
+*
+*/
+
+#ifndef __H_ACM_APH__
+#define __H_ACM_APH__
+
+#include "acm_debug.h"
+#include "acm_ach.h"
+#include "acm_api.h"
+#include "audio_protocol.h"
+#include "audio_profile.h"
+
+#define MAX_STRING_LEN 60
+#define MAX_VOLUME_INDEX 100
+#define INVALID_CTL_UNIT_ID 0
+#define INVALID_PATH_ID 0xFF
+#define INVALID_ORDER_INDEX 0xFF
+
+#define XML_NAME_LEN 128
+#define DIGITAL_GAIN_OFFSET 37
+#define GENERATE_XML_NAME(BUF, SIZE, PREFIX, APPENDIX) \
+do{\
+    (BUF) = (char *)malloc((SIZE)); \
+    if ((BUF)) {\
+        memset((BUF), 0, (SIZE)); \
+        snprintf((BUF), (SIZE), "%s%s.xml", (PREFIX), (APPENDIX));\
+    } \
+}while(0)
+
+#define PATHSTATUS_MAX  2048
+//--------------------------------------------------------------
+//-------- Basic Elements Definition
+//--------------------------------------------------------------
+typedef enum {
+    APH_PATH_ID_HIFIPLAYTOEARPHONE = 0,
+    APH_PATH_ID_HIFIPLAYTOSPKR,
+    APH_PATH_ID_HIFIPLAYTOHP,
+    APH_PATH_ID_HIFIRECORDFROMMIC1,
+    APH_PATH_ID_HIFIRECORDFROMHSMIC,
+    APH_PATH_ID_VOICEPLAYTOEARPHONE,
+    APH_PATH_ID_VOICEPLAYTOSPKR,
+    APH_PATH_ID_VOICEPLAYTOHP,
+    APH_PATH_ID_VOICERECORDFROMMIC1,
+    APH_PATH_ID_VOICERECORDFROMHSMIC,
+
+    APH_PATH_ID_CNT
+} APH_PATH_ID;
+
+#define APH_PATH_OUT_CNT 6
+#define APH_PATH_IN_CNT 4
+
+typedef enum {
+    APH_GAIN_ID_NB = 0,
+    APH_GAIN_ID_WB,
+    APH_GAIN_ID_NB_EXTRA,
+    APH_GAIN_ID_WB_EXTRA,
+
+    APH_GAIN_ID_CNT
+} APH_GAIN_ID;
+
+typedef enum {
+    ELBA,
+    USTICA,
+    DELAY,
+    NAU8810,
+    ALC5616,
+
+    AUDIO_COMPONENT_CNT
+} APH_AudioComponent;
+
+
+typedef enum {
+    ENABLE,
+    DISABLE,
+    MUTE,
+    SETVOLUME,
+    SWITCH,
+
+    PATH_OPERATION_CNT
+} APH_PathOperation;
+
+/* Force type is added for GELATO, as some registers are used as trigger/update signal, will repeatedly write a same value. For bit value with Force field type, just write to codec ignore ref_count/bind-writing/cache check features */
+typedef enum {
+    REG_FIELD_TYPE_INVALID = 0,
+    REG_FIELD_TYPE_NORMAL = 1,
+    REG_FIELD_TYPE_GAIN = 2,
+    REG_FIELD_TYPE_COEFF = 4,
+    REG_FIELD_TYPE_FORCE = 8
+} APH_RegisterFieldType;
+
+typedef enum {
+    REG_MISC_NONE,
+    REG_MISC_MIC1,
+    REG_MISC_MIC2,
+    REG_MISC_DUAL_MIC,
+    REG_MISC_SLAVE,
+    REG_MISC_MASTER,
+    REG_MISC_NB_RATE,
+    REG_MISC_WB_RATE,
+    REG_MISC_VOIP_RATE,
+    REG_MISC_DEFAULT_RATE,
+    REG_MISC_FORCE_DELAY
+} APH_RegisterMisc;
+
+typedef enum {
+    PATH_DIRECTION_IN,
+    PATH_DIRECTION_OUT,
+} APH_PathDirection;
+
+typedef enum {
+    HIFI_PATH,
+    FM_PATH,
+    VOICE_PATH,
+    UNKNOW_PATH,
+}APH_PathType;
+
+
+//--------------------------------------------------------------
+//-------- ACM_APH Related Data Structures
+//--------------------------------------------------------------
+typedef struct {
+    APH_AudioComponent Component;
+    unsigned char Address;
+    unsigned short Value;
+} ACMAPH_Register;
+
+typedef struct {
+    APH_PATH_ID     PathID;
+    ACMAPH_Register *RegisterList;
+    unsigned char   RegisterNum;
+} ACMAPH_Component;
+
+typedef struct {
+    int   PathID;
+    char  PathName[32];
+} ACMAPH_AudioPathID;
+
+typedef struct {
+    unsigned char Volume;
+    APH_AudioComponent Component;
+    unsigned char Address;
+    unsigned short Value;
+} ACMAPH_VolumeRegister;
+
+typedef struct {
+    APH_PATH_ID     PathID;
+    ACMAPH_VolumeRegister *RegisterList;
+    unsigned char   RegisterNum;
+} ACMAPH_VolumeComponent;
+
+
+typedef struct {
+    APH_GAIN_ID id;
+    unsigned char volume;
+    signed char gain;
+} ACMAPH_MSAGain;
+
+typedef struct {
+    APH_PATH_ID     PathID;
+    ACMAPH_MSAGain  *GainList;
+    unsigned char   GainNum;
+} ACMAPH_MSAComponent;
+
+
+//--------------------------------------------------------------
+//-------- Path Configuration Related Data Structures
+//--------------------------------------------------------------
+typedef struct tag_APH_ControlUnitConfiguration {
+    union {
+        struct {
+            unsigned char reg_index;
+            unsigned char reg_mask;
+            unsigned char reg_shift;
+            unsigned char reg_type;
+            unsigned char reg_misc;
+            unsigned short length;
+            unsigned char *reg_value;
+        } i2c;
+        struct {
+            unsigned char gpio_port;
+            unsigned char gpio_value;
+        } gpio;
+        struct {
+            unsigned char hci_ocf;
+            unsigned char hci_ogf;
+            unsigned short length;
+            unsigned char *hci_parameters;
+        } hci;
+        struct {
+            unsigned int  delay_value;
+            unsigned char delay_misc;
+        } delay;
+    } ctl_unit;
+    unsigned short control_unit_id;
+    struct tag_APH_ControlUnitConfiguration *next;
+} APH_ControlUnitConfiguration;
+
+
+//--------------------------------------------------------------
+//-------- APH Related Data Structures
+//--------------------------------------------------------------
+typedef struct {
+    APH_AudioComponent      component_id;
+    ACH_ComponentHandler    *component_handler;
+} APH_ACHComponent;
+
+typedef struct {
+    unsigned short enabled;
+    unsigned int   value;
+    unsigned char  mute;
+} APH_PathStatus;
+
+typedef enum
+{
+    AUDIOHAL_SPK_MUTE    = 0,
+    AUDIOHAL_SPK_VOL_1,
+    AUDIOHAL_SPK_VOL_2,
+    AUDIOHAL_SPK_VOL_3,
+    AUDIOHAL_SPK_VOL_4,
+    AUDIOHAL_SPK_VOL_5,
+    AUDIOHAL_SPK_VOL_6,
+    AUDIOHAL_SPK_VOL_7,
+    AUDIOHAL_SPK_VOL_8,
+    AUDIOHAL_SPK_VOL_9,
+    AUDIOHAL_SPK_VOL_10,
+    AUDIOHAL_SPK_VOL_QTY //11
+}  AUDIOHAL_SPK_LEVEL_T;
+
+typedef enum {
+    APH_CODEC_ID_NONE=0,
+    APH_CODEC_ID_PM805,
+    APH_CODEC_ID_PM812,
+    APH_CODEC_ID_NAU8810,
+    APH_CODEC_ID_ALC5616,
+
+    APH_CODEC_CNT
+} APH_CODEC_ID;
+
+typedef struct
+{
+    APH_AudioComponent  Component_1;
+    unsigned short      RegAddr_1;
+    unsigned short      RegVal_1;
+
+    APH_AudioComponent  Component_2;
+    unsigned short      RegAddr_2;
+    unsigned short      RegVal_2;
+
+    APH_AudioComponent  Component_3;
+    unsigned short      RegAddr_3;
+    unsigned short      RegVal_3;
+
+    APH_AudioComponent  Component_4;
+    unsigned short      RegAddr_4;
+    unsigned short      RegVal_4;
+}  ACMCodec_GainInT;
+
+typedef struct
+{
+    APH_AudioComponent  Component_1;
+    unsigned short      RegAddr_1;
+    unsigned short      RegVal_1;
+
+    APH_AudioComponent  Component_2;
+    unsigned short      RegAddr_2;
+    unsigned short      RegVal_2;
+
+    APH_AudioComponent  Component_3;
+    unsigned short      RegAddr_3;
+    unsigned short      RegVal_3;
+
+    APH_AudioComponent  Component_4;
+    unsigned short      RegAddr_4;
+    unsigned short      RegVal_4;
+}  ACMCodec_GainOutT;
+
+typedef struct
+{
+    AUDIO_PROFILE_ID    Profile_id;
+    unsigned short      CodecControl;
+    ACMCodec_GainInT    Tx_CodecGain; //TX has the same gain for every volume
+    short               Tx_DSPGain;   //TX has the same gain for every volume, High 8bits: WB gain, Low 8bits: NB gain
+    ACMCodec_GainOutT   Rx_CodecGain[AUDIOHAL_SPK_VOL_QTY];
+    short               Rx_DSPGain[AUDIOHAL_SPK_VOL_QTY];   //High 8bits: WB gain, Low 8bits: NB gain
+    short               Rx_DSPSideToneGain;                 //High 8bits: WB gain, Low 8bits: NB gain
+}  ACMCodec_GainT;
+
+//--------------------------------------------------------------
+//-------- External APH APIs
+//--------------------------------------------------------------
+const ACMAPH_AudioPathID *ACM_GetPathConfigTable();
+
+void ACM_Init_Property(void);
+void ACM_APHInit(void);
+void ACM_APHDeInit(void);
+char * ACM_GetPathName(int PathID);
+ACM_ReturnCode APHAudioPathEnable(const char *path, unsigned int value);
+ACM_ReturnCode APHAudioPathDisable(const char *path);
+ACM_ReturnCode APHAudioPathCheck (const char * path_Rx, const char * path_Tx) ;
+void APHDisableAllPath(void);
+ACM_ReturnCode APHAudioPathSwitch (const char *path_Rx, const char *path_Tx, unsigned int value);
+ACM_ReturnCode APHAudioPathMute(const char *path, unsigned int value);
+ACM_ReturnCode APHAudioPathVolumeSet(const char *path, unsigned int value);
+ACM_ReturnCode ACM_ReloadCalibrationData(void);
+ACM_ReturnCode APHReloadNvm(void);
+ACM_ReturnCode APHAudioPathCheckPathId (int path_id_Rx,  int path_id_Tx);
+ACM_ReturnCode ACM_GetEnabledPathId(int *path_id_Rx, int *path_id_Tx, int *volume_Rx, int *mute_Tx);
+ACM_ReturnCode APHGetMSAGain(const char *out_path, const char *path, unsigned char *volume, unsigned short id, signed short *gain, signed short *sidetone_gain);
+unsigned int ACM_GetEnabledPathVolume(void);
+ACM_ReturnCode ACM_GetPathStatus(char *buff, unsigned int maxsize);
+ACM_ReturnCode ACM_GetPathDirection(const char *path, unsigned char *path_direction);
+
+#endif