* [PATCH 1/2] mfd: arizona: Add GPIO control register bit definitions
@ 2013-07-02 14:53 Charles Keepax
2013-07-02 14:53 ` [PATCH 2/2] ASoC: arizona: Add GPIO output for DRC Charles Keepax
2013-07-02 15:51 ` [PATCH 1/2] mfd: arizona: Add GPIO control register bit definitions Mark Brown
0 siblings, 2 replies; 5+ messages in thread
From: Charles Keepax @ 2013-07-02 14:53 UTC (permalink / raw)
To: broonie, sameo; +Cc: alsa-devel, tiwai, patches, lgirdwood, Charles Keepax
Signed-off-by: Charles Keepax <ckeepax@opensource.wolfsonmicro.com>
---
include/linux/mfd/arizona/registers.h | 35 +++++++++++++++++++++++++++++++++
1 files changed, 35 insertions(+), 0 deletions(-)
diff --git a/include/linux/mfd/arizona/registers.h b/include/linux/mfd/arizona/registers.h
index 715b6ba..522798d 100644
--- a/include/linux/mfd/arizona/registers.h
+++ b/include/linux/mfd/arizona/registers.h
@@ -4131,6 +4131,41 @@
#define ARIZONA_SLIMTX1_PORT_STS_WIDTH 1 /* SLIMTX1_PORT_STS */
/*
+ * R3072 - R3076 (0xC00 - 0xC04) ARIZONA_GPIO1_CTRL - ARIZONA_GPIO5_CTRL
+ */
+#define ARIZONA_GPN_DIR 0x8000 /* GPN_DIR */
+#define ARIZONA_GPN_DIR_MASK 0x8000 /* GPN_DIR */
+#define ARIZONA_GPN_DIR_SHIFT 15 /* GPN_DIR */
+#define ARIZONA_GPN_DIR_WIDTH 1 /* GPN_DIR */
+#define ARIZONA_GPN_PU 0x4000 /* GPN_PU */
+#define ARIZONA_GPN_PU_MASK 0x4000 /* GPN_PU */
+#define ARIZONA_GPN_PU_SHIFT 14 /* GPN_PU */
+#define ARIZONA_GPN_PU_WIDTH 1 /* GPN_PU */
+#define ARIZONA_GPN_PD 0x2000 /* GPN_PD */
+#define ARIZONA_GPN_PD_MASK 0x2000 /* GPN_PD */
+#define ARIZONA_GPN_PD_SHIFT 13 /* GPN_PD */
+#define ARIZONA_GPN_PD_WIDTH 1 /* GPN_PD */
+#define ARIZONA_GPN_LVL 0x0800 /* GPN_LVL */
+#define ARIZONA_GPN_LVL_MASK 0x0800 /* GPN_LVL */
+#define ARIZONA_GPN_LVL_SHIFT 11 /* GPN_LVL */
+#define ARIZONA_GPN_LVL_WIDTH 1 /* GPN_LVL */
+#define ARIZONA_GPN_POL 0x0400 /* GPN_POL */
+#define ARIZONA_GPN_POL_MASK 0x0400 /* GPN_POL */
+#define ARIZONA_GPN_POL_SHIFT 10 /* GPN_POL */
+#define ARIZONA_GPN_POL_WIDTH 1 /* GPN_POL */
+#define ARIZONA_GPN_OP_CFG 0x0200 /* GPN_OP_CFG */
+#define ARIZONA_GPN_OP_CFG_MASK 0x0200 /* GPN_OP_CFG */
+#define ARIZONA_GPN_OP_CFG_SHIFT 9 /* GPN_OP_CFG */
+#define ARIZONA_GPN_OP_CFG_WIDTH 1 /* GPN_OP_CFG */
+#define ARIZONA_GPN_DB 0x0100 /* GPN_DB */
+#define ARIZONA_GPN_DB_MASK 0x0100 /* GPN_DB */
+#define ARIZONA_GPN_DB_SHIFT 8 /* GPN_DB */
+#define ARIZONA_GPN_DB_WIDTH 1 /* GPN_DB */
+#define ARIZONA_GPN_FN_MASK 0x007F /* GPN_DB */
+#define ARIZONA_GPN_FN_SHIFT 0 /* GPN_DB */
+#define ARIZONA_GPN_FN_WIDTH 7 /* GPN_DB */
+
+/*
* R3087 (0xC0F) - IRQ CTRL 1
*/
#define ARIZONA_IRQ_POL 0x0400 /* IRQ_POL */
--
1.7.2.5
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH 2/2] ASoC: arizona: Add GPIO output for DRC
2013-07-02 14:53 [PATCH 1/2] mfd: arizona: Add GPIO control register bit definitions Charles Keepax
@ 2013-07-02 14:53 ` Charles Keepax
2013-07-02 15:16 ` Charles Keepax
2013-07-02 15:36 ` Mark Brown
2013-07-02 15:51 ` [PATCH 1/2] mfd: arizona: Add GPIO control register bit definitions Mark Brown
1 sibling, 2 replies; 5+ messages in thread
From: Charles Keepax @ 2013-07-02 14:53 UTC (permalink / raw)
To: broonie, sameo; +Cc: alsa-devel, tiwai, patches, lgirdwood, Charles Keepax
In some use cases, such as signal activity detection, the only output
from the DRC will be a GPIO pin. This patch adds GPIO outputs to the
CODEC driver and hooks these up to the DRC when a GPIO is configured to
output the DRC activity detection.
Signed-off-by: Charles Keepax <ckeepax@opensource.wolfsonmicro.com>
---
sound/soc/codecs/arizona.c | 52 ++++++++++++++++++++++++++++++++++++++++++++
sound/soc/codecs/arizona.h | 1 +
sound/soc/codecs/wm5102.c | 7 ++++++
sound/soc/codecs/wm5110.c | 7 ++++++
4 files changed, 67 insertions(+), 0 deletions(-)
diff --git a/sound/soc/codecs/arizona.c b/sound/soc/codecs/arizona.c
index 389f232..5879ec5 100644
--- a/sound/soc/codecs/arizona.c
+++ b/sound/soc/codecs/arizona.c
@@ -223,6 +223,58 @@ int arizona_init_spk(struct snd_soc_codec *codec)
}
EXPORT_SYMBOL_GPL(arizona_init_spk);
+static const char * const arizona_gpio_name[] = {
+ "GPIO1",
+ "GPIO2",
+ "GPIO3",
+ "GPIO4",
+ "GPIO5",
+};
+
+int arizona_init_gpio(struct snd_soc_codec *codec)
+{
+ struct arizona_priv *priv = snd_soc_codec_get_drvdata(codec);
+ struct arizona *arizona = priv->arizona;
+ struct snd_soc_dapm_route routes[2];
+ int i, ret;
+ bool add;
+
+ memset(&routes, 0, sizeof(routes));
+
+ for (i = 0; i < ARRAY_SIZE(arizona->pdata.gpio_defaults); i++) {
+ add = false;
+
+ switch (arizona->pdata.gpio_defaults[i] & ARIZONA_GPN_FN_MASK) {
+ case 0x1d: /* DRC1 Signal Detect */
+ routes[0].source = "DRC1L";
+ routes[1].source = "DRC1R";
+ add = true;
+ break;
+ case 0x22: /* DRC2 Signal Detect */
+ routes[0].source = "DRC2L";
+ routes[1].source = "DRC2R";
+ add = true;
+ break;
+ default:
+ break;
+ }
+
+ if (add) {
+ routes[0].sink = arizona_gpio_name[i];
+ routes[1].sink = arizona_gpio_name[i];
+
+ ret = snd_soc_dapm_add_routes(&codec->dapm,
+ routes,
+ ARRAY_SIZE(routes));
+ if (ret < 0)
+ return ret;
+ }
+ }
+
+ return 0;
+}
+EXPORT_SYMBOL_GPL(arizona_init_gpio);
+
const char *arizona_mixer_texts[ARIZONA_NUM_MIXER_INPUTS] = {
"None",
"Tone Generator 1",
diff --git a/sound/soc/codecs/arizona.h b/sound/soc/codecs/arizona.h
index af39f10..fe8bd3d 100644
--- a/sound/soc/codecs/arizona.h
+++ b/sound/soc/codecs/arizona.h
@@ -241,6 +241,7 @@ extern int arizona_set_fll(struct arizona_fll *fll, int source,
unsigned int Fref, unsigned int Fout);
extern int arizona_init_spk(struct snd_soc_codec *codec);
+extern int arizona_init_gpio(struct snd_soc_codec *codec);
extern int arizona_init_dai(struct arizona_priv *priv, int dai);
diff --git a/sound/soc/codecs/wm5102.c b/sound/soc/codecs/wm5102.c
index 100fdad..2ff2a65 100644
--- a/sound/soc/codecs/wm5102.c
+++ b/sound/soc/codecs/wm5102.c
@@ -967,6 +967,12 @@ SND_SOC_DAPM_INPUT("IN2R"),
SND_SOC_DAPM_INPUT("IN3L"),
SND_SOC_DAPM_INPUT("IN3R"),
+SND_SOC_DAPM_OUTPUT("GPIO1"),
+SND_SOC_DAPM_OUTPUT("GPIO2"),
+SND_SOC_DAPM_OUTPUT("GPIO3"),
+SND_SOC_DAPM_OUTPUT("GPIO4"),
+SND_SOC_DAPM_OUTPUT("GPIO5"),
+
SND_SOC_DAPM_PGA_E("IN1L PGA", ARIZONA_INPUT_ENABLES, ARIZONA_IN1L_ENA_SHIFT,
0, NULL, 0, arizona_in_ev,
SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD |
@@ -1578,6 +1584,7 @@ static int wm5102_codec_probe(struct snd_soc_codec *codec)
return ret;
arizona_init_spk(codec);
+ arizona_init_gpio(codec);
snd_soc_dapm_disable_pin(&codec->dapm, "HAPTICS");
diff --git a/sound/soc/codecs/wm5110.c b/sound/soc/codecs/wm5110.c
index 88ad7db..4f8611f 100644
--- a/sound/soc/codecs/wm5110.c
+++ b/sound/soc/codecs/wm5110.c
@@ -414,6 +414,12 @@ SND_SOC_DAPM_INPUT("IN3R"),
SND_SOC_DAPM_INPUT("IN4L"),
SND_SOC_DAPM_INPUT("IN4R"),
+SND_SOC_DAPM_OUTPUT("GPIO1"),
+SND_SOC_DAPM_OUTPUT("GPIO2"),
+SND_SOC_DAPM_OUTPUT("GPIO3"),
+SND_SOC_DAPM_OUTPUT("GPIO4"),
+SND_SOC_DAPM_OUTPUT("GPIO5"),
+
SND_SOC_DAPM_PGA_E("IN1L PGA", ARIZONA_INPUT_ENABLES, ARIZONA_IN1L_ENA_SHIFT,
0, NULL, 0, arizona_in_ev,
SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD |
@@ -978,6 +984,7 @@ static int wm5110_codec_probe(struct snd_soc_codec *codec)
return ret;
arizona_init_spk(codec);
+ arizona_init_gpio(codec);
snd_soc_dapm_disable_pin(&codec->dapm, "HAPTICS");
--
1.7.2.5
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH 2/2] ASoC: arizona: Add GPIO output for DRC
2013-07-02 14:53 ` [PATCH 2/2] ASoC: arizona: Add GPIO output for DRC Charles Keepax
@ 2013-07-02 15:16 ` Charles Keepax
2013-07-02 15:36 ` Mark Brown
1 sibling, 0 replies; 5+ messages in thread
From: Charles Keepax @ 2013-07-02 15:16 UTC (permalink / raw)
To: broonie, sameo; +Cc: tiwai, alsa-devel, patches, lgirdwood
Sorry has just occurred to me these are based off Mark's for-next
branch, probably would make more sense for me to base them off
the mfd tree.
Let me know if this is a problem and I will respin.
Thanks,
Charles
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 2/2] ASoC: arizona: Add GPIO output for DRC
2013-07-02 14:53 ` [PATCH 2/2] ASoC: arizona: Add GPIO output for DRC Charles Keepax
2013-07-02 15:16 ` Charles Keepax
@ 2013-07-02 15:36 ` Mark Brown
1 sibling, 0 replies; 5+ messages in thread
From: Mark Brown @ 2013-07-02 15:36 UTC (permalink / raw)
To: Charles Keepax; +Cc: alsa-devel, sameo, tiwai, patches, lgirdwood
[-- Attachment #1.1: Type: text/plain, Size: 1349 bytes --]
On Tue, Jul 02, 2013 at 03:53:37PM +0100, Charles Keepax wrote:
> In some use cases, such as signal activity detection, the only output
> from the DRC will be a GPIO pin. This patch adds GPIO outputs to the
> CODEC driver and hooks these up to the DRC when a GPIO is configured to
> output the DRC activity detection.
> +static const char * const arizona_gpio_name[] = {
> + "GPIO1",
> + "GPIO2",
> + "GPIO3",
> + "GPIO4",
> + "GPIO5",
> +};
This seems like the wrong way to be doing things - having the GPIOs in
the routing table is needlessly complicated as the don't go anywhere
routing wise and they're not exactly helping anything usability wise as
the function of the output is translated into a magic number making it
harder for people to write code interacting with this (eg, turning it on
and off depending on use case), you need to know which GPIO is in use so
it's harder to write generic code.
Just have a functional thing in there, enabling or disabling it by
default depending on the GPIO settings seems reasonable.
> + switch (arizona->pdata.gpio_defaults[i] & ARIZONA_GPN_FN_MASK) {
> + case 0x1d: /* DRC1 Signal Detect */
> + routes[0].source = "DRC1L";
> + routes[1].source = "DRC1R";
> + add = true;
> + break;
> + case 0x22: /* DRC2 Signal Detect */
You're going to be using these in multiple places, #defines..
[-- Attachment #1.2: Digital signature --]
[-- Type: application/pgp-signature, Size: 836 bytes --]
[-- Attachment #2: Type: text/plain, Size: 0 bytes --]
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 1/2] mfd: arizona: Add GPIO control register bit definitions
2013-07-02 14:53 [PATCH 1/2] mfd: arizona: Add GPIO control register bit definitions Charles Keepax
2013-07-02 14:53 ` [PATCH 2/2] ASoC: arizona: Add GPIO output for DRC Charles Keepax
@ 2013-07-02 15:51 ` Mark Brown
1 sibling, 0 replies; 5+ messages in thread
From: Mark Brown @ 2013-07-02 15:51 UTC (permalink / raw)
To: Charles Keepax; +Cc: alsa-devel, sameo, tiwai, patches, lgirdwood
[-- Attachment #1.1: Type: text/plain, Size: 368 bytes --]
On Tue, Jul 02, 2013 at 03:53:36PM +0100, Charles Keepax wrote:
> Signed-off-by: Charles Keepax <ckeepax@opensource.wolfsonmicro.com>
> ---
> include/linux/mfd/arizona/registers.h | 35 +++++++++++++++++++++++++++++++++
It's probably best to do what we do for several of the other MFDs and
put these in a separate header as they are useful for platform data
users.
[-- Attachment #1.2: Digital signature --]
[-- Type: application/pgp-signature, Size: 836 bytes --]
[-- Attachment #2: Type: text/plain, Size: 0 bytes --]
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2013-07-02 15:51 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-07-02 14:53 [PATCH 1/2] mfd: arizona: Add GPIO control register bit definitions Charles Keepax
2013-07-02 14:53 ` [PATCH 2/2] ASoC: arizona: Add GPIO output for DRC Charles Keepax
2013-07-02 15:16 ` Charles Keepax
2013-07-02 15:36 ` Mark Brown
2013-07-02 15:51 ` [PATCH 1/2] mfd: arizona: Add GPIO control register bit definitions Mark Brown
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.