On Tue, Oct 28, 2014 at 11:26:21AM +0000, Qais Yousef wrote:
> +
> +/* Register I/F */
> +#define AXD_REG_VERSION                                                      
> 0x0000
> +#define AXD_REG_CONFIG0                                                      
> 0x0004
> +#define AXD_REG_CONFIG1                                                      
> 0x0008
> +#define AXD_REG_CONFIG2                                                      
> 0x000C
> +#define AXD_REG_CONFIG3                                                      
> 0x0010
> +#define AXD_REG_BUFFER_BASE                                          0x0014
> +#define AXD_REG_DEBUG_MASK                                           0x0018
> +/* 0x1c reserved */
> +#define AXD_REG_INPUT0_CONTROL                                               
> 0x0020
> +#define AXD_REG_INPUT0_GAIN                                          0x0024
> +#define AXD_REG_INPUT0_UPMIX                                         0x0028
> +#define AXD_REG_INPUT1_CONTROL                                               
> 0x0030
> +#define AXD_REG_INPUT1_GAIN                                          0x0034
> +#define AXD_REG_INPUT1_UPMIX                                         0x0038
> +#define AXD_REG_INPUT2_CONTROL                                               
> 0x0040
> +#define AXD_REG_INPUT2_GAIN                                          0x0044
> +#define AXD_REG_INPUT2_UPMIX                                         0x0048
> +#define AXD_REG_INPUT0_MUTE                                          0x0050
> +#define AXD_REG_INPUT1_MUTE                                          0x0054
> +#define AXD_REG_INPUT2_MUTE                                          0x0058
> +#define AXD_REG_MIXER_CONTROL                                                
> 0x0080
> +#define AXD_REG_EQ_CTRL_GAIN                                         0x0084
> +#define AXD_REG_EQ_BAND0                                             0x0088
> +#define AXD_REG_EQ_BAND1                                             0x008C
> +#define AXD_REG_EQ_BAND2                                             0x0090
> +#define AXD_REG_EQ_BAND3                                             0x0094
> +#define AXD_REG_EQ_BAND4                                             0x0098
> +#define AXD_REG_MUX0                                                 0x00B0
> +#define AXD_REG_MUX1                                                 0x00B4
> +#define AXD_REG_MUX2                                                 0x00B8
> +#define AXD_REG_OUTPUT0_CONTROL                                              
> 0x00D0
> +#define AXD_REG_OUTPUT0_DOWNMIX                                              
> 0x00D4
> +#define AXD_REG_OUTPUT0_EQCTRL                                               
> 0x00D8
> +#define AXD_REG_OUTPUT0_EQBAND0                                              
> 0x00DC
> +#define AXD_REG_OUTPUT0_EQBAND1                                              
> 0x00E0
> +#define AXD_REG_OUTPUT0_EQBAND2                                              
> 0x00E4
> +#define AXD_REG_OUTPUT0_EQBAND3                                              
> 0x00E8
> +#define AXD_REG_OUTPUT0_EQBAND4                                              
> 0x00EC
> +#define AXD_REG_OUTPUT1_CONTROL                                              
> 0x00F0
> +#define AXD_REG_OUTPUT1_DOWNMIX                                              
> 0x00F4
> +#define AXD_REG_OUTPUT1_EQCTRL                                               
> 0x00F8
> +#define AXD_REG_OUTPUT1_EQBAND0                                              
> 0x00FC
> +#define AXD_REG_OUTPUT1_EQBAND1                                              
> 0x0100
> +#define AXD_REG_OUTPUT1_EQBAND2                                              
> 0x0104
> +#define AXD_REG_OUTPUT1_EQBAND3                                              
> 0x0108
> +#define AXD_REG_OUTPUT1_EQBAND4                                              
> 0x010C
> +#define AXD_REG_OUTPUT2_CONTROL                                              
> 0x0110
> +#define AXD_REG_OUTPUT2_DOWNMIX                                              
> 0x0114
> +#define AXD_REG_OUTPUT2_EQCTRL                                               
> 0x0118
> +#define AXD_REG_OUTPUT2_EQBAND0                                              
> 0x011C
> +#define AXD_REG_OUTPUT2_EQBAND1                                              
> 0x0120
> +#define AXD_REG_OUTPUT2_EQBAND2                                              
> 0x0124
> +#define AXD_REG_OUTPUT2_EQBAND3                                              
> 0x0128
> +#define AXD_REG_OUTPUT2_EQBAND4                                              
> 0x012c
> +#define AXD_REG_DEC0_AAC_VERSION                                     0x0200
> +#define AXD_REG_DEC0_AAC_CHANNELS                                    0x0204
> +#define AXD_REG_DEC0_AAC_PROFILE                                     0x0208
> +#define AXD_REG_DEC0_AAC_STREAM_TYPE                                 0x020C
> +#define AXD_REG_DEC0_AAC_SAMPLERATE                                  0x0210
> +#define AXD_REG_DEC1_AAC_VERSION                                     0x0220
> +#define AXD_REG_DEC1_AAC_CHANNELS                                    0x0224
> +#define AXD_REG_DEC1_AAC_PROFILE                                     0x0228
> +#define AXD_REG_DEC1_AAC_STREAM_TYPE                                 0x022C
> +#define AXD_REG_DEC1_AAC_SAMPLERATE                                  0x0230
> +#define AXD_REG_DEC2_AAC_VERSION                                     0x0240
> +#define AXD_REG_DEC2_AAC_CHANNELS                                    0x0244
> +#define AXD_REG_DEC2_AAC_PROFILE                                     0x0248
> +#define AXD_REG_DEC2_AAC_STREAM_TYPE                                 0x024C
> +#define AXD_REG_DEC2_AAC_SAMPLERATE                                  0x0250
> +#define AXD_REG_DEC0_COOK_FLAVOUR                                    0x0260
> +#define AXD_REG_DEC1_COOK_FLAVOUR                                    0x0264
> +#define AXD_REG_DEC2_COOK_FLAVOUR                                    0x0268
> +#define AXD_REG_DEC0_FLAC_CHANNELS                                   0x0270
> +#define AXD_REG_DEC0_FLAC_SAMPLERATE                                 0x0274
> +#define AXD_REG_DEC0_FLAC_BITS_PER_SAMPLE                            0x0278
> +#define AXD_REG_DEC0_FLAC_MD5_CHECKING                                       
> 0x027C
> +#define AXD_REG_DEC1_FLAC_CHANNELS                                   0x0280
> +#define AXD_REG_DEC1_FLAC_SAMPLERATE                                 0x0284
> +#define AXD_REG_DEC1_FLAC_BITS_PER_SAMPLE                            0x0288
> +#define AXD_REG_DEC1_FLAC_MD5_CHECKING                                       
> 0x028C
> +#define AXD_REG_DEC2_FLAC_CHANNELS                                   0x0290
> +#define AXD_REG_DEC2_FLAC_SAMPLERATE                                 0x0294
> +#define AXD_REG_DEC2_FLAC_BITS_PER_SAMPLE                            0x0298
> +#define AXD_REG_DEC2_FLAC_MD5_CHECKING                                       
> 0x029C
> +#define AXD_REG_DEC0_MPEG_CHANNELS                                   0x02A0
> +#define AXD_REG_DEC0_MPEG_MLCHANNEL                                  0x02A4
> +#define AXD_REG_DEC1_MPEG_CHANNELS                                   0x02A8
> +#define AXD_REG_DEC1_MPEG_MLCHANNEL                                  0x02AC
> +#define AXD_REG_DEC2_MPEG_CHANNELS                                   0x02B0
> +#define AXD_REG_DEC2_MPEG_MLCHANNEL                                  0x02B4
> +#define AXD_REG_DEC0_WMA_PLAYER_OPT                                  0x02D0
> +#define AXD_REG_DEC0_WMA_DRC_SETTING                                 0x02D4
> +#define AXD_REG_DEC0_WMA_PEAK_AMP_REF                                        
> 0x02D8
> +#define AXD_REG_DEC0_WMA_RMS_AMP_REF                                 0x02DC
> +#define AXD_REG_DEC0_WMA_PEAK_AMP_TARGET                             0x02E0
> +#define AXD_REG_DEC0_WMA_RMS_AMP_TARGET                                      
> 0x02E4
> +#define AXD_REG_DEC0_WMA_PCM_VAL_BITS_PER_SAMPLE                     0x02F4
> +#define AXD_REG_DEC0_WMA_PCM_CONTAINER_SIZE                          0x02F8
> +#define AXD_REG_DEC0_WMA_WMA_FORMAT_TAG                                      
> 0x02FC
> +#define AXD_REG_DEC0_WMA_WMA_CHANNELS                                        
> 0x0300
> +#define AXD_REG_DEC0_WMA_WMA_SAMPLES_PER_SEC                         0x0304
> +#define AXD_REG_DEC0_WMA_WMA_AVG_BYTES_PER_SEC                               
> 0x0308
> +#define AXD_REG_DEC0_WMA_WMA_BLOCK_ALIGN                             0x030C
> +#define AXD_REG_DEC0_WMA_WMA_VAL_BITS_PER_SAMPLE                     0x0310
> +#define AXD_REG_DEC0_WMA_WMA_CHANNEL_MASK                            0x0314
> +#define AXD_REG_DEC0_WMA_WMA_ENCODE_OPTS                             0x0318
> +#define AXD_REG_DEC1_WMA_PLAYER_OPT                                  0x0320
> +#define AXD_REG_DEC1_WMA_DRC_SETTING                                 0x0324
> +#define AXD_REG_DEC1_WMA_PEAK_AMP_REF                                        
> 0x0328
> +#define AXD_REG_DEC1_WMA_RMS_AMP_REF                                 0x032C
> +#define AXD_REG_DEC1_WMA_PEAK_AMP_TARGET                             0x0330
> +#define AXD_REG_DEC1_WMA_RMS_AMP_TARGET                                      
> 0x0334
> +#define AXD_REG_DEC1_WMA_PCM_VAL_BITS_PER_SAMPLE                     0x0344
> +#define AXD_REG_DEC1_WMA_PCM_CONTAINER_SIZE                          0x0348
> +#define AXD_REG_DEC1_WMA_WMA_FORMAT_TAG                                      
> 0x034C
> +#define AXD_REG_DEC1_WMA_WMA_CHANNELS                                        
> 0x0350
> +#define AXD_REG_DEC1_WMA_WMA_SAMPLES_PER_SEC                         0x0354
> +#define AXD_REG_DEC1_WMA_WMA_AVG_BYTES_PER_SEC                               
> 0x0358
> +#define AXD_REG_DEC1_WMA_WMA_BLOCK_ALIGN                             0x035C
> +#define AXD_REG_DEC1_WMA_WMA_VAL_BITS_PER_SAMPLE                     0x0360
> +#define AXD_REG_DEC1_WMA_WMA_CHANNEL_MASK                            0x0364
> +#define AXD_REG_DEC1_WMA_WMA_ENCODE_OPTS                             0x0368
> +#define AXD_REG_DEC2_WMA_PLAYER_OPT                                  0x0370
> +#define AXD_REG_DEC2_WMA_DRC_SETTING                                 0x0374
> +#define AXD_REG_DEC2_WMA_PEAK_AMP_REF                                        
> 0x0378
> +#define AXD_REG_DEC2_WMA_RMS_AMP_REF                                 0x037C
> +#define AXD_REG_DEC2_WMA_PEAK_AMP_TARGET                             0x0380
> +#define AXD_REG_DEC2_WMA_RMS_AMP_TARGET                                      
> 0x0384
> +#define AXD_REG_DEC2_WMA_PCM_VAL_BITS_PER_SAMPLE                     0x0394
> +#define AXD_REG_DEC2_WMA_PCM_CONTAINER_SIZE                          0x0398
> +#define AXD_REG_DEC2_WMA_WMA_FORMAT_TAG                                      
> 0x039C
> +#define AXD_REG_DEC2_WMA_WMA_CHANNELS                                        
> 0x03A0
> +#define AXD_REG_DEC2_WMA_WMA_SAMPLES_PER_SEC                         0x03A4
> +#define AXD_REG_DEC2_WMA_WMA_AVG_BYTES_PER_SEC                               
> 0x03A8
> +#define AXD_REG_DEC2_WMA_WMA_BLOCK_ALIGN                             0x03AC
> +#define AXD_REG_DEC2_WMA_WMA_VAL_BITS_PER_SAMPLE                     0x03B0
> +#define AXD_REG_DEC2_WMA_WMA_CHANNEL_MASK                            0x03B4
> +#define AXD_REG_DEC2_WMA_WMA_ENCODE_OPTS                             0x03B8
> +#define AXD_REG_PCMIN0_SAMPLE_RATE                                   0x3C0
> +#define AXD_REG_PCMIN0_CHANNELS                                              
> 0x3C4
> +#define AXD_REG_PCMIN0_BITS_PER_SAMPLE                                       
> 0x3C8
> +#define AXD_REG_PCMIN0_JUSTIFICATION                                 0x3CC
> +#define AXD_REG_PCMIN1_SAMPLE_RATE                                   0x3D0
> +#define AXD_REG_PCMIN1_CHANNELS                                              
> 0x3D4
> +#define AXD_REG_PCMIN1_BITS_PER_SAMPLE                                       
> 0x3D8
> +#define AXD_REG_PCMIN1_JUSTIFICATION                                 0x3DC
> +#define AXD_REG_PCMIN2_SAMPLE_RATE                                   0x3E0
> +#define AXD_REG_PCMIN2_CHANNELS                                              
> 0x3E4
> +#define AXD_REG_PCMIN2_BITS_PER_SAMPLE                                       
> 0x3E8
> +#define AXD_REG_PCMIN2_JUSTIFICATION                                 0x3EC
> +#define AXD_REG_PCMOUT0_BITS_PER_SAMPLE                                      
> 0x3F0
> +#define AXD_REG_PCMOUT0_JUSTIFICATION                                        
> 0x3F4
> +#define AXD_REG_PCMOUT1_BITS_PER_SAMPLE                                      
> 0x3F8
> +#define AXD_REG_PCMOUT1_JUSTIFICATION                                        
> 0x3FC
> +#define AXD_REG_PCMOUT2_BITS_PER_SAMPLE                                      
> 0x400
> +#define AXD_REG_PCMOUT2_JUSTIFICATION                                        
> 0x404
> +#define AXD_REG_DEC0_AC3_CHANNELS                                    0x410
> +#define AXD_REG_DEC0_AC3_CHANNEL_ORDER                                       
> 0x414
> +#define AXD_REG_DEC0_AC3_MODE                                                
> 0x418
> +#define AXD_REG_DEC1_AC3_CHANNELS                                    0x420
> +#define AXD_REG_DEC1_AC3_CHANNEL_ORDER                                       
> 0x424
> +#define AXD_REG_DEC1_AC3_MODE                                                
> 0x428
> +#define AXD_REG_DEC2_AC3_CHANNELS                                    0x430
> +#define AXD_REG_DEC2_AC3_CHANNEL_ORDER                                       
> 0x434
> +#define AXD_REG_DEC2_AC3_MODE                                                
> 0x438
> +#define AXD_REG_DEC0_DDPLUS_CONFIG                                   0x440
> +#define AXD_REG_DEC0_DDPLUS_CHANNEL_ORDER                            0x444
> +#define AXD_REG_DEC1_DDPLUS_CONFIG                                   0x448
> +#define AXD_REG_DEC1_DDPLUS_CHANNEL_ORDER                            0x44C
> +#define AXD_REG_DEC2_DDPLUS_CONFIG                                   0x450
> +#define AXD_REG_DEC2_DDPLUS_CHANNEL_ORDER                            0x454
> +#define AXD_REG_EQ_OUT0_POWER_B0_C0_C3                                       
> 0x460
> +#define AXD_REG_EQ_OUT0_POWER_B0_C4_C7                                       
> 0x464
> +#define AXD_REG_EQ_OUT0_POWER_B1_C0_C3                                       
> 0x468
> +#define AXD_REG_EQ_OUT0_POWER_B1_C4_C7                                       
> 0x46C
> +#define AXD_REG_EQ_OUT0_POWER_B2_C0_C3                                       
> 0x470
> +#define AXD_REG_EQ_OUT0_POWER_B2_C4_C7                                       
> 0x474
> +#define AXD_REG_EQ_OUT0_POWER_B3_C0_C3                                       
> 0x478
> +#define AXD_REG_EQ_OUT0_POWER_B3_C4_C7                                       
> 0x47C
> +#define AXD_REG_EQ_OUT0_POWER_B4_C0_C3                                       
> 0x480
> +#define AXD_REG_EQ_OUT0_POWER_B4_C4_C7                                       
> 0x484
> +#define AXD_REG_EQ_OUT1_POWER_B0_C0_C3                                       
> 0x488
> +#define AXD_REG_EQ_OUT1_POWER_B0_C4_C7                                       
> 0x48C
> +#define AXD_REG_EQ_OUT1_POWER_B1_C0_C3                                       
> 0x490
> +#define AXD_REG_EQ_OUT1_POWER_B1_C4_C7                                       
> 0x494
> +#define AXD_REG_EQ_OUT1_POWER_B2_C0_C3                                       
> 0x498
> +#define AXD_REG_EQ_OUT1_POWER_B2_C4_C7                                       
> 0x49C
> +#define AXD_REG_EQ_OUT1_POWER_B3_C0_C3                                       
> 0x4A0
> +#define AXD_REG_EQ_OUT1_POWER_B3_C4_C7                                       
> 0x4A4
> +#define AXD_REG_EQ_OUT1_POWER_B4_C0_C3                                       
> 0x4A8
> +#define AXD_REG_EQ_OUT1_POWER_B4_C4_C7                                       
> 0x4AC
> +#define AXD_REG_EQ_OUT2_POWER_B0_C0_C3                                       
> 0x4B0
> +#define AXD_REG_EQ_OUT2_POWER_B0_C4_C7                                       
> 0x4B4
> +#define AXD_REG_EQ_OUT2_POWER_B1_C0_C3                                       
> 0x4B8
> +#define AXD_REG_EQ_OUT2_POWER_B1_C4_C7                                       
> 0x4BC
> +#define AXD_REG_EQ_OUT2_POWER_B2_C0_C3                                       
> 0x4C0
> +#define AXD_REG_EQ_OUT2_POWER_B2_C4_C7                                       
> 0x4C4
> +#define AXD_REG_EQ_OUT2_POWER_B3_C0_C3                                       
> 0x4C8
> +#define AXD_REG_EQ_OUT2_POWER_B3_C4_C7                                       
> 0x4CC
> +#define AXD_REG_EQ_OUT2_POWER_B4_C0_C3                                       
> 0x4D0
> +#define AXD_REG_EQ_OUT2_POWER_B4_C4_C7                                       
> 0x4D4
> +#define AXD_REG_RESAMPLER0_FIN                                               
> 0x4E0
> +#define AXD_REG_RESAMPLER0_FOUT                                              
> 0x4E4
> +#define AXD_REG_RESAMPLER1_FIN                                               
> 0x4E8
> +#define AXD_REG_RESAMPLER1_FOUT                                              
> 0x4EC
> +#define AXD_REG_RESAMPLER2_FIN                                               
> 0x4F0
> +#define AXD_REG_RESAMPLER2_FOUT                                              
> 0x4f4
> +#define AXD_REG_DEC0_ALAC_CHANNELS                                   0x500
> +#define AXD_REG_DEC0_ALAC_DEPTH                                              
> 0x504
> +#define AXD_REG_DEC0_ALAC_SAMPLE_RATE                                        
> 0x508
> +#define AXD_REG_DEC0_ALAC_FRAME_LENGTH                                       
> 0x50C
> +#define AXD_REG_DEC0_ALAC_MAX_FRAME_BYTES                            0x510
> +#define AXD_REG_DEC0_ALAC_AVG_BIT_RATE                                       
> 0x514
> +#define AXD_REG_DEC1_ALAC_CHANNELS                                   0x520
> +#define AXD_REG_DEC1_ALAC_DEPTH                                              
> 0x524
> +#define AXD_REG_DEC1_ALAC_SAMPLE_RATE                                        
> 0x528
> +#define AXD_REG_DEC1_ALAC_FRAME_LENGTH                                       
> 0x52C
> +#define AXD_REG_DEC1_ALAC_MAX_FRAME_BYTES                            0x530
> +#define AXD_REG_DEC1_ALAC_AVG_BIT_RATE                                       
> 0x534
> +#define AXD_REG_DEC2_ALAC_CHANNELS                                   0x540
> +#define AXD_REG_DEC2_ALAC_DEPTH                                              
> 0x544
> +#define AXD_REG_DEC2_ALAC_SAMPLE_RATE                                        
> 0x548
> +#define AXD_REG_DEC2_ALAC_FRAME_LENGTH                                       
> 0x54C
> +#define AXD_REG_DEC2_ALAC_MAX_FRAME_BYTES                            0x550
> +#define AXD_REG_DEC2_ALAC_AVG_BIT_RATE                                       
> 0x554
> +/* 0x558 to 0x55C reserved */
> +#define AXD_REG_ENC0_FLAC_CHANNELS                                   0x560
> +#define AXD_REG_ENC0_FLAC_BITS_PER_SAMPLE                            0x564
> +#define AXD_REG_ENC0_FLAC_SAMPLE_RATE                                        
> 0x568
> +#define AXD_REG_ENC0_FLAC_TOTAL_SAMPLES                                      
> 0x56C
> +#define AXD_REG_ENC0_FLAC_DO_MID_SIDE_STEREO                         0x570
> +#define AXD_REG_ENC0_FLAC_LOOSE_MID_SIDE_STEREO                              
> 0x574
> +#define AXD_REG_ENC0_FLAC_DO_EXHAUSTIVE_MODEL_SEARCH                 0x578
> +#define AXD_REG_ENC0_FLAC_MIN_RESIDUAL_PARTITION_ORDER                       
> 0x57C
> +#define AXD_REG_ENC0_FLAC_MAX_RESIDUAL_PARTITION_ORDER                       
> 0x580
> +#define AXD_REG_ENC0_FLAC_BLOCK_SIZE                                 0x584
> +#define AXD_REG_ENC0_FLAC_BYTE_COUNT                                 0x588
> +#define AXD_REG_ENC0_FLAC_SAMPLE_COUNT                                       
> 0x58C
> +#define AXD_REG_ENC0_FLAC_FRAME_COUNT                                        
> 0x590
> +#define AXD_REG_ENC0_FLAC_FRAME_BYTES                                        
> 0x594
> +/* 0x598 to 0x59C reserved */
> +#define AXD_REG_ENC1_FLAC_CHANNELS                                   0x5A0
> +#define AXD_REG_ENC1_FLAC_BITS_PER_SAMPLE                            0x5A4
> +#define AXD_REG_ENC1_FLAC_SAMPLE_RATE                                        
> 0x5A8
> +#define AXD_REG_ENC1_FLAC_TOTAL_SAMPLES                                      
> 0x5AC
> +#define AXD_REG_ENC1_FLAC_DO_MID_SIDE_STEREO                         0x5B0
> +#define AXD_REG_ENC1_FLAC_LOOSE_MID_SIDE_STEREO                              
> 0x5B4
> +#define AXD_REG_ENC1_FLAC_DO_EXHAUSTIVE_MODEL_SEARCH                 0x5B8
> +#define AXD_REG_ENC1_FLAC_MIN_RESIDUAL_PARTITION_ORDER                       
> 0x5BC
> +#define AXD_REG_ENC1_FLAC_MAX_RESIDUAL_PARTITION_ORDER                       
> 0x5C0
> +#define AXD_REG_ENC1_FLAC_BLOCK_SIZE                                 0x5C4
> +#define AXD_REG_ENC1_FLAC_BYTE_COUNT                                 0x5C8
> +#define AXD_REG_ENC1_FLAC_SAMPLE_COUNT                                       
> 0x5CC
> +#define AXD_REG_ENC1_FLAC_FRAME_COUNT                                        
> 0x5D0
> +#define AXD_REG_ENC1_FLAC_FRAME_BYTES                                        
> 0x5D4
> +/* 0x5D8 to 0x5DC reserved */
> +#define AXD_REG_ENC2_FLAC_CHANNELS                                   0x5E0
> +#define AXD_REG_ENC2_FLAC_BITS_PER_SAMPLE                            0x5E4
> +#define AXD_REG_ENC2_FLAC_SAMPLE_RATE                                        
> 0x5E8
> +#define AXD_REG_ENC2_FLAC_TOTAL_SAMPLES                                      
> 0x5EC
> +#define AXD_REG_ENC2_FLAC_DO_MID_SIDE_STEREO                         0x5F0
> +#define AXD_REG_ENC2_FLAC_LOOSE_MID_SIDE_STEREO                              
> 0x5F4
> +#define AXD_REG_ENC2_FLAC_DO_EXHAUSTIVE_MODEL_SEARCH                 0x5F8
> +#define AXD_REG_ENC2_FLAC_MIN_RESIDUAL_PARTITION_ORDER                       
> 0x5FC
> +#define AXD_REG_ENC2_FLAC_MAX_RESIDUAL_PARTITION_ORDER                       
> 0x600
> +#define AXD_REG_ENC2_FLAC_BLOCK_SIZE                                 0x604
> +#define AXD_REG_ENC2_FLAC_BYTE_COUNT                                 0x608
> +#define AXD_REG_ENC2_FLAC_SAMPLE_COUNT                                       
> 0x60C
> +#define AXD_REG_ENC2_FLAC_FRAME_COUNT                                        
> 0x610
> +#define AXD_REG_ENC2_FLAC_FRAME_BYTES                                        
> 0x614
> +/* 0x618 to 0x61C reserved */
> +#define AXD_REG_ENC0_ALAC_CHANNELS                                   0x620
> +#define AXD_REG_ENC0_ALAC_DEPTH                                              
> 0x624
> +#define AXD_REG_ENC0_ALAC_SAMPLE_RATE                                        
> 0x628
> +#define AXD_REG_ENC0_ALAC_FRAME_LENGTH                                       
> 0x62C
> +#define AXD_REG_ENC0_ALAC_MAX_FRAME_BYTES                            0x630
> +#define AXD_REG_ENC0_ALAC_AVG_BIT_RATE                                       
> 0x634
> +#define AXD_REG_ENC0_ALAC_FAST_MODE                                  0x638
> +/* 0x63C to 0x64C reserved */
> +#define AXD_REG_ENC1_ALAC_CHANNELS                                   0x650
> +#define AXD_REG_ENC1_ALAC_DEPTH                                              
> 0x654
> +#define AXD_REG_ENC1_ALAC_SAMPLE_RATE                                        
> 0x658
> +#define AXD_REG_ENC1_ALAC_FRAME_LENGTH                                       
> 0x65C
> +#define AXD_REG_ENC1_ALAC_MAX_FRAME_BYTES                            0x660
> +#define AXD_REG_ENC1_ALAC_AVG_BIT_RATE                                       
> 0x664
> +#define AXD_REG_ENC1_ALAC_FAST_MODE                                  0x668
> +/* 0x66C to 0x67C reserved */
> +#define AXD_REG_ENC2_ALAC_CHANNELS                                   0x680
> +#define AXD_REG_ENC2_ALAC_DEPTH                                              
> 0x684
> +#define AXD_REG_ENC2_ALAC_SAMPLE_RATE                                        
> 0x688
> +#define AXD_REG_ENC2_ALAC_FRAME_LENGTH                                       
> 0x68C
> +#define AXD_REG_ENC2_ALAC_MAX_FRAME_BYTES                            0x690
> +#define AXD_REG_ENC2_ALAC_AVG_BIT_RATE                                       
> 0x694
> +#define AXD_REG_ENC2_ALAC_FAST_MODE                                  0x698
> +/* 0x69C to 0x6AC reserved */
> +#define AXD_REG_MS11_MODE                                            0x6B0
> +#define AXD_REG_MS11_COMMON_CONFIG0                                  0x6B4
> +#define AXD_REG_MS11_COMMON_CONFIG1                                  0x6B8
> +#define AXD_REG_MS11_DDT_CONFIG0                                     0x6Bc
> +#define AXD_REG_MS11_DDC_CONFIG0                                     0x6C0
> +#define AXD_REG_MS11_EXT_PCM_CONFIG0                                 0x6C4
> +/* 0x6C8 and 0x6CC reserved */
> +#define AXD_REG_OUTPUT0_DCPP_CONTROL                                 0x6D0
> +#define AXD_REG_OUTPUT0_DCPP_CHANNEL_CONTROL                         0x6D4
> +#define AXD_REG_OUTPUT0_DCPP_BAND_CONTROL                            0x6D8
> +#define AXD_REG_OUTPUT0_DCPP_MAX_DELAY_SAMPLES                               
> 0x6DC
> +#define AXD_REG_OUTPUT0_DCPP_CHANNEL_DELAY_SAMPLES                   0x6E0
> +#define AXD_REG_OUTPUT0_DCPP_CHANNEL_BASS_SHELF_SHIFT                        
> 0x6E4
> +#define AXD_REG_OUTPUT0_DCPP_CHANNEL_BASS_SHELF_A0                   0x6E8
> +#define AXD_REG_OUTPUT0_DCPP_CHANNEL_BASS_SHELF_A1                   0x6EC
> +#define AXD_REG_OUTPUT0_DCPP_CHANNEL_BASS_SHELF_A2                   0x6F0
> +#define AXD_REG_OUTPUT0_DCPP_CHANNEL_BASS_SHELF_B0                   0x6F4
> +#define AXD_REG_OUTPUT0_DCPP_CHANNEL_BASS_SHELF_B1                   0x6F8
> +#define AXD_REG_OUTPUT0_DCPP_CHANNEL_TREBLE_SHELF_SHIFT                      
> 0x6FC
> +#define AXD_REG_OUTPUT0_DCPP_CHANNEL_TREBLE_SHELF_A0                 0x700
> +#define AXD_REG_OUTPUT0_DCPP_CHANNEL_TREBLE_SHELF_A1                 0x704
> +#define AXD_REG_OUTPUT0_DCPP_CHANNEL_TREBLE_SHELF_A2                 0x708
> +#define AXD_REG_OUTPUT0_DCPP_CHANNEL_TREBLE_SHELF_B0                 0x70C
> +#define AXD_REG_OUTPUT0_DCPP_CHANNEL_TREBLE_SHELF_B1                 0x710
> +#define AXD_REG_OUTPUT0_DCPP_CHANNEL_EQ_OUTPUT_VOLUME                        
> 0x714
> +#define AXD_REG_OUTPUT0_DCPP_CHANNEL_EQ_PASSTHROUGH_GAIN             0x718
> +#define AXD_REG_OUTPUT0_DCPP_CHANNEL_EQ_INVERSE_PASSTHROUGH_GAIN     0x71C
> +#define AXD_REG_OUTPUT0_DCPP_CHANNEL_EQ_BAND_GAIN                    0x720
> +#define AXD_REG_OUTPUT0_DCPP_CHANNEL_EQ_BAND_A0                              
> 0x724
> +#define AXD_REG_OUTPUT0_DCPP_CHANNEL_EQ_BAND_A1                              
> 0x728
> +#define AXD_REG_OUTPUT0_DCPP_CHANNEL_EQ_BAND_A2                              
> 0x72C
> +#define AXD_REG_OUTPUT0_DCPP_CHANNEL_EQ_BAND_B0                              
> 0x730
> +#define AXD_REG_OUTPUT0_DCPP_CHANNEL_EQ_BAND_B1                              
> 0x734
> +#define AXD_REG_OUTPUT0_DCPP_CHANNEL_EQ_BAND_SHIFT                   0x738
> +#define AXD_REG_OUTPUT0_DCPP_SUBBAND_LOW_PASS_FILTER_A0                      
> 0x73C
> +#define AXD_REG_OUTPUT0_DCPP_SUBBAND_LOW_PASS_FILTER_A1                      
> 0x740
> +#define AXD_REG_OUTPUT0_DCPP_SUBBAND_LOW_PASS_FILTER_A2                      
> 0x744
> +#define AXD_REG_OUTPUT0_DCPP_SUBBAND_LOW_PASS_FILTER_B0                      
> 0x748
> +#define AXD_REG_OUTPUT0_DCPP_SUBBAND_LOW_PASS_FILTER_B1                      
> 0x74C
> +/* 0x750 to 0x764 reserved */
> +#define AXD_REG_OUTPUT1_DCPP_CONTROL                                 0x768
> +#define AXD_REG_OUTPUT1_DCPP_CHANNEL_CONTROL                         0x76C
> +#define AXD_REG_OUTPUT1_DCPP_BAND_CONTROL                            0x770
> +#define AXD_REG_OUTPUT1_DCPP_MAX_DELAY_SAMPLES                               
> 0x774
> +#define AXD_REG_OUTPUT1_DCPP_CHANNEL_DELAY_SAMPLES                   0x778
> +#define AXD_REG_OUTPUT1_DCPP_CHANNEL_BASS_SHELF_SHIFT                        
> 0x77C
> +#define AXD_REG_OUTPUT1_DCPP_CHANNEL_BASS_SHELF_A0                   0x780
> +#define AXD_REG_OUTPUT1_DCPP_CHANNEL_BASS_SHELF_A1                   0x784
> +#define AXD_REG_OUTPUT1_DCPP_CHANNEL_BASS_SHELF_A2                   0x788
> +#define AXD_REG_OUTPUT1_DCPP_CHANNEL_BASS_SHELF_B0                   0x78C
> +#define AXD_REG_OUTPUT1_DCPP_CHANNEL_BASS_SHELF_B1                   0x790
> +#define AXD_REG_OUTPUT1_DCPP_CHANNEL_TREBLE_SHELF_SHIFT                      
> 0x794
> +#define AXD_REG_OUTPUT1_DCPP_CHANNEL_TREBLE_SHELF_A0                 0x798
> +#define AXD_REG_OUTPUT1_DCPP_CHANNEL_TREBLE_SHELF_A1                 0x79C
> +#define AXD_REG_OUTPUT1_DCPP_CHANNEL_TREBLE_SHELF_A2                 0x7A0
> +#define AXD_REG_OUTPUT1_DCPP_CHANNEL_TREBLE_SHELF_B0                 0x7A4
> +#define AXD_REG_OUTPUT1_DCPP_CHANNEL_TREBLE_SHELF_B1                 0x7A8
> +#define AXD_REG_OUTPUT1_DCPP_CHANNEL_EQ_OUTPUT_VOLUME                        
> 0x7AC
> +#define AXD_REG_OUTPUT1_DCPP_CHANNEL_EQ_PASSTHROUGH_GAIN             0x7B0
> +#define AXD_REG_OUTPUT1_DCPP_CHANNEL_EQ_INVERSE_PASSTHROUGH_GAIN     0x7B4
> +#define AXD_REG_OUTPUT1_DCPP_CHANNEL_EQ_BAND_GAIN                    0x7B8
> +#define AXD_REG_OUTPUT1_DCPP_CHANNEL_EQ_BAND_A0                              
> 0x7BC
> +#define AXD_REG_OUTPUT1_DCPP_CHANNEL_EQ_BAND_A1                              
> 0x7C0
> +#define AXD_REG_OUTPUT1_DCPP_CHANNEL_EQ_BAND_A2                              
> 0x7C4
> +#define AXD_REG_OUTPUT1_DCPP_CHANNEL_EQ_BAND_B0                              
> 0x7C8
> +#define AXD_REG_OUTPUT1_DCPP_CHANNEL_EQ_BAND_B1                              
> 0x7CC
> +#define AXD_REG_OUTPUT1_DCPP_CHANNEL_EQ_BAND_SHIFT                   0x7D0
> +#define AXD_REG_OUTPUT1_DCPP_SUBBAND_LOW_PASS_FILTER_A0                      
> 0x7D4
> +#define AXD_REG_OUTPUT1_DCPP_SUBBAND_LOW_PASS_FILTER_A1                      
> 0x7D8
> +#define AXD_REG_OUTPUT1_DCPP_SUBBAND_LOW_PASS_FILTER_A2                      
> 0x7DC
> +#define AXD_REG_OUTPUT1_DCPP_SUBBAND_LOW_PASS_FILTER_B0                      
> 0x7E0
> +#define AXD_REG_OUTPUT1_DCPP_SUBBAND_LOW_PASS_FILTER_B1                      
> 0x7E4
> +/* 0x7E8 to 0x7FC reserved */
> +#define AXD_REG_OUTPUT2_DCPP_CONTROL                                 0x800
> +#define AXD_REG_OUTPUT2_DCPP_CHANNEL_CONTROL                         0x804
> +#define AXD_REG_OUTPUT2_DCPP_BAND_CONTROL                            0x808
> +#define AXD_REG_OUTPUT2_DCPP_MAX_DELAY_SAMPLES                               
> 0x80C
> +#define AXD_REG_OUTPUT2_DCPP_CHANNEL_DELAY_SAMPLES                   0x810
> +#define AXD_REG_OUTPUT2_DCPP_CHANNEL_BASS_SHELF_SHIFT                        
> 0x814
> +#define AXD_REG_OUTPUT2_DCPP_CHANNEL_BASS_SHELF_A0                   0x818
> +#define AXD_REG_OUTPUT2_DCPP_CHANNEL_BASS_SHELF_A1                   0x81C
> +#define AXD_REG_OUTPUT2_DCPP_CHANNEL_BASS_SHELF_A2                   0x820
> +#define AXD_REG_OUTPUT2_DCPP_CHANNEL_BASS_SHELF_B0                   0x824
> +#define AXD_REG_OUTPUT2_DCPP_CHANNEL_BASS_SHELF_B1                   0x828
> +#define AXD_REG_OUTPUT2_DCPP_CHANNEL_TREBLE_SHELF_SHIFT                      
> 0x82C
> +#define AXD_REG_OUTPUT2_DCPP_CHANNEL_TREBLE_SHELF_A0                 0x830
> +#define AXD_REG_OUTPUT2_DCPP_CHANNEL_TREBLE_SHELF_A1                 0x834
> +#define AXD_REG_OUTPUT2_DCPP_CHANNEL_TREBLE_SHELF_A2                 0x838
> +#define AXD_REG_OUTPUT2_DCPP_CHANNEL_TREBLE_SHELF_B0                 0x83C
> +#define AXD_REG_OUTPUT2_DCPP_CHANNEL_TREBLE_SHELF_B1                 0x840
> +#define AXD_REG_OUTPUT2_DCPP_CHANNEL_EQ_OUTPUT_VOLUME                        
> 0x844
> +#define AXD_REG_OUTPUT2_DCPP_CHANNEL_EQ_PASSTHROUGH_GAIN             0x848
> +#define AXD_REG_OUTPUT2_DCPP_CHANNEL_EQ_INVERSE_PASSTHROUGH_GAIN     0x84C
> +#define AXD_REG_OUTPUT2_DCPP_CHANNEL_EQ_BAND_GAIN                    0x850
> +#define AXD_REG_OUTPUT2_DCPP_CHANNEL_EQ_BAND_A0                              
> 0x854
> +#define AXD_REG_OUTPUT2_DCPP_CHANNEL_EQ_BAND_A1                              
> 0x858
> +#define AXD_REG_OUTPUT2_DCPP_CHANNEL_EQ_BAND_A2                              
> 0x85C
> +#define AXD_REG_OUTPUT2_DCPP_CHANNEL_EQ_BAND_B0                              
> 0x860
> +#define AXD_REG_OUTPUT2_DCPP_CHANNEL_EQ_BAND_B1                              
> 0x864
> +#define AXD_REG_OUTPUT2_DCPP_CHANNEL_EQ_BAND_SHIFT                   0x868
> +#define AXD_REG_OUTPUT2_DCPP_SUBBAND_LOW_PASS_FILTER_A0                      
> 0x86C
> +#define AXD_REG_OUTPUT2_DCPP_SUBBAND_LOW_PASS_FILTER_A1                      
> 0x870
> +#define AXD_REG_OUTPUT2_DCPP_SUBBAND_LOW_PASS_FILTER_A2                      
> 0x874
> +#define AXD_REG_OUTPUT2_DCPP_SUBBAND_LOW_PASS_FILTER_B0                      
> 0x878
> +#define AXD_REG_OUTPUT2_DCPP_SUBBAND_LOW_PASS_FILTER_B1                      
> 0x87C
> +/* 0x880 to 0x89C reserved */
> +#define AXD_REG_DEC0_SBC_SAMPLE_RATE                                 0x8A0
> +#define AXD_REG_DEC0_SBC_AUDIO_MODE                                  0x8A4
> +#define AXD_REG_DEC0_SBC_BLOCKS                                              
> 0x8A8
> +#define AXD_REG_DEC0_SBC_SUBBANDS                                    0x8AC
> +#define AXD_REG_DEC0_SBC_BITPOOL                                     0x8B0
> +#define AXD_REG_DEC0_SBC_ALLOCATION_MODE                             0x8B4
> +#define AXD_REG_DEC1_SBC_SAMPLE_RATE                                 0x8B8
> +#define AXD_REG_DEC1_SBC_AUDIO_MODE                                  0x8BC
> +#define AXD_REG_DEC1_SBC_BLOCKS                                              
> 0x8C0
> +#define AXD_REG_DEC1_SBC_SUBBANDS                                    0x8C4
> +#define AXD_REG_DEC1_SBC_BITPOOL                                     0x8C8
> +#define AXD_REG_DEC1_SBC_ALLOCATION_MODE                             0x8CC
> +#define AXD_REG_DEC2_SBC_SAMPLE_RATE                                 0x8D0
> +#define AXD_REG_DEC2_SBC_AUDIO_MODE                                  0x8D4
> +#define AXD_REG_DEC2_SBC_BLOCKS                                              
> 0x8D8
> +#define AXD_REG_DEC2_SBC_SUBBANDS                                    0x8DC
> +#define AXD_REG_DEC2_SBC_BITPOOL                                     0x8E0
> +#define AXD_REG_DEC2_SBC_ALLOCATION_MODE                             0x8E4
> +/* 0x8E8 to 0x8EC reserved */
> +#define AXD_REG_SYNC_MODE                                            0x8F0
> +/* 0x8F4 to 0x8FC reserved */
> +#define AXD_REG_INPUT0_BUFFER_OCCUPANCY                                      
> 0x900
> +#define AXD_REG_INPUT1_BUFFER_OCCUPANCY                                      
> 0x904
> +#define AXD_REG_INPUT2_BUFFER_OCCUPANCY                                      
> 0x908
> +/* 0x90C reserved */
> +
> +/* Register masks */
> +#define AXD_INCTRL_ENABLE_MASK               0x1
> +#define AXD_INCTRL_ENABLE_SHIFT              31
> +#define AXD_INCTRL_ENABLE_BITS               \
> +     (AXD_INCTRL_ENABLE_MASK << AXD_INCTRL_ENABLE_SHIFT)
> +#define AXD_INCTRL_SOURCE_MASK               0x3
> +#define AXD_INCTRL_SOURCE_SHIFT              8
> +#define AXD_INCTRL_SOURCE_BITS               \
> +     (AXD_INCTRL_SOURCE_MASK << AXD_INCTRL_SOURCE_SHIFT)
> +#define AXD_INCTRL_CODEC_MASK                0x7FF
> +#define AXD_INCTRL_CODEC_SHIFT               0
> +#define AXD_INCTRL_CODEC_BITS                \
> +     (AXD_INCTRL_CODEC_MASK << AXD_INCTRL_CODEC_SHIFT)
> +
> +#define AXD_OUTCTRL_ENABLE_MASK              0x1
> +#define AXD_OUTCTRL_ENABLE_SHIFT     31
> +#define AXD_OUTCTRL_ENABLE_BITS              \
> +     (AXD_OUTCTRL_ENABLE_MASK << AXD_OUTCTRL_ENABLE_SHIFT)
> +#define AXD_OUTCTRL_SINK_MASK                0x3
> +#define AXD_OUTCTRL_SINK_SHIFT               0
> +#define AXD_OUTCTRL_SINK_BITS                \
> +     (AXD_OUTCTRL_SINK_MASK << AXD_OUTCTRL_SINK_SHIFT)
> +#define AXD_OUTCTRL_CODEC_MASK               0xFF
> +#define AXD_OUTCTRL_CODEC_SHIFT              2
> +#define AXD_OUTCTRL_CODEC_BITS               \
> +     (AXD_OUTCTRL_CODEC_MASK << AXD_OUTCTRL_CODEC_SHIFT)
> +
> +#define AXD_EQCTRL_ENABLE_MASK               0x1
> +#define AXD_EQCTRL_ENABLE_SHIFT              31
> +#define AXD_EQCTRL_ENABLE_BITS               \
> +     (AXD_EQCTRL_ENABLE_MASK << AXD_EQCTRL_ENABLE_SHIFT)
> +#define AXD_EQCTRL_GAIN_MASK         0x7F
> +#define AXD_EQCTRL_GAIN_SHIFT                0
> +#define AXD_EQCTRL_GAIN_BITS         \
> +     (AXD_EQCTRL_GAIN_MASK << AXD_EQCTRL_GAIN_SHIFT)
> +
> +#define AXD_EQBANDX_GAIN_MASK                0xFF
> +#define AXD_EQBANDX_GAIN_SHIFT               0
> +#define AXD_EQBANDX_GAIN_BITS                \
> +     (AXD_EQBANDX_GAIN_MASK << AXD_EQBANDX_GAIN_SHIFT)
> +
> +#define AXD_DCPP_CTRL_ENABLE_MASK                    0x1
> +#define AXD_DCPP_CTRL_ENABLE_SHIFT                   31
> +#define AXD_DCPP_CTRL_ENABLE_BITS                    \
> +     (AXD_DCPP_CTRL_ENABLE_MASK << AXD_DCPP_CTRL_ENABLE_SHIFT)
> +#define AXD_DCPP_CTRL_CHANNELS_MASK                  0xF
> +#define AXD_DCPP_CTRL_CHANNELS_SHIFT                 27
> +#define AXD_DCPP_CTRL_CHANNELS_BITS                  \
> +     (AXD_DCPP_CTRL_CHANNELS_MASK << AXD_DCPP_CTRL_CHANNELS_SHIFT)
> +#define AXD_DCPP_CTRL_MODE_MASK                              0x1
> +#define AXD_DCPP_CTRL_MODE_SHIFT                     26
> +#define AXD_DCPP_CTRL_MODE_BITS                              \
> +     (AXD_DCPP_CTRL_MODE_MASK << AXD_DCPP_CTRL_MODE_SHIFT)
> +#define AXD_DCPP_CTRL_EQ_MODE_MASK                   0x1
> +#define AXD_DCPP_CTRL_EQ_MODE_SHIFT                  25
> +#define AXD_DCPP_CTRL_EQ_MODE_BITS                   \
> +     (AXD_DCPP_CTRL_EQ_MODE_MASK << AXD_DCPP_CTRL_EQ_MODE_SHIFT)
> +#define AXD_DCPP_CTRL_EQ_BANDS_MASK                  0xFF
> +#define AXD_DCPP_CTRL_EQ_BANDS_SHIFT                 17
> +#define AXD_DCPP_CTRL_EQ_BANDS_BITS                  \
> +     (AXD_DCPP_CTRL_EQ_BANDS_MASK << AXD_DCPP_CTRL_EQ_BANDS_SHIFT)
> +#define AXD_DCPP_CTRL_SUBBAND_ENABLE_MASK            0x1
> +#define AXD_DCPP_CTRL_SUBBAND_ENABLE_SHIFT           16
> +#define AXD_DCPP_CTRL_SUBBAND_ENABLE_BITS            \
> +     (AXD_DCPP_CTRL_SUBBAND_ENABLE_MASK << 
> AXD_DCPP_CTRL_SUBBAND_ENABLE_SHIFT)
> +#define AXD_DCPP_CTRL_SUBBAND_CHANNEL_MASK_MASK              0xFF
> +#define AXD_DCPP_CTRL_SUBBAND_CHANNEL_MASK_SHIFT     8
> +#define AXD_DCPP_CTRL_SUBBAND_CHANNEL_MASK_BITS              \
> +     (AXD_DCPP_CTRL_SUBBAND_CHANNEL_MASK_MASK << 
> AXD_DCPP_CTRL_SUBBAND_CHANNEL_MASK_SHIFT)
> +#define AXD_DCPP_CTRL_SUBBAND_EQ_BANDS_MASK          0xFF
> +#define AXD_DCPP_CTRL_SUBBAND_EQ_BANDS_SHIFT         0
> +#define AXD_DCPP_CTRL_SUBBAND_EQ_BANDS_BITS          \
> +     (AXD_DCPP_CTRL_SUBBAND_EQ_BANDS_MASK << 
> AXD_DCPP_CTRL_SUBBAND_EQ_BANDS_SHIFT)
> +
> +#define AXD_DCPP_CHANNEL_CTRL_CHANNEL_MASK   0xFF
> +#define AXD_DCPP_CHANNEL_CTRL_CHANNEL_SHIFT  24
> +#define AXD_DCPP_CHANNEL_CTRL_CHANNEL_BITS   \
> +     (AXD_DCPP_CHANNEL_CTRL_CHANNEL_MASK << 
> AXD_DCPP_CHANNEL_CTRL_CHANNEL_SHIFT)
> +#define AXD_DCPP_CHANNEL_CTRL_SUBBAND_MASK   0x1
> +#define AXD_DCPP_CHANNEL_CTRL_SUBBAND_SHIFT  23
> +#define AXD_DCPP_CHANNEL_CTRL_SUBBAND_BITS   \
> +     (AXD_DCPP_CHANNEL_CTRL_SUBBAND_MASK << 
> AXD_DCPP_CHANNEL_CTRL_SUBBAND_SHIFT)
> +
All these should really be ASoC codec/DSP register map and let DAPM and ASoC
infrastructure handle these much better than you have done here

