All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 9/9] ARM: S5PV310: Add audio platform devices
@ 2010-10-26  1:41 Jassi Brar
  2010-10-26  4:21 ` Kyungmin Park
  0 siblings, 1 reply; 8+ messages in thread
From: Jassi Brar @ 2010-10-26  1:41 UTC (permalink / raw)
  To: linux-arm-kernel

From: Jassi Brar <jassi.brar@samsung.com>

Define platform devices for all audio devices found on S5PV310

Signed-off-by: Jassi Brar <jassi.brar@samsung.com>
---
 arch/arm/mach-s5pv310/Makefile            |    1 +
 arch/arm/mach-s5pv310/dev-audio.c         |  364 +++++++++++++++++++++++++++++
 arch/arm/mach-s5pv310/include/mach/map.h  |   16 ++
 arch/arm/plat-samsung/include/plat/devs.h |    9 +
 4 files changed, 390 insertions(+), 0 deletions(-)
 create mode 100644 arch/arm/mach-s5pv310/dev-audio.c

diff --git a/arch/arm/mach-s5pv310/Makefile b/arch/arm/mach-s5pv310/Makefile
index d265adb..61e3cb6 100644
--- a/arch/arm/mach-s5pv310/Makefile
+++ b/arch/arm/mach-s5pv310/Makefile
@@ -27,6 +27,7 @@ obj-$(CONFIG_MACH_UNIVERSAL_C210)	+= mach-universal_c210.o
 
 # device support
 
+obj-y += dev-audio.o
 obj-$(CONFIG_S5PV310_SETUP_I2C1)	+= setup-i2c1.o
 obj-$(CONFIG_S5PV310_SETUP_I2C2)	+= setup-i2c2.o
 obj-$(CONFIG_S5PV310_SETUP_I2C3)	+= setup-i2c3.o
diff --git a/arch/arm/mach-s5pv310/dev-audio.c b/arch/arm/mach-s5pv310/dev-audio.c
new file mode 100644
index 0000000..18ede29
--- /dev/null
+++ b/arch/arm/mach-s5pv310/dev-audio.c
@@ -0,0 +1,364 @@
+/* linux/arch/arm/mach-s5pv310/dev-audio.c
+ *
+ * Copyright (c) 2010 Samsung Electronics Co. Ltd
+ *	Jaswinder Singh <jassi.brar@samsung.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+#include <linux/platform_device.h>
+#include <linux/dma-mapping.h>
+#include <linux/gpio.h>
+
+#include <plat/gpio-cfg.h>
+#include <plat/audio.h>
+
+#include <mach/map.h>
+#include <mach/dma.h>
+#include <mach/irqs.h>
+
+static const char *rclksrc[] = {
+	[0] = "busclk",
+	[1] = "i2sclk",
+};
+
+static int s5pv310_cfg_i2s(struct platform_device *pdev)
+{
+	/* configure GPIO for i2s port */
+	switch (pdev->id) {
+	case 0:
+		s3c_gpio_cfgpin_range(S5PV310_GPZ(0), 7, S3C_GPIO_SFN(2));
+		break;
+	case 1:
+		s3c_gpio_cfgpin_range(S5PV310_GPC0(0), 5, S3C_GPIO_SFN(2));
+		break;
+	case 2:
+		s3c_gpio_cfgpin_range(S5PV310_GPC1(0), 5, S3C_GPIO_SFN(4));
+		break;
+	default:
+		printk(KERN_ERR "Invalid Device %d\n", pdev->id);
+		return -EINVAL;
+	}
+
+	return 0;
+}
+
+static struct s3c_audio_pdata i2sv5_pdata = {
+	.cfg_gpio = s5pv310_cfg_i2s,
+	.type = {
+		.i2s = {
+			.quirks = QUIRK_PRI_6CHAN | QUIRK_SEC_DAI
+					 | QUIRK_NEED_RSTCLR,
+			.src_clk = rclksrc,
+		},
+	},
+};
+
+static struct resource s5pv310_iis0_resource[] = {
+	[0] = {
+		.start = S5PV310_PA_IIS0,
+		.end = S5PV310_PA_IIS0 + 0x100 - 1,
+		.flags = IORESOURCE_MEM,
+	},
+	[1] = {
+		.start = DMACH_I2S0_TX,
+		.end = DMACH_I2S0_TX,
+		.flags = IORESOURCE_DMA,
+	},
+	[2] = {
+		.start = DMACH_I2S0_RX,
+		.end = DMACH_I2S0_RX,
+		.flags = IORESOURCE_DMA,
+	},
+	[3] = {
+		.start = DMACH_I2S0S_TX,
+		.end = DMACH_I2S0S_TX,
+		.flags = IORESOURCE_DMA,
+	},
+};
+
+struct platform_device s5pv310_device_iis0 = {
+	.name = "samsung-i2s",
+	.id = 0,
+	.num_resources = ARRAY_SIZE(s5pv310_iis0_resource),
+	.resource = s5pv310_iis0_resource,
+	.dev = {
+		.platform_data = &i2sv5_pdata,
+	},
+};
+
+static const char *rclksrc_v3[] = {
+	[0] = "sclk_i2s",
+	[1] = "no_such_clock",
+};
+
+static struct s3c_audio_pdata i2sv3_pdata = {
+	.cfg_gpio = s5pv310_cfg_i2s,
+	.type = {
+		.i2s = {
+			.quirks = QUIRK_NO_MUXPSR,
+			.src_clk = rclksrc_v3,
+		},
+	},
+};
+
+static struct resource s5pv310_iis1_resource[] = {
+	[0] = {
+		.start = S5PV310_PA_IIS1,
+		.end = S5PV310_PA_IIS1 + 0x100 - 1,
+		.flags = IORESOURCE_MEM,
+	},
+	[1] = {
+		.start = DMACH_I2S1_TX,
+		.end = DMACH_I2S1_TX,
+		.flags = IORESOURCE_DMA,
+	},
+	[2] = {
+		.start = DMACH_I2S1_RX,
+		.end = DMACH_I2S1_RX,
+		.flags = IORESOURCE_DMA,
+	},
+};
+
+struct platform_device s5pv310_device_iis1 = {
+	.name = "samsung-i2s",
+	.id = 1,
+	.num_resources = ARRAY_SIZE(s5pv310_iis1_resource),
+	.resource = s5pv310_iis1_resource,
+	.dev = {
+		.platform_data = &i2sv3_pdata,
+	},
+};
+
+static struct resource s5pv310_iis2_resource[] = {
+	[0] = {
+		.start = S5PV310_PA_IIS2,
+		.end = S5PV310_PA_IIS2 + 0x100 - 1,
+		.flags = IORESOURCE_MEM,
+	},
+	[1] = {
+		.start = DMACH_I2S2_TX,
+		.end = DMACH_I2S2_TX,
+		.flags = IORESOURCE_DMA,
+	},
+	[2] = {
+		.start = DMACH_I2S2_RX,
+		.end = DMACH_I2S2_RX,
+		.flags = IORESOURCE_DMA,
+	},
+};
+
+struct platform_device s5pv310_device_iis2 = {
+	.name = "samsung-i2s",
+	.id = 2,
+	.num_resources = ARRAY_SIZE(s5pv310_iis2_resource),
+	.resource = s5pv310_iis2_resource,
+	.dev = {
+		.platform_data = &i2sv3_pdata,
+	},
+};
+
+/* PCM Controller platform_devices */
+
+static int s5pv310_pcm_cfg_gpio(struct platform_device *pdev)
+{
+	switch (pdev->id) {
+	case 0:
+		s3c_gpio_cfgpin_range(S5PV310_GPZ(0), 5, S3C_GPIO_SFN(3));
+		break;
+	case 1:
+		s3c_gpio_cfgpin_range(S5PV310_GPC0(0), 5, S3C_GPIO_SFN(3));
+		break;
+	case 2:
+		s3c_gpio_cfgpin_range(S5PV310_GPC1(0), 5, S3C_GPIO_SFN(3));
+		break;
+	default:
+		printk(KERN_DEBUG "Invalid PCM Controller number!");
+		return -EINVAL;
+	}
+
+	return 0;
+}
+
+static struct s3c_audio_pdata s3c_pcm_pdata = {
+	.cfg_gpio = s5pv310_pcm_cfg_gpio,
+};
+
+static struct resource s5pv310_pcm0_resource[] = {
+	[0] = {
+		.start = S5PV310_PA_PCM0,
+		.end = S5PV310_PA_PCM0 + 0x100 - 1,
+		.flags = IORESOURCE_MEM,
+	},
+	[1] = {
+		.start = DMACH_PCM0_TX,
+		.end = DMACH_PCM0_TX,
+		.flags = IORESOURCE_DMA,
+	},
+	[2] = {
+		.start = DMACH_PCM0_RX,
+		.end = DMACH_PCM0_RX,
+		.flags = IORESOURCE_DMA,
+	},
+};
+
+struct platform_device s5pv310_device_pcm0 = {
+	.name = "samsung-pcm",
+	.id = 0,
+	.num_resources = ARRAY_SIZE(s5pv310_pcm0_resource),
+	.resource = s5pv310_pcm0_resource,
+	.dev = {
+		.platform_data = &s3c_pcm_pdata,
+	},
+};
+
+static struct resource s5pv310_pcm1_resource[] = {
+	[0] = {
+		.start = S5PV310_PA_PCM1,
+		.end = S5PV310_PA_PCM1 + 0x100 - 1,
+		.flags = IORESOURCE_MEM,
+	},
+	[1] = {
+		.start = DMACH_PCM1_TX,
+		.end = DMACH_PCM1_TX,
+		.flags = IORESOURCE_DMA,
+	},
+	[2] = {
+		.start = DMACH_PCM1_RX,
+		.end = DMACH_PCM1_RX,
+		.flags = IORESOURCE_DMA,
+	},
+};
+
+struct platform_device s5pv310_device_pcm1 = {
+	.name = "samsung-pcm",
+	.id = 1,
+	.num_resources = ARRAY_SIZE(s5pv310_pcm1_resource),
+	.resource = s5pv310_pcm1_resource,
+	.dev = {
+		.platform_data = &s3c_pcm_pdata,
+	},
+};
+
+static struct resource s5pv310_pcm2_resource[] = {
+	[0] = {
+		.start = S5PV310_PA_PCM2,
+		.end = S5PV310_PA_PCM2 + 0x100 - 1,
+		.flags = IORESOURCE_MEM,
+	},
+	[1] = {
+		.start = DMACH_PCM2_TX,
+		.end = DMACH_PCM2_TX,
+		.flags = IORESOURCE_DMA,
+	},
+	[2] = {
+		.start = DMACH_PCM2_RX,
+		.end = DMACH_PCM2_RX,
+		.flags = IORESOURCE_DMA,
+	},
+};
+
+struct platform_device s5pv310_device_pcm2 = {
+	.name = "samsung-pcm",
+	.id = 2,
+	.num_resources = ARRAY_SIZE(s5pv310_pcm2_resource),
+	.resource = s5pv310_pcm2_resource,
+	.dev = {
+		.platform_data = &s3c_pcm_pdata,
+	},
+};
+
+/* AC97 Controller platform devices */
+
+static int s5pv310_ac97_cfg_gpio(struct platform_device *pdev)
+{
+	return s3c_gpio_cfgpin_range(S5PV310_GPC0(0), 5, S3C_GPIO_SFN(4));
+}
+
+static struct resource s5pv310_ac97_resource[] = {
+	[0] = {
+		.start = S5PV310_PA_AC97,
+		.end = S5PV310_PA_AC97 + 0x100 - 1,
+		.flags = IORESOURCE_MEM,
+	},
+	[1] = {
+		.start = DMACH_AC97_PCMOUT,
+		.end = DMACH_AC97_PCMOUT,
+		.flags = IORESOURCE_DMA,
+	},
+	[2] = {
+		.start = DMACH_AC97_PCMIN,
+		.end = DMACH_AC97_PCMIN,
+		.flags = IORESOURCE_DMA,
+	},
+	[3] = {
+		.start = DMACH_AC97_MICIN,
+		.end = DMACH_AC97_MICIN,
+		.flags = IORESOURCE_DMA,
+	},
+	[4] = {
+		.start = IRQ_AC97,
+		.end = IRQ_AC97,
+		.flags = IORESOURCE_IRQ,
+	},
+};
+
+static struct s3c_audio_pdata s3c_ac97_pdata = {
+	.cfg_gpio = s5pv310_ac97_cfg_gpio,
+};
+
+static u64 s5pv310_ac97_dmamask = DMA_BIT_MASK(32);
+
+struct platform_device s5pv310_device_ac97 = {
+	.name = "samsung-ac97",
+	.id = -1,
+	.num_resources = ARRAY_SIZE(s5pv310_ac97_resource),
+	.resource = s5pv310_ac97_resource,
+	.dev = {
+		.platform_data = &s3c_ac97_pdata,
+		.dma_mask = &s5pv310_ac97_dmamask,
+		.coherent_dma_mask = DMA_BIT_MASK(32),
+	},
+};
+
+/* S/PDIF Controller platform_device */
+
+static int s5pv310_spdif_cfg_gpio(struct platform_device *pdev)
+{
+	s3c_gpio_cfgpin_range(S5PV310_GPC1(0), 2, S3C_GPIO_SFN(3));
+
+	return 0;
+}
+
+static struct resource s5pv310_spdif_resource[] = {
+	[0] = {
+		.start = S5PV310_PA_SPDIF,
+		.end = S5PV310_PA_SPDIF + 0x100 - 1,
+		.flags = IORESOURCE_MEM,
+	},
+	[1] = {
+		.start = DMACH_SPDIF,
+		.end = DMACH_SPDIF,
+		.flags = IORESOURCE_DMA,
+	},
+};
+
+static struct s3c_audio_pdata samsung_spdif_pdata = {
+	.cfg_gpio = s5pv310_spdif_cfg_gpio,
+};
+
+static u64 s5pv310_spdif_dmamask = DMA_BIT_MASK(32);
+
+struct platform_device s5pv310_device_spdif = {
+	.name = "samsung-spdif",
+	.id = -1,
+	.num_resources = ARRAY_SIZE(s5pv310_spdif_resource),
+	.resource = s5pv310_spdif_resource,
+	.dev = {
+		.platform_data = &samsung_spdif_pdata,
+		.dma_mask = &s5pv310_spdif_dmamask,
+		.coherent_dma_mask = DMA_BIT_MASK(32),
+	},
+};
diff --git a/arch/arm/mach-s5pv310/include/mach/map.h b/arch/arm/mach-s5pv310/include/mach/map.h
index f6a6587..d99eff3 100644
--- a/arch/arm/mach-s5pv310/include/mach/map.h
+++ b/arch/arm/mach-s5pv310/include/mach/map.h
@@ -61,6 +61,22 @@
 
 #define S5PV310_PA_HSMMC(x)		(0x12510000 + ((x) * 0x10000))
 
+/* S/PDIF */
+#define S5PV310_PA_SPDIF	0xE1100000
+
+/* I2S */
+#define S5PV310_PA_IIS0		0x03830000
+#define S5PV310_PA_IIS1		0xE3100000
+#define S5PV310_PA_IIS2		0xE2A00000
+
+/* PCM */
+#define S5PV310_PA_PCM0		0x03840000
+#define S5PV310_PA_PCM1		0x13980000
+#define S5PV310_PA_PCM2		0x13990000
+
+/* AC97 */
+#define S5PV310_PA_AC97		0x139A0000
+
 #define S5PV310_PA_UART			(0x13800000)
 
 #define S5P_PA_UART(x)			(S5PV310_PA_UART + ((x) * S3C_UART_OFFSET))
diff --git a/arch/arm/plat-samsung/include/plat/devs.h b/arch/arm/plat-samsung/include/plat/devs.h
index 16521cc..9764268 100644
--- a/arch/arm/plat-samsung/include/plat/devs.h
+++ b/arch/arm/plat-samsung/include/plat/devs.h
@@ -94,6 +94,15 @@ extern struct platform_device s5pv210_device_iis1;
 extern struct platform_device s5pv210_device_iis2;
 extern struct platform_device s5pv210_device_spdif;
 
+extern struct platform_device s5pv310_device_ac97;
+extern struct platform_device s5pv310_device_pcm0;
+extern struct platform_device s5pv310_device_pcm1;
+extern struct platform_device s5pv310_device_pcm2;
+extern struct platform_device s5pv310_device_iis0;
+extern struct platform_device s5pv310_device_iis1;
+extern struct platform_device s5pv310_device_iis2;
+extern struct platform_device s5pv310_device_spdif;
+
 extern struct platform_device s5p6442_device_pcm0;
 extern struct platform_device s5p6442_device_pcm1;
 extern struct platform_device s5p6442_device_iis0;
-- 
1.6.2.5

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

* [PATCH 9/9] ARM: S5PV310: Add audio platform devices
  2010-10-26  1:41 [PATCH 9/9] ARM: S5PV310: Add audio platform devices Jassi Brar
@ 2010-10-26  4:21 ` Kyungmin Park
  2010-10-26  4:47   ` Jassi Brar
  0 siblings, 1 reply; 8+ messages in thread
From: Kyungmin Park @ 2010-10-26  4:21 UTC (permalink / raw)
  To: linux-arm-kernel

On Tue, Oct 26, 2010 at 10:41 AM, Jassi Brar <jassisinghbrar@gmail.com> wrote:
> From: Jassi Brar <jassi.brar@samsung.com>
>
> Define platform devices for all audio devices found on S5PV310
>
> Signed-off-by: Jassi Brar <jassi.brar@samsung.com>
> ---
> ?arch/arm/mach-s5pv310/Makefile ? ? ? ? ? ?| ? ?1 +
> ?arch/arm/mach-s5pv310/dev-audio.c ? ? ? ? | ?364 +++++++++++++++++++++++++++++
> ?arch/arm/mach-s5pv310/include/mach/map.h ?| ? 16 ++
> ?arch/arm/plat-samsung/include/plat/devs.h | ? ?9 +
> ?4 files changed, 390 insertions(+), 0 deletions(-)
> ?create mode 100644 arch/arm/mach-s5pv310/dev-audio.c
>
> diff --git a/arch/arm/mach-s5pv310/Makefile b/arch/arm/mach-s5pv310/Makefile
> index d265adb..61e3cb6 100644
> --- a/arch/arm/mach-s5pv310/Makefile
> +++ b/arch/arm/mach-s5pv310/Makefile
> @@ -27,6 +27,7 @@ obj-$(CONFIG_MACH_UNIVERSAL_C210) ? ? += mach-universal_c210.o
>
> ?# device support
>
> +obj-y += dev-audio.o
Why it's default build? could you make a config as others?

> ?obj-$(CONFIG_S5PV310_SETUP_I2C1) ? ? ? += setup-i2c1.o
> ?obj-$(CONFIG_S5PV310_SETUP_I2C2) ? ? ? += setup-i2c2.o
> ?obj-$(CONFIG_S5PV310_SETUP_I2C3) ? ? ? += setup-i2c3.o
> diff --git a/arch/arm/mach-s5pv310/dev-audio.c b/arch/arm/mach-s5pv310/dev-audio.c
> new file mode 100644
> index 0000000..18ede29
> --- /dev/null
> +++ b/arch/arm/mach-s5pv310/dev-audio.c
> @@ -0,0 +1,364 @@
> +/* linux/arch/arm/mach-s5pv310/dev-audio.c
> + *
> + * Copyright (c) 2010 Samsung Electronics Co. Ltd
> + * ? ? Jaswinder Singh <jassi.brar@samsung.com>
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License version 2 as
> + * published by the Free Software Foundation.
> + */
> +
> +#include <linux/platform_device.h>
> +#include <linux/dma-mapping.h>
> +#include <linux/gpio.h>
> +
> +#include <plat/gpio-cfg.h>
> +#include <plat/audio.h>
> +
> +#include <mach/map.h>
> +#include <mach/dma.h>
> +#include <mach/irqs.h>
> +
> +static const char *rclksrc[] = {
> + ? ? ? [0] = "busclk",
> + ? ? ? [1] = "i2sclk",
> +};
> +
> +static int s5pv310_cfg_i2s(struct platform_device *pdev)
> +{
> + ? ? ? /* configure GPIO for i2s port */
> + ? ? ? switch (pdev->id) {
> + ? ? ? case 0:
> + ? ? ? ? ? ? ? s3c_gpio_cfgpin_range(S5PV310_GPZ(0), 7, S3C_GPIO_SFN(2));
Does it default setup for i2s? In my board some pins are used for
other purpose.
I mean GPZ(1, 5, 6) doesn't used it for I2S.
then how do you handle this one?

> + ? ? ? ? ? ? ? break;
> + ? ? ? case 1:
> + ? ? ? ? ? ? ? s3c_gpio_cfgpin_range(S5PV310_GPC0(0), 5, S3C_GPIO_SFN(2));
> + ? ? ? ? ? ? ? break;
> + ? ? ? case 2:
> + ? ? ? ? ? ? ? s3c_gpio_cfgpin_range(S5PV310_GPC1(0), 5, S3C_GPIO_SFN(4));
> + ? ? ? ? ? ? ? break;
> + ? ? ? default:
> + ? ? ? ? ? ? ? printk(KERN_ERR "Invalid Device %d\n", pdev->id);
> + ? ? ? ? ? ? ? return -EINVAL;
> + ? ? ? }
> +
> + ? ? ? return 0;
> +}
> +
> +static struct s3c_audio_pdata i2sv5_pdata = {
> + ? ? ? .cfg_gpio = s5pv310_cfg_i2s,
> + ? ? ? .type = {
> + ? ? ? ? ? ? ? .i2s = {
> + ? ? ? ? ? ? ? ? ? ? ? .quirks = QUIRK_PRI_6CHAN | QUIRK_SEC_DAI
> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?| QUIRK_NEED_RSTCLR,
> + ? ? ? ? ? ? ? ? ? ? ? .src_clk = rclksrc,
> + ? ? ? ? ? ? ? },
> + ? ? ? },
> +};
> +
> +static struct resource s5pv310_iis0_resource[] = {
You wrote that there are some users to use iis but c210/v310 doesn't.
So you should use the i2s at least c210/v310 series
> + ? ? ? [0] = {
> + ? ? ? ? ? ? ? .start = S5PV310_PA_IIS0,
> + ? ? ? ? ? ? ? .end = S5PV310_PA_IIS0 + 0x100 - 1,
> + ? ? ? ? ? ? ? .flags = IORESOURCE_MEM,
> + ? ? ? },
> + ? ? ? [1] = {
> + ? ? ? ? ? ? ? .start = DMACH_I2S0_TX,
> + ? ? ? ? ? ? ? .end = DMACH_I2S0_TX,
> + ? ? ? ? ? ? ? .flags = IORESOURCE_DMA,
> + ? ? ? },
> + ? ? ? [2] = {
> + ? ? ? ? ? ? ? .start = DMACH_I2S0_RX,
> + ? ? ? ? ? ? ? .end = DMACH_I2S0_RX,
> + ? ? ? ? ? ? ? .flags = IORESOURCE_DMA,
> + ? ? ? },
> + ? ? ? [3] = {
> + ? ? ? ? ? ? ? .start = DMACH_I2S0S_TX,
> + ? ? ? ? ? ? ? .end = DMACH_I2S0S_TX,
> + ? ? ? ? ? ? ? .flags = IORESOURCE_DMA,
> + ? ? ? },
> +};
> +
> +struct platform_device s5pv310_device_iis0 = {
> + ? ? ? .name = "samsung-i2s",
> + ? ? ? .id = 0,
> + ? ? ? .num_resources = ARRAY_SIZE(s5pv310_iis0_resource),
> + ? ? ? .resource = s5pv310_iis0_resource,
> + ? ? ? .dev = {
> + ? ? ? ? ? ? ? .platform_data = &i2sv5_pdata,
> + ? ? ? },
> +};
> +
> +static const char *rclksrc_v3[] = {
> + ? ? ? [0] = "sclk_i2s",
> + ? ? ? [1] = "no_such_clock",
> +};
> +
> +static struct s3c_audio_pdata i2sv3_pdata = {
> + ? ? ? .cfg_gpio = s5pv310_cfg_i2s,
> + ? ? ? .type = {
> + ? ? ? ? ? ? ? .i2s = {
> + ? ? ? ? ? ? ? ? ? ? ? .quirks = QUIRK_NO_MUXPSR,
> + ? ? ? ? ? ? ? ? ? ? ? .src_clk = rclksrc_v3,
> + ? ? ? ? ? ? ? },
> + ? ? ? },
> +};
> +
> +static struct resource s5pv310_iis1_resource[] = {
> + ? ? ? [0] = {
> + ? ? ? ? ? ? ? .start = S5PV310_PA_IIS1,
> + ? ? ? ? ? ? ? .end = S5PV310_PA_IIS1 + 0x100 - 1,
> + ? ? ? ? ? ? ? .flags = IORESOURCE_MEM,
> + ? ? ? },
> + ? ? ? [1] = {
> + ? ? ? ? ? ? ? .start = DMACH_I2S1_TX,
> + ? ? ? ? ? ? ? .end = DMACH_I2S1_TX,
> + ? ? ? ? ? ? ? .flags = IORESOURCE_DMA,
> + ? ? ? },
> + ? ? ? [2] = {
> + ? ? ? ? ? ? ? .start = DMACH_I2S1_RX,
> + ? ? ? ? ? ? ? .end = DMACH_I2S1_RX,
> + ? ? ? ? ? ? ? .flags = IORESOURCE_DMA,
> + ? ? ? },
> +};
> +
> +struct platform_device s5pv310_device_iis1 = {
> + ? ? ? .name = "samsung-i2s",
> + ? ? ? .id = 1,
> + ? ? ? .num_resources = ARRAY_SIZE(s5pv310_iis1_resource),
> + ? ? ? .resource = s5pv310_iis1_resource,
> + ? ? ? .dev = {
> + ? ? ? ? ? ? ? .platform_data = &i2sv3_pdata,
> + ? ? ? },
> +};
> +
> +static struct resource s5pv310_iis2_resource[] = {
> + ? ? ? [0] = {
> + ? ? ? ? ? ? ? .start = S5PV310_PA_IIS2,
> + ? ? ? ? ? ? ? .end = S5PV310_PA_IIS2 + 0x100 - 1,
> + ? ? ? ? ? ? ? .flags = IORESOURCE_MEM,
> + ? ? ? },
> + ? ? ? [1] = {
> + ? ? ? ? ? ? ? .start = DMACH_I2S2_TX,
> + ? ? ? ? ? ? ? .end = DMACH_I2S2_TX,
> + ? ? ? ? ? ? ? .flags = IORESOURCE_DMA,
> + ? ? ? },
> + ? ? ? [2] = {
> + ? ? ? ? ? ? ? .start = DMACH_I2S2_RX,
> + ? ? ? ? ? ? ? .end = DMACH_I2S2_RX,
> + ? ? ? ? ? ? ? .flags = IORESOURCE_DMA,
> + ? ? ? },
> +};
> +
> +struct platform_device s5pv310_device_iis2 = {
> + ? ? ? .name = "samsung-i2s",
> + ? ? ? .id = 2,
> + ? ? ? .num_resources = ARRAY_SIZE(s5pv310_iis2_resource),
> + ? ? ? .resource = s5pv310_iis2_resource,
> + ? ? ? .dev = {
> + ? ? ? ? ? ? ? .platform_data = &i2sv3_pdata,
> + ? ? ? },
> +};
> +
> +/* PCM Controller platform_devices */
> +
> +static int s5pv310_pcm_cfg_gpio(struct platform_device *pdev)
> +{
> + ? ? ? switch (pdev->id) {
> + ? ? ? case 0:
> + ? ? ? ? ? ? ? s3c_gpio_cfgpin_range(S5PV310_GPZ(0), 5, S3C_GPIO_SFN(3));
> + ? ? ? ? ? ? ? break;
> + ? ? ? case 1:
> + ? ? ? ? ? ? ? s3c_gpio_cfgpin_range(S5PV310_GPC0(0), 5, S3C_GPIO_SFN(3));
> + ? ? ? ? ? ? ? break;
> + ? ? ? case 2:
> + ? ? ? ? ? ? ? s3c_gpio_cfgpin_range(S5PV310_GPC1(0), 5, S3C_GPIO_SFN(3));
> + ? ? ? ? ? ? ? break;
> + ? ? ? default:
> + ? ? ? ? ? ? ? printk(KERN_DEBUG "Invalid PCM Controller number!");
> + ? ? ? ? ? ? ? return -EINVAL;
> + ? ? ? }
> +
> + ? ? ? return 0;
> +}
> +
> +static struct s3c_audio_pdata s3c_pcm_pdata = {
> + ? ? ? .cfg_gpio = s5pv310_pcm_cfg_gpio,
> +};
> +
> +static struct resource s5pv310_pcm0_resource[] = {
> + ? ? ? [0] = {
> + ? ? ? ? ? ? ? .start = S5PV310_PA_PCM0,
> + ? ? ? ? ? ? ? .end = S5PV310_PA_PCM0 + 0x100 - 1,
> + ? ? ? ? ? ? ? .flags = IORESOURCE_MEM,
> + ? ? ? },
> + ? ? ? [1] = {
> + ? ? ? ? ? ? ? .start = DMACH_PCM0_TX,
> + ? ? ? ? ? ? ? .end = DMACH_PCM0_TX,
> + ? ? ? ? ? ? ? .flags = IORESOURCE_DMA,
> + ? ? ? },
> + ? ? ? [2] = {
> + ? ? ? ? ? ? ? .start = DMACH_PCM0_RX,
> + ? ? ? ? ? ? ? .end = DMACH_PCM0_RX,
> + ? ? ? ? ? ? ? .flags = IORESOURCE_DMA,
> + ? ? ? },
> +};
> +
> +struct platform_device s5pv310_device_pcm0 = {
> + ? ? ? .name = "samsung-pcm",
> + ? ? ? .id = 0,
> + ? ? ? .num_resources = ARRAY_SIZE(s5pv310_pcm0_resource),
> + ? ? ? .resource = s5pv310_pcm0_resource,
> + ? ? ? .dev = {
> + ? ? ? ? ? ? ? .platform_data = &s3c_pcm_pdata,
> + ? ? ? },
> +};
> +
> +static struct resource s5pv310_pcm1_resource[] = {
> + ? ? ? [0] = {
> + ? ? ? ? ? ? ? .start = S5PV310_PA_PCM1,
> + ? ? ? ? ? ? ? .end = S5PV310_PA_PCM1 + 0x100 - 1,
> + ? ? ? ? ? ? ? .flags = IORESOURCE_MEM,
> + ? ? ? },
> + ? ? ? [1] = {
> + ? ? ? ? ? ? ? .start = DMACH_PCM1_TX,
> + ? ? ? ? ? ? ? .end = DMACH_PCM1_TX,
> + ? ? ? ? ? ? ? .flags = IORESOURCE_DMA,
> + ? ? ? },
> + ? ? ? [2] = {
> + ? ? ? ? ? ? ? .start = DMACH_PCM1_RX,
> + ? ? ? ? ? ? ? .end = DMACH_PCM1_RX,
> + ? ? ? ? ? ? ? .flags = IORESOURCE_DMA,
> + ? ? ? },
> +};
> +
> +struct platform_device s5pv310_device_pcm1 = {
> + ? ? ? .name = "samsung-pcm",
> + ? ? ? .id = 1,
> + ? ? ? .num_resources = ARRAY_SIZE(s5pv310_pcm1_resource),
> + ? ? ? .resource = s5pv310_pcm1_resource,
> + ? ? ? .dev = {
> + ? ? ? ? ? ? ? .platform_data = &s3c_pcm_pdata,
> + ? ? ? },
> +};
> +
> +static struct resource s5pv310_pcm2_resource[] = {
> + ? ? ? [0] = {
> + ? ? ? ? ? ? ? .start = S5PV310_PA_PCM2,
> + ? ? ? ? ? ? ? .end = S5PV310_PA_PCM2 + 0x100 - 1,
> + ? ? ? ? ? ? ? .flags = IORESOURCE_MEM,
> + ? ? ? },
> + ? ? ? [1] = {
> + ? ? ? ? ? ? ? .start = DMACH_PCM2_TX,
> + ? ? ? ? ? ? ? .end = DMACH_PCM2_TX,
> + ? ? ? ? ? ? ? .flags = IORESOURCE_DMA,
> + ? ? ? },
> + ? ? ? [2] = {
> + ? ? ? ? ? ? ? .start = DMACH_PCM2_RX,
> + ? ? ? ? ? ? ? .end = DMACH_PCM2_RX,
> + ? ? ? ? ? ? ? .flags = IORESOURCE_DMA,
> + ? ? ? },
> +};
> +
> +struct platform_device s5pv310_device_pcm2 = {
> + ? ? ? .name = "samsung-pcm",
> + ? ? ? .id = 2,
> + ? ? ? .num_resources = ARRAY_SIZE(s5pv310_pcm2_resource),
> + ? ? ? .resource = s5pv310_pcm2_resource,
> + ? ? ? .dev = {
> + ? ? ? ? ? ? ? .platform_data = &s3c_pcm_pdata,
> + ? ? ? },
> +};
> +
> +/* AC97 Controller platform devices */
> +
> +static int s5pv310_ac97_cfg_gpio(struct platform_device *pdev)
> +{
> + ? ? ? return s3c_gpio_cfgpin_range(S5PV310_GPC0(0), 5, S3C_GPIO_SFN(4));
> +}
> +
> +static struct resource s5pv310_ac97_resource[] = {
> + ? ? ? [0] = {
> + ? ? ? ? ? ? ? .start = S5PV310_PA_AC97,
> + ? ? ? ? ? ? ? .end = S5PV310_PA_AC97 + 0x100 - 1,
> + ? ? ? ? ? ? ? .flags = IORESOURCE_MEM,
> + ? ? ? },
> + ? ? ? [1] = {
> + ? ? ? ? ? ? ? .start = DMACH_AC97_PCMOUT,
> + ? ? ? ? ? ? ? .end = DMACH_AC97_PCMOUT,
> + ? ? ? ? ? ? ? .flags = IORESOURCE_DMA,
> + ? ? ? },
> + ? ? ? [2] = {
> + ? ? ? ? ? ? ? .start = DMACH_AC97_PCMIN,
> + ? ? ? ? ? ? ? .end = DMACH_AC97_PCMIN,
> + ? ? ? ? ? ? ? .flags = IORESOURCE_DMA,
> + ? ? ? },
> + ? ? ? [3] = {
> + ? ? ? ? ? ? ? .start = DMACH_AC97_MICIN,
> + ? ? ? ? ? ? ? .end = DMACH_AC97_MICIN,
> + ? ? ? ? ? ? ? .flags = IORESOURCE_DMA,
> + ? ? ? },
> + ? ? ? [4] = {
> + ? ? ? ? ? ? ? .start = IRQ_AC97,
> + ? ? ? ? ? ? ? .end = IRQ_AC97,
> + ? ? ? ? ? ? ? .flags = IORESOURCE_IRQ,
> + ? ? ? },
> +};
> +
> +static struct s3c_audio_pdata s3c_ac97_pdata = {
> + ? ? ? .cfg_gpio = s5pv310_ac97_cfg_gpio,
> +};
> +
> +static u64 s5pv310_ac97_dmamask = DMA_BIT_MASK(32);
> +
> +struct platform_device s5pv310_device_ac97 = {
> + ? ? ? .name = "samsung-ac97",
> + ? ? ? .id = -1,
> + ? ? ? .num_resources = ARRAY_SIZE(s5pv310_ac97_resource),
> + ? ? ? .resource = s5pv310_ac97_resource,
> + ? ? ? .dev = {
> + ? ? ? ? ? ? ? .platform_data = &s3c_ac97_pdata,
> + ? ? ? ? ? ? ? .dma_mask = &s5pv310_ac97_dmamask,
> + ? ? ? ? ? ? ? .coherent_dma_mask = DMA_BIT_MASK(32),
> + ? ? ? },
> +};
> +
> +/* S/PDIF Controller platform_device */
> +
> +static int s5pv310_spdif_cfg_gpio(struct platform_device *pdev)
> +{
> + ? ? ? s3c_gpio_cfgpin_range(S5PV310_GPC1(0), 2, S3C_GPIO_SFN(3));
> +
> + ? ? ? return 0;
> +}
> +
> +static struct resource s5pv310_spdif_resource[] = {
> + ? ? ? [0] = {
> + ? ? ? ? ? ? ? .start = S5PV310_PA_SPDIF,
> + ? ? ? ? ? ? ? .end = S5PV310_PA_SPDIF + 0x100 - 1,
> + ? ? ? ? ? ? ? .flags = IORESOURCE_MEM,
> + ? ? ? },
> + ? ? ? [1] = {
> + ? ? ? ? ? ? ? .start = DMACH_SPDIF,
> + ? ? ? ? ? ? ? .end = DMACH_SPDIF,
> + ? ? ? ? ? ? ? .flags = IORESOURCE_DMA,
> + ? ? ? },
> +};
> +
> +static struct s3c_audio_pdata samsung_spdif_pdata = {
> + ? ? ? .cfg_gpio = s5pv310_spdif_cfg_gpio,
> +};
> +
> +static u64 s5pv310_spdif_dmamask = DMA_BIT_MASK(32);
> +
> +struct platform_device s5pv310_device_spdif = {
> + ? ? ? .name = "samsung-spdif",
> + ? ? ? .id = -1,
> + ? ? ? .num_resources = ARRAY_SIZE(s5pv310_spdif_resource),
> + ? ? ? .resource = s5pv310_spdif_resource,
> + ? ? ? .dev = {
> + ? ? ? ? ? ? ? .platform_data = &samsung_spdif_pdata,
> + ? ? ? ? ? ? ? .dma_mask = &s5pv310_spdif_dmamask,
> + ? ? ? ? ? ? ? .coherent_dma_mask = DMA_BIT_MASK(32),
> + ? ? ? },
> +};
> diff --git a/arch/arm/mach-s5pv310/include/mach/map.h b/arch/arm/mach-s5pv310/include/mach/map.h
> index f6a6587..d99eff3 100644
> --- a/arch/arm/mach-s5pv310/include/mach/map.h
> +++ b/arch/arm/mach-s5pv310/include/mach/map.h
> @@ -61,6 +61,22 @@
>
> ?#define S5PV310_PA_HSMMC(x) ? ? ? ? ? ?(0x12510000 + ((x) * 0x10000))
>
> +/* S/PDIF */
> +#define S5PV310_PA_SPDIF ? ? ? 0xE1100000
> +
> +/* I2S */
> +#define S5PV310_PA_IIS0 ? ? ? ? ? ? ? ?0x03830000
> +#define S5PV310_PA_IIS1 ? ? ? ? ? ? ? ?0xE3100000
> +#define S5PV310_PA_IIS2 ? ? ? ? ? ? ? ?0xE2A00000
> +
> +/* PCM */
> +#define S5PV310_PA_PCM0 ? ? ? ? ? ? ? ?0x03840000
> +#define S5PV310_PA_PCM1 ? ? ? ? ? ? ? ?0x13980000
> +#define S5PV310_PA_PCM2 ? ? ? ? ? ? ? ?0x13990000
> +
> +/* AC97 */
> +#define S5PV310_PA_AC97 ? ? ? ? ? ? ? ?0x139A0000
> +
> ?#define S5PV310_PA_UART ? ? ? ? ? ? ? ? ? ? ? ?(0x13800000)
>
> ?#define S5P_PA_UART(x) ? ? ? ? ? ? ? ? (S5PV310_PA_UART + ((x) * S3C_UART_OFFSET))
> diff --git a/arch/arm/plat-samsung/include/plat/devs.h b/arch/arm/plat-samsung/include/plat/devs.h
> index 16521cc..9764268 100644
> --- a/arch/arm/plat-samsung/include/plat/devs.h
> +++ b/arch/arm/plat-samsung/include/plat/devs.h
> @@ -94,6 +94,15 @@ extern struct platform_device s5pv210_device_iis1;
> ?extern struct platform_device s5pv210_device_iis2;
> ?extern struct platform_device s5pv210_device_spdif;
>
> +extern struct platform_device s5pv310_device_ac97;
> +extern struct platform_device s5pv310_device_pcm0;
> +extern struct platform_device s5pv310_device_pcm1;
> +extern struct platform_device s5pv310_device_pcm2;
> +extern struct platform_device s5pv310_device_iis0;
> +extern struct platform_device s5pv310_device_iis1;
> +extern struct platform_device s5pv310_device_iis2;
> +extern struct platform_device s5pv310_device_spdif;
> +

How to make common audio platform data? If not, we should list all
samsung soc audio node in the future.

> ?extern struct platform_device s5p6442_device_pcm0;
> ?extern struct platform_device s5p6442_device_pcm1;
> ?extern struct platform_device s5p6442_device_iis0;
> --
> 1.6.2.5
>
>
> _______________________________________________
> linux-arm-kernel mailing list
> linux-arm-kernel at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
>

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

* [PATCH 9/9] ARM: S5PV310: Add audio platform devices
  2010-10-26  4:21 ` Kyungmin Park
