All of lore.kernel.org
 help / color / mirror / Atom feed
From: Maxime Ripard <maxime.ripard-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org>
To: Hans de Goede <hdegoede-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
Cc: Liam Girdwood <lgirdwood-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
	Mark Brown <broonie-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>,
	Jaroslav Kysela <perex-/Fr2/VpizcU@public.gmane.org>,
	Takashi Iwai <tiwai-IBi9RG/b67k@public.gmane.org>,
	Chen-Yu Tsai <wens-jdAy2FN1RRM@public.gmane.org>,
	alsa-devel-K7yf7f+aM1XWsZ/bQMPhNw@public.gmane.org,
	linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org,
	devicetree <devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
	linux-sunxi-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
Subject: Re: [PATCH 1/4] ASoC: sun4i-codec: Add support for PA gpio pin
Date: Fri, 20 Nov 2015 17:30:47 +0100	[thread overview]
Message-ID: <20151120163047.GF32142@lukather> (raw)
In-Reply-To: <1448027233-750-1-git-send-email-hdegoede-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>

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

On Fri, Nov 20, 2015 at 02:47:10PM +0100, Hans de Goede wrote:
> Add support for PA gpio pin for controlling an external amplifier as used
> on some Allwinner boards.
> 
> Signed-off-by: Hans de Goede <hdegoede-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
> ---
>  .../devicetree/bindings/sound/sun4i-codec.txt      |  3 +++
>  sound/soc/sunxi/sun4i-codec.c                      | 25 ++++++++++++++--------
>  2 files changed, 19 insertions(+), 9 deletions(-)
> 
> diff --git a/Documentation/devicetree/bindings/sound/sun4i-codec.txt b/Documentation/devicetree/bindings/sound/sun4i-codec.txt
> index c92966b..974babe 100644
> --- a/Documentation/devicetree/bindings/sound/sun4i-codec.txt
> +++ b/Documentation/devicetree/bindings/sound/sun4i-codec.txt
> @@ -14,6 +14,9 @@ Required properties:
>     - "apb": the parent APB clock for this controller
>     - "codec": the parent module clock
>  
> +Optional properties:
> +- pa-gpios: gpio to enable external amplifier

This is a custom property, it should be prefixed by the vendor name.

