devicetree.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v4 0/3] ASoC: wm8782: Allow higher audio rates
@ 2023-09-18 13:15 John Watts
  2023-09-18 13:15 ` [PATCH v4 1/3] ASoC: wm8782: Constrain maximum audio rate at runtime John Watts
                   ` (3 more replies)
  0 siblings, 4 replies; 5+ messages in thread
From: John Watts @ 2023-09-18 13:15 UTC (permalink / raw)
  To: alsa-devel
  Cc: Liam Girdwood, Mark Brown, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Jaroslav Kysela, Takashi Iwai, Charles Keepax,
	John Watts, patches, devicetree, linux-kernel

The wm8782 supports higher audio rates than just 48kHz. This is
configured by setting the FSAMPEN pin on the codec chip.

This patch series introduces the 'wlf,fsampen' device tree property
to indicate the pin status and control the maximum rate available
when using the codec.

v3 -> v4:
- Default value is specified in device tree documentation

v2 -> v3:
- Rate is now properly constrained using ALSA constraints

v1 -> v2:
- Switched from max-rate property to wlf,fsampen property
- Clarified property is optional, not required

John Watts (3):
  ASoC: wm8782: Constrain maximum audio rate at runtime
  ASoC: wm8782: Use wlf,fsampen device tree property
  ASoC: dt-bindings: wlf,wm8782: Add wlf,fsampen property

 .../devicetree/bindings/sound/wm8782.txt      |  7 +++
 sound/soc/codecs/wm8782.c                     | 63 +++++++++++++++----
 2 files changed, 57 insertions(+), 13 deletions(-)

-- 
2.42.0


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

* [PATCH v4 1/3] ASoC: wm8782: Constrain maximum audio rate at runtime
  2023-09-18 13:15 [PATCH v4 0/3] ASoC: wm8782: Allow higher audio rates John Watts
@ 2023-09-18 13:15 ` John Watts
  2023-09-18 13:15 ` [PATCH v4 2/3] ASoC: wm8782: Use wlf,fsampen device tree property John Watts
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 5+ messages in thread
From: John Watts @ 2023-09-18 13:15 UTC (permalink / raw)
  To: alsa-devel
  Cc: Liam Girdwood, Mark Brown, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Jaroslav Kysela, Takashi Iwai, Charles Keepax,
	John Watts, patches, devicetree, linux-kernel

The wm8782 supports up to 192kHz audio when pins are set correctly.
Instead of hardcoding which rates are supported constrain them at
runtime based on a max_rate variable.

Signed-off-by: John Watts <contact@jookia.org>
Acked-by: Charles Keepax <ckeepax@opensource.cirrus.com>
---
 sound/soc/codecs/wm8782.c | 42 ++++++++++++++++++++++++++++-----------
 1 file changed, 30 insertions(+), 12 deletions(-)

diff --git a/sound/soc/codecs/wm8782.c b/sound/soc/codecs/wm8782.c
index 95ff4339d103..f3dc87b92b1e 100644
--- a/sound/soc/codecs/wm8782.c
+++ b/sound/soc/codecs/wm8782.c
@@ -23,6 +23,27 @@
 #include <sound/initval.h>
 #include <sound/soc.h>
 
+/* regulator power supply names */
+static const char *supply_names[] = {
+	"Vdda", /* analog supply, 2.7V - 3.6V */
+	"Vdd",  /* digital supply, 2.7V - 5.5V */
+};
+
+struct wm8782_priv {
+	struct regulator_bulk_data supplies[ARRAY_SIZE(supply_names)];
+	int max_rate;
+};
+
+static int wm8782_dai_startup(struct snd_pcm_substream *sub, struct snd_soc_dai *dai)
+{
+	struct snd_pcm_runtime *runtime = sub->runtime;
+	struct wm8782_priv *priv =
+		snd_soc_component_get_drvdata(dai->component);
+
+	return snd_pcm_hw_constraint_minmax(runtime, SNDRV_PCM_HW_PARAM_RATE,
+					   8000, priv->max_rate);
+}
+
 static const struct snd_soc_dapm_widget wm8782_dapm_widgets[] = {
 SND_SOC_DAPM_INPUT("AINL"),
 SND_SOC_DAPM_INPUT("AINR"),
@@ -33,28 +54,22 @@ static const struct snd_soc_dapm_route wm8782_dapm_routes[] = {
 	{ "Capture", NULL, "AINR" },
 };
 
+static const struct snd_soc_dai_ops wm8782_dai_ops = {
+	.startup = &wm8782_dai_startup,
+};
+
 static struct snd_soc_dai_driver wm8782_dai = {
 	.name = "wm8782",
 	.capture = {
 		.stream_name = "Capture",
 		.channels_min = 2,
 		.channels_max = 2,
-		/* For configurations with FSAMPEN=0 */
-		.rates = SNDRV_PCM_RATE_8000_48000,
+		.rates = SNDRV_PCM_RATE_8000_192000,
 		.formats = SNDRV_PCM_FMTBIT_S16_LE |
 			   SNDRV_PCM_FMTBIT_S20_3LE |
 			   SNDRV_PCM_FMTBIT_S24_LE,
 	},
-};
-
-/* regulator power supply names */
-static const char *supply_names[] = {
-	"Vdda", /* analog supply, 2.7V - 3.6V */
-	"Vdd",  /* digital supply, 2.7V - 5.5V */
-};
-
-struct wm8782_priv {
-	struct regulator_bulk_data supplies[ARRAY_SIZE(supply_names)];
+	.ops = &wm8782_dai_ops,
 };
 
 static int wm8782_soc_probe(struct snd_soc_component *component)
@@ -121,6 +136,9 @@ static int wm8782_probe(struct platform_device *pdev)
 	if (ret < 0)
 		return ret;
 
+	/* For configurations with FSAMPEN=0 */
+	priv->max_rate = 48000;
+
 	return devm_snd_soc_register_component(&pdev->dev,
 			&soc_component_dev_wm8782, &wm8782_dai, 1);
 }
