All of lore.kernel.org
 help / color / mirror / Atom feed
From: Daniel Mack <daniel@caiaq.org>
To: alsa-devel@alsa-project.org
Subject: [PATCH] tlv320aic3x: headset/button press support
Date: Wed, 26 Nov 2008 23:07:42 +0100	[thread overview]
Message-ID: <20081126220742.GA24648@buzzloop.caiaq.de> (raw)

[-- Attachment #1: Type: text/plain, Size: 270 bytes --]

Hi,

This patch adds a function to setup headset and button press detection
modes.

Also, aic3x_headset_detected() returns the value from the current state's
register rather than the interrupt cause flag so it works without an 
interrupt as well.

Best regards,
Daniel


[-- Attachment #2: tlv320aic3x-headset.diff --]
[-- Type: text/x-diff, Size: 3136 bytes --]

Added a function to setup headset and button press detection modes. Also,
aic3x_headset_detected() returns the value from the current state's register
rather than the interrupt cause flag so it works without an interrupt as well.

Signed-off-by: Daniel Mack <daniel@caiaq.de>

diff --git a/sound/soc/codecs/tlv320aic3x.c b/sound/soc/codecs/tlv320aic3x.c
index 2047c66..a41aa72 100644
--- a/sound/soc/codecs/tlv320aic3x.c
+++ b/sound/soc/codecs/tlv320aic3x.c
@@ -1017,14 +1017,32 @@ int aic3x_get_gpio(struct snd_soc_codec *codec, int gpio)
 }
 EXPORT_SYMBOL_GPL(aic3x_get_gpio);
 
+void aic3x_set_headset_detection(struct snd_soc_codec *codec, int val)
+{
+	u8 reg_a = val & 0xff;
+	if (reg_a & (3 << 5))
+		reg_a |= 0x80;
+
+	aic3x_write(codec, AIC3X_HEADSET_DETECT_CTRL_A, reg_a);
+}
+EXPORT_SYMBOL_GPL(aic3x_set_headset_detection);
+
 int aic3x_headset_detected(struct snd_soc_codec *codec)
 {
 	u8 val;
-	aic3x_read(codec, AIC3X_RT_IRQ_FLAGS_REG, &val);
-	return (val >> 2) & 1;
+	aic3x_read(codec, AIC3X_HEADSET_DETECT_CTRL_B, &val);
+	return (val >> 4) & 1;
 }
 EXPORT_SYMBOL_GPL(aic3x_headset_detected);
 
+int aic3x_button_pressed(struct snd_soc_codec *codec)
+{
+	u8 val;
+	aic3x_read(codec, AIC3X_HEADSET_DETECT_CTRL_B, &val);
+	return (val >> 5) & 1;
+}
+EXPORT_SYMBOL_GPL(aic3x_button_pressed);
+
 #define AIC3X_RATES	SNDRV_PCM_RATE_8000_96000
 #define AIC3X_FORMATS	(SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE | \
 			 SNDRV_PCM_FMTBIT_S24_3LE | SNDRV_PCM_FMTBIT_S32_LE)
diff --git a/sound/soc/codecs/tlv320aic3x.h b/sound/soc/codecs/tlv320aic3x.h
index 7e982ac..2f36c03 100644
--- a/sound/soc/codecs/tlv320aic3x.h
+++ b/sound/soc/codecs/tlv320aic3x.h
@@ -39,7 +39,9 @@
 #define AIC3X_OVRF_STATUS_AND_PLLR_REG	11
 /* Audio codec digital filter control register */
 #define AIC3X_CODEC_DFILT_CTRL		12
-
+/* Headset/button press detection register */
+#define AIC3X_HEADSET_DETECT_CTRL_A	13
+#define AIC3X_HEADSET_DETECT_CTRL_B	14
 /* ADC PGA Gain control registers */
 #define LADC_VOL			15
 #define RADC_VOL			16
@@ -233,7 +235,28 @@ enum {
 
 void aic3x_set_gpio(struct snd_soc_codec *codec, int gpio, int state);
 int aic3x_get_gpio(struct snd_soc_codec *codec, int gpio);
+
+/* headset detection / button API, logically OR the values
+ * on calls to aic3x_set_headset_detection(). */
+#define AIC3X_HEADSET_DETECT_OFF	(0 << 5)
+#define AIC3X_HEADSET_DETECT_STEREO	(1 << 5)
+#define AIC3X_HEADSET_DETECT_CELLULAR	(2 << 5)
+#define AIC3X_HEADSET_DETECT_BOTH	(3 << 5)
+
+#define AIC3X_HEADSET_DEBOUNCE_16MS	(0 << 2)
+#define AIC3X_HEADSET_DEBOUNCE_32MS	(1 << 2)
+#define AIC3X_HEADSET_DEBOUNCE_64MS	(2 << 2)
+#define AIC3X_HEADSET_DEBOUNCE_128MS	(3 << 2)
+#define AIC3X_HEADSET_DEBOUNCE_256MS	(4 << 2)
+
+#define AIC3X_BUTTON_DEBOUNCE_0MS	(0 << 0)
+#define AIC3X_BUTTON_DEBOUNCE_8MS	(1 << 0)
+#define AIC3X_BUTTON_DEBOUNCE_16MS	(2 << 0)
+#define AIC3X_BUTTON_DEBOUNCE_32MS	(3 << 0)
+
+void aic3x_set_headset_detection(struct snd_soc_codec *codec, int val);
 int aic3x_headset_detected(struct snd_soc_codec *codec);
+int aic3x_button_pressed(struct snd_soc_codec *codec);
 
 struct aic3x_setup_data {
 	int i2c_bus;

[-- Attachment #3: Type: text/plain, Size: 160 bytes --]

_______________________________________________
Alsa-devel mailing list
Alsa-devel@alsa-project.org
http://mailman.alsa-project.org/mailman/listinfo/alsa-devel

             reply	other threads:[~2008-11-26 22:07 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-11-26 22:07 Daniel Mack [this message]
2008-11-27 11:50 ` [PATCH] tlv320aic3x: headset/button press support Mark Brown
2008-12-02 16:37   ` Daniel Mack
2008-12-02 19:50     ` Mark Brown
2008-12-03 10:39       ` Daniel Mack
2008-12-03 10:44       ` Daniel Mack

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20081126220742.GA24648@buzzloop.caiaq.de \
    --to=daniel@caiaq.org \
    --cc=alsa-devel@alsa-project.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.