> +
>  Example:
>  codec: codec@01c22c00 {
>  	#sound-dai-cells = <0>;
> diff --git a/sound/soc/sunxi/sun4i-codec.c b/sound/soc/sunxi/sun4i-codec.c
> index bcbf4da..2aca9cd 100644
> --- a/sound/soc/sunxi/sun4i-codec.c
> +++ b/sound/soc/sunxi/sun4i-codec.c
> @@ -27,6 +27,7 @@
>  #include <linux/of_address.h>
>  #include <linux/clk.h>
>  #include <linux/regmap.h>
> +#include <linux/gpio/consumer.h>
>  
>  #include <sound/core.h>
>  #include <sound/pcm.h>
> @@ -101,16 +102,15 @@ struct sun4i_codec {
>  	struct regmap	*regmap;
>  	struct clk	*clk_apb;
>  	struct clk	*clk_module;
> +	struct gpio_desc *gpio_pa;
>  
>  	struct snd_dmaengine_dai_dma_data	playback_dma_data;
>  };
>  
>  static void sun4i_codec_start_playback(struct sun4i_codec *scodec)
>  {
> -	/*
> -	 * FIXME: according to the BSP, we might need to drive a PA
> -	 *        GPIO high here on some boards
> -	 */
> +	if (scodec->gpio_pa)
> +		gpiod_set_value_cansleep(scodec->gpio_pa, 1);
>  
>  	/* Flush TX FIFO */
>  	regmap_update_bits(scodec->regmap, SUN4I_CODEC_DAC_FIFOC,
> @@ -125,15 +125,13 @@ static void sun4i_codec_start_playback(struct sun4i_codec *scodec)
>  
>  static void sun4i_codec_stop_playback(struct sun4i_codec *scodec)
>  {
> -	/*
> -	 * FIXME: according to the BSP, we might need to drive a PA
> -	 *        GPIO low here on some boards
> -	 */
> -
>  	/* Disable DAC DRQ */
>  	regmap_update_bits(scodec->regmap, SUN4I_CODEC_DAC_FIFOC,
>  			   BIT(SUN4I_CODEC_DAC_FIFOC_DAC_DRQ_EN),
>  			   0);
> +
> +	if (scodec->gpio_pa)
> +		gpiod_set_value_cansleep(scodec->gpio_pa, 0);

You should rather plug that into DAPM, using a speaker widget, and a
custom event function that will enable or disable the amplifier only
when this audio path is going to be used.

You can see such an example here:
http://lxr.free-electrons.com/source/sound/soc/jz4740/qi_lb60.c#L29

That will require to modify a bit sun4i_codec_create_card as well in
order to add the new widgets (and routes) when the DT property is
found.

Thanks!
Maxime

-- 
Maxime Ripard, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com

WARNING: multiple messages have this Message-ID (diff)
From: maxime.ripard@free-electrons.com (Maxime Ripard)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 1/4] ASoC: sun4i-codec: Add support for PA gpio pin
Date: Fri, 20 Nov 2015 17:30:47 +0100	[thread overview]
Message-ID: <20151120163047.GF32142@lukather> (raw)
In-Reply-To: <1448027233-750-1-git-send-email-hdegoede@redhat.com>

On Fri, Nov 20, 2015 at 02:47:10PM +0100, Hans de Goede wrote:
> Add support for PA gpio pin for controlling an external amplifier as used
> on some Allwinner boards.
> 
> Signed-off-by: Hans de Goede <hdegoede@redhat.com>
> ---
>  .../devicetree/bindings/sound/sun4i-codec.txt      |  3 +++
>  sound/soc/sunxi/sun4i-codec.c                      | 25 ++++++++++++++--------
>  2 files changed, 19 insertions(+), 9 deletions(-)
> 
> diff --git a/Documentation/devicetree/bindings/sound/sun4i-codec.txt b/Documentation/devicetree/bindings/sound/sun4i-codec.txt
> index c92966b..974babe 100644
> --- a/Documentation/devicetree/bindings/sound/sun4i-codec.txt
> +++ b/Documentation/devicetree/bindings/sound/sun4i-codec.txt
> @@ -14,6 +14,9 @@ Required properties:
>     - "apb": the parent APB clock for this controller
>     - "codec": the parent module clock
>  
> +Optional properties:
> +- pa-gpios: gpio to enable external amplifier

This is a custom property, it should be prefixed by the vendor name.

> +
>  Example:
>  codec: codec at 01c22c00 {
>  	#sound-dai-cells = <0>;
> diff --git a/sound/soc/sunxi/sun4i-codec.c b/sound/soc/sunxi/sun4i-codec.c
> index bcbf4da..2aca9cd 100644
> --- a/sound/soc/sunxi/sun4i-codec.c
> +++ b/sound/soc/sunxi/sun4i-codec.c
> @@ -27,6 +27,7 @@
>  #include <linux/of_address.h>
>  #include <linux/clk.h>
>  #include <linux/regmap.h>
> +#include <linux/gpio/consumer.h>
>  
>  #include <sound/core.h>
>  #include <sound/pcm.h>
> @@ -101,16 +102,15 @@ struct sun4i_codec {
>  	struct regmap	*regmap;
>  	struct clk	*clk_apb;
>  	struct clk	*clk_module;
> +	struct gpio_desc *gpio_pa;
>  
>  	struct snd_dmaengine_dai_dma_data	playback_dma_data;
>  };
>  
>  static void sun4i_codec_start_playback(struct sun4i_codec *scodec)
>  {
> -	/*
> -	 * FIXME: according to the BSP, we might need to drive a PA
> -	 *        GPIO high here on some boards
> -	 */
> +	if (scodec->gpio_pa)
> +		gpiod_set_value_cansleep(scodec->gpio_pa, 1);
>  
>  	/* Flush TX FIFO */
>  	regmap_update_bits(scodec->regmap, SUN4I_CODEC_DAC_FIFOC,
> @@ -125,15 +125,13 @@ static void sun4i_codec_start_playback(struct sun4i_codec *scodec)
>  
>  static void sun4i_codec_stop_playback(struct sun4i_codec *scodec)
>  {
> -	/*
> -	 * FIXME: according to the BSP, we might need to drive a PA
> -	 *        GPIO low here on some boards
> -	 */
> -
>  	/* Disable DAC DRQ */
>  	regmap_update_bits(scodec->regmap, SUN4I_CODEC_DAC_FIFOC,
>  			   BIT(SUN4I_CODEC_DAC_FIFOC_DAC_DRQ_EN),
>  			   0);
> +
> +	if (scodec->gpio_pa)
> +		gpiod_set_value_cansleep(scodec->gpio_pa, 0);

You should rather plug that into DAPM, using a speaker widget, and a
custom event function that will enable or disable the amplifier only
when this audio path is going to be used.

You can see such an example here:
http://lxr.free-electrons.com/source/sound/soc/jz4740/qi_lb60.c#L29

That will require to modify a bit sun4i_codec_create_card as well in
order to add the new widgets (and routes) when the DT property is
found.

Thanks!
Maxime

-- 
Maxime Ripard, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20151120/43700024/attachment.sig>

  parent reply	other threads:[~2015-11-20 16:30 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-11-20 13:47 [PATCH 1/4] ASoC: sun4i-codec: Add support for PA gpio pin Hans de Goede
2015-11-20 13:47 ` Hans de Goede
     [not found] ` <1448027233-750-1-git-send-email-hdegoede-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2015-11-20 13:47   ` [PATCH 2/4] ARM: dts: sun4i: Enable onboard codec used on the iNet1 tablet Hans de Goede
2015-11-20 13:47     ` Hans de Goede
     [not found]     ` <1448027233-750-2-git-send-email-hdegoede-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2015-11-20 16:18       ` Maxime Ripard
2015-11-20 16:18         ` Maxime Ripard
2015-11-20 13:47   ` [PATCH 3/4] ARM: dts: sun5i: Enable onboard codec used on the UTOO P66 tablet Hans de Goede
2015-11-20 13:47     ` Hans de Goede
2015-11-20 13:47   ` [PATCH 4/4] ARM: dts: sun4i: Enable onboard codec used on the pov protab2-ips9 tablet Hans de Goede
2015-11-20 13:47     ` Hans de Goede
2015-11-20 15:23   ` [PATCH 1/4] ASoC: sun4i-codec: Add support for PA gpio pin Rob Herring
2015-11-20 15:23     ` Rob Herring
2015-11-20 16:30   ` Maxime Ripard [this message]
2015-11-20 16:30     ` Maxime Ripard
2015-11-20 16:42     ` Chen-Yu Tsai
2015-11-20 16:42       ` Chen-Yu Tsai
     [not found]       ` <CAGb2v66PPm+G=RfrLgNHNeVDed8BSuGaERKLgfsnzPpAzKcmsA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-11-20 17:02         ` Maxime Ripard
2015-11-20 17:02           ` Maxime Ripard

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=20151120163047.GF32142@lukather \
    --to=maxime.ripard-wi1+55scjutkeb57/3fjtnbpr1lh4cv8@public.gmane.org \
    --cc=alsa-devel-K7yf7f+aM1XWsZ/bQMPhNw@public.gmane.org \
    --cc=broonie-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
    --cc=devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=hdegoede-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
    --cc=lgirdwood-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
    --cc=linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org \
    --cc=linux-sunxi-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org \
    --cc=perex-/Fr2/VpizcU@public.gmane.org \
    --cc=tiwai-IBi9RG/b67k@public.gmane.org \
    --cc=wens-jdAy2FN1RRM@public.gmane.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.