/* * include/linux/tfa9887.h * * Copyright (c) 2013, NVIDIA CORPORATION. All rights reserved. * * This software is licensed under the terms of the GNU General Public * License version 2, as published by the Free Software Foundation, and * may be copied, distributed, and modified under those terms. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * */ #ifndef __LINUX_TFA9887_H #define __LINUX_TFA9887_H #define IN_HAND_MODE 2 #define ON_DESK_MODE 1 #define DB_CUTOFF_INDEX 12 #define MAX_DB_INDEX 15 #define PRESET_DEFAULT 4 struct tfa9887_priv { struct regmap *regmap; int irq; bool deviceInit; struct mutex lock; }; typedef enum Tfa9887_Mute { Tfa9887_Mute_Off, Tfa9887_Mute_Digital, Tfa9887_Mute_Amplifier } Tfa9887_Mute_t; int Tfa9887_Powerdown(int powerdown); int Powerdown(struct tfa9887_priv *tfa9887, struct tfa9887_priv *tfa9887_byte, int powerdown); int Tfa9887_WriteRegister(struct tfa9887_priv *tfa9887, unsigned int subaddress, unsigned int value); int Tfa9887_ReadRegister(struct tfa9887_priv *tfa9887, unsigned int subaddress, unsigned int *pValue); int Tfa9887_Init(int sRate); int Init(struct tfa9887_priv *tfa9887,struct tfa9887_priv *tfa9887_byte, int sRate); int Tfa9887_ReadRegister(struct tfa9887_priv *tfa9887, unsigned int subaddress, unsigned int *pValue); int Tfa9887_WriteRegister(struct tfa9887_priv *tfa9887, unsigned int subaddress, unsigned int value); int ProcessPatchFile(struct tfa9887_priv *tfa9887, struct tfa9887_priv *tfa9887_byte, int length, const unsigned char *bytes); int DspSetParam(struct tfa9887_priv *tfa9887, struct tfa9887_priv *tfa9887_byte, unsigned char module_id, unsigned char param_id, int num_bytes, const unsigned char *data); int DspGetParam(struct tfa9887_priv *tfa9887, struct tfa9887_priv *tfa9887_byte, unsigned char module_id, unsigned char param_id, int num_bytes, unsigned char *data); int DspWriteMem(struct tfa9887_priv *tfa9887, unsigned int address, int value); int DspReadMem(struct tfa9887_priv *tfa9887, struct tfa9887_priv *tfa9887_byte, unsigned short start_offset, int num_words, int *pValues); int coldStartup(struct tfa9887_priv *tfa9887, struct tfa9887_priv *tfa9887_byte, int sRate); int loadSettings(struct tfa9887_priv *tfa9887, struct tfa9887_priv *tfa9887_byte); int stereoRouting(struct tfa9887_priv *tfa9887); int Tfa9887_SetEq(void); int SetEq(struct tfa9887_priv *tfa9887,struct tfa9887_priv *tfa9887_byte); int Tfa9887_SetPreset(unsigned int preset); int SetPreset(struct tfa9887_priv *tfa9887,struct tfa9887_priv *tfa9887_byte); int SetMute(struct tfa9887_priv *tfa9887, Tfa9887_Mute_t mute); void calibrate (struct tfa9887_priv *tfa9887, struct tfa9887_priv *tfa9887_byte, char *calibdata); void recalibrate(struct tfa9887_priv *tfa9887, struct tfa9887_priv *tfa9887_byte); void resetMtpEx(struct tfa9887_priv *tfa9887); int checkMTPEX(struct tfa9887_priv *tfa9887); void setOtc(struct tfa9887_priv *tfa9887, unsigned short otcOn); typedef enum Tfa9887_AmpInputSel { Tfa9887_AmpInputSel_I2SLeft, Tfa9887_AmpInputSel_I2SRight, Tfa9887_AmpInputSel_DSP } Tfa9887_AmpInputSel_t; typedef enum Tfa9887_OutputSel { Tfa9887_I2SOutputSel_CurrentSense, Tfa9887_I2SOutputSel_DSP_Gain, Tfa9887_I2SOutputSel_DSP_AEC, Tfa9887_I2SOutputSel_Amp, Tfa9887_I2SOutputSel_DataI3R, Tfa9887_I2SOutputSel_DataI3L, Tfa9887_I2SOutputSel_DcdcFFwdCur, } Tfa9887_OutputSel_t; typedef enum Tfa9887_StereoGainSel { Tfa9887_StereoGainSel_Left, Tfa9887_StereoGainSel_Right } Tfa9887_StereoGainSel_t; #define TFA9887_SPEAKERPARAMETER_LENGTH 423 typedef unsigned char Tfa9887_SpeakerParameters_t[TFA9887_SPEAKERPARAMETER_LENGTH]; #define TFA9887_CONFIG_LENGTH 165 typedef unsigned char Tfa9887_Config_t[TFA9887_CONFIG_LENGTH]; #define TFA9887_PRESET_LENGTH 87 typedef unsigned char Tfa9887_Preset_t[TFA9887_PRESET_LENGTH]; #define TFA9887_MAXPATCH_LENGTH (3*1024) /* the number of biquads supported */ #define TFA9887_BIQUAD_NUM 10 #define Tfa9887_Error_Ok 0 typedef enum Tfa9887_SpeakerType { Tfa9887_Speaker_FreeSpeaker=0, Tfa9887_Speaker_RA11x15, Tfa9887_Speaker_RA13x18, Tfa9887_Speaker_RA9x13, Tfa9887_Speaker_Max } Tfa9887_SpeakerType_t; typedef enum Tfa9887_Channel { Tfa9887_Channel_L, Tfa9887_Channel_R, Tfa9887_Channel_L_R, Tfa9887_Channel_Stereo } Tfa9887_Channel_t; typedef enum Tfa9887_SpeakerBoostStatusFlags { Tfa9887_SpeakerBoost_Activity=0 , /* Input signal activity. */ Tfa9887_SpeakerBoost_S_Ctrl , /* S Control triggers the limiter */ Tfa9887_SpeakerBoost_Muted , /* 1 when signal is muted */ Tfa9887_SpeakerBoost_X_Ctrl , /* X Control triggers the limiter */ Tfa9887_SpeakerBoost_T_Ctrl , /* T Control triggers the limiter */ Tfa9887_SpeakerBoost_NewModel , /* New model is available */ Tfa9887_SpeakerBoost_VolumeRdy , /* 0 means stable volume, 1 means volume is still smoothing */ Tfa9887_SpeakerBoost_Damaged , /* Speaker Damage detected */ Tfa9887_SpeakerBoost_SignalClipping /* Input Signal clipping detected */ } Tfa9887_SpeakerBoostStatusFlags_t ; typedef struct Tfa9887_SpeakerBoost_StateInfo { float agcGain; /* Current AGC Gain value */ float limGain; /* Current Limiter Gain value */ float sMax; /* Current Clip/Lim threshold */ int T; /* Current Speaker Temperature value */ int statusFlag; /* Masked bit word, see Tfa9887_SpeakerBoostStatusFlags */ float X1; /* Current estimated Excursion value caused by Speakerboost gain control */ float X2; /* Current estimated Excursion value caused by manual gain setting */ float Re; /* Current Loudspeaker blocked resistance */ } Tfa9887_SpeakerBoost_StateInfo_t; typedef unsigned char subaddress_t; #define TFA9887_I2S_CONTROL (subaddress_t)0x04 #define TFA9887_AUDIO_CONTROL (subaddress_t)0x06 #define TFA9887_SYSTEM_CONTROL (subaddress_t)0x09 #define TFA9887_I2S_SEL (subaddress_t)0x0A //#define TFA9887_CF_CONTROLS (subaddress_t)0x70 //TODO cleanup reg defs //#define TFA9887_CF_MAD (subaddress_t)0x71 //#define TFA9887_CF_MEM (subaddress_t)0x72 //#define TFA9887_CF_STATUS (subaddress_t)0x73 /* REVISION values */ #define TFA9887_REV_N1C 0x11 #define TFA9887_REV_N1D 0x12 /* I2S_CONTROL bits */ #define TFA9887_I2SCTRL_RATE_SHIFT (12) #define TFA9887_I2SCTRL_RATE_08000 (0<