ASoC: wm8782: Use wlf,fsampen device tree property

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>
Link: https://lore.kernel.org/r/20230918131532.2257615-3-contact@jookia.org
Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
John Watts 2023-09-18 23:15:31 +10:00 committed by Mark Brown
parent 00524a8415
commit 5d34887eab
No known key found for this signature in database
GPG Key ID: 24D68B725D5487D0
1 changed files with 22 additions and 3 deletions

View File

@ -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);