@ 2010-10-26  4:47   ` Jassi Brar
  2010-10-26  4:59     ` Kyungmin Park
  0 siblings, 1 reply; 8+ messages in thread
From: Jassi Brar @ 2010-10-26  4:47 UTC (permalink / raw)
  To: linux-arm-kernel

On Tue, Oct 26, 2010 at 1:21 PM, Kyungmin Park <kmpark@infradead.org> wrote:
> On Tue, Oct 26, 2010 at 10:41 AM, Jassi Brar <jassisinghbrar@gmail.com> wrote:
>> From: Jassi Brar <jassi.brar@samsung.com>
>>
>> Define platform devices for all audio devices found on S5PV310
>>
>> Signed-off-by: Jassi Brar <jassi.brar@samsung.com>
>> ---
>> ?arch/arm/mach-s5pv310/Makefile ? ? ? ? ? ?| ? ?1 +
>> ?arch/arm/mach-s5pv310/dev-audio.c ? ? ? ? | ?364 +++++++++++++++++++++++++++++
>> ?arch/arm/mach-s5pv310/include/mach/map.h ?| ? 16 ++
>> ?arch/arm/plat-samsung/include/plat/devs.h | ? ?9 +
>> ?4 files changed, 390 insertions(+), 0 deletions(-)
>> ?create mode 100644 arch/arm/mach-s5pv310/dev-audio.c
>>
>> diff --git a/arch/arm/mach-s5pv310/Makefile b/arch/arm/mach-s5pv310/Makefile
>> index d265adb..61e3cb6 100644
>> --- a/arch/arm/mach-s5pv310/Makefile
>> +++ b/arch/arm/mach-s5pv310/Makefile
>> @@ -27,6 +27,7 @@ obj-$(CONFIG_MACH_UNIVERSAL_C210) ? ? += mach-universal_c210.o
>>
>> ?# device support
>>
>> +obj-y += dev-audio.o
> Why it's default build? could you make a config as others?

