[PATCH] ASoC drivers for the Freescale MPC8610 SoC

Jon Smirl jonsmirl at gmail.com
Wed Jan 2 15:27:06 EST 2008


On 12/19/07, Timur Tabi <timur at freescale.com> wrote:
>  sound/soc/fsl/fsl_ssi.c                      |  614 +++++++++++++++++++
>  sound/soc/fsl/fsl_ssi.h                      |  224 +++++++

I'm confused about this part. You built a driver for the mpc8610 ssi
port.  This port has a device tree entry.

+		ssi at 16000 {
+			compatible = "fsl,ssi";
+			cell-index = <0>;
+			reg = <16000 100>;
+			interrupt-parent = <&mpic>;
+			interrupts = <3e 2>;
+			fsl,mode = "i2s-slave";
+			codec {
+				compatible = "cirrus,cs4270";
+				/* MCLK source is a stand-alone oscillator */
+				bus-frequency = <bb8000>;
+			};
+		};

But then you don't create an of_platform_driver for this device.
Instead you create one for the fabric driver, struct
of_platform_driver mpc8610_hpcd_of_driver, and directly link the SSI
driver into it.

+static struct of_device_id mpc8610_hpcd_match[] = {
+	{
+		.compatible = "fsl,ssi",
+	},
+	{}
+};
+MODULE_DEVICE_TABLE(of, mpc8610_hpcd_match);
+
+static struct of_platform_driver mpc8610_hpcd_of_driver = {
+	.owner  	= THIS_MODULE,
+	.name   	= "mpc8610_hpcd",
+	.match_table    = mpc8610_hpcd_match,
+	.probe  	= mpc8610_hpcd_probe,
+	.remove 	= mpc8610_hpcd_remove,
+};

static int mpc8610_hpcd_probe(struct of_device *ofdev,
	const struct of_device_id *match)
{
.....
	machine_data->dai.cpu_dai = fsl_ssi_create_dai(&ssi_info);

Isn't this two separate drivers that have been combined into one
driver? Or does the fsl_ssi channel only work on the mpc8610_hpcd?

This is the problem of knowing how to load the fabric driver that I
was talking about in the other threads. A device that can occur on
more than one chip ".compatible = "fsl,ssi"," is being used to pull in
a platform specific fabric driver, "mpc8610_hpcd". You can use the
kernel config system to select the right driver for ".compatible =
"fsl,ssi"," that matches you hardware and compile it in.

But that doesn't work in my environment. My generic channel is
"fsl,i2s". I have four different systems booting off from a shared
network drive. Each of these systems needs the common "fsl,i2s" driver
but they all four need different fabric drivers.

-- 
Jon Smirl
jonsmirl at gmail.com



More information about the Linuxppc-dev mailing list