linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v3 1/2] dt-bindings: tlv320adcx140: Add GPIO config and drive config
@ 2020-09-16  7:59 Camel Guo
  2020-09-16  7:59 ` [PATCH v3 2/2] ASoC: tlv320adcx140: Add support for configuring GPIO pin Camel Guo
  2020-09-21 16:58 ` [PATCH v3 1/2] dt-bindings: tlv320adcx140: Add GPIO config and drive config Mark Brown
  0 siblings, 2 replies; 5+ messages in thread
From: Camel Guo @ 2020-09-16  7:59 UTC (permalink / raw)
  To: lgirdwood, broonie, tiwai, dmurphy, robh+dt, devicetree
  Cc: alsa-devel, linux-kernel, kernel, Camel Guo

From: Camel Guo <camelg@axis.com>

Add properties for configuring the General Purpose Input Output (GPIO).
There are 2 settings for GPIO, configuration and the output drive type.

Signed-off-by: Camel Guo <camelg@axis.com>
Acked-by: Dan Murphy <dmurphy@ti.com>
---
 v3:
  - Fix typo
  - Add Acked-By from Dan

 .../bindings/sound/tlv320adcx140.yaml         | 44 +++++++++++++++++++
 1 file changed, 44 insertions(+)

diff --git a/Documentation/devicetree/bindings/sound/tlv320adcx140.yaml b/Documentation/devicetree/bindings/sound/tlv320adcx140.yaml
index f578f17f3e04..2f95ccde4dc3 100644
--- a/Documentation/devicetree/bindings/sound/tlv320adcx140.yaml
+++ b/Documentation/devicetree/bindings/sound/tlv320adcx140.yaml
@@ -134,6 +134,49 @@ patternProperties:
        4d - Drive weak low and active high
        5d - Drive Hi-Z and active high
 
+  ti,gpio-config:
+    description: |
+       Defines the configuration and output drive for the General Purpose
+       Input and Output pin (GPIO1). Its value is a pair, the first value is for
+       the configuration type and the second value is for the output drive
+       type. The array is defined as <GPIO1_CFG GPIO1_DRV>
+
+       configuration for the GPIO pin can be one of the following:
+       0 - disabled
+       1 - GPIO1 is configured as a general-purpose output (GPO)
+       2 - (default) GPIO1 is configured as a device interrupt output (IRQ)
+       3 - GPIO1 is configured as a secondary ASI output (SDOUT2)
+       4 - GPIO1 is configured as a PDM clock output (PDMCLK)
+       8 - GPIO1 is configured as an input to control when MICBIAS turns on or
+           off (MICBIAS_EN)
+       9 - GPIO1 is configured as a general-purpose input (GPI)
+       10 - GPIO1 is configured as a master clock input (MCLK)
+       11 - GPIO1 is configured as an ASI input for daisy-chain (SDIN)
+       12 - GPIO1 is configured as a PDM data input for channel 1 and channel 2
+            (PDMDIN1)
+       13 - GPIO1 is configured as a PDM data input for channel 3 and channel 4
+            (PDMDIN2)
+       14 - GPIO1 is configured as a PDM data input for channel 5 and channel 6
+            (PDMDIN3)
+       15 - GPIO1 is configured as a PDM data input for channel 7 and channel 8
+            (PDMDIN4)
+
+       output drive type for the GPIO pin can be one of the following:
+       0 - Hi-Z output
+       1 - Drive active low and active high
+       2 - (default) Drive active low and weak high
+       3 - Drive active low and Hi-Z
+       4 - Drive weak low and active high
+       5 - Drive Hi-Z and active high
+
+    allOf:
+      - $ref: /schemas/types.yaml#/definitions/uint32-array
+      - minItems: 2
+        maxItems: 2
+        items:
+          maximum: 15
+        default: [2, 2]
+
 required:
   - compatible
   - reg
@@ -150,6 +193,7 @@ examples:
         ti,mic-bias-source = <6>;
         ti,pdm-edge-select = <0 1 0 1>;
         ti,gpi-config = <4 5 6 7>;
+        ti,gpio-config = <10 2>;
         ti,gpo-config-1 = <0 0>;
         ti,gpo-config-2 = <0 0>;
         reset-gpios = <&gpio0 14 GPIO_ACTIVE_HIGH>;
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH v3 2/2] ASoC: tlv320adcx140: Add support for configuring GPIO pin
  2020-09-16  7:59 [PATCH v3 1/2] dt-bindings: tlv320adcx140: Add GPIO config and drive config Camel Guo
