Audio HW Control/audio_hw_control_chipset_api.h
changeset 0 bb4b476bbb96
child 3 89965ac1daf8
equal deleted inserted replaced
-1:000000000000 0:bb4b476bbb96
       
     1 /*
       
     2   audio_hw_control_chipset_api.h
       
     3 
       
     4   Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies). 
       
     5   All rights reserved.
       
     6 
       
     7   This program and the accompanying materials are made available 
       
     8   under the terms of the Eclipse Public License v1.0 which accompanies 
       
     9   this distribution, and is available at 
       
    10   http://www.eclipse.org/legal/epl-v10.html
       
    11 
       
    12   Initial Contributors:
       
    13   Nokia Corporation - initial contribution.
       
    14 
       
    15   Contributors:
       
    16 */
       
    17 
       
    18 #ifndef AUDIO_HWCTRL_CHIPSET_API_H
       
    19 #define AUDIO_HWCTRL_CHIPSET_API_H
       
    20 
       
    21 #ifdef __cplusplus
       
    22 extern "C" {
       
    23 #endif /* __cplusplus */
       
    24 
       
    25 
       
    26 /* Each OMX header must include all required header files to allow the
       
    27  * header to compile without errors.  The includes below are required
       
    28  * for this header file to compile successfully 
       
    29  */
       
    30 
       
    31 #include <OMX_Audio.h>
       
    32 
       
    33 
       
    34 /* structures and enums used by OMX interface */
       
    35 
       
    36  typedef enum OMX_AUDIO_HWREGISTERTYPE { 
       
    37      OMX_AUDIO_IO = 0,
       
    38      OMX_AUDIO_I2C,
       
    39      OMX_AUDIO_SLIMBUS,
       
    40      OMX_AUDIO_CBUS = 0xFFFF     
       
    41  } OMX_AUDIO_HWREGISTERTYPE;
       
    42  
       
    43  typedef struct OMX_AUDIO_REGBANKDESCRIPTORTYPE { 
       
    44      OMX_U32 nSize;                                    
       
    45      OMX_VERSIONTYPE nVersion;                   
       
    46      OMX_U32 nRegBankIndex;   
       
    47      OMX_U32 nLogicalStartAddr;
       
    48      OMX_U32 nLogicalEndAddr;
       
    49      OMX_AUDIO_HWREGISTERTYPE eRegBankType;
       
    50        
       
    51  } OMX_AUDIO_REGBANKDESCRIPTORTYPE;
       
    52 
       
    53  typedef enum OMX_AUDIO_HWLOOPSTYPE { 
       
    54      OMX_AUDIO_NOLOOP = 0,
       
    55      OMX_AUDIO_SIDETONE_LOOP = 0xFFFF
       
    56      /* rest of HW loops are to be defined on a vendor specific basis */
       
    57      
       
    58  } OMX_AUDIO_HWLOOPSTYPE;
       
    59 
       
    60  typedef enum OMX_AUDIO_HWOPERATIONTYPE { 
       
    61      OMX_AUDIO_NOOP = 0,
       
    62      OMX_AUDIO_16BIT_SINGLE_READ,
       
    63      OMX_AUDIO_16BIT_SINGLE_WRITE,
       
    64      OMX_AUDIO_32BIT_SINGLE_READ,
       
    65      OMX_AUDIO_32BIT_SINGLE_WRITE,
       
    66      OMX_AUDIO_16BIT_MULTI_READ,
       
    67      OMX_AUDIO_16BIT_MULTI_WRITE,
       
    68      OMX_AUDIO_32BIT_MULTI_READ,
       
    69      OMX_AUDIO_32BIT_MULTI_WRITE,
       
    70      OMX_AUDIO_16BIT_BURST_MULTI_READ,
       
    71      OMX_AUDIO_16BIT_BURST_MULTI_WRITE,
       
    72      OMX_AUDIO_32BIT_BURST_MULTI_READ,
       
    73      OMX_AUDIO_32BIT_BURST_MULTI_WRITE = 0xFFFF     
       
    74  } OMX_AUDIO_HWOPERATIONTYPE;
       
    75 
       
    76  
       
    77  typedef enum OMX_AUDIO_HWCTRL_STATUSTYPE { 
       
    78      OMX_AUDIO_OK = 0,
       
    79      OMX_AUDIO_FAIL,
       
    80      /* if callback facility is somehow solved in OpenMAX IL for 
       
    81         getconfig/setconfig parameter calls, it is expected */
       
    82      /* to have here extra status information that can be returned 
       
    83         for e.g. multi-read/write commands */
       
    84      OMX_AUDIO_NOT_SUPPORTED = 0xFFFF     
       
    85  } OMX_AUDIO_HWCTRL_STATUSTYPE;
       
    86 
       
    87 
       
    88 
       
    89 /* Configuration parameters */
       
    90 
       
    91 typedef struct OMX_AUDIO_CONFIG_POWERTYPE  { 
       
    92      OMX_U32 nSize;                                    
       
    93      OMX_VERSIONTYPE nVersion;                   
       
    94      OMX_U32 nPortIndex;            
       
    95      OMX_U32 nChannel;
       
    96      OMX_BOOL bPower;
       
    97 } OMX_AUDIO_CONFIG_POWERTYPE;
       
    98 
       
    99 
       
   100 typedef struct OMX_AUDIO_CONFIG_VOLUMERAMPTYPE  { 
       
   101      OMX_U32 nSize;                                    
       
   102      OMX_VERSIONTYPE nVersion;                   
       
   103      OMX_U32 nPortIndex;            
       
   104      OMX_U32 nChannel;
       
   105      OMX_BOOL bLinear;
       
   106      OMX_BS32 sStartVolume;
       
   107      OMX_BS32 sEndVolume;
       
   108      OMX_TICKS nRampDuration;
       
   109      OMX_BOOL bRampTerminate;
       
   110      OMX_BS32 sCurrentVolume;
       
   111      OMX_TICKS nRampCurrentTime;
       
   112      OMX_TICKS nRampMinDuration;
       
   113      OMX_TICKS nRampMaxDuration;
       
   114      OMX_U32 nVolumeStep;
       
   115  } OMX_AUDIO_CONFIG_VOLUMERAMPTYPE;
       
   116 
       
   117 
       
   118  typedef struct OMX_AUDIO_CONFIG_BURSTCONTROLTYPE  { 
       
   119      OMX_U32 nSize;                                    
       
   120      OMX_VERSIONTYPE nVersion;                   
       
   121      OMX_U32 nPortIndex;            
       
   122      OMX_BOOL bBurstControl;
       
   123      OMX_BOOL bStatus;
       
   124  } OMX_AUDIO_CONFIG_BURSTCONTROLTYPE;
       
   125 
       
   126  typedef struct OMX_AUDIO_CONFIG_REGISTERBANKQUERYTYPE  { 
       
   127      OMX_U32 nSize;                                    
       
   128      OMX_VERSIONTYPE nVersion;                   
       
   129      OMX_U32 nPortIndex;   
       
   130      OMX_U16 nNumRegisterBanks;           
       
   131  } OMX_AUDIO_CONFIG_REGISTERBANKQUERYTYPE;
       
   132 
       
   133 
       
   134  typedef enum OMX_AUDIO_HWREGISTERTYPE { 
       
   135      OMX_AUDIO_IO = 0,
       
   136      OMX_AUDIO_I2C,
       
   137      OMX_AUDIO_SLIMBUS,
       
   138      OMX_AUDIO_CBUS = 0xFFFF     
       
   139  } OMX_AUDIO_HWREGISTERTYPE;
       
   140  
       
   141  
       
   142  typedef struct OMX_AUDIO_REGBANKDESCRIPTORTYPE { 
       
   143      OMX_U32 nSize;                                    
       
   144      OMX_VERSIONTYPE nVersion;                   
       
   145      OMX_U32 nRegBankIndex;   
       
   146      OMX_U32 nLogicalStartAddr;
       
   147      OMX_U32 nLogicalEndAddr;
       
   148      OMX_AUDIO_HWREGISTERTYPE eRegBankType;
       
   149        
       
   150  } OMX_AUDIO_REGBANKDESCRIPTORTYPE;
       
   151 
       
   152  typedef struct OMX_AUDIO_CONFIG_REGISTERBANKTABLETYPE  { 
       
   153      OMX_U32 nSize;                                    
       
   154      OMX_VERSIONTYPE nVersion;                   
       
   155      OMX_U32 nPortIndex;   
       
   156      OMX_U16 nNumRegisterBanks; 
       
   157      OMX_AUDIO_REGBANKDESCRIPTORTYPE RegBankDescriptorTable;     
       
   158  } OMX_AUDIO_CONFIG_REGISTERBANKTABLETYPE;
       
   159 
       
   160 
       
   161  typedef struct OMX_AUDIO_CONFIG_CUSTOMHWCONTROLTYPE  { 
       
   162      OMX_U32 nSize;                                    
       
   163      OMX_VERSIONTYPE nVersion;                   
       
   164      OMX_U32 nPortIndex;   
       
   165      OMX_AUDIO_HWCTRL_STATUSTYPE eStatus;
       
   166      OMX_AUDIO_HWOPERATIONTYPE eHwOperation;
       
   167      OMX_AUDIO_HWREGISTERTYPE eRegisterType;
       
   168      OMX_U16 nDataCount;
       
   169      OMX_U32 nLogicalAddress;
       
   170      OMX_U16 nData;     
       
   171  } OMX_AUDIO_CONFIG_CUSTOMHWCONTROLTYPE;
       
   172 
       
   173 typedef struct OMX_AUDIO_CONFIG_HWLOOPSUPPORTTYPE  { 
       
   174      OMX_U32 nSize;                                    
       
   175      OMX_VERSIONTYPE nVersion;                   
       
   176      OMX_U32 nPortIndex;
       
   177      OMX_U32 nSupportedLoops;    
       
   178      OMX_AUDIO_HWLOOPSTYPE eLoopIndex;
       
   179          
       
   180  } OMX_AUDIO_CONFIG_HWLOOPSUPPORTTYPE;
       
   181 
       
   182 typedef struct OMX_AUDIO_CONFIG_HWLOOPCONTROLTYPE  { 
       
   183      OMX_U32 nSize;                                    
       
   184      OMX_VERSIONTYPE nVersion;                   
       
   185      OMX_U32 nPortIndex;   
       
   186      OMX_AUDIO_HWLOOPSTYPE eLoopIndex;
       
   187      OMX_U32 nChannel;
       
   188      OMX_BOOL bControlSwitch;
       
   189      OMX_BOOL bLinear;
       
   190      OMX_BS32 sLoopVolume;
       
   191      
       
   192  } OMX_AUDIO_CONFIG_HWLOOPCONTROLTYPE;
       
   193 
       
   194 
       
   195 
       
   196 /* End of OMX part */
       
   197 
       
   198 /************  non-OMX interface definition **************/  
       
   199 
       
   200 /* types and constants used by non-OMX APIs */
       
   201 
       
   202 /* channel ID denoting special case of all channels being selected 
       
   203    where possible */       
       
   204 #define AUDIO_COMMON_CHANNEL_ALL	0x7FFFFFFF
       
   205 
       
   206 typedef enum AUDIO_COMMON_SWITCH { 
       
   207      AUDIO_COMMON_OFF = 0,
       
   208      AUDIO_COMMON_ON,  
       
   209      AUDIO_COMMON_UNSUPPORTED = 0xFFFF     
       
   210  } AUDIO_COMMON_SWITCH;
       
   211 
       
   212 
       
   213 typedef enum AUDIO_COMMON_STATUS { 
       
   214      AUDIO_COMMON_OK = 0,
       
   215      AUDIO_COMMON_FAIL,  
       
   216      AUDIO_COMMON_UNSUPPORTED = 0xFFFF     
       
   217 } AUDIO_COMMON_STATUS;
       
   218         
       
   219 typedef enum AUDIO_HAL_HW_LOOPS { 
       
   220      AUDIO_NOLOOP = 0,
       
   221      AUDIO_SIDETONE_LOOP = 0xFFFF
       
   222      /* rest of HW loops are to be defined on a vendor specific basis */
       
   223      
       
   224 } AUDIO_HAL_HW_LOOPS;
       
   225         
       
   226 typedef enum AUDIO_HAL_HW_OPERATION{ 
       
   227      AUDIO_HAL_NOOP = 0,
       
   228      AUDIO_HAL_16BIT_SINGLE_READ,
       
   229      AUDIO_HAL_16BIT_SINGLE_WRITE,
       
   230      AUDIO_HAL_32BIT_SINGLE_READ,
       
   231      AUDIO_HAL_32BIT_SINGLE_WRITE,
       
   232      AUDIO_HAL_16BIT_MULTI_READ,
       
   233      AUDIO_HAL_16BIT_MULTI_WRITE,
       
   234      AUDIO_HAL_32BIT_MULTI_READ,
       
   235      AUDIO_HAL_32BIT_MULTI_WRITE,
       
   236      AUDIO_HAL_16BIT_BURST_MULTI_READ,
       
   237      AUDIO_HAL_16BIT_BURST_MULTI_WRITE,
       
   238      AUDIO_HAL_32BIT_BURST_MULTI_READ,
       
   239      AUDIO_HAL_32BIT_BURST_MULTI_WRITE = 0xFFFF     
       
   240 } AUDIO_HAL_HW_OPERATION;
       
   241 
       
   242 typedef enum AUDIO_HAL_HW_REGISTER_TYPE { 
       
   243      OMX_AUDIO_IO = 0,
       
   244      OMX_AUDIO_I2C,
       
   245      OMX_AUDIO_SLIMBUS,
       
   246      OMX_AUDIO_CBUS = 0xFFFF     
       
   247 } AUDIO_HAL_HW_REGISTER_TYPE;
       
   248 
       
   249 
       
   250 /** 16 bit unsigned quantity that is 16 bit word aligned */
       
   251 typedef unsigned short uint16;
       
   252 
       
   253 /** 16 bit signed quantity that is 16 bit word aligned */
       
   254 typedef signed short int16;
       
   255 
       
   256 /** 32 bit unsigned quantity that is 32 bit word aligned */
       
   257 typedef unsigned long uint32;
       
   258 
       
   259 /** signed quantity that is 32 bit word aligned */
       
   260 typedef signed long int32;
       
   261 
       
   262 typedef struct AUDIO_HAL_REGBANK_DESCRIPTOR{ 
       
   263      uint32 reg_bank_index;   
       
   264      uint32 logical_start_addr;
       
   265      uint32 logical_end_addr;
       
   266      AUDIO_HAL_HW_REGISTER_TYPE reg_bank_type;
       
   267 } AUDIO_HAL_REGBANK_DESCRIPTOR;
       
   268 
       
   269 typedef struct AUDIO_HAL_GAIN_DESCRIPTOR  { 
       
   270      uint32 channel_index; 
       
   271      uint16 gain_index;
       
   272      uint32 linear;
       
   273      int32 min_gain;
       
   274      int32 max_gain;
       
   275      uint32 gain_step;
       
   276      uint32 analog_gain;
       
   277      
       
   278 } AUDIO_HAL_GAIN_DESCRIPTOR;
       
   279 
       
   280 typedef struct AUDIO_TIMED_RAMP_INFO  { 
       
   281 
       
   282       uint32 linear,
       
   283       int32 ramp_start_volume;
       
   284       int32 ramp_end_volume;
       
   285       int32 current_volume;
       
   286       uint32 current_time_hi;
       
   287       uint32 current_time_lo;
       
   288       uint32 ramp_min_duration_hi;
       
   289       uint32 ramp_min_duration_lo;
       
   290       uint32 ramp_max_duration_hi;
       
   291       uint32 ramp_max_duration_lo;
       
   292       int32 min_volume;
       
   293       int32 max_volume;
       
   294       uint32 volume_step;
       
   295      
       
   296 } AUDIO_TIMED_RAMP_INFO;
       
   297 
       
   298 
       
   299 /* API functions */
       
   300 
       
   301 /* The convention for the functions will be:       */
       
   302 /* <supplier>_<component>_<API function name(...)>    */
       
   303 
       
   304 /* HAL layer */
       
   305 
       
   306 void audio_hal_mute_control (void (*call_back_fn_ptr)(AUDIO_COMMON_STATUS status), 
       
   307                              uint32 channel_index, 
       
   308                              AUDIO_COMMON_SWITCH mute_control);
       
   309 
       
   310 AUDIO_COMMON_SWITCH audio_hal_mute_status (uint32 channel_index);
       
   311 
       
   312 void audio_hal_power_control (void (*call_back_fn_ptr)(AUDIO_COMMON_STATUS status), 
       
   313                              uint32 channel_index, AUDIO_COMMON_SWITCH power_control);
       
   314 
       
   315 AUDIO_COMMON_SWITCH audio_hal_power_status(uint32 channel_index);
       
   316 
       
   317 void audio_hal_gain_capabilities_query(uint32* num_channels, uint16* max_num_gains);
       
   318 
       
   319 void audio_hal_gains_descriptor_query(AUDIO_HAL_GAIN_DESCRIPTOR* gain_descriptor_table);
       
   320 
       
   321 void audio_hal_loop_gain_capabilities_query(AUDIO_HAL_HW_LOOPS* num_loops, uint16* max_num_gains);
       
   322 
       
   323 void audio_hal_supported_loops_query (uint16* supported_loop_indexes);
       
   324 
       
   325 void audio_hal_loop_gains_descriptor_query (AUDIO_HAL_HW_LOOPS loop_index,
       
   326                                     AUDIO_HAL_GAIN_DESCRIPTOR* gain_descriptor_table);
       
   327 
       
   328 AUDIO_COMMON_STATUS audio_hal_gain_control (uint32 channel_index, uint16 gain_index,
       
   329                                     uint32 linear, int32 gain_value);
       
   330 
       
   331 AUDIO_COMMON_STATUS audio_hal_gain_query (uint32 channel_index, uint16 gain_index,
       
   332                                     uint32 linear, int32* gain_value);
       
   333 
       
   334 AUDIO_COMMON_STATUS audio_hal_loop_control(AUDIO_HAL_HW_LOOPS loop_index, AUDIO_COMMON_SWITCH loop_switch,
       
   335                                     uint16 channel_index, uint16 gain_index, uint32 linear,
       
   336                                     int32 loop_gain_value);
       
   337 
       
   338 															             
       
   339 uint16 audio_hal_registerbank_query();
       
   340 
       
   341 void audio_hal_regbank_descriptors_query(AUDIO_HAL_REGBANK_DESCRIPTOR* register_banks);
       
   342 
       
   343 void audio_hal_custom_hw_control (void (*call_back_fn_ptr)(AUDIO_COMMON_STATUS status, uint32 extra_status_info), 
       
   344                                  AUDIO_HAL_HW_OPERATION hw_operation, AUDIO_HAL_HW_REGISTER_TYPE register_type,
       
   345                                  uint16 num_data, uint32* address_data_sequence);
       
   346 
       
   347                                  
       
   348 /* Sequencer layer */
       
   349 void audio_sequencer_mute_control(void (*call_back_fn_ptr)(AUDIO_COMMON_STATUS status), 
       
   350                                   uint32 channel_index, AUDIO_COMMON_SWITCH mute_control);
       
   351 
       
   352 void audio_sequencer_power_control(void (*call_back_fn_ptr)(AUDIO_COMMON_STATUS status), 
       
   353                                   uint32 channel_index, AUDIO_COMMON_SWITCH power_control);
       
   354                                   
       
   355 AUDIO_COMMON_STATUS audio_sequencer_burst_control(void (*call_back_fn_ptr)(AUDIO_COMMON_STATUS status), 
       
   356                                                   AUDIO_COMMON_SWITCH burst_control);
       
   357 
       
   358 void audio_sequencer_volume_control(void (*call_back_fn_ptr)(AUDIO_COMMON_STATUS status), 
       
   359                                      uint32 channel_index, uint32 linear, int32 volume);
       
   360 
       
   361 void audio_sequencer_volume_query(uint32 channel_index, uint32 linear, int32* min_volume,
       
   362                                    int32* max_volume, int32* current_volume);
       
   363 
       
   364 /* Timing critical layer */
       
   365 void audio_timed_mute_control(void (*call_back_fn_ptr)(AUDIO_COMMON_STATUS status), 
       
   366                               uint32 channel_index, AUDIO_COMMON_SWITCH mute_control);
       
   367                               
       
   368 void audio_timed_volume_ramp_control (void (*call_back_fn_ptr)(AUDIO_COMMON_STATUS status), 
       
   369                              uint32 channel_index, uint32 linear, int32 start_volume,
       
   370                              int32 end_volume, uint32 ramp_duration_hi, uint32 ram_duration_lo,
       
   371                              AUDIO_COMMON_SWITCH ramp_terminate);
       
   372 
       
   373 void audio_timed_volume_ramp_query (uint32 channel_index, AUDIO_TIMED_RAMP_INFO* volume_ramp_info);
       
   374 
       
   375 
       
   376                                      
       
   377 
       
   378 #ifdef __cplusplus
       
   379 }
       
   380 #endif /* __cplusplus */
       
   381 
       
   382 #endif