ASoC: Decouple DAPM from CODECs
[linux-2.6.git] / sound / soc / codecs / wl1273.h
1 /*
2  * sound/soc/codec/wl1273.h
3  *
4  * ALSA SoC WL1273 codec driver
5  *
6  * Copyright (C) Nokia Corporation
7  * Author: Matti Aaltonen <matti.j.aaltonen@nokia.com>
8  *
9  * This program is free software; you can redistribute it and/or
10  * modify it under the terms of the GNU General Public License
11  * version 2 as published by the Free Software Foundation.
12  *
13  * This program is distributed in the hope that it will be useful, but
14  * WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16  * General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, write to the Free Software
20  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
21  * 02110-1301 USA
22  *
23  */
24
25 #ifndef __WL1273_CODEC_H__
26 #define __WL1273_CODEC_H__
27
28 /* I2S protocol, left channel first, data width 16 bits */
29 #define WL1273_PCM_DEF_MODE             0x00
30
31 /* Rx */
32 #define WL1273_AUDIO_ENABLE_I2S         (1 << 0)
33 #define WL1273_AUDIO_ENABLE_ANALOG      (1 << 1)
34
35 /* Tx */
36 #define WL1273_AUDIO_IO_SET_ANALOG      0
37 #define WL1273_AUDIO_IO_SET_I2S         1
38
39 #define WL1273_POWER_SET_OFF            0
40 #define WL1273_POWER_SET_FM             (1 << 0)
41 #define WL1273_POWER_SET_RDS            (1 << 1)
42 #define WL1273_POWER_SET_RETENTION      (1 << 4)
43
44 #define WL1273_PUPD_SET_OFF             0x00
45 #define WL1273_PUPD_SET_ON              0x01
46 #define WL1273_PUPD_SET_RETENTION       0x10
47
48 /* I2S mode */
49 #define WL1273_IS2_WIDTH_32     0x0
50 #define WL1273_IS2_WIDTH_40     0x1
51 #define WL1273_IS2_WIDTH_22_23  0x2
52 #define WL1273_IS2_WIDTH_23_22  0x3
53 #define WL1273_IS2_WIDTH_48     0x4
54 #define WL1273_IS2_WIDTH_50     0x5
55 #define WL1273_IS2_WIDTH_60     0x6
56 #define WL1273_IS2_WIDTH_64     0x7
57 #define WL1273_IS2_WIDTH_80     0x8
58 #define WL1273_IS2_WIDTH_96     0x9
59 #define WL1273_IS2_WIDTH_128    0xa
60 #define WL1273_IS2_WIDTH        0xf
61
62 #define WL1273_IS2_FORMAT_STD   (0x0 << 4)
63 #define WL1273_IS2_FORMAT_LEFT  (0x1 << 4)
64 #define WL1273_IS2_FORMAT_RIGHT (0x2 << 4)
65 #define WL1273_IS2_FORMAT_USER  (0x3 << 4)
66
67 #define WL1273_IS2_MASTER       (0x0 << 6)
68 #define WL1273_IS2_SLAVEW       (0x1 << 6)
69
70 #define WL1273_IS2_TRI_AFTER_SENDING    (0x0 << 7)
71 #define WL1273_IS2_TRI_ALWAYS_ACTIVE    (0x1 << 7)
72
73 #define WL1273_IS2_SDOWS_RR     (0x0 << 8)
74 #define WL1273_IS2_SDOWS_RF     (0x1 << 8)
75 #define WL1273_IS2_SDOWS_FR     (0x2 << 8)
76 #define WL1273_IS2_SDOWS_FF     (0x3 << 8)
77
78 #define WL1273_IS2_TRI_OPT      (0x0 << 10)
79 #define WL1273_IS2_TRI_ALWAYS   (0x1 << 10)
80
81 #define WL1273_IS2_RATE_48K     (0x0 << 12)
82 #define WL1273_IS2_RATE_44_1K   (0x1 << 12)
83 #define WL1273_IS2_RATE_32K     (0x2 << 12)
84 #define WL1273_IS2_RATE_22_05K  (0x4 << 12)
85 #define WL1273_IS2_RATE_16K     (0x5 << 12)
86 #define WL1273_IS2_RATE_12K     (0x8 << 12)
87 #define WL1273_IS2_RATE_11_025  (0x9 << 12)
88 #define WL1273_IS2_RATE_8K      (0xa << 12)
89 #define WL1273_IS2_RATE         (0xf << 12)
90
91 #define WL1273_I2S_DEF_MODE     (WL1273_IS2_WIDTH_32 | \
92                                  WL1273_IS2_FORMAT_STD | \
93                                  WL1273_IS2_MASTER | \
94                                  WL1273_IS2_TRI_AFTER_SENDING | \
95                                  WL1273_IS2_SDOWS_RR | \
96                                  WL1273_IS2_TRI_OPT | \
97                                  WL1273_IS2_RATE_48K)
98
99 int wl1273_get_format(struct snd_soc_codec *codec, unsigned int *fmt);
100
101 #endif  /* End of __WL1273_CODEC_H__ */