hc
2025-02-14 bbb9540dc49f70f6b703d1c8d1b85fa5f602d86e
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
/* SPDX-License-Identifier: GPL-2.0 */
/*
 * Driver of Inno Codec for rk3036 by Rockchip Inc.
 *
 * Author: Zheng ShunQian<zhengsq@rock-chips.com>
 */
 
#ifndef _INNO_RK3036_CODEC_H
#define _INNO_RK3036_CODEC_H
 
/* codec registers */
#define INNO_R00    0x00
#define INNO_R01    0x0c
#define INNO_R02    0x10
#define INNO_R03    0x14
#define INNO_R04    0x88
#define INNO_R05    0x8c
#define INNO_R06    0x90
#define INNO_R07    0x94
#define INNO_R08    0x98
#define INNO_R09    0x9c
#define INNO_R10    0xa0
 
/* register bit filed */
#define INNO_R00_CSR_RESET        (0x0 << 0) /*codec system reset*/
#define INNO_R00_CSR_WORK        (0x1 << 0)
#define INNO_R00_CDCR_RESET        (0x0 << 1) /*codec digital core reset*/
#define INNO_R00_CDCR_WORK        (0x1 << 1)
#define INNO_R00_PRB_DISABLE        (0x0 << 6) /*power reset bypass*/
#define INNO_R00_PRB_ENABLE        (0x1 << 6)
 
#define INNO_R01_I2SMODE_MSK        (0x1 << 4)
#define INNO_R01_I2SMODE_SLAVE        (0x0 << 4)
#define INNO_R01_I2SMODE_MASTER        (0x1 << 4)
#define INNO_R01_PINDIR_MSK        (0x1 << 5)
#define INNO_R01_PINDIR_IN_SLAVE    (0x0 << 5) /*direction of pin*/
#define INNO_R01_PINDIR_OUT_MASTER    (0x1 << 5)
 
#define INNO_R02_LRS_MSK        (0x1 << 2)
#define INNO_R02_LRS_NORMAL        (0x0 << 2) /*DAC Left Right Swap*/
#define INNO_R02_LRS_SWAP        (0x1 << 2)
#define INNO_R02_DACM_MSK        (0x3 << 3)
#define INNO_R02_DACM_PCM        (0x3 << 3) /*DAC Mode*/
#define INNO_R02_DACM_I2S        (0x2 << 3)
#define INNO_R02_DACM_LJM        (0x1 << 3)
#define INNO_R02_DACM_RJM        (0x0 << 3)
#define INNO_R02_VWL_MSK        (0x3 << 5)
#define INNO_R02_VWL_32BIT        (0x3 << 5) /*1/2Frame Valid Word Len*/
#define INNO_R02_VWL_24BIT        (0x2 << 5)
#define INNO_R02_VWL_20BIT        (0x1 << 5)
#define INNO_R02_VWL_16BIT        (0x0 << 5)
#define INNO_R02_LRCP_MSK        (0x1 << 7)
#define INNO_R02_LRCP_NORMAL        (0x0 << 7) /*Left Right Polarity*/
#define INNO_R02_LRCP_REVERSAL        (0x1 << 7)
 
#define INNO_R03_BCP_MSK        (0x1 << 0)
#define INNO_R03_BCP_NORMAL        (0x0 << 0) /*DAC bit clock polarity*/
#define INNO_R03_BCP_REVERSAL        (0x1 << 0)
#define INNO_R03_DACR_MSK        (0x1 << 1)
#define INNO_R03_DACR_RESET        (0x0 << 1) /*DAC Reset*/
#define INNO_R03_DACR_WORK        (0x1 << 1)
#define INNO_R03_FWL_MSK        (0x3 << 2)
#define INNO_R03_FWL_32BIT        (0x3 << 2) /*1/2Frame Word Length*/
#define INNO_R03_FWL_24BIT        (0x2 << 2)
#define INNO_R03_FWL_20BIT        (0x1 << 2)
#define INNO_R03_FWL_16BIT        (0x0 << 2)
 