> +/* set the presentation time stamp (pts) for the buffer to be sent next */
> +static void set_next_pts(struct axd_dev *axd, unsigned int pipe, u64 pts)
> +{
> +     int ret;
> +
> +     if (!axd_get_flag(&axd->cmd.started_flg)) {
> +             if (axd_ts_reset)
> +                     axd_ts_reset();
> +             axd_set_flag(&axd->cmd.started_flg, 1);
> +     }
> +
> +     if (axd_ts_adjust) {
> +             ret = axd_ts_adjust(&pts);
> +             if (ret)
> +                     dev_err(axd->dev, "Timestamp adjust failed\n");
> +     }
> +
> +     axd->cmd.in_pipes[pipe].current_ts_high = pts >> 32;
> +     axd->cmd.in_pipes[pipe].current_ts_low = pts & 0xffffffff;
> +}
how is this different from ALSA timestamp and new work being done at to add
start_at() APIs??

> +
> +/*
> + * note if we plan to support more than 1 AXD instance this will need to 
> become
> + * an array indexed by device id.
> + */
> +static struct axd_dev *__axd;
> +
> +/*
> + * only a single process can open an input/output device node at a time. And
> + * only that process can release that device node.
> + *
> + * semaphores ensure this behaviour.
> + */
> +static int axd_open(struct inode *inode, struct file *filp)
> +{
> +     struct axd_dev *axd = container_of(inode->i_cdev, struct axd_dev, cdev);
> +     unsigned int minor = MINOR(inode->i_rdev);
> +     int type = minor_to_devtype(minor);
> +     int ret;
> +     int i;
> +
> +     /* save the inode for other methods */
> +     filp->private_data = inode;
> +
> +     if (axd_get_flag(&axd->cmd.fw_stopped_flg))
> +             return -EAGAIN;
> +
> +     switch (type) {
> +     case AXD_CTRL:
> +             /* nothing to do in here */
> +             break;
> +     case AXD_INPUT:
> +             if ((filp->f_flags & O_ACCMODE) != O_WRONLY)
> +                     return -EPERM;
> +
> +             axd->cmd.nonblock = filp->f_flags & O_NONBLOCK;
> +
> +             ret = down_trylock(&axd->input_locks[MINOR_TO_INPUT(minor)]);
> +             if (ret)
> +                     return -EBUSY;
> +
> +             /* Are any pipes running? */
> +             for (i = 0; i < AXD_MAX_PIPES; i++) {
> +                     if (axd_cmd_inpipe_active(&axd->cmd, i))
> +                             goto pipes_running;
> +             }
> +
> +             /* Invalidate any clock tracking from previous use */
> +             axd_set_flag(&axd->cmd.started_flg, 0);
> +pipes_running:
> +
> +             ret = axd_cmd_inpipe_start(&axd->cmd, MINOR_TO_INPUT(minor));
> +             if (ret) {
> +                     up(&axd->input_locks[MINOR_TO_INPUT(minor)]);
> +                     return ret;
> +             }
> +
> +             break;
> +     case AXD_OUTPUT:
> +             if ((filp->f_flags & O_ACCMODE) != O_RDONLY)
> +                     return -EPERM;
> +
> +             axd->cmd.nonblock = filp->f_flags & O_NONBLOCK;
> +
> +             ret = down_trylock(&axd->output_locks[MINOR_TO_OUTPUT(minor)]);
> +             if (ret)
> +                     return -EBUSY;
> +             ret = axd_cmd_outpipe_start(&axd->cmd, MINOR_TO_OUTPUT(minor));
> +             if (ret) {
> +                     up(&axd->output_locks[MINOR_TO_OUTPUT(minor)]);
> +                     return ret;
> +             }
> +             break;
> +     default:
> +             dev_err(axd->dev, "Unknown device type\n");
> +             return -EINVAL;
> +     }
> +     return 0;
ALSA does all this and much more, sigh!


> +static ssize_t axd_read(struct file *filp, char __user *buff, size_t count,
> +                                                             loff_t *offp)
> +{
> +     struct inode *inode = filp->private_data;
> +     struct axd_dev *axd = container_of(inode->i_cdev, struct axd_dev, cdev);
> +     unsigned int minor = MINOR(inode->i_rdev);
> +     unsigned int pipe = MINOR_TO_OUTPUT(minor);
> +     ssize_t read = 0;
> +
> +     if (axd_get_flag(&axd->cmd.fw_stopped_flg))
> +             return 0;
> +
> +     /* read the log when it's the ctrl device */
> +     if (!minor)
> +             return axd_read_log(axd, buff, count, offp);
> +
> +     if (axd_get_flag(&axd->timestamps_out_flg)) {
> +             copy_to_user(buff, &axd->cmd.out_pipes[pipe].current_ts_low, 8);
> +             read += 8;
> +             buff += 8;
> +     }
> +
> +     read += axd_cmd_recv_buffer(&axd->cmd, pipe, buff, count);
> +     if (read > 0)
> +             *offp += read;
> +     return read;
> +}
> +
> +static ssize_t axd_write(struct file *filp, const char __user *buff,
> +                                             size_t count, loff_t *offp)
> +{
> +     struct inode *inode = filp->private_data;
> +     struct axd_dev *axd = container_of(inode->i_cdev, struct axd_dev, cdev);
> +     unsigned int minor = MINOR(inode->i_rdev);
> +     unsigned int pipe = MINOR_TO_INPUT(minor);
> +     ssize_t written;
> +     struct axd_sync_data sync_data;
> +
> +     if (axd_get_flag(&axd->cmd.fw_stopped_flg))
> +             return 0;
> +
> +     /* can't write ctrl device */
> +     if (!minor)
> +             return count;
> +
> +     if (count == sizeof(struct axd_sync_data)) {
> +             /* Read sync data */
> +             copy_from_user(&sync_data, buff, sizeof(sync_data));
> +
> +             /* Validate sync data */
> +             if (sync_data.magic != SYNC_MGCNUM) {
> +                     /* Not valid sync data -- must be normal stream data */
> +                     goto stream_data;
> +             }
> +
> +             set_next_pts(axd, pipe, sync_data.pts_us);
> +             written = count;
> +     } else {
> +stream_data:
> +             written = axd_cmd_send_buffer(&axd->cmd, pipe, buff, count);
> +     }
> +
> +     if (written > 0)
> +             *offp += written;
> +     return written;
> +}
ALSA does data copy too!

-- 
~Vinod

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to