Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2023c90c authored by Daniel Mack's avatar Daniel Mack Committed by Mark Brown
Browse files

ASoC: pxa: pxa-ssp: add DT bindings



The pxa ssp DAI acts as a user of a pxa ssp port, and needs an
appropriate 'port' phandle in DT to reference the upstream.

Signed-off-by: default avatarDaniel Mack <zonque@gmail.com>
Signed-off-by: default avatarMark Brown <broonie@linaro.org>
parent 4210606b
Loading
Loading
Loading
Loading
+28 −0
Original line number Diff line number Diff line
Marvell PXA SSP CPU DAI bindings

Required properties:

	compatible	Must be "mrvl,pxa-ssp-dai"
	port		A phandle reference to a PXA ssp upstream device

Example:

	/* upstream device */

	ssp0: ssp@41000000 {
		compatible = "mrvl,pxa3xx-ssp";
		reg = <0x41000000 0x40>;
		interrupts = <24>;
		clock-names = "pxa27x-ssp.0";
		dmas = <&dma 13
			&dma 14>;
		dma-names = "rx", "tx";
	};

	/* DAI as user */

	ssp_dai0: ssp_dai@0 {
		compatible = "mrvl,pxa-ssp-dai";
		port = <&ssp0>;
	};
+31 −6
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@
#include <linux/clk.h>
#include <linux/io.h>
#include <linux/pxa2xx_ssp.h>
#include <linux/of.h>

#include <asm/irq.h>

@@ -719,6 +720,7 @@ static int pxa_ssp_trigger(struct snd_pcm_substream *substream, int cmd,

static int pxa_ssp_probe(struct snd_soc_dai *dai)
{
	struct device *dev = dai->dev;
	struct ssp_priv *priv;
	int ret;

@@ -726,11 +728,27 @@ static int pxa_ssp_probe(struct snd_soc_dai *dai)
	if (!priv)
		return -ENOMEM;

	if (dev->of_node) {
		struct device_node *ssp_handle;

		ssp_handle = of_parse_phandle(dev->of_node, "port", 0);
		if (!ssp_handle) {
			dev_err(dev, "unable to get 'port' phandle\n");
			return -ENODEV;
		}

		priv->ssp = pxa_ssp_request_of(ssp_handle, "SoC audio");
		if (priv->ssp == NULL) {
			ret = -ENODEV;
			goto err_priv;
		}
	} else {
		priv->ssp = pxa_ssp_request(dai->id + 1, "SoC audio");
		if (priv->ssp == NULL) {
			ret = -ENODEV;
			goto err_priv;
		}
	}

	priv->dai_fmt = (unsigned int) -1;
	snd_soc_dai_set_drvdata(dai, priv);
@@ -798,6 +816,12 @@ static const struct snd_soc_component_driver pxa_ssp_component = {
	.name		= "pxa-ssp",
};

#ifdef CONFIG_OF
static const struct of_device_id pxa_ssp_of_ids[] = {
	{ .compatible = "mrvl,pxa-ssp-dai" },
};
#endif

static int asoc_ssp_probe(struct platform_device *pdev)
{
	return snd_soc_register_component(&pdev->dev, &pxa_ssp_component,
@@ -814,6 +838,7 @@ static struct platform_driver asoc_ssp_driver = {
	.driver = {
		.name = "pxa-ssp-dai",
		.owner = THIS_MODULE,
		.of_match_table = of_match_ptr(pxa_ssp_of_ids),
	},

	.probe = asoc_ssp_probe,