#define INNO_R04_DACR_SW_SHIFT        0
#define INNO_R04_DACL_SW_SHIFT        1
#define INNO_R04_DACR_CLK_SHIFT        2
#define INNO_R04_DACL_CLK_SHIFT        3
#define INNO_R04_DACR_VREF_SHIFT    4
#define INNO_R04_DACL_VREF_SHIFT    5
 
#define INNO_R05_HPR_EN_SHIFT        0
#define INNO_R05_HPL_EN_SHIFT        1
#define INNO_R05_HPR_WORK_SHIFT        2
#define INNO_R05_HPL_WORK_SHIFT        3
 
#define INNO_R06_VOUTR_CZ_SHIFT        0
#define INNO_R06_VOUTL_CZ_SHIFT        1
#define INNO_R06_DACR_HILO_VREF_SHIFT    2
#define INNO_R06_DACL_HILO_VREF_SHIFT    3
#define INNO_R06_DAC_EN_SHIFT        5
 
#define INNO_R06_DAC_PRECHARGE        (0x0 << 4) /*PreCharge control for DAC*/
#define INNO_R06_DAC_DISCHARGE        (0x1 << 4)
 
#define INNO_HP_GAIN_SHIFT        0
/* Gain of output, 1.5db step: -39db(0x0) ~ 0db(0x1a) ~ 6db(0x1f) */
#define INNO_HP_GAIN_0DB        0x1a
#define INNO_HP_GAIN_N39DB        0x0
 
#define INNO_R09_HP_ANTIPOP_MSK        0x3
#define INNO_R09_HP_ANTIPOP_OFF        0x1
#define INNO_R09_HP_ANTIPOP_ON        0x2
#define INNO_R09_HPR_ANITPOP_SHIFT    0
#define INNO_R09_HPL_ANITPOP_SHIFT    2
#define INNO_R09_HPR_MUTE_SHIFT        4
#define INNO_R09_HPL_MUTE_SHIFT        5
#define INNO_R09_DACR_SWITCH_SHIFT    6
#define INNO_R09_DACL_SWITCH_SHIFT    7
 
#define INNO_R10_CHARGE_SEL_CUR_400I_YES    (0x0 << 0)
#define INNO_R10_CHARGE_SEL_CUR_400I_NO        (0x1 << 0)
#define INNO_R10_CHARGE_SEL_CUR_260I_YES    (0x0 << 1)
#define INNO_R10_CHARGE_SEL_CUR_260I_NO        (0x1 << 1)
#define INNO_R10_CHARGE_SEL_CUR_130I_YES    (0x0 << 2)
#define INNO_R10_CHARGE_SEL_CUR_130I_NO        (0x1 << 2)
#define INNO_R10_CHARGE_SEL_CUR_100I_YES    (0x0 << 3)
#define INNO_R10_CHARGE_SEL_CUR_100I_NO        (0x1 << 3)
#define INNO_R10_CHARGE_SEL_CUR_050I_YES    (0x0 << 4)
#define INNO_R10_CHARGE_SEL_CUR_050I_NO        (0x1 << 4)
#define INNO_R10_CHARGE_SEL_CUR_027I_YES    (0x0 << 5)
#define INNO_R10_CHARGE_SEL_CUR_027I_NO        (0x1 << 5)
 
#define INNO_R10_MAX_CUR (INNO_R10_CHARGE_SEL_CUR_400I_YES | \
             INNO_R10_CHARGE_SEL_CUR_260I_YES | \
             INNO_R10_CHARGE_SEL_CUR_130I_YES | \
             INNO_R10_CHARGE_SEL_CUR_100I_YES | \
             INNO_R10_CHARGE_SEL_CUR_050I_YES | \
             INNO_R10_CHARGE_SEL_CUR_027I_YES)
 
#endif