@ 2020-09-16  7:59 ` Camel Guo
  2020-09-17 11:42   ` Dan Murphy
  2020-09-17 15:38   ` Mark Brown
  2020-09-21 16:58 ` [PATCH v3 1/2] dt-bindings: tlv320adcx140: Add GPIO config and drive config Mark Brown
  1 sibling, 2 replies; 5+ messages in thread
From: Camel Guo @ 2020-09-16  7:59 UTC (permalink / raw)
  To: lgirdwood, broonie, tiwai, dmurphy, robh+dt, devicetree
  Cc: alsa-devel, linux-kernel, kernel, Camel Guo

From: Camel Guo <camelg@axis.com>

Add support to configure the GPIO pin to the specific configuration.
The GPIO pin can be configured as GPO, IRQ, SDOUT2, PDMCLK, MICBASE_EN,
GPI, MCLK, SDIN, PDMDIN1, PDMDIN2, PDMDIN3 or PDMDIN4 and the output
drive can be configured with various configuration.

Signed-off-by: Camel Guo <camelg@axis.com>
---
 v3:
  - Add ADCX140_NUM_GPIO_CFGS avoiding using magic number
  - Remove unneeded check on ret in adcx140_configure_gpio

 sound/soc/codecs/tlv320adcx140.c | 40 ++++++++++++++++++++++++++++++++
 sound/soc/codecs/tlv320adcx140.h |  5 ++++
 2 files changed, 45 insertions(+)

diff --git a/sound/soc/codecs/tlv320adcx140.c b/sound/soc/codecs/tlv320adcx140.c
index f33ee604ee78..fe6fc6df66cc 100644
--- a/sound/soc/codecs/tlv320adcx140.c
+++ b/sound/soc/codecs/tlv320adcx140.c
@@ -837,6 +837,42 @@ static int adcx140_configure_gpo(struct adcx140_priv *adcx140)
 
 }
 
+static int adcx140_configure_gpio(struct adcx140_priv *adcx140)
+{
+	int gpio_count = 0;
+	u32 gpio_outputs[ADCX140_NUM_GPIO_CFGS];
+	u32 gpio_output_val = 0;
+	int ret;
+
+	gpio_count = device_property_count_u32(adcx140->dev,
+			"ti,gpio-config");
+	if (gpio_count == 0)
+		return 0;
+
+	if (gpio_count != ADCX140_NUM_GPIO_CFGS)
+		return -EINVAL;
+
+	ret = device_property_read_u32_array(adcx140->dev, "ti,gpio-config",
+			gpio_outputs, gpio_count);
+	if (ret)
+		return ret;
+
+	if (gpio_outputs[0] > ADCX140_GPIO_CFG_MAX) {
+		dev_err(adcx140->dev, "GPIO config out of range\n");
+		return -EINVAL;
+	}
+
+	if (gpio_outputs[1] > ADCX140_GPIO_DRV_MAX) {
+		dev_err(adcx140->dev, "GPIO drive out of range\n");
+		return -EINVAL;
+	}
+
+	gpio_output_val = gpio_outputs[0] << ADCX140_GPIO_SHIFT
+		| gpio_outputs[1];
+
+	return regmap_write(adcx140->regmap, ADCX140_GPIO_CFG0, gpio_output_val);
+}
+
 static int adcx140_codec_probe(struct snd_soc_component *component)
 {
 	struct adcx140_priv *adcx140 = snd_soc_component_get_drvdata(component);
@@ -934,6 +970,10 @@ static int adcx140_codec_probe(struct snd_soc_component *component)
 			return ret;
 	}
 
+	ret = adcx140_configure_gpio(adcx140);
+	if (ret)
+		return ret;
+
 	ret = adcx140_configure_gpo(adcx140);
 	if (ret)
 		goto out;
diff --git a/sound/soc/codecs/tlv320adcx140.h b/sound/soc/codecs/tlv320adcx140.h
index eedbc1d7221f..9d04dec374d1 100644
--- a/sound/soc/codecs/tlv320adcx140.h
+++ b/sound/soc/codecs/tlv320adcx140.h
@@ -145,4 +145,9 @@
 #define ADCX140_GPO_CFG_MAX		4
 #define ADCX140_GPO_DRV_MAX		5
 