-- 
2.42.0


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

* [PATCH v4 2/3] ASoC: wm8782: Use wlf,fsampen device tree property
  2023-09-18 13:15 [PATCH v4 0/3] ASoC: wm8782: Allow higher audio rates John Watts
  2023-09-18 13:15 ` [PATCH v4 1/3] ASoC: wm8782: Constrain maximum audio rate at runtime John Watts
@ 2023-09-18 13:15 ` John Watts
  2023-09-18 13:15 ` [PATCH v4 3/3] ASoC: dt-bindings: wlf,wm8782: Add wlf,fsampen property John Watts
  2023-09-18 16:06 ` [PATCH v4 0/3] ASoC: wm8782: Allow higher audio rates Mark Brown
  3 siblings, 0 replies; 5+ messages in thread
From: John Watts @ 2023-09-18 13:15 UTC (permalink / raw)
  To: alsa-devel
  Cc: Liam Girdwood, Mark Brown, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Jaroslav Kysela, Takashi Iwai, Charles Keepax,
	John Watts, patches, devicetree, linux-kernel

The wm8782 supports rates 96kHz and 192kHz as long as the hardware
is configured properly. Allow this to be specified in the device tree.

Signed-off-by: John Watts <contact@jookia.org>
Acked-by: Charles Keepax <ckeepax@opensource.cirrus.com>
---
 sound/soc/codecs/wm8782.c | 25 ++++++++++++++++++++++---
 1 file changed, 22 insertions(+), 3 deletions(-)

