aboutsummaryrefslogtreecommitdiffstats
path: root/sound/soc/codecs/tlv320aic3x.h
diff options
context:
space:
mode:
authorDaniel Mack <daniel@caiaq.de>2008-04-30 10:20:52 -0400
committerJaroslav Kysela <perex@perex.cz>2008-05-19 07:19:14 -0400
commit54e7e6167d29a4a98207884b2fbd28b0b3fe91f6 (patch)
tree84ada6a443d563fbb3d0a58a18768aeefe24f33e /sound/soc/codecs/tlv320aic3x.h
parent4f9c16ccfa26691dbb9a5d9e7d5098eb934ccdbe (diff)
[ALSA] soc - tlv320aic3x - add GPIO support
This patch adds support for AIC3x GPIO lines. They can be configured for many possible functions as well as be driven manually. I also introduced i2c read functionality since the GPIO state register has to be read from hardware every time and can not be served from cache. Signed-off-by: Daniel Mack <daniel@caiaq.de> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com> Signed-off-by: Takashi Iwai <tiwai@suse.de> Signed-off-by: Jaroslav Kysela <perex@perex.cz>
Diffstat (limited to 'sound/soc/codecs/tlv320aic3x.h')
-rw-r--r--sound/soc/codecs/tlv320aic3x.h49
1 files changed, 48 insertions, 1 deletions
diff --git a/sound/soc/codecs/tlv320aic3x.h b/sound/soc/codecs/tlv320aic3x.h
index d49d001e6e4c..c1dd1ac0ceac 100644
--- a/sound/soc/codecs/tlv320aic3x.h
+++ b/sound/soc/codecs/tlv320aic3x.h
@@ -108,8 +108,14 @@
108#define DACR1_2_RLOPM_VOL 92 108#define DACR1_2_RLOPM_VOL 92
109#define LLOPM_CTRL 86 109#define LLOPM_CTRL 86
110#define RLOPM_CTRL 93 110#define RLOPM_CTRL 93
111/* Clock generation control register */ 111/* GPIO/IRQ registers */
112#define AIC3X_STICKY_IRQ_FLAGS_REG 96
113#define AIC3X_RT_IRQ_FLAGS_REG 97
114#define AIC3X_GPIO1_REG 98
115#define AIC3X_GPIO2_REG 99
116#define AIC3X_GPIOA_REG 100
112#define AIC3X_GPIOB_REG 101 117#define AIC3X_GPIOB_REG 101
118/* Clock generation control register */
113#define AIC3X_CLKGEN_CTRL_REG 102 119#define AIC3X_CLKGEN_CTRL_REG 102
114 120
115/* Page select register bits */ 121/* Page select register bits */
@@ -175,8 +181,49 @@
175/* Default input volume */ 181/* Default input volume */
176#define DEFAULT_GAIN 0x20 182#define DEFAULT_GAIN 0x20
177 183
184/* GPIO API */
185enum {
186 AIC3X_GPIO1_FUNC_DISABLED = 0,
187 AIC3X_GPIO1_FUNC_AUDIO_WORDCLK_ADC = 1,
188 AIC3X_GPIO1_FUNC_CLOCK_MUX = 2,
189 AIC3X_GPIO1_FUNC_CLOCK_MUX_DIV2 = 3,
190 AIC3X_GPIO1_FUNC_CLOCK_MUX_DIV4 = 4,
191 AIC3X_GPIO1_FUNC_CLOCK_MUX_DIV8 = 5,
192 AIC3X_GPIO1_FUNC_SHORT_CIRCUIT_IRQ = 6,
193 AIC3X_GPIO1_FUNC_AGC_NOISE_IRQ = 7,
194 AIC3X_GPIO1_FUNC_INPUT = 8,
195 AIC3X_GPIO1_FUNC_OUTPUT = 9,
196 AIC3X_GPIO1_FUNC_DIGITAL_MIC_MODCLK = 10,
197 AIC3X_GPIO1_FUNC_AUDIO_WORDCLK = 11,
198 AIC3X_GPIO1_FUNC_BUTTON_IRQ = 12,
199 AIC3X_GPIO1_FUNC_HEADSET_DETECT_IRQ = 13,
200 AIC3X_GPIO1_FUNC_HEADSET_DETECT_OR_BUTTON_IRQ = 14,
201 AIC3X_GPIO1_FUNC_ALL_IRQ = 16
202};
203
204enum {
205 AIC3X_GPIO2_FUNC_DISABLED = 0,
206 AIC3X_GPIO2_FUNC_HEADSET_DETECT_IRQ = 2,
207 AIC3X_GPIO2_FUNC_INPUT = 3,
208 AIC3X_GPIO2_FUNC_OUTPUT = 4,
209 AIC3X_GPIO2_FUNC_DIGITAL_MIC_INPUT = 5,
210 AIC3X_GPIO2_FUNC_AUDIO_BITCLK = 8,
211 AIC3X_GPIO2_FUNC_HEADSET_DETECT_OR_BUTTON_IRQ = 9,
212 AIC3X_GPIO2_FUNC_ALL_IRQ = 10,
213 AIC3X_GPIO2_FUNC_SHORT_CIRCUIT_OR_AGC_IRQ = 11,
214 AIC3X_GPIO2_FUNC_HEADSET_OR_BUTTON_PRESS_OR_SHORT_CIRCUIT_IRQ = 12,
215 AIC3X_GPIO2_FUNC_SHORT_CIRCUIT_IRQ = 13,
216 AIC3X_GPIO2_FUNC_AGC_NOISE_IRQ = 14,
217 AIC3X_GPIO2_FUNC_BUTTON_PRESS_IRQ = 15
218};
219
220void aic3x_set_gpio(struct snd_soc_codec *codec, int gpio, int state);
221int aic3x_get_gpio(struct snd_soc_codec *codec, int gpio);
222int aic3x_headset_detected(struct snd_soc_codec *codec);
223
178struct aic3x_setup_data { 224struct aic3x_setup_data {
179 unsigned short i2c_address; 225 unsigned short i2c_address;
226 unsigned int gpio_func[2];
180}; 227};
181 228
182extern struct snd_soc_codec_dai aic3x_dai; 229extern struct snd_soc_codec_dai aic3x_dai;