summaryrefslogtreecommitdiff
path: root/firmware/export/wm8731.h
blob: 009088960fc5f8a45b9504bcb49b40b2c62d0265 (plain)
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
125
126
127
128
129
130
131
132
133
134
/***************************************************************************
 *             __________               __   ___.
 *   Open      \______   \ ____   ____ |  | _\_ |__   _______  ___
 *   Source     |       _//  _ \_/ ___\|  |/ /| __ \ /  _ \  \/  /
 *   Jukebox    |    |   (  <_> )  \___|    < | \_\ (  <_> > <  <
 *   Firmware   |____|_  /\____/ \___  >__|_ \|___  /\____/__/\_ \
 *                     \/            \/     \/    \/            \/
 * $Id$
 *
 * Copyright (C) 2005 by Dave Chapman
 *
 * All files in this archive are subject to the GNU General Public License.
 * See the file COPYING in the source tree root for full license agreement.
 *
 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
 * KIND, either express or implied.
 *
 ****************************************************************************/

#ifndef _WM8731_H
#define _WM8731_H

/* volume/balance/treble/bass interdependency */
#define VOLUME_MIN -730
#define VOLUME_MAX  60

extern int tenthdb2master(int db);
extern int tenthdb2mixer(int db);

extern void audiohw_preinit(void);
extern void audiohw_set_master_vol(int vol_l, int vol_r);
extern void audiohw_set_nsorder(int order);
extern void audiohw_set_sample_rate(int sampling_control);

/* Register addresses and bits */
#define LINVOL                  0x00
#define LINVOL_MASK             0x1f
#define LINVOL_LRINBOTH         (1 << 8)
#define LINVOL_LINMUTE          (1 << 7)

#define RINVOL                  0x01
#define RINVOL_MASK             0x1f
#define RINVOL_RINMUTE          (1 << 7)
#define RINVOL_RLINBOTH         (1 << 8)

#define LOUTVOL                 0x02
#define LOUTVOL_LHPVOL_MASK     0x7f
#define LOUTVOL_LZCEN           (1 << 7)
#define LOUTVOL_LRHP_BOTH       (1 << 8)

#define ROUTVOL                 0x03
#define ROUTVOL_RHPVOL_MASK     0x7f
#define ROUTVOL_RZCEN           (1 << 7)
#define ROUTVOL_RLHP_BOTH       (1 << 8)

#define AAPCTRL                 0x04  /* Analog audio path control */
#define AAPCTRL_MIC_BOOST       (1 << 0)
#define AAPCTRL_MUTEMIC         (1 << 1)
#define AAPCTRL_INSEL           (1 << 2)
#define AAPCTRL_BYPASS          (1 << 3)
#define AAPCTRL_DACSEL          (1 << 4)
#define AAPCTRL_SIDETONE        (1 << 5)
#define AAPCTRL_SIDEATT_6dB     (3 << 6)
#define AAPCTRL_SIDEATT_9dB     (1 << 6)
#define AAPCTRL_SIDEATT_12dB    (2 << 6)
#define AAPCTRL_SIDEATT_15dB    (3 << 6)

#define DAPCTRL                 0x05  /* Digital audio path control */
#define DAPCTRL_ADCHPD          (1 << 0)
#define DAPCTRL_DEEMP_DISABLE   (0 << 2)
#define DAPCTRL_DEEMP_32KHz     (1 << 2)
#define DAPCTRL_DEEMP_44KHz     (2 << 2)
#define DAPCTRL_DEEMP_48KHz     (3 << 2)
#define DAPCTRL_DEEMP_MASK      (3 << 2)
#define DAPCTRL_DACMU           (1 << 3)
#define DAPCTRL_HPOR            (1 << 4)

#define PDCTRL                  0x06
#define PDCTRL_LINEINPD         (1 << 0)
#define PDCTRL_MICPD            (1 << 1)
#define PDCTRL_ADCPD            (1 << 2)
#define PDCTRL_DACPD            (1 << 3)
#define PDCTRL_OUTPD            (1 << 4)
#define PDCTRL_OSCPD            (1 << 5)
#define PDCTRL_CLKOUTPD         (1 << 6)
#define PDCTRL_POWEROFF         (1 << 7)

#define AINTFCE                     0x07
#define AINTFCE_FORMAT_MSB_RJUST (0 << 0)
#define AINTFCE_FORMAT_MSB_LJUST (1 << 0)
#define AINTFCE_FORMAT_I2S      (2 << 0)
#define AINTFCE_FORMAT_DSP      (3 << 0)
#define AINTFCE_FORMAT_MASK     (3 << 0)
#define AINTFCE_IWL_16BIT       (0 << 2)
#define AINTFCE_IWL_20BIT       (1 << 2)
#define AINTFCE_IWL_24BIT       (2 << 2)
#define AINTFCE_IWL_32BIT       (3 << 2)
#define AINTFCE_IWL_MASK        (3 << 2)
#define AINTFCE_LRP_I2S_RLO     (0 << 4)
#define AINTFCE_LRP_I2S_RHI     (1 << 4)
#define AINTFCE_DSP_MODE_B      (0 << 4)
#define AINTFCE_DSP_MODE_A      (1 << 4)
#define AINTFCE_LRSWAP          (1 << 5)
#define AINTFCE_MS              (1 << 6)
#define AINTFCE_BCLKINV         (1 << 7)

#define SAMPCTRL                0x08
#define SAMPCTRL_USB            (1 << 0)
#define SAMPCTRL_BOSR_NOR_256fs (0 << 1)
#define SAMPCTRL_BOSR_NOR_384fs (1 << 1)
#define SAMPCTRL_BOSR_USB_250fs (0 << 1)
#define SAMPCTRL_BOSR_USB_272fs (1 << 1)
/* Bits 2-5:
 * Sample rate setting are device-specific. See WM8731(L) datasheet
 * for proper settings for the device's clocking */
#define SAMPCTRL_SR_MASK        (0xf << 2)
#define SAMPCTRL_CLKIDIV2       (1 << 6)
#define SAMPCTRL_CLKODIV2       (1 << 7)

#define ACTIVECTRL              0x09
#define ACTIVECTRL_ACTIVE       (1 << 0)

#define RESET                   0x0f
#define RESET_RESET             0x0

/* SAMPCTRL values for the supported samplerates (24MHz MCLK/USB): */
#define WM8731_USB24_8000HZ     0x4d
#define WM8731_USB24_32000HZ    0x59
#define WM8731_USB24_44100HZ    0x63
#define WM8731_USB24_48000HZ    0x41
#define WM8731_USB24_88200HZ    0x7f
#define WM8731_USB24_96000HZ    0x5d

#endif /* _WM8731_H */