All of lore.kernel.org
 help / color / mirror / Atom feed
* [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.