+#define ADCX140_NUM_GPIO_CFGS		2
+#define ADCX140_GPIO_SHIFT		4
+#define ADCX140_GPIO_CFG_MAX		15
+#define ADCX140_GPIO_DRV_MAX		5
+
 #endif /* _TLV320ADCX140_ */
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH v3 2/2] ASoC: tlv320adcx140: Add support for configuring GPIO pin
  2020-09-16  7:59 ` [PATCH v3 2/2] ASoC: tlv320adcx140: Add support for configuring GPIO pin Camel Guo
@ 2020-09-17 11:42   ` Dan Murphy
  2020-09-17 15:38   ` Mark Brown
  1 sibling, 0 replies; 5+ messages in thread
From: Dan Murphy @ 2020-09-17 11:42 UTC (permalink / raw)
  To: Camel Guo, lgirdwood, broonie, tiwai, robh+dt, devicetree
  Cc: alsa-devel, linux-kernel, kernel, Camel Guo

Camel

On 9/16/20 2:59 AM, Camel Guo wrote:
> From: Camel Guo <camelg@axis.com>
>
> Add support to configure the GPIO pin to the specific configuration.
> The GPIO pin can be configured as GPO, IRQ, SDOUT2, PDMCLK, MICBASE_EN,
> GPI, MCLK, SDIN, PDMDIN1, PDMDIN2, PDMDIN3 or PDMDIN4 and the output
> drive can be configured with various configuration.
>
> Signed-off-by: Camel Guo <camelg@axis.com>
> ---
>   v3:
>    - Add ADCX140_NUM_GPIO_CFGS avoiding using magic number
>    - Remove unneeded check on ret in adcx140_configure_gpio
>
>   sound/soc/codecs/tlv320adcx140.c | 40 ++++++++++++++++++++++++++++++++
>   sound/soc/codecs/tlv320adcx140.h |  5 ++++
>   2 files changed, 45 insertions(+)
>
> diff --git a/sound/soc/codecs/tlv320adcx140.c b/sound/soc/codecs/tlv320adcx140.c
> index f33ee604ee78..fe6fc6df66cc 100644
> --- a/sound/soc/codecs/tlv320adcx140.c
> +++ b/sound/soc/codecs/tlv320adcx140.c
> @@ -837,6 +837,42 @@ static int adcx140_configure_gpo(struct adcx140_priv *adcx140)
>   
>   }
>   
> +static int adcx140_configure_gpio(struct adcx140_priv *adcx140)
> +{
> +	int gpio_count = 0;
> +	u32 gpio_outputs[ADCX140_NUM_GPIO_CFGS];
> +	u32 gpio_output_val = 0;
> +	int ret;
> +
> +	gpio_count = device_property_count_u32(adcx140->dev,
> +			"ti,gpio-config");
> +	if (gpio_count == 0)
> +		return 0;
> +
> +	if (gpio_count != ADCX140_NUM_GPIO_CFGS)
> +		return -EINVAL;
> +
> +	ret = device_property_read_u32_array(adcx140->dev, "ti,gpio-config",
> +			gpio_outputs, gpio_count);
> +	if (ret)
> +		return ret;
> +
> +	if (gpio_outputs[0] > ADCX140_GPIO_CFG_MAX) {
> +		dev_err(adcx140->dev, "GPIO config out of range\n");
> +		return -EINVAL;
> +	}
> +
> +	if (gpio_outputs[1] > ADCX140_GPIO_DRV_MAX) {
> +		dev_err(adcx140->dev, "GPIO drive out of range\n");
> +		return -EINVAL;
> +	}
> +
> +	gpio_output_val = gpio_outputs[0] << ADCX140_GPIO_SHIFT
> +		| gpio_outputs[1];
> +
> +	return regmap_write(adcx140->regmap, ADCX140_GPIO_CFG0, gpio_output_val);
> +}
> +
>   static int adcx140_codec_probe(struct snd_soc_component *component)
>   {
>   	struct adcx140_priv *adcx140 = snd_soc_component_get_drvdata(component);
> @@ -934,6 +970,10 @@ static int adcx140_codec_probe(struct snd_soc_component *component)
>   			return ret;
>   	}
>   
> +	ret = adcx140_configure_gpio(adcx140);
> +	if (ret)
> +		return ret;
> +
>   	ret = adcx140_configure_gpo(adcx140);
>   	if (ret)
>   		goto out;
> diff --git a/sound/soc/codecs/tlv320adcx140.h b/sound/soc/codecs/tlv320adcx140.h
> index eedbc1d7221f..9d04dec374d1 100644
> --- a/sound/soc/codecs/tlv320adcx140.h
> +++ b/sound/soc/codecs/tlv320adcx140.h
> @@ -145,4 +145,9 @@
>   #define ADCX140_GPO_CFG_MAX		4
>   #define ADCX140_GPO_DRV_MAX		5
>   
> +#define ADCX140_NUM_GPIO_CFGS		2
> +#define ADCX140_GPIO_SHIFT		4
> +#define ADCX140_GPIO_CFG_MAX		15
> +#define ADCX140_GPIO_DRV_MAX		5
> +
>   #endif /* _TLV320ADCX140_ */
Acked-by: Dan Murphy <dmurphy@ti.com>

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v3 2/2] ASoC: tlv320adcx140: Add support for configuring GPIO pin
  2020-09-16  7:59 ` [PATCH v3 2/2] ASoC: tlv320adcx140: Add support for configuring GPIO pin Camel Guo
  2020-09-17 11:42   ` Dan Murphy
@ 2020-09-17 15:38   ` Mark Brown
  1 sibling, 0 replies; 5+ messages in thread
