blob: 2f3bc8443f8c5147359a1351fb0086d9c6c5529c [file] [log] [blame]
/*
* ak4954_amb.h -- audio driver for AK4954
*
* Copyright 2014 Ambarella Ltd.
*
* Author: Diao Chengdong <cddiao@ambarella.com>
*
* History:
* 2014/03/27 - created
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*/
#ifndef _AK4954_AMB_H
#define _AK4954_AMB_H
#define AK4954_CLOCK_PLAYBACK 1
#define AK4954_CLOCK_CAPTURE 2
#define AK4954_CLOCK_OTHER 4
#define AK4954_00_POWER_MANAGEMENT1 0x00
#define AK4954_01_POWER_MANAGEMENT2 0x01
#define AK4954_02_SIGNAL_SELECT1 0x02
#define AK4954_03_SIGNAL_SELECT2 0x03
#define AK4954_04_SIGNAL_SELECT3 0x04
#define AK4954_05_MODE_CONTROL1 0x05
#define AK4954_06_MODE_CONTROL2 0x06
#define AK4954_07_MODE_CONTROL3 0x07
#define AK4954_08_DIGITL_MIC 0x08
#define AK4954_09_TIMER_SELECT 0x09
#define AK4954_0A_ALC_TIMER_SELECT 0x0A
#define AK4954_0B_ALC_MODE_CONTROL1 0x0B
#define AK4954_0C_ALC_MODE_CONTROL2 0x0C
#define AK4954_0D_LCH_INPUT_VOLUME_CONTROL 0x0D
#define AK4954_0E_RCH_INPUT_VOLUME_CONTROL 0x0E
#define AK4954_0F_RESERVED 0x0F
#define AK4954_10_RESERVED 0x10
#define AK4954_11_RESERVED 0x11
#define AK4954_12_HP_OUTPUT_CONTROL 0x12
#define AK4954_13_LCH_DIGITAL_VOLUME_CONTROL 0x13
#define AK4954_14_RCH_DIGITAL_VOLUME_CONTROL 0x14
#define AK4954_15_BEEP_FREQUENCY 0x15
#define AK4954_16_BEEP_ON_TIME 0x16
#define AK4954_17_BEEP_OFF_TIME 0x17
#define AK4954_18_BEEP_REPEAT_COUNT 0x18
#define AK4954_19_BEEP_VOLUME_CONTROL 0x19
#define AK4954_1A_RESERVED 0x1A
#define AK4954_1B_DIGITAL_FILTER_SELECT1 0x1B
#define AK4954_1C_DIGITAL_FILTER_SELECT2 0x1C
#define AK4954_1D_DIGITAL_FILTER_MODE 0x1D
#define AK4954_1E_HPF2_COEFFICIENT0 0x1E
#define AK4954_1F_HPF2_COEFFICIENT1 0x1F
#define AK4954_20_HPF2_COEFFICIENT2 0x20
#define AK4954_21_HPF2_COEFFICIENT3 0x21
#define AK4954_22_LPF_COEFFICIENT0 0x22
#define AK4954_23_LPF_COEFFICIENT1 0x23
#define AK4954_24_LPF_COEFFICIENT2 0x24
#define AK4954_25_LPF_COEFFICIENT3 0x25
#define AK4954_26_FIL3_COEFFICIENT0 0x26
#define AK4954_27_FIL3_COEFFICIENT1 0x27
#define AK4954_28_FIL3_COEFFICIENT2 0x28
#define AK4954_29_FIL3_COEFFICIENT3 0x29
#define AK4954_2A_EQ_COEFFICIENT0 0x2A
#define AK4954_2B_EQ_COEFFICIENT1 0x2B
#define AK4954_2C_EQ_COEFFICIENT2 0x2C
#define AK4954_2D_EQ_COEFFICIENT3 0x2D
#define AK4954_2E_EQ_COEFFICIENT4 0x2E
#define AK4954_2F_EQ_COEFFICIENT5 0x2F
#define AK4954_30_DIGITAL_FILTER_SELECT3 0x30
#define AK4954_31_RESERVED 0x31
#define AK4954_32_E1_COEFFICIENT0 0x32
#define AK4954_33_E1_COEFFICIENT1 0x33
#define AK4954_34_E1_COEFFICIENT2 0x34
#define AK4954_35_E1_COEFFICIENT3 0x35
#define AK4954_36_E1_COEFFICIENT4 0x36
#define AK4954_37_E1_COEFFICIENT5 0x37
#define AK4954_38_E2_COEFFICIENT0 0x38
#define AK4954_39_E2_COEFFICIENT1 0x39
#define AK4954_3A_E2_COEFFICIENT2 0x3A
#define AK4954_3B_E2_COEFFICIENT3 0x3B
#define AK4954_3C_E2_COEFFICIENT4 0x3C
#define AK4954_3D_E2_COEFFICIENT5 0x3D
#define AK4954_3E_E3_COEFFICIENT0 0x3E
#define AK4954_3F_E3_COEFFICIENT1 0x3F
#define AK4954_40_E3_COEFFICIENT2 0x40
#define AK4954_41_E3_COEFFICIENT3 0x41
#define AK4954_42_E3_COEFFICIENT4 0x42
#define AK4954_43_E3_COEFFICIENT5 0x43
#define AK4954_44_E4_COEFFICIENT0 0x44
#define AK4954_45_E4_COEFFICIENT1 0x45
#define AK4954_46_E4_COEFFICIENT2 0x46
#define AK4954_47_E4_COEFFICIENT3 0x47
#define AK4954_48_E4_COEFFICIENT4 0x48
#define AK4954_49_E4_COEFFICIENT5 0x49
#define AK4954_4A_E5_COEFFICIENT0 0x4A
#define AK4954_4B_E5_COEFFICIENT1 0x4B
#define AK4954_4C_E5_COEFFICIENT2 0x4C
#define AK4954_4D_E5_COEFFICIENT3 0x4D
#define AK4954_4E_E5_COEFFICIENT4 0x4E
#define AK4954_4F_E5_COEFFICIENT5 0x4F
#define AK4954_50_DRC_MODE_CONTROL 0x50
#define AK4954_51_NS_CONTROL 0x51
#define AK4954_52_NS_GAIN_ATT_CONTROL 0x52
#define AK4954_53_NS_ON_LEVEL 0x53
#define AK4954_54_NS_OFF_LEVEL 0x54
#define AK4954_55_NS_REFERENCE_SELECT 0x55
#define AK4954_56_NS_LPF_COEFFICIENT0 0x56
#define AK4954_57_NS_LPF_COEFFICIENT1 0x57
#define AK4954_58_NS_LPF_COEFFICIENT2 0x58
#define AK4954_59_NS_LPF_COEFFICIENT3 0x59
#define AK4954_5A_NS_HPF_COEFFICIENT0 0x5A
#define AK4954_5B_NS_HPF_COEFFICIENT1 0x5B
#define AK4954_5C_NS_HPF_COEFFICIENT2 0x5C
#define AK4954_5D_NS_HPF_COEFFICIENT3 0x5D
#define AK4954_5E_RESERVED 0x5E
#define AK4954_5F_RESERVED 0x5F
#define AK4954_60_DVLC_FILTER_SELECT 0x60
#define AK4954_61_DVLC_MODE_CONTROL 0x61
#define AK4954_62_DVLCL_CURVE_X1 0x62
#define AK4954_63_DVLCL_CURVE_Y1 0x63
#define AK4954_64_DVLCL_CURVE_X2 0x64
#define AK4954_65_DVLCL_CURVE_Y2 0x65
#define AK4954_66_DVLCL_CURVE_X3 0x66
#define AK4954_67_DVLCL_CURVE_Y3 0x67
#define AK4954_68_DVLCL_SLOPE1 0x68
#define AK4954_69_DVLCL_SLOPE2 0x69
#define AK4954_6A_DVLCL_SLOPE3 0x6A
#define AK4954_6B_DVLCL_SLOPE4 0x6B
#define AK4954_6C_DVLCM_CURVE_X1 0x6C
#define AK4954_6D_DVLCM_CURVE_Y1 0x6D
#define AK4954_6E_DVLCM_CURVE_X2 0x6E
#define AK4954_6F_DVLCM_CURVE_Y2 0x6F
#define AK4954_70_DVLCM_CURVE_X3 0x70
#define AK4954_71_DVLCM_CURVE_Y3 0x71
#define AK4954_72_DVLCM_SLOPE1 0x72
#define AK4954_73_DVLCM_SLOPE2 0x73
#define AK4954_74_DVLCM_SLOPE3 0x74
#define AK4954_75_DVLCM_SLOPE4 0x75
#define AK4954_76_DVLCH_CURVE_X1 0x76
#define AK4954_77_DVLCH_CURVE_Y1 0x77
#define AK4954_78_DVLCH_CURVE_X2 0x78
#define AK4954_79_DVLCH_CURVE_Y2 0x79
#define AK4954_7A_DVLCH_CURVE_X3 0x7A
#define AK4954_7B_DVLCH_CURVE_Y3 0x7B
#define AK4954_7C_DVLCH_SLOPE1 0x7C
#define AK4954_7D_DVLCH_SLOPE2 0x7D
#define AK4954_7E_DVLCH_SLOPE3 0x7E
#define AK4954_7F_DVLCH_SLOPE4 0x7F
#define AK4954_80_DVLCL_LPF_COEFFICIENT0 0x80
#define AK4954_81_DVLCL_LPF_COEFFICIENT1 0x81
#define AK4954_82_DVLCL_LPF_COEFFICIENT2 0x82
#define AK4954_83_DVLCL_LPF_COEFFICIENT3 0x83
#define AK4954_84_DVLCM_HPF_COEFFICIENT0 0x84
#define AK4954_85_DVLCM_HPF_COEFFICIENT1 0x85
#define AK4954_86_DVLCM_HPF_COEFFICIENT2 0x86
#define AK4954_87_DVLCM_HPF_COEFFICIENT3 0x87
#define AK4954_88_DVLCM_LPF_COEFFICIENT0 0x88
#define AK4954_89_DVLCM_LPF_COEFFICIENT1 0x89
#define AK4954_8A_DVLCM_LPF_COEFFICIENT2 0x8A
#define AK4954_8B_DVLCM_LPF_COEFFICIENT3 0x8B
#define AK4954_8C_DVLCH_HPF_COEFFICIENT0 0x8C
#define AK4954_8D_DVLCH_HPF_COEFFICIENT1 0x8D
#define AK4954_8E_DVLCH_HPF_COEFFICIENT2 0x8E
#define AK4954_8F_DVLCH_HPF_COEFFICIENT3 0x8F
#define AK4954_MAX_REGISTERS (AK4954_8F_DVLCH_HPF_COEFFICIENT3 + 1)
/* Bitfield Definitions */
/* AK4954_00_POWER_MANAGEMENT1 (0x00) Fields */
#define AK4954_PMVCM 0x40
/* AK4954_01_POWER_MANAGEMENT2 (0x01) Fields */
#define AK4954_PMPLL 0x04
#define AK4954_M_S 0x08
/* AK4954_05_MODE_CONTROL1 (0x05) Fields */
#define AK4954_DIF 0x07
#define AK4954_DIF_24MSB_24LSB_MODE (0 << 0)
#define AK4954_DIF_24MSB_16LSB_MODE (1 << 0)
#define AK4954_DIF_24MSB_MODE (2 << 0)
#define AK4954_DIF_24_16_I2S_MODE (3 << 0)
#define AK4954_DIF_32MSB_MODE (4 << 0)
#define AK4954_DIF_32_I2S_MODE (5 << 0)
#define AK4954_BCKO 0x08
#define AK4954_PLL 0x70
#define AK4954_EXT_SLAVE 0
#define AK4954_PLL_BICK32 (0 << 4)
#define AK4954_PLL_BICK64 (1 << 4)
#define AK4954_PLL_11_2896MHZ (2 << 4)
#define AK4954_PLL_12MHZ (4 << 4)
#define AK4954_PLL_24MHZ (5 << 4)
#define AK4954_PLL_13_5MHZ (6 << 4)
#define AK4954_PLL_27MHZ (7 << 4)
#define AK4954_MCLK_IN 0
#define AK4954_BCLK_IN 1
#define AK4954_MCLK_IN_BCLK_OUT 2
/* AK4954_06_MODE_CONTROL2 (0x06) Fields */
#define AK4954_FS 0x0F
#define AK4954_FS_8KHZ (0 << 0)
#define AK4954_FS_11_025KHZ (1 << 0)
#define AK4954_FS_12KHZ (2 << 0)
#define AK4954_FS_16KHZ (4 << 0)
#define AK4954_FS_22_05KHZ (5 << 0)
#define AK4954_FS_24KHZ (6 << 0)
#define AK4954_FS_32KHZ (8 << 0)
#define AK4954_FS_44_1KHZ (9 << 0)
#define AK4954_FS_48KHZ (10 << 0)
#define AK4954_FS_64KHZ (12 << 0)
#define AK4954_FS_88_2KHZ (13 << 0)
#define AK4954_FS_96KHZ (14 << 0)
#define AK4954_FS_CM0 (1 << 6)
#define AK4954_FS_CM1 (1 << 7)
#endif