Commit f0fba2ad authored by Liam Girdwood's avatar Liam Girdwood
Browse files

ASoC: multi-component - ASoC Multi-Component Support

This patch extends the ASoC API to allow sound cards to have more than one
CODEC and more than one platform DMA controller. This is achieved by dividing
some current ASoC structures that contain both driver data and device data into
structures that only either contain device data or driver data. i.e.

 struct snd_soc_codec    --->  struct snd_soc_codec (device data)
                          +->  struct snd_soc_codec_driver (driver data)

 struct snd_soc_platform --->  struct snd_soc_platform (device data)
                          +->  struct snd_soc_platform_driver (driver data)

 struct snd_soc_dai      --->  struct snd_soc_dai (device data)
                          +->  struct snd_soc_dai_driver (driver data)

 struct snd_soc_device   --->  deleted

This now allows ASoC to be more tightly aligned with the Linux driver model and
also means that every ASoC codec, platform and (platform) DAI is a kernel
device. ASoC component private data is now store...
parent bda7d2a8
Loading
Loading
Loading
Loading
+13 −0
Original line number Diff line number Diff line
@@ -295,6 +295,18 @@ static void davinci_init_wdt(void)

/*-------------------------------------------------------------------------*/

struct platform_device davinci_pcm_device = {
	.name		= "davinci-pcm-audio",
	.id		= -1,
};

static void davinci_init_pcm(void)
{
	platform_device_register(&davinci_pcm_device);
}

/*-------------------------------------------------------------------------*/

struct davinci_timer_instance davinci_timer_instance[2] = {
	{
		.base		= DAVINCI_TIMER0_BASE,
@@ -315,6 +327,7 @@ static int __init davinci_init_devices(void)
	/* please keep these calls, and their implementations above,
	 * in alphabetical order so they're easier to sort through.
	 */
	davinci_init_pcm();
	davinci_init_wdt();

	return 0;
+6 −0
Original line number Diff line number Diff line
@@ -732,9 +732,15 @@ static struct platform_device ep93xx_i2s_device = {
	.resource	= ep93xx_i2s_resource,
};

static struct platform_device ep93xx_pcm_device = {
	.name		= "ep93xx-pcm-audio",
	.id		= -1,
};

void __init ep93xx_register_i2s(void)
{
	platform_device_register(&ep93xx_i2s_device);
	platform_device_register(&ep93xx_pcm_device);
}

#define EP93XX_SYSCON_DEVCFG_I2S_MASK	(EP93XX_SYSCON_DEVCFG_I2SONSSP | \
+6 −0
Original line number Diff line number Diff line
@@ -896,10 +896,16 @@ static struct platform_device kirkwood_i2s_device = {
	},
};

static struct platform_device kirkwood_pcm_device = {
	.name		= "kirkwood-pcm",
	.id		= -1,
};

void __init kirkwood_audio_init(void)
{
	kirkwood_clk_ctrl |= CGC_AUDIO;
	platform_device_register(&kirkwood_i2s_device);
	platform_device_register(&kirkwood_pcm_device);
}

/*****************************************************************************
+2 −2
Original line number Diff line number Diff line
@@ -653,8 +653,8 @@ static struct clk_lookup lookups[] = {
	_REGISTER_CLOCK("mxc-ehci.1", "usb_ahb", usb_clk1)
	_REGISTER_CLOCK("mxc-ehci.2", "usb", usb_clk)
	_REGISTER_CLOCK("mxc-ehci.2", "usb_ahb", usb_clk1)
	_REGISTER_CLOCK("imx-ssi.0", NULL, ssi1_clk)
	_REGISTER_CLOCK("imx-ssi.1", NULL, ssi2_clk)
	_REGISTER_CLOCK("imx-ssi-dai.0", NULL, ssi1_clk)
	_REGISTER_CLOCK("imx-ssi-dai.1", NULL, ssi2_clk)
	_REGISTER_CLOCK("mxc_nand.0", NULL, nfc_clk)
	_REGISTER_CLOCK(NULL, "vpu", vpu_clk)
	_REGISTER_CLOCK(NULL, "dma", dma_clk)
+1 −1
Original line number Diff line number Diff line
@@ -415,7 +415,7 @@ struct platform_device mxc_usbh2 = {
	};								\
									\
	struct platform_device imx_ssi_device ## n = {			\
		.name = "imx-ssi",					\
		.name = "imx-ssi-dai",					\
		.id = n,						\
		.num_resources = ARRAY_SIZE(imx_ssi_resources ## n),	\
		.resource = imx_ssi_resources ## n,			\
Loading