hc
2024-12-19 9370bb92b2d16684ee45cf24e879c93c509162da
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
/* SPDX-License-Identifier: GPL-2.0-only */
/*
 * ALSA SoC TLV320AIC23 codec driver
 *
 * Author:      Arun KS, <arunks@mistralsolutions.com>
 * Copyright:   (C) 2008 Mistral Solutions Pvt Ltd
 */
 
#ifndef _TLV320AIC23_H
#define _TLV320AIC23_H
 
struct device;
struct regmap_config;
 
extern const struct regmap_config tlv320aic23_regmap;
int tlv320aic23_probe(struct device *dev, struct regmap *regmap);
 
/* Codec TLV320AIC23 */
#define TLV320AIC23_LINVOL        0x00
#define TLV320AIC23_RINVOL        0x01
#define TLV320AIC23_LCHNVOL        0x02
#define TLV320AIC23_RCHNVOL        0x03
#define TLV320AIC23_ANLG        0x04
#define TLV320AIC23_DIGT        0x05
#define TLV320AIC23_PWR            0x06
#define TLV320AIC23_DIGT_FMT        0x07
#define TLV320AIC23_SRATE        0x08
#define TLV320AIC23_ACTIVE        0x09
#define TLV320AIC23_RESET        0x0F
 
/* Left (right) line input volume control register */
#define TLV320AIC23_LRS_ENABLED        0x0100
#define TLV320AIC23_LIM_MUTED        0x0080
#define TLV320AIC23_LIV_DEFAULT        0x0017
#define TLV320AIC23_LIV_MAX        0x001f
#define TLV320AIC23_LIV_MIN        0x0000
 
/* Left (right) channel headphone volume control register */
#define TLV320AIC23_LZC_ON        0x0080
#define TLV320AIC23_LHV_DEFAULT        0x0079
#define TLV320AIC23_LHV_MAX        0x007f
#define TLV320AIC23_LHV_MIN        0x0000
 
/* Analog audio path control register */
#define TLV320AIC23_STA_REG(x)        ((x)<<6)
#define TLV320AIC23_STE_ENABLED        0x0020
#define TLV320AIC23_DAC_SELECTED    0x0010
#define TLV320AIC23_BYPASS_ON        0x0008
#define TLV320AIC23_INSEL_MIC        0x0004
#define TLV320AIC23_MICM_MUTED        0x0002
#define TLV320AIC23_MICB_20DB        0x0001
 
/* Digital audio path control register */
#define TLV320AIC23_DACM_MUTE        0x0008
#define TLV320AIC23_DEEMP_32K        0x0002
#define TLV320AIC23_DEEMP_44K        0x0004
#define TLV320AIC23_DEEMP_48K        0x0006
#define TLV320AIC23_ADCHP_ON        0x0001
 
/* Power control down register */
#define TLV320AIC23_DEVICE_PWR_OFF      0x0080
#define TLV320AIC23_CLK_OFF        0x0040
#define TLV320AIC23_OSC_OFF        0x0020
#define TLV320AIC23_OUT_OFF        0x0010
#define TLV320AIC23_DAC_OFF        0x0008
#define TLV320AIC23_ADC_OFF        0x0004
#define TLV320AIC23_MIC_OFF        0x0002
#define TLV320AIC23_LINE_OFF        0x0001
 
/* Digital audio interface register */
#define TLV320AIC23_MS_MASTER        0x0040
#define TLV320AIC23_LRSWAP_ON        0x0020
#define TLV320AIC23_LRP_ON        0x0010
#define TLV320AIC23_IWL_16        0x0000
#define TLV320AIC23_IWL_20        0x0004
#define TLV320AIC23_IWL_24        0x0008
#define TLV320AIC23_IWL_32        0x000C
#define TLV320AIC23_FOR_I2S        0x0002
#define TLV320AIC23_FOR_DSP        0x0003
#define TLV320AIC23_FOR_LJUST        0x0001
 
/* Sample rate control register */
#define TLV320AIC23_CLKOUT_HALF        0x0080
#define TLV320AIC23_CLKIN_HALF        0x0040
#define TLV320AIC23_BOSR_384fs        0x0002    /* BOSR_272fs in USB mode */
#define TLV320AIC23_USB_CLK_ON        0x0001
#define TLV320AIC23_SR_MASK             0xf
#define TLV320AIC23_CLKOUT_SHIFT        7
#define TLV320AIC23_CLKIN_SHIFT         6
#define TLV320AIC23_SR_SHIFT            2
#define TLV320AIC23_BOSR_SHIFT          1
 
/* Digital interface register */
#define TLV320AIC23_ACT_ON        0x0001
 
/*
 * AUDIO related MACROS
 */
 
#define TLV320AIC23_DEFAULT_OUT_VOL    0x70
#define TLV320AIC23_DEFAULT_IN_VOLUME    0x10
 
#define TLV320AIC23_OUT_VOL_MIN        TLV320AIC23_LHV_MIN
#define TLV320AIC23_OUT_VOL_MAX        TLV320AIC23_LHV_MAX
#define TLV320AIC23_OUT_VO_RANGE    (TLV320AIC23_OUT_VOL_MAX - \
                   TLV320AIC23_OUT_VOL_MIN)
#define TLV320AIC23_OUT_VOL_MASK    TLV320AIC23_OUT_VOL_MAX
 
#define TLV320AIC23_IN_VOL_MIN        TLV320AIC23_LIV_MIN
#define TLV320AIC23_IN_VOL_MAX        TLV320AIC23_LIV_MAX
#define TLV320AIC23_IN_VOL_RANGE    (TLV320AIC23_IN_VOL_MAX - \
                   TLV320AIC23_IN_VOL_MIN)
#define TLV320AIC23_IN_VOL_MASK        TLV320AIC23_IN_VOL_MAX
 
#define TLV320AIC23_SIDETONE_MASK    0x1c0
#define TLV320AIC23_SIDETONE_0        0x100
#define TLV320AIC23_SIDETONE_6        0x000
#define TLV320AIC23_SIDETONE_9        0x040
#define TLV320AIC23_SIDETONE_12        0x080
#define TLV320AIC23_SIDETONE_18        0x0c0
 
#endif /* _TLV320AIC23_H */