* [PATCH v4 1/4] ASoC: tlv320aic32x4: Support for master clock [not found] ` <1392575252-9222-1-git-send-email-mpa-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org> @ 2014-02-16 18:27 ` Markus Pargmann 0 siblings, 0 replies; 7+ messages in thread From: Markus Pargmann @ 2014-02-16 18:27 UTC (permalink / raw) To: Mark Brown Cc: Liam Girdwood, Lars-Peter Clausen, alsa-devel-K7yf7f+aM1XWsZ/bQMPhNw, kernel-bIcnvbaLZ9MEGnE8C9+IrQ, Markus Pargmann, Rob Herring, Pawel Moll, Mark Rutland, Ian Campbell, Kumar Gala, devicetree-u79uwXL29TY76Z2rM5mHXA Add support for a master clock passed through DT. The master clock of the codec is only active when the codec is in use. Cc: Rob Herring <robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org> Cc: Pawel Moll <pawel.moll-5wv7dgnIgG8@public.gmane.org> Cc: Mark Rutland <mark.rutland-5wv7dgnIgG8@public.gmane.org> Cc: Ian Campbell <ijc+devicetree-KcIKpvwj1kUDXYZnReoRVg@public.gmane.org> Cc: Kumar Gala <galak-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org> Cc: devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org Signed-off-by: Markus Pargmann <mpa-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org> --- .../devicetree/bindings/sound/tlv320aic32x4.txt | 4 ++++ sound/soc/codecs/tlv320aic32x4.c | 23 ++++++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/Documentation/devicetree/bindings/sound/tlv320aic32x4.txt b/Documentation/devicetree/bindings/sound/tlv320aic32x4.txt index db05510..352be7b 100644 --- a/Documentation/devicetree/bindings/sound/tlv320aic32x4.txt +++ b/Documentation/devicetree/bindings/sound/tlv320aic32x4.txt @@ -8,6 +8,8 @@ Required properties: Optional properties: - reset-gpios: Reset-GPIO phandle with args as described in gpio/gpio.txt + - clocks/clock-names: Clock named 'mclk' for the master clock of the codec. + See clock/clock-bindings.txt for information about the detailed format. Example: @@ -15,4 +17,6 @@ Example: codec: tlv320aic32x4@18 { compatible = "ti,tlv320aic32x4"; reg = <0x18>; + clocks = <&clks 201>; + clock-names = "mclk"; }; diff --git a/sound/soc/codecs/tlv320aic32x4.c b/sound/soc/codecs/tlv320aic32x4.c index 1dd50e4..d96cb7c 100644 --- a/sound/soc/codecs/tlv320aic32x4.c +++ b/sound/soc/codecs/tlv320aic32x4.c @@ -33,6 +33,7 @@ #include <linux/i2c.h> #include <linux/cdev.h> #include <linux/slab.h> +#include <linux/clk.h> #include <sound/tlv320aic32x4.h> #include <sound/core.h> @@ -67,6 +68,7 @@ struct aic32x4_priv { u32 micpga_routing; bool swapdacs; int rstn_gpio; + struct clk *mclk; }; /* 0dB min, 0.5dB steps */ @@ -487,8 +489,21 @@ static int aic32x4_mute(struct snd_soc_dai *dai, int mute) static int aic32x4_set_bias_level(struct snd_soc_codec *codec, enum snd_soc_bias_level level) { + struct aic32x4_priv *aic32x4 = snd_soc_codec_get_drvdata(codec); + switch (level) { case SND_SOC_BIAS_ON: + /* Switch on master clock */ + if (!IS_ERR(aic32x4->mclk)) { + int ret; + + ret = clk_prepare_enable(aic32x4->mclk); + if (ret) { + dev_err(codec->dev, "Failed to enable master clock\n"); + return ret; + } + } + /* Switch on PLL */ snd_soc_update_bits(codec, AIC32X4_PLLPR, AIC32X4_PLLEN, AIC32X4_PLLEN); @@ -539,6 +554,10 @@ static int aic32x4_set_bias_level(struct snd_soc_codec *codec, /* Switch off BCLK_N Divider */ snd_soc_update_bits(codec, AIC32X4_BCLKN, AIC32X4_BCLKEN, 0); + + /* Switch off master clock */ + if (!IS_ERR(aic32x4->mclk)) + clk_disable_unprepare(aic32x4->mclk); break; case SND_SOC_BIAS_OFF: break; @@ -717,6 +736,10 @@ static int aic32x4_i2c_probe(struct i2c_client *i2c, aic32x4->rstn_gpio = -1; } + aic32x4->mclk = devm_clk_get(&i2c->dev, "mclk"); + if (IS_ERR(aic32x4->mclk)) + dev_info(&i2c->dev, "No mclk found, continuing without clock\n"); + if (gpio_is_valid(aic32x4->rstn_gpio)) { ret = devm_gpio_request_one(&i2c->dev, aic32x4->rstn_gpio, GPIOF_OUT_INIT_LOW, "tlv320aic32x4 rstn"); -- 1.8.5.3 -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply related [flat|nested] 7+ messages in thread
[parent not found: <1392631460-32002-1-git-send-email-mpa@pengutronix.de>]
* [PATCH v5 1/4] ASoC: tlv320aic32x4: Support for master clock [not found] ` <1392631460-32002-1-git-send-email-mpa@pengutronix.de> @ 2014-02-17 10:04 ` Markus Pargmann [not found] ` <1392631460-32002-2-git-send-email-mpa-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org> 0 siblings, 1 reply; 7+ messages in thread From: Markus Pargmann @ 2014-02-17 10:04 UTC (permalink / raw) To: Mark Brown Cc: Mark Rutland, devicetree, alsa-devel, Lars-Peter Clausen, Pawel Moll, Ian Campbell, Liam Girdwood, Rob Herring, kernel, Kumar Gala, Markus Pargmann Add support for a master clock passed through DT. The master clock of the codec is only active when the codec is in use. Cc: Rob Herring <robh+dt@kernel.org> Cc: Pawel Moll <pawel.moll@arm.com> Cc: Mark Rutland <mark.rutland@arm.com> Cc: Ian Campbell <ijc+devicetree@hellion.org.uk> Cc: Kumar Gala <galak@codeaurora.org> Cc: devicetree@vger.kernel.org Signed-off-by: Markus Pargmann <mpa@pengutronix.de> --- .../devicetree/bindings/sound/tlv320aic32x4.txt | 4 ++++ sound/soc/codecs/tlv320aic32x4.c | 23 ++++++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/Documentation/devicetree/bindings/sound/tlv320aic32x4.txt b/Documentation/devicetree/bindings/sound/tlv320aic32x4.txt index db05510..352be7b 100644 --- a/Documentation/devicetree/bindings/sound/tlv320aic32x4.txt +++ b/Documentation/devicetree/bindings/sound/tlv320aic32x4.txt @@ -8,6 +8,8 @@ Required properties: Optional properties: - reset-gpios: Reset-GPIO phandle with args as described in gpio/gpio.txt + - clocks/clock-names: Clock named 'mclk' for the master clock of the codec. + See clock/clock-bindings.txt for information about the detailed format. Example: @@ -15,4 +17,6 @@ Example: codec: tlv320aic32x4@18 { compatible = "ti,tlv320aic32x4"; reg = <0x18>; + clocks = <&clks 201>; + clock-names = "mclk"; }; diff --git a/sound/soc/codecs/tlv320aic32x4.c b/sound/soc/codecs/tlv320aic32x4.c index 1dd50e4..d96cb7c 100644 --- a/sound/soc/codecs/tlv320aic32x4.c +++ b/sound/soc/codecs/tlv320aic32x4.c @@ -33,6 +33,7 @@ #include <linux/i2c.h> #include <linux/cdev.h> #include <linux/slab.h> +#include <linux/clk.h> #include <sound/tlv320aic32x4.h> #include <sound/core.h> @@ -67,6 +68,7 @@ struct aic32x4_priv { u32 micpga_routing; bool swapdacs; int rstn_gpio; + struct clk *mclk; }; /* 0dB min, 0.5dB steps */ @@ -487,8 +489,21 @@ static int aic32x4_mute(struct snd_soc_dai *dai, int mute) static int aic32x4_set_bias_level(struct snd_soc_codec *codec, enum snd_soc_bias_level level) { + struct aic32x4_priv *aic32x4 = snd_soc_codec_get_drvdata(codec); + switch (level) { case SND_SOC_BIAS_ON: + /* Switch on master clock */ + if (!IS_ERR(aic32x4->mclk)) { + int ret; + + ret = clk_prepare_enable(aic32x4->mclk); + if (ret) { + dev_err(codec->dev, "Failed to enable master clock\n"); + return ret; + } + } + /* Switch on PLL */ snd_soc_update_bits(codec, AIC32X4_PLLPR, AIC32X4_PLLEN, AIC32X4_PLLEN); @@ -539,6 +554,10 @@ static int aic32x4_set_bias_level(struct snd_soc_codec *codec, /* Switch off BCLK_N Divider */ snd_soc_update_bits(codec, AIC32X4_BCLKN, AIC32X4_BCLKEN, 0); + + /* Switch off master clock */ + if (!IS_ERR(aic32x4->mclk)) + clk_disable_unprepare(aic32x4->mclk); break; case SND_SOC_BIAS_OFF: break; @@ -717,6 +736,10 @@ static int aic32x4_i2c_probe(struct i2c_client *i2c, aic32x4->rstn_gpio = -1; } + aic32x4->mclk = devm_clk_get(&i2c->dev, "mclk"); + if (IS_ERR(aic32x4->mclk)) + dev_info(&i2c->dev, "No mclk found, continuing without clock\n"); + if (gpio_is_valid(aic32x4->rstn_gpio)) { ret = devm_gpio_request_one(&i2c->dev, aic32x4->rstn_gpio, GPIOF_OUT_INIT_LOW, "tlv320aic32x4 rstn"); -- 1.8.5.3 ^ permalink raw reply related [flat|nested] 7+ messages in thread
[parent not found: <1392631460-32002-2-git-send-email-mpa-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>]
* Re: [PATCH v5 1/4] ASoC: tlv320aic32x4: Support for master clock [not found] ` <1392631460-32002-2-git-send-email-mpa-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org> @ 2014-02-18 1:23 ` Mark Brown 2014-02-18 20:46 ` Markus Pargmann 0 siblings, 1 reply; 7+ messages in thread From: Mark Brown @ 2014-02-18 1:23 UTC (permalink / raw) To: Markus Pargmann Cc: Liam Girdwood, Lars-Peter Clausen, alsa-devel-K7yf7f+aM1XWsZ/bQMPhNw, kernel-bIcnvbaLZ9MEGnE8C9+IrQ, Rob Herring, Pawel Moll, Mark Rutland, Ian Campbell, Kumar Gala, devicetree-u79uwXL29TY76Z2rM5mHXA [-- Attachment #1: Type: text/plain, Size: 751 bytes --] On Mon, Feb 17, 2014 at 11:04:17AM +0100, Markus Pargmann wrote: > Optional properties: > - reset-gpios: Reset-GPIO phandle with args as described in gpio/gpio.txt > + - clocks/clock-names: Clock named 'mclk' for the master clock of the codec. > + See clock/clock-bindings.txt for information about the detailed format. Looking at the code the clock isn't physically optional, why not make it mandatory? There's only one mainline user, it looks like it should be straightforward to update with a fixed clock. > + aic32x4->mclk = devm_clk_get(&i2c->dev, "mclk"); > + if (IS_ERR(aic32x4->mclk)) > + dev_info(&i2c->dev, "No mclk found, continuing without clock\n"); This is going to break with deferred probe, we need to handle that at least. [-- Attachment #2: Digital signature --] [-- Type: application/pgp-signature, Size: 836 bytes --] ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v5 1/4] ASoC: tlv320aic32x4: Support for master clock 2014-02-18 1:23 ` Mark Brown @ 2014-02-18 20:46 ` Markus Pargmann [not found] ` <20140218204646.GB10590-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org> 0 siblings, 1 reply; 7+ messages in thread From: Markus Pargmann @ 2014-02-18 20:46 UTC (permalink / raw) To: Mark Brown Cc: Mark Rutland, devicetree, alsa-devel, Lars-Peter Clausen, Pawel Moll, Ian Campbell, Liam Girdwood, Rob Herring, kernel, Kumar Gala [-- Attachment #1.1: Type: text/plain, Size: 1582 bytes --] Hi, On Tue, Feb 18, 2014 at 10:23:29AM +0900, Mark Brown wrote: > On Mon, Feb 17, 2014 at 11:04:17AM +0100, Markus Pargmann wrote: > > > Optional properties: > > - reset-gpios: Reset-GPIO phandle with args as described in gpio/gpio.txt > > + - clocks/clock-names: Clock named 'mclk' for the master clock of the codec. > > + See clock/clock-bindings.txt for information about the detailed format. > > Looking at the code the clock isn't physically optional, why not make it > mandatory? There's only one mainline user, it looks like it should be > straightforward to update with a fixed clock. The masterclock is physically optional. There are several modes to use this codec without master clock. The PLL can use different clock inputs, BCLK, MCLK, etc. and even the PLL is not necessary. Instead BCLK and so on can be used as direct codec clock input. However, most of this is not supported by the driver yet and I can't test these cases. > > > + aic32x4->mclk = devm_clk_get(&i2c->dev, "mclk"); > > + if (IS_ERR(aic32x4->mclk)) > > + dev_info(&i2c->dev, "No mclk found, continuing without clock\n"); > > This is going to break with deferred probe, we need to handle that at > least. Yes, I fixed this. Thanks, Markus -- Pengutronix e.K. | | Industrial Linux Solutions | http://www.pengutronix.de/ | Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 | [-- 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] 7+ messages in thread
[parent not found: <20140218204646.GB10590-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>]
* Re: [PATCH v5 1/4] ASoC: tlv320aic32x4: Support for master clock [not found] ` <20140218204646.GB10590-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org> @ 2014-02-19 3:54 ` Mark Brown 2014-02-20 11:37 ` Markus Pargmann 0 siblings, 1 reply; 7+ messages in thread From: Mark Brown @ 2014-02-19 3:54 UTC (permalink / raw) To: Markus Pargmann Cc: Liam Girdwood, Lars-Peter Clausen, alsa-devel-K7yf7f+aM1XWsZ/bQMPhNw, kernel-bIcnvbaLZ9MEGnE8C9+IrQ, Rob Herring, Pawel Moll, Mark Rutland, Ian Campbell, Kumar Gala, devicetree-u79uwXL29TY76Z2rM5mHXA [-- Attachment #1: Type: text/plain, Size: 917 bytes --] On Tue, Feb 18, 2014 at 09:46:46PM +0100, Markus Pargmann wrote: > On Tue, Feb 18, 2014 at 10:23:29AM +0900, Mark Brown wrote: > > Looking at the code the clock isn't physically optional, why not make it > > mandatory? There's only one mainline user, it looks like it should be > > straightforward to update with a fixed clock. > The masterclock is physically optional. There are several modes to use > this codec without master clock. The PLL can use different clock inputs, > BCLK, MCLK, etc. and even the PLL is not necessary. Instead BCLK and so > on can be used as direct codec clock input. However, most of this is not > supported by the driver yet and I can't test these cases. Are any of these modes supported by the driver yet? If there's modes that don't use MCLK supported then I'd expect them to only enable MCLK if it's actively being used in the current configuration (triggered via set_sysclk()). [-- Attachment #2: Digital signature --] [-- Type: application/pgp-signature, Size: 836 bytes --] ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v5 1/4] ASoC: tlv320aic32x4: Support for master clock 2014-02-19 3:54 ` Mark Brown @ 2014-02-20 11:37 ` Markus Pargmann [not found] ` <20140220113749.GB16727-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org> 0 siblings, 1 reply; 7+ messages in thread From: Markus Pargmann @ 2014-02-20 11:37 UTC (permalink / raw) To: Mark Brown Cc: Mark Rutland, devicetree, alsa-devel, Lars-Peter Clausen, Pawel Moll, Ian Campbell, Liam Girdwood, Rob Herring, kernel, Kumar Gala [-- Attachment #1.1: Type: text/plain, Size: 1795 bytes --] Hi, On Wed, Feb 19, 2014 at 12:54:06PM +0900, Mark Brown wrote: > On Tue, Feb 18, 2014 at 09:46:46PM +0100, Markus Pargmann wrote: > > On Tue, Feb 18, 2014 at 10:23:29AM +0900, Mark Brown wrote: > > > > Looking at the code the clock isn't physically optional, why not make it > > > mandatory? There's only one mainline user, it looks like it should be > > > straightforward to update with a fixed clock. > > > The masterclock is physically optional. There are several modes to use > > this codec without master clock. The PLL can use different clock inputs, > > BCLK, MCLK, etc. and even the PLL is not necessary. Instead BCLK and so > > on can be used as direct codec clock input. However, most of this is not > > supported by the driver yet and I can't test these cases. > > Are any of these modes supported by the driver yet? If there's modes > that don't use MCLK supported then I'd expect them to only enable MCLK > if it's actively being used in the current configuration (triggered via > set_sysclk()). It seems none of these modes are supported yet. aic32x4_hw_params setups the clock tree relying on a master clock to be used for the PLL. Otherwise hw_params fails. So currently mclk is not optional for the driver. But it is still optional for the real hardware. What do you think about declaring the mclk as optional property in the DT bindings documentation but to handle it as a required clock in the driver? Thanks, Markus -- Pengutronix e.K. | | Industrial Linux Solutions | http://www.pengutronix.de/ | Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 | [-- 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] 7+ messages in thread
[parent not found: <20140220113749.GB16727-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>]
* Re: [PATCH v5 1/4] ASoC: tlv320aic32x4: Support for master clock [not found] ` <20140220113749.GB16727-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org> @ 2014-02-20 11:47 ` Mark Brown 0 siblings, 0 replies; 7+ messages in thread From: Mark Brown @ 2014-02-20 11:47 UTC (permalink / raw) To: Markus Pargmann Cc: Liam Girdwood, Lars-Peter Clausen, alsa-devel-K7yf7f+aM1XWsZ/bQMPhNw, kernel-bIcnvbaLZ9MEGnE8C9+IrQ, Rob Herring, Pawel Moll, Mark Rutland, Ian Campbell, Kumar Gala, devicetree-u79uwXL29TY76Z2rM5mHXA [-- Attachment #1: Type: text/plain, Size: 520 bytes --] On Thu, Feb 20, 2014 at 12:37:49PM +0100, Markus Pargmann wrote: > It seems none of these modes are supported yet. aic32x4_hw_params setups > the clock tree relying on a master clock to be used for the PLL. > Otherwise hw_params fails. So currently mclk is not optional for the > driver. But it is still optional for the real hardware. > What do you think about declaring the mclk as optional property in the > DT bindings documentation but to handle it as a required clock in the > driver? That's fine, makes sense. [-- Attachment #2: Digital signature --] [-- Type: application/pgp-signature, Size: 836 bytes --] ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2014-02-20 11:47 UTC | newest] Thread overview: 7+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- [not found] <1392575252-9222-1-git-send-email-mpa@pengutronix.de> [not found] ` <1392575252-9222-1-git-send-email-mpa-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org> 2014-02-16 18:27 ` [PATCH v4 1/4] ASoC: tlv320aic32x4: Support for master clock Markus Pargmann [not found] ` <1392631460-32002-1-git-send-email-mpa@pengutronix.de> 2014-02-17 10:04 ` [PATCH v5 " Markus Pargmann [not found] ` <1392631460-32002-2-git-send-email-mpa-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org> 2014-02-18 1:23 ` Mark Brown 2014-02-18 20:46 ` Markus Pargmann [not found] ` <20140218204646.GB10590-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org> 2014-02-19 3:54 ` Mark Brown 2014-02-20 11:37 ` Markus Pargmann [not found] ` <20140220113749.GB16727-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org> 2014-02-20 11:47 ` 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).