It was decided by Ben (and Mark IIRC) that most, if not all, devices use
audio and it is better to have the platform support built unconditionally.
If you see, it is same for all platforms since 64xx.

>> +static int s5pv310_cfg_i2s(struct platform_device *pdev)
>> +{
>> + ? ? ? /* configure GPIO for i2s port */
>> + ? ? ? switch (pdev->id) {
>> + ? ? ? case 0:
>> + ? ? ? ? ? ? ? s3c_gpio_cfgpin_range(S5PV310_GPZ(0), 7, S3C_GPIO_SFN(2));
> Does it default setup for i2s? In my board some pins are used for
> other purpose.
> I mean GPZ(1, 5, 6) doesn't used it for I2S.
> then how do you handle this one?
At least in the manual that I have, I2S0 is possible only on GPZ[0:6],
so if a user
does attempt to use I2S0, he/she shouldn't touch the GPIOs for any
other purpose.
Please let me know details of your board if you think there is some problem
with this setup.

>> +
>> +static struct resource s5pv310_iis0_resource[] = {
> You wrote that there are some users to use iis but c210/v310 doesn't.
> So you should use the i2s at least c210/v310 series
yes, this was simply modified from v210 so left unchanged.

>>
>> +extern struct platform_device s5pv310_device_ac97;
>> +extern struct platform_device s5pv310_device_pcm0;
>> +extern struct platform_device s5pv310_device_pcm1;
>> +extern struct platform_device s5pv310_device_pcm2;
>> +extern struct platform_device s5pv310_device_iis0;
>> +extern struct platform_device s5pv310_device_iis1;
>> +extern struct platform_device s5pv310_device_iis2;
>> +extern struct platform_device s5pv310_device_spdif;
>> +
>
> How to make common audio platform data? If not, we should list all
> samsung soc audio node in the future.

That will be done when we have some common mechanism for all
devices. There is nothing Audio specific that we can do about it.

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

* [PATCH 9/9] ARM: S5PV310: Add audio platform devices
  2010-10-26  4:47   ` Jassi Brar
@ 2010-10-26  4:59     ` Kyungmin Park
  2010-10-26  5:30       ` Jassi Brar
  0 siblings, 1 reply; 8+ messages in thread
From: Kyungmin Park @ 2010-10-26  4:59 UTC (permalink / raw)
  To: linux-arm-kernel

On Tue, Oct 26, 2010 at 1:47 PM, Jassi Brar <jassisinghbrar@gmail.com> wrote:
> On Tue, Oct 26, 2010 at 1:21 PM, Kyungmin Park <kmpark@infradead.org> wrote:
>> On Tue, Oct 26, 2010 at 10:41 AM, Jassi Brar <jassisinghbrar@gmail.com> wrote:
>>> From: Jassi Brar <jassi.brar@samsung.com>
>>>
>>> Define platform devices for all audio devices found on S5PV310
>>>
>>> Signed-off-by: Jassi Brar <jassi.brar@samsung.com>
>>> ---
>>> ?arch/arm/mach-s5pv310/Makefile ? ? ? ? ? ?| ? ?1 +
>>> ?arch/arm/mach-s5pv310/dev-audio.c ? ? ? ? | ?364 +++++++++++++++++++++++++++++
>>> ?arch/arm/mach-s5pv310/include/mach/map.h ?| ? 16 ++
>>> ?arch/arm/plat-samsung/include/plat/devs.h | ? ?9 +
>>> ?4 files changed, 390 insertions(+), 0 deletions(-)
>>> ?create mode 100644 arch/arm/mach-s5pv310/dev-audio.c
>>>
>>> diff --git a/arch/arm/mach-s5pv310/Makefile b/arch/arm/mach-s5pv310/Makefile
>>> index d265adb..61e3cb6 100644
>>> --- a/arch/arm/mach-s5pv310/Makefile
>>> +++ b/arch/arm/mach-s5pv310/Makefile
>>> @@ -27,6 +27,7 @@ obj-$(CONFIG_MACH_UNIVERSAL_C210) ? ? += mach-universal_c210.o
>>>
>>> ?# device support
>>>
>>> +obj-y += dev-audio.o
>> Why it's default build? could you make a config as others?
>
> It was decided by Ben (and Mark IIRC) that most, if not all, devices use
> audio and it is better to have the platform support built unconditionally.
> If you see, it is same for all platforms since 64xx.
>
>>> +static int s5pv310_cfg_i2s(struct platform_device *pdev)
>>> +{
>>> + ? ? ? /* configure GPIO for i2s port */
>>> + ? ? ? switch (pdev->id) {
>>> + ? ? ? case 0:
>>> + ? ? ? ? ? ? ? s3c_gpio_cfgpin_range(S5PV310_GPZ(0), 7, S3C_GPIO_SFN(2));
>> Does it default setup for i2s? In my board some pins are used for
>> other purpose.
>> I mean GPZ(1, 5, 6) doesn't used it for I2S.
>> then how do you handle this one?
> At least in the manual that I have, I2S0 is possible only on GPZ[0:6],
> so if a user
> does attempt to use I2S0, he/she shouldn't touch the GPIOs for any
> other purpose.
No C110 use the same scheme. and works
> Please let me know details of your board if you think there is some problem
> with this setup.
As above it doesn't use the GPZ(1,5,6) and used for other purpose.
and these are already checked by LSI H/W team.
>
>>> +
>>> +static struct resource s5pv310_iis0_resource[] = {
>> You wrote that there are some users to use iis but c210/v310 doesn't.
>> So you should use the i2s at least c210/v310 series
> yes, this was simply modified from v210 so left unchanged.
>
>>>
>>> +extern struct platform_device s5pv310_device_ac97;
>>> +extern struct platform_device s5pv310_device_pcm0;
>>> +extern struct platform_device s5pv310_device_pcm1;
>>> +extern struct platform_device s5pv310_device_pcm2;
>>> +extern struct platform_device s5pv310_device_iis0;
>>> +extern struct platform_device s5pv310_device_iis1;
>>> +extern struct platform_device s5pv310_device_iis2;
>>> +extern struct platform_device s5pv310_device_spdif;
>>> +
>>
>> How to make common audio platform data? If not, we should list all
>> samsung soc audio node in the future.
>
> That will be done when we have some common mechanism for all
> devices. There is nothing Audio specific that we can do about it.
>

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

* [PATCH 9/9] ARM: S5PV310: Add audio platform devices
  2010-10-26  4:59     ` Kyungmin Park
@ 2010-10-26  5:30       ` Jassi Brar
  0 siblings, 0 replies; 8+ messages in thread
From: Jassi Brar @ 2010-10-26  5:30 UTC (permalink / raw)
  To: linux-arm-kernel

On Tue, Oct 26, 2010 at 1:59 PM, Kyungmin Park <kmpark@infradead.org> wrote:

>>>> +static int s5pv310_cfg_i2s(struct platform_device *pdev)
>>>> +{
>>>> + ? ? ? /* configure GPIO for i2s port */
>>>> + ? ? ? switch (pdev->id) {
>>>> + ? ? ? case 0:
>>>> + ? ? ? ? ? ? ? s3c_gpio_cfgpin_range(S5PV310_GPZ(0), 7, S3C_GPIO_SFN(2));
>>> Does it default setup for i2s? In my board some pins are used for
>>> other purpose.
>>> I mean GPZ(1, 5, 6) doesn't used it for I2S.
>>> then how do you handle this one?
>> At least in the manual that I have, I2S0 is possible only on GPZ[0:6],
>> so if a user
>> does attempt to use I2S0, he/she shouldn't touch the GPIOs for any
>> other purpose.
> No C110 use the same scheme. and works
>> Please let me know details of your board if you think there is some problem
>> with this setup.
> As above it doesn't use the GPZ(1,5,6) and used for other purpose.
> and these are already checked by LSI H/W team.

Ok, so you mean running I2S0 in 2channel, rather than 6 channel mode.
We don't support that yet but that should be easy to implement by
defining custom i/f between platform and machine init code.

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

* [PATCH 9/9] ARM: S5PV310: Add audio platform devices
  2010-11-29  6:52   ` Marek Szyprowski
@ 2010-11-29  6:57     ` Jassi Brar
  0 siblings, 0 replies; 8+ messages in thread
From: Jassi Brar @ 2010-11-29  6:57 UTC (permalink / raw)
  To: linux-arm-kernel

On Mon, Nov 29, 2010 at 3:52 PM, Marek Szyprowski
<m.szyprowski@samsung.com> wrote:
> Hello,
>
> On Thursday, November 18, 2010 10:21 AM Jassi Brar wrote:
>
>> From: Jassi Brar <jassi.brar@samsung.com>
>>
>> Define platform devices for all audio devices found on S5PV310
>>
>> Signed-off-by: Jassi Brar <jassi.brar@samsung.com>
>> ---
>> ?arch/arm/mach-s5pv310/Makefile ? ? ? ? ? ?| ? ?1 +
>> ?arch/arm/mach-s5pv310/dev-audio.c ? ? ? ? | ?364 +++++++++++++++++++++++++++++
>> ?arch/arm/mach-s5pv310/include/mach/map.h ?| ? 16 ++
>> ?arch/arm/plat-samsung/include/plat/devs.h | ? ?9 +
>> ?4 files changed, 390 insertions(+), 0 deletions(-)
>> ?create mode 100644 arch/arm/mach-s5pv310/dev-audio.c
>>
>> diff --git a/arch/arm/mach-s5pv310/Makefile b/arch/arm/mach-s5pv310/Makefile
>> index d265adb..61e3cb6 100644
>> --- a/arch/arm/mach-s5pv310/Makefile
>> +++ b/arch/arm/mach-s5pv310/Makefile
>> @@ -27,6 +27,7 @@ obj-$(CONFIG_MACH_UNIVERSAL_C210) ? += mach-universal_c210.o
>>
>> ?# device support
>>
>> +obj-y += dev-audio.o
>
> Why do you compile in audio support unconditionally? All other devices have the
> respective Kconfig entry, so please add one for audio and use it. We really don't
> want to have all devices compiled into the kernel all the times for all the boards.

It was decided by Ben (and Mark IIRC) that most, if not all, devices use
audio and it is better to have the platform support built unconditionally.
If you see, it is same for all platforms since 64xx.

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

* [PATCH 9/9] ARM: S5PV310: Add audio platform devices
  2010-11-18  9:21 ` [PATCH 9/9] ARM: S5PV310: Add audio platform devices Jassi Brar
@ 2010-11-29  6:52   ` Marek Szyprowski
  2010-11-29  6:57     ` Jassi Brar
  0 siblings, 1 reply; 8+ messages in thread
From: Marek Szyprowski @ 2010-11-29  6:52 UTC (permalink / raw)
  To: linux-arm-kernel

Hello,

On Thursday, November 18, 2010 10:21 AM Jassi Brar wrote:

> From: Jassi Brar <jassi.brar@samsung.com>
> 
> Define platform devices for all audio devices found on S5PV310
> 
> Signed-off-by: Jassi Brar <jassi.brar@samsung.com>
> ---
>  arch/arm/mach-s5pv310/Makefile            |    1 +
>  arch/arm/mach-s5pv310/dev-audio.c         |  364 +++++++++++++++++++++++++++++
>  arch/arm/mach-s5pv310/include/mach/map.h  |   16 ++
>  arch/arm/plat-samsung/include/plat/devs.h |    9 +
>  4 files changed, 390 insertions(+), 0 deletions(-)
>  create mode 100644 arch/arm/mach-s5pv310/dev-audio.c
> 
> diff --git a/arch/arm/mach-s5pv310/Makefile b/arch/arm/mach-s5pv310/Makefile
> index d265adb..61e3cb6 100644
> --- a/arch/arm/mach-s5pv310/Makefile
> +++ b/arch/arm/mach-s5pv310/Makefile
> @@ -27,6 +27,7 @@ obj-$(CONFIG_MACH_UNIVERSAL_C210)	+= mach-universal_c210.o
> 
>  # device support
> 
> +obj-y += dev-audio.o

Why do you compile in audio support unconditionally? All other devices have the
respective Kconfig entry, so please add one for audio and use it. We really don't
want to have all devices compiled into the kernel all the times for all the boards.

<snip>

Best regards
--
Marek Szyprowski
Samsung Poland R&D Center

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

* [PATCH 9/9] ARM: S5PV310: Add audio platform devices
  2010-11-18  9:24 [PATCH 1/9] S5PV310: DMA: Add platform devices for PL330 DMACs Jassi Brar
@ 2010-11-18  9:21 ` Jassi Brar
  2010-11-29  6:52   ` Marek Szyprowski
  0 siblings, 1 reply; 8+ messages in thread
From: Jassi Brar @ 2010-11-18  9:21 UTC (permalink / raw)
  To: linux-arm-kernel

From: Jassi Brar <jassi.brar@samsung.com>

Define platform devices for all audio devices found on S5PV310

Signed-off-by: Jassi Brar <jassi.brar@samsung.com>
---
 arch/arm/mach-s5pv310/Makefile            |    1 +
 arch/arm/mach-s5pv310/dev-audio.c         |  364 +++++++++++++++++++++++++++++
 arch/arm/mach-s5pv310/include/mach/map.h  |   16 ++
 arch/arm/plat-samsung/include/plat/devs.h |    9 +
 4 files changed, 390 insertions(+), 0 deletions(-)
 create mode 100644 arch/arm/mach-s5pv310/dev-audio.c

diff --git a/arch/arm/mach-s5pv310/Makefile b/arch/arm/mach-s5pv310/Makefile
index d265adb..61e3cb6 100644
--- a/arch/arm/mach-s5pv310/Makefile
+++ b/arch/arm/mach-s5pv310/Makefile
@@ -27,6 +27,7 @@ obj-$(CONFIG_MACH_UNIVERSAL_C210)	+= mach-universal_c210.o
 
 # device support
 
+obj-y += dev-audio.o
 obj-$(CONFIG_S5PV310_SETUP_I2C1)	+= setup-i2c1.o
 obj-$(CONFIG_S5PV310_SETUP_I2C2)	+= setup-i2c2.o
 obj-$(CONFIG_S5PV310_SETUP_I2C3)	+= setup-i2c3.o
diff --git a/arch/arm/mach-s5pv310/dev-audio.c b/arch/arm/mach-s5pv310/dev-audio.c
new file mode 100644
index 0000000..a196424
--- /dev/null
+++ b/arch/arm/mach-s5pv310/dev-audio.c
@@ -0,0 +1,364 @@
+/* linux/arch/arm/mach-s5pv310/dev-audio.c
+ *
+ * Copyright (c) 2010 Samsung Electronics Co. Ltd
+ *	Jaswinder Singh <jassi.brar@samsung.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+#include <linux/platform_device.h>
+#include <linux/dma-mapping.h>
+#include <linux/gpio.h>
+
+#include <plat/gpio-cfg.h>
+#include <plat/audio.h>
+
+#include <mach/map.h>
+#include <mach/dma.h>
+#include <mach/irqs.h>
+
+static const char *rclksrc[] = {
+	[0] = "busclk",
+	[1] = "i2sclk",
+};
+
+static int s5pv310_cfg_i2s(struct platform_device *pdev)
+{
+	/* configure GPIO for i2s port */
+	switch (pdev->id) {
+	case 0:
+		s3c_gpio_cfgpin_range(S5PV310_GPZ(0), 7, S3C_GPIO_SFN(2));
+		break;
+	case 1:
+		s3c_gpio_cfgpin_range(S5PV310_GPC0(0), 5, S3C_GPIO_SFN(2));
+		break;
+	case 2:
+		s3c_gpio_cfgpin_range(S5PV310_GPC1(0), 5, S3C_GPIO_SFN(4));
+		break;
+	default:
+		printk(KERN_ERR "Invalid Device %d\n", pdev->id);
+		return -EINVAL;
+	}
+
+	return 0;
+}
+
+static struct s3c_audio_pdata i2sv5_pdata = {
+	.cfg_gpio = s5pv310_cfg_i2s,
+	.type = {
+		.i2s = {
+			.quirks = QUIRK_PRI_6CHAN | QUIRK_SEC_DAI
+					 | QUIRK_NEED_RSTCLR,
+			.src_clk = rclksrc,
+		},
+	},
+};
+
+static struct resource s5pv310_i2s0_resource[] = {
+	[0] = {
+		.start	= S5PV310_PA_I2S0,
+		.end	= S5PV310_PA_I2S0 + 0x100 - 1,
+		.flags	= IORESOURCE_MEM,
+	},
+	[1] = {
+		.start	= DMACH_I2S0_TX,
+		.end	= DMACH_I2S0_TX,
+		.flags	= IORESOURCE_DMA,
+	},
+	[2] = {
+		.start	= DMACH_I2S0_RX,
+		.end	= DMACH_I2S0_RX,
+		.flags	= IORESOURCE_DMA,
+	},
+	[3] = {
+		.start	= DMACH_I2S0S_TX,
+		.end	= DMACH_I2S0S_TX,
+		.flags	= IORESOURCE_DMA,
+	},
+};
+
+struct platform_device s5pv310_device_i2s0 = {
+	.name = "samsung-i2s",
+	.id = 0,
+	.num_resources = ARRAY_SIZE(s5pv310_i2s0_resource),
+	.resource = s5pv310_i2s0_resource,
+	.dev = {
+		.platform_data = &i2sv5_pdata,
+	},
+};
+
+static const char *rclksrc_v3[] = {
+	[0] = "sclk_i2s",
+	[1] = "no_such_clock",
+};
+
+static struct s3c_audio_pdata i2sv3_pdata = {
+	.cfg_gpio = s5pv310_cfg_i2s,
+	.type = {
+		.i2s = {
+			.quirks = QUIRK_NO_MUXPSR,
+			.src_clk = rclksrc_v3,
+		},
+	},
+};
+
+static struct resource s5pv310_i2s1_resource[] = {
+	[0] = {
+		.start	= S5PV310_PA_I2S1,
+		.end	= S5PV310_PA_I2S1 + 0x100 - 1,
+		.flags	= IORESOURCE_MEM,
+	},
+	[1] = {
+		.start	= DMACH_I2S1_TX,
+		.end	= DMACH_I2S1_TX,
+		.flags	= IORESOURCE_DMA,
+	},
+	[2] = {
+		.start	= DMACH_I2S1_RX,
+		.end	= DMACH_I2S1_RX,
+		.flags	= IORESOURCE_DMA,
+	},
+};
+
+struct platform_device s5pv310_device_i2s1 = {
+	.name = "samsung-i2s",
+	.id = 1,
+	.num_resources = ARRAY_SIZE(s5pv310_i2s1_resource),
+	.resource = s5pv310_i2s1_resource,
+	.dev = {
+		.platform_data = &i2sv3_pdata,
+	},
+};
+
+static struct resource s5pv310_i2s2_resource[] = {
+	[0] = {
+		.start	= S5PV310_PA_I2S2,
+		.end	= S5PV310_PA_I2S2 + 0x100 - 1,
+		.flags	= IORESOURCE_MEM,
+	},
+	[1] = {
+		.start	= DMACH_I2S2_TX,
+		.end	= DMACH_I2S2_TX,
+		.flags	= IORESOURCE_DMA,
+	},
+	[2] = {
+		.start	= DMACH_I2S2_RX,
+		.end	= DMACH_I2S2_RX,
+		.flags	= IORESOURCE_DMA,
+	},
+};
+
+struct platform_device s5pv310_device_i2s2 = {
+	.name = "samsung-i2s",
+	.id = 2,
+	.num_resources = ARRAY_SIZE(s5pv310_i2s2_resource),
+	.resource = s5pv310_i2s2_resource,
+	.dev = {
+		.platform_data = &i2sv3_pdata,
+	},
+};
+
+/* PCM Controller platform_devices */
+
+static int s5pv310_pcm_cfg_gpio(struct platform_device *pdev)
+{
+	switch (pdev->id) {
+	case 0:
+		s3c_gpio_cfgpin_range(S5PV310_GPZ(0), 5, S3C_GPIO_SFN(3));
+		break;
+	case 1:
+		s3c_gpio_cfgpin_range(S5PV310_GPC0(0), 5, S3C_GPIO_SFN(3));
+		break;
+	case 2:
+		s3c_gpio_cfgpin_range(S5PV310_GPC1(0), 5, S3C_GPIO_SFN(3));
+		break;
+	default:
+		printk(KERN_DEBUG "Invalid PCM Controller number!");
+		return -EINVAL;
+	}
+
+	return 0;
+}
+
+static struct s3c_audio_pdata s3c_pcm_pdata = {
+	.cfg_gpio = s5pv310_pcm_cfg_gpio,
+};
+
+static struct resource s5pv310_pcm0_resource[] = {
+	[0] = {
+		.start	= S5PV310_PA_PCM0,
+		.end	= S5PV310_PA_PCM0 + 0x100 - 1,
+		.flags	= IORESOURCE_MEM,
+	},
+	[1] = {
+		.start	= DMACH_PCM0_TX,
+		.end	= DMACH_PCM0_TX,
+		.flags	= IORESOURCE_DMA,
+	},
+	[2] = {
+		.start	= DMACH_PCM0_RX,
+		.end	= DMACH_PCM0_RX,
+		.flags	= IORESOURCE_DMA,
+	},
+};
+
+struct platform_device s5pv310_device_pcm0 = {
+	.name = "samsung-pcm",
+	.id = 0,
+	.num_resources = ARRAY_SIZE(s5pv310_pcm0_resource),
+	.resource = s5pv310_pcm0_resource,
+	.dev = {
+		.platform_data = &s3c_pcm_pdata,
+	},
+};
+
+static struct resource s5pv310_pcm1_resource[] = {
+	[0] = {
+		.start	= S5PV310_PA_PCM1,
+		.end	= S5PV310_PA_PCM1 + 0x100 - 1,
+		.flags	= IORESOURCE_MEM,
+	},
+	[1] = {
+		.start	= DMACH_PCM1_TX,
+		.end	= DMACH_PCM1_TX,
+		.flags	= IORESOURCE_DMA,
+	},
+	[2] = {
+		.start	= DMACH_PCM1_RX,
+		.end	= DMACH_PCM1_RX,
+		.flags	= IORESOURCE_DMA,
+	},
+};
+
+struct platform_device s5pv310_device_pcm1 = {
+	.name = "samsung-pcm",
+	.id = 1,
+	.num_resources = ARRAY_SIZE(s5pv310_pcm1_resource),
+	.resource = s5pv310_pcm1_resource,
+	.dev = {
+		.platform_data = &s3c_pcm_pdata,
+	},
+};
+
+static struct resource s5pv310_pcm2_resource[] = {
+	[0] = {
+		.start	= S5PV310_PA_PCM2,
+		.end	= S5PV310_PA_PCM2 + 0x100 - 1,
+		.flags	= IORESOURCE_MEM,
+	},
+	[1] = {
+		.start	= DMACH_PCM2_TX,
+		.end	= DMACH_PCM2_TX,
+		.flags	= IORESOURCE_DMA,
+	},
+	[2] = {
+		.start	= DMACH_PCM2_RX,
+		.end	= DMACH_PCM2_RX,
+		.flags	= IORESOURCE_DMA,
+	},
+};
+
+struct platform_device s5pv310_device_pcm2 = {
+	.name = "samsung-pcm",
+	.id = 2,
+	.num_resources = ARRAY_SIZE(s5pv310_pcm2_resource),
+	.resource = s5pv310_pcm2_resource,
+	.dev = {
+		.platform_data = &s3c_pcm_pdata,
+	},
+};
+
+/* AC97 Controller platform devices */
+
+static int s5pv310_ac97_cfg_gpio(struct platform_device *pdev)
+{
+	return s3c_gpio_cfgpin_range(S5PV310_GPC0(0), 5, S3C_GPIO_SFN(4));
+}
+
+static struct resource s5pv310_ac97_resource[] = {
+	[0] = {
+		.start	= S5PV310_PA_AC97,
+		.end	= S5PV310_PA_AC97 + 0x100 - 1,
+		.flags	= IORESOURCE_MEM,
+	},
+	[1] = {
+		.start	= DMACH_AC97_PCMOUT,
+		.end	= DMACH_AC97_PCMOUT,
+		.flags	= IORESOURCE_DMA,
+	},
+	[2] = {
+		.start	= DMACH_AC97_PCMIN,
+		.end	= DMACH_AC97_PCMIN,
+		.flags	= IORESOURCE_DMA,
+	},
+	[3] = {
+		.start	= DMACH_AC97_MICIN,
+		.end	= DMACH_AC97_MICIN,
+		.flags	= IORESOURCE_DMA,
+	},
+	[4] = {
+		.start	= IRQ_AC97,
+		.end	= IRQ_AC97,
+		.flags	= IORESOURCE_IRQ,
+	},
+};
+
+static struct s3c_audio_pdata s3c_ac97_pdata = {
+	.cfg_gpio = s5pv310_ac97_cfg_gpio,
+};
+
+static u64 s5pv310_ac97_dmamask = DMA_BIT_MASK(32);
+
+struct platform_device s5pv310_device_ac97 = {
+	.name = "samsung-ac97",
+	.id = -1,
+	.num_resources = ARRAY_SIZE(s5pv310_ac97_resource),
+	.resource = s5pv310_ac97_resource,
+	.dev = {
+		.platform_data = &s3c_ac97_pdata,
+		.dma_mask = &s5pv310_ac97_dmamask,
+		.coherent_dma_mask = DMA_BIT_MASK(32),
+	},
+};
+
+/* S/PDIF Controller platform_device */
+
+static int s5pv310_spdif_cfg_gpio(struct platform_device *pdev)
+{
+	s3c_gpio_cfgpin_range(S5PV310_GPC1(0), 2, S3C_GPIO_SFN(3));
+
+	return 0;
+}
+
+static struct resource s5pv310_spdif_resource[] = {
+	[0] = {
+		.start	= S5PV310_PA_SPDIF,
+		.end	= S5PV310_PA_SPDIF + 0x100 - 1,
+		.flags	= IORESOURCE_MEM,
+	},
+	[1] = {
+		.start	= DMACH_SPDIF,
+		.end	= DMACH_SPDIF,
+		.flags	= IORESOURCE_DMA,
+	},
+};
+
+static struct s3c_audio_pdata samsung_spdif_pdata = {
+	.cfg_gpio = s5pv310_spdif_cfg_gpio,
+};
+
+static u64 s5pv310_spdif_dmamask = DMA_BIT_MASK(32);
+
+struct platform_device s5pv310_device_spdif = {
+	.name = "samsung-spdif",
+	.id = -1,
+	.num_resources = ARRAY_SIZE(s5pv310_spdif_resource),
+	.resource = s5pv310_spdif_resource,
+	.dev = {
+		.platform_data = &samsung_spdif_pdata,
+		.dma_mask = &s5pv310_spdif_dmamask,
+		.coherent_dma_mask = DMA_BIT_MASK(32),
+	},
+};
diff --git a/arch/arm/mach-s5pv310/include/mach/map.h b/arch/arm/mach-s5pv310/include/mach/map.h
index 169fac2..5399446 100644
--- a/arch/arm/mach-s5pv310/include/mach/map.h
+++ b/arch/arm/mach-s5pv310/include/mach/map.h
@@ -65,6 +65,22 @@
 
 #define S5PV310_PA_SROMC		(0x12570000)
 
+/* S/PDIF */
+#define S5PV310_PA_SPDIF	0xE1100000
+
+/* I2S */
+#define S5PV310_PA_I2S0		0x03830000
+#define S5PV310_PA_I2S1		0xE3100000
+#define S5PV310_PA_I2S2		0xE2A00000
+
+/* PCM */
+#define S5PV310_PA_PCM0		0x03840000
+#define S5PV310_PA_PCM1		0x13980000
+#define S5PV310_PA_PCM2		0x13990000
+
+/* AC97 */
+#define S5PV310_PA_AC97		0x139A0000
+
 #define S5PV310_PA_UART			(0x13800000)
 
 #define S5P_PA_UART(x)			(S5PV310_PA_UART + ((x) * S3C_UART_OFFSET))
diff --git a/arch/arm/plat-samsung/include/plat/devs.h b/arch/arm/plat-samsung/include/plat/devs.h
index 2d82a6c..dec0ded 100644
--- a/arch/arm/plat-samsung/include/plat/devs.h
+++ b/arch/arm/plat-samsung/include/plat/devs.h
@@ -96,6 +96,15 @@ extern struct platform_device s5pv210_device_iis1;
 extern struct platform_device s5pv210_device_iis2;
 extern struct platform_device s5pv210_device_spdif;
 
+extern struct platform_device s5pv310_device_ac97;
+extern struct platform_device s5pv310_device_pcm0;
+extern struct platform_device s5pv310_device_pcm1;
+extern struct platform_device s5pv310_device_pcm2;
+extern struct platform_device s5pv310_device_i2s0;
+extern struct platform_device s5pv310_device_i2s1;
+extern struct platform_device s5pv310_device_i2s2;
+extern struct platform_device s5pv310_device_spdif;
+
 extern struct platform_device s5p6442_device_pcm0;
 extern struct platform_device s5p6442_device_pcm1;
 extern struct platform_device s5p6442_device_iis0;
-- 
1.6.2.5

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

end of thread, other threads:[~2010-11-29  6:57 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-10-26  1:41 [PATCH 9/9] ARM: S5PV310: Add audio platform devices Jassi Brar
2010-10-26  4:21 ` Kyungmin Park
2010-10-26  4:47   ` Jassi Brar
2010-10-26  4:59     ` Kyungmin Park
2010-10-26  5:30       ` Jassi Brar
2010-11-18  9:24 [PATCH 1/9] S5PV310: DMA: Add platform devices for PL330 DMACs Jassi Brar
2010-11-18  9:21 ` [PATCH 9/9] ARM: S5PV310: Add audio platform devices Jassi Brar
2010-11-29  6:52   ` Marek Szyprowski
2010-11-29  6:57     ` Jassi Brar

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.