From: Mark Brown @ 2020-09-17 15:38 UTC (permalink / raw)
  To: Camel Guo
  Cc: lgirdwood, tiwai, dmurphy, robh+dt, devicetree, alsa-devel,
	kernel, linux-kernel, Camel Guo

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

On Wed, Sep 16, 2020 at 09:59:49AM +0200, Camel Guo wrote:
> From: Camel Guo <camelg@axis.com>
> 
> Add support to configure the GPIO pin to the specific configuration.
> The GPIO pin can be configured as GPO, IRQ, SDOUT2, PDMCLK, MICBASE_EN,
> GPI, MCLK, SDIN, PDMDIN1, PDMDIN2, PDMDIN3 or PDMDIN4 and the output
> drive can be configured with various configuration.

This doesn't apply against current code, please check and resend.

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v3 1/2] dt-bindings: tlv320adcx140: Add GPIO config and drive config
  2020-09-16  7:59 [PATCH v3 1/2] dt-bindings: tlv320adcx140: Add GPIO config and drive config Camel Guo
  2020-09-16  7:59 ` [PATCH v3 2/2] ASoC: tlv320adcx140: Add support for configuring GPIO pin Camel Guo
@ 2020-09-21 16:58 ` Mark Brown
  1 sibling, 0 replies; 5+ messages in thread
From: Mark Brown @ 2020-09-21 16:58 UTC (permalink / raw)
  To: devicetree, lgirdwood, dmurphy, Camel Guo, tiwai, robh+dt
  Cc: kernel, linux-kernel, Camel Guo, alsa-devel

On Wed, 16 Sep 2020 09:59:48 +0200, Camel Guo wrote:
> Add properties for configuring the General Purpose Input Output (GPIO).
> There are 2 settings for GPIO, configuration and the output drive type.

Applied to

   https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git for-next

Thanks!

[1/2] dt-bindings: tlv320adcx140: Add GPIO config and drive config
      commit: 15b3d324c8980022071710b5096b705eb6b74fca
[2/2] ASoC: tlv320adcx140: Add support for configuring GPIO pin
      commit: d5214321498a43558d9ffcce4153775c2c296bad

All being well this means that it will be integrated into the linux-next
tree (usually sometime in the next 24 hours) and sent to Linus during
the next merge window (or sooner if it is a bug fix), however if
problems are discovered then the patch may be dropped or reverted.

You may get further e-mails resulting from automated or manual testing
and review of the tree, please engage with people reporting problems and
send followup patches addressing any issues that are reported if needed.

If any updates are required or you are submitting further changes they
should be sent as incremental updates against current git, existing
patches will not be replaced.

Please add any relevant lists and maintainers to the CCs when replying
to this mail.

Thanks,
Mark

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2020-09-21 16:59 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-09-16  7:59 [PATCH v3 1/2] dt-bindings: tlv320adcx140: Add GPIO config and drive config Camel Guo
2020-09-16  7:59 ` [PATCH v3 2/2] ASoC: tlv320adcx140: Add support for configuring GPIO pin Camel Guo
2020-09-17 11:42   ` Dan Murphy
2020-09-17 15:38   ` Mark Brown
2020-09-21 16:58 ` [PATCH v3 1/2] dt-bindings: tlv320adcx140: Add GPIO config and drive config Mark Brown

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).