diff --git a/sound/soc/codecs/wm8782.c b/sound/soc/codecs/wm8782.c
index f3dc87b92b1e..3a2acdfa9b85 100644
--- a/sound/soc/codecs/wm8782.c
+++ b/sound/soc/codecs/wm8782.c
@@ -119,8 +119,9 @@ static const struct snd_soc_component_driver soc_component_dev_wm8782 = {
 static int wm8782_probe(struct platform_device *pdev)
 {
 	struct device *dev = &pdev->dev;
+	struct device_node *np = dev->of_node;
 	struct wm8782_priv *priv;
-	int ret, i;
+	int ret, i, fsampen;
 
 	priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL);
 	if (!priv)
@@ -136,8 +137,26 @@ static int wm8782_probe(struct platform_device *pdev)
 	if (ret < 0)
 		return ret;
 
-	/* For configurations with FSAMPEN=0 */
-	priv->max_rate = 48000;
+	// Assume lowest value by default to avoid inadvertent overclocking
+	fsampen = 0;
+
+	if (np)
+		of_property_read_u32(np, "wlf,fsampen", &fsampen);
+
+	switch (fsampen) {
+	case 0:
+		priv->max_rate = 48000;
+		break;
+	case 1:
+		priv->max_rate = 96000;
+		break;
+	case 2:
+		priv->max_rate = 192000;
+		break;
+	default:
+		dev_err(dev, "Invalid wlf,fsampen value");
+		return -EINVAL;
+	}
 
 	return devm_snd_soc_register_component(&pdev->dev,
 			&soc_component_dev_wm8782, &wm8782_dai, 1);
-- 
2.42.0


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

* [PATCH v4 3/3] ASoC: dt-bindings: wlf,wm8782: Add wlf,fsampen property
  2023-09-18 13:15 [PATCH v4 0/3] ASoC: wm8782: Allow higher audio rates John Watts
  2023-09-18 13:15 ` [PATCH v4 1/3] ASoC: wm8782: Constrain maximum audio rate at runtime John Watts
  2023-09-18 13:15 ` [PATCH v4 2/3] ASoC: wm8782: Use wlf,fsampen device tree property John Watts
@ 2023-09-18 13:15 ` John Watts
  2023-09-18 16:06 ` [PATCH v4 0/3] ASoC: wm8782: Allow higher audio rates Mark Brown
  3 siblings, 0 replies; 5+ messages in thread
From: John Watts @ 2023-09-18 13:15 UTC (permalink / raw)
  To: alsa-devel
  Cc: Liam Girdwood, Mark Brown, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Jaroslav Kysela, Takashi Iwai, Charles Keepax,
	John Watts, patches, devicetree, linux-kernel

The WM8782 can safely support rates higher than 48kHz by changing the
value of the FSAMPEN pin.

Allow specifying the FSAMPEN pin value in the device tree.

Signed-off-by: John Watts <contact@jookia.org>
Acked-by: Charles Keepax <ckeepax@opensource.cirrus.com>
---
 Documentation/devicetree/bindings/sound/wm8782.txt | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/Documentation/devicetree/bindings/sound/wm8782.txt b/Documentation/devicetree/bindings/sound/wm8782.txt
index 256cdec6ec4d..1a28f3280972 100644
--- a/Documentation/devicetree/bindings/sound/wm8782.txt
+++ b/Documentation/devicetree/bindings/sound/wm8782.txt
@@ -8,10 +8,17 @@ Required properties:
  - Vdda-supply : phandle to a regulator for the analog power supply (2.7V - 5.5V)
  - Vdd-supply  : phandle to a regulator for the digital power supply (2.7V - 3.6V)
 
+Optional properties:
+
+ - wlf,fsampen:
+   FSAMPEN pin value, 0 for low, 1 for high, 2 for disconnected.
+   Defaults to 0 if left unspecified.
+
 Example:
 
 wm8782: stereo-adc {
 	compatible = "wlf,wm8782";
 	Vdda-supply = <&vdda_supply>;
 	Vdd-supply = <&vdd_supply>;
+	wlf,fsampen = <2>; /* 192KHz */
 };
-- 
2.42.0


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

* Re: [PATCH v4 0/3] ASoC: wm8782: Allow higher audio rates
  2023-09-18 13:15 [PATCH v4 0/3] ASoC: wm8782: Allow higher audio rates John Watts
                   ` (2 preceding siblings ...)
  2023-09-18 13:15 ` [PATCH v4 3/3] ASoC: dt-bindings: wlf,wm8782: Add wlf,fsampen property John Watts
@ 2023-09-18 16:06 ` Mark Brown
  3 siblings, 0 replies; 5+ messages in thread
From: Mark Brown @ 2023-09-18 16:06 UTC (permalink / raw)
  To: alsa-devel, John Watts
  Cc: Liam Girdwood, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
	Jaroslav Kysela, Takashi Iwai, Charles Keepax, patches,
	devicetree, linux-kernel

On Mon, 18 Sep 2023 23:15:29 +1000, John Watts wrote:
> The wm8782 supports higher audio rates than just 48kHz. This is
> configured by setting the FSAMPEN pin on the codec chip.
> 
> This patch series introduces the 'wlf,fsampen' device tree property
> to indicate the pin status and control the maximum rate available
> when using the codec.
> 
> [...]

Applied to

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

Thanks!

[1/3] ASoC: wm8782: Constrain maximum audio rate at runtime
      commit: 00524a8415aa400567538c0e75a463d517cded7f
[2/3] ASoC: wm8782: Use wlf,fsampen device tree property
      commit: 5d34887eab8daad8f63d584ae4d12d480beb9f0e
[3/3] ASoC: dt-bindings: wlf,wm8782: Add wlf,fsampen property
      commit: 5d5529b0057146043a4328aa194280299ba966c2

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:[~2023-09-18 16:06 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-09-18 13:15 [PATCH v4 0/3] ASoC: wm8782: Allow higher audio rates John Watts
2023-09-18 13:15 ` [PATCH v4 1/3] ASoC: wm8782: Constrain maximum audio rate at runtime John Watts
2023-09-18 13:15 ` [PATCH v4 2/3] ASoC: wm8782: Use wlf,fsampen device tree property John Watts
2023-09-18 13:15 ` [PATCH v4 3/3] ASoC: dt-bindings: wlf,wm8782: Add wlf,fsampen property John Watts
2023-09-18 16:06 ` [PATCH v4 0/3] ASoC: wm8782: Allow higher audio rates 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).