* [PATCH] SAMSUNG: Audio support
@ 2010-05-18 5:10 Jassi Brar
2010-05-18 5:10 ` [PATCH 1/9] ARM: S5PV210: Add audio platform devices Jassi Brar
` (9 more replies)
0 siblings, 10 replies; 16+ messages in thread
From: Jassi Brar @ 2010-05-18 5:10 UTC (permalink / raw)
To: linux-arm-kernel
Hi,
Following are few patches to define and add audio devices' support
for latest Samsung SoCs, namely S5P6440, S5P6442, S5PC100, S5PC110
and S5PV210 on respective SMDK board.
The device drivers will be enabled to run these via ASoC tree.
Thanks.
^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH 1/9] ARM: S5PV210: Add audio platform devices
2010-05-18 5:10 [PATCH] SAMSUNG: Audio support Jassi Brar
@ 2010-05-18 5:10 ` Jassi Brar
2010-05-18 5:24 ` Ben Dooks
2010-05-18 5:10 ` [PATCH 2/9] ARM: SMDKV210: Add audio devices on board Jassi Brar
` (8 subsequent siblings)
9 siblings, 1 reply; 16+ messages in thread
From: Jassi Brar @ 2010-05-18 5:10 UTC (permalink / raw)
To: linux-arm-kernel
Define platform devices for all audio devices found on S5PV210
Signed-off-by: Jassi Brar <jassi.brar@samsung.com>
---
arch/arm/mach-s5pv210/Makefile | 4 +
arch/arm/mach-s5pv210/dev-audio.c | 334 +++++++++++++++++++++++++++++
arch/arm/mach-s5pv210/include/mach/map.h | 13 ++
arch/arm/plat-samsung/include/plat/devs.h | 8 +
4 files changed, 359 insertions(+), 0 deletions(-)
create mode 100644 arch/arm/mach-s5pv210/dev-audio.c
diff --git a/arch/arm/mach-s5pv210/Makefile b/arch/arm/mach-s5pv210/Makefile
index f7f1cdc..6ecfa9d 100644
--- a/arch/arm/mach-s5pv210/Makefile
+++ b/arch/arm/mach-s5pv210/Makefile
@@ -18,3 +18,7 @@ obj-$(CONFIG_CPU_S5PV210) += cpu.o init.o clock.o dma.o
obj-$(CONFIG_MACH_SMDKV210) += mach-smdkv210.o
obj-$(CONFIG_MACH_SMDKC110) += mach-smdkc110.o
+
+# device support
+
+obj-y += dev-audio.o
diff --git a/arch/arm/mach-s5pv210/dev-audio.c b/arch/arm/mach-s5pv210/dev-audio.c
new file mode 100644
index 0000000..bdaa926
--- /dev/null
+++ b/arch/arm/mach-s5pv210/dev-audio.c
@@ -0,0 +1,327 @@
+/* linux/arch/arm/mach-s5pv210/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 <plat/gpio-cfg.h>
+#include <plat/audio.h>
+
+#include <mach/gpio.h>
+#include <mach/map.h>
+#include <mach/dma.h>
+#include <mach/irqs.h>
+
+static int s5pv210_cfg_i2s(struct platform_device *pdev)
+{
+ /* configure GPIO for i2s port */
+ switch (pdev->id) {
+ case 1:
+ s3c_gpio_cfgpin(S5PV210_GPC0(0), S3C_GPIO_SFN(2));
+ s3c_gpio_cfgpin(S5PV210_GPC0(1), S3C_GPIO_SFN(2));
+ s3c_gpio_cfgpin(S5PV210_GPC0(2), S3C_GPIO_SFN(2));
+ s3c_gpio_cfgpin(S5PV210_GPC0(3), S3C_GPIO_SFN(2));
+ s3c_gpio_cfgpin(S5PV210_GPC0(4), S3C_GPIO_SFN(2));
+ break;
+
+ case 2:
+ s3c_gpio_cfgpin(S5PV210_GPC1(0), S3C_GPIO_SFN(4));
+ s3c_gpio_cfgpin(S5PV210_GPC1(1), S3C_GPIO_SFN(4));
+ s3c_gpio_cfgpin(S5PV210_GPC1(2), S3C_GPIO_SFN(4));
+ s3c_gpio_cfgpin(S5PV210_GPC1(3), S3C_GPIO_SFN(4));
+ s3c_gpio_cfgpin(S5PV210_GPC1(4), S3C_GPIO_SFN(4));
+ break;
+
+ case -1:
+ s3c_gpio_cfgpin(S5PV210_GPI(0), S3C_GPIO_SFN(2));
+ s3c_gpio_cfgpin(S5PV210_GPI(1), S3C_GPIO_SFN(2));
+ s3c_gpio_cfgpin(S5PV210_GPI(2), S3C_GPIO_SFN(2));
+ s3c_gpio_cfgpin(S5PV210_GPI(3), S3C_GPIO_SFN(2));
+ s3c_gpio_cfgpin(S5PV210_GPI(4), S3C_GPIO_SFN(2));
+ s3c_gpio_cfgpin(S5PV210_GPI(5), S3C_GPIO_SFN(2));
+ s3c_gpio_cfgpin(S5PV210_GPI(6), S3C_GPIO_SFN(2));
+ break;
+
+ default:
+ printk(KERN_ERR "Invalid Device %d\n", pdev->id);
+ return -EINVAL;
+ }
+
+ return 0;
+}
+
+static struct s3c_audio_pdata s3c_i2s_pdata = {
+ .cfg_gpio = s5pv210_cfg_i2s,
+};
+
+static struct resource s5pv210_iis0_resource[] = {
+ [0] = {
+ .start = S5PV210_PA_IIS0,
+ .end = S5PV210_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,
+ },
+};
+
+struct platform_device s5pv210_device_iis0 = {
+ .name = "s3c64xx-iis-v4",
+ .id = -1,
+ .num_resources = ARRAY_SIZE(s5pv210_iis0_resource),
+ .resource = s5pv210_iis0_resource,
+ .dev = {
+ .platform_data = &s3c_i2s_pdata,
+ },
+}; EXPORT_SYMBOL(s5pv210_device_iis0);
+
+static struct resource s5pv210_iis1_resource[] = {
+ [0] = {
+ .start = S5PV210_PA_IIS1,
+ .end = S5PV210_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 s5pv210_device_iis1 = {
+ .name = "s3c64xx-iis",
+ .id = 1,
+ .num_resources = ARRAY_SIZE(s5pv210_iis1_resource),
+ .resource = s5pv210_iis1_resource,
+ .dev = {
+ .platform_data = &s3c_i2s_pdata,
+ },
+}; EXPORT_SYMBOL(s5pv210_device_iis1);
+
+static struct resource s5pv210_iis2_resource[] = {
+ [0] = {
+ .start = S5PV210_PA_IIS2,
+ .end = S5PV210_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 s5pv210_device_iis2 = {
+ .name = "s3c64xx-iis",
+ .id = 2,
+ .num_resources = ARRAY_SIZE(s5pv210_iis2_resource),
+ .resource = s5pv210_iis2_resource,
+ .dev = {
+ .platform_data = &s3c_i2s_pdata,
+ },
+}; EXPORT_SYMBOL(s5pv210_device_iis2);
+
+/* PCM Controller platform_devices */
+
+static int s5pv210_pcm_cfg_gpio(struct platform_device *pdev)
+{
+ switch (pdev->id) {
+ case 0:
+ s3c_gpio_cfgpin(S5PV210_GPI(0), S3C_GPIO_SFN(3));
+ s3c_gpio_cfgpin(S5PV210_GPI(1), S3C_GPIO_SFN(3));
+ s3c_gpio_cfgpin(S5PV210_GPI(2), S3C_GPIO_SFN(3));
+ s3c_gpio_cfgpin(S5PV210_GPI(3), S3C_GPIO_SFN(3));
+ s3c_gpio_cfgpin(S5PV210_GPI(4), S3C_GPIO_SFN(3));
+ break;
+ case 1:
+ s3c_gpio_cfgpin(S5PV210_GPC0(0), S3C_GPIO_SFN(3));
+ s3c_gpio_cfgpin(S5PV210_GPC0(1), S3C_GPIO_SFN(3));
+ s3c_gpio_cfgpin(S5PV210_GPC0(2), S3C_GPIO_SFN(3));
+ s3c_gpio_cfgpin(S5PV210_GPC0(3), S3C_GPIO_SFN(3));
+ s3c_gpio_cfgpin(S5PV210_GPC0(4), S3C_GPIO_SFN(3));
+ break;
+ case 2:
+ s3c_gpio_cfgpin(S5PV210_GPC1(0), S3C_GPIO_SFN(2));
+ s3c_gpio_cfgpin(S5PV210_GPC1(1), S3C_GPIO_SFN(2));
+ s3c_gpio_cfgpin(S5PV210_GPC1(2), S3C_GPIO_SFN(2));
+ s3c_gpio_cfgpin(S5PV210_GPC1(3), S3C_GPIO_SFN(2));
+ s3c_gpio_cfgpin(S5PV210_GPC1(4), S3C_GPIO_SFN(2));
+ break;
+ default:
+ printk(KERN_DEBUG "Invalid PCM Controller number!");
+ return -EINVAL;
+ }
+
+ return 0;
+}
+
+static struct s3c_audio_pdata s3c_pcm_pdata = {
+ .cfg_gpio = s5pv210_pcm_cfg_gpio,
+};
+
+static struct resource s5pv210_pcm0_resource[] = {
+ [0] = {
+ .start = S5PV210_PA_PCM0,
+ .end = S5PV210_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 s5pv210_device_pcm0 = {
+ .name = "samsung-pcm",
+ .id = 0,
+ .num_resources = ARRAY_SIZE(s5pv210_pcm0_resource),
+ .resource = s5pv210_pcm0_resource,
+ .dev = {
+ .platform_data = &s3c_pcm_pdata,
+ },
+}; EXPORT_SYMBOL(s5pv210_device_pcm0);
+
+static struct resource s5pv210_pcm1_resource[] = {
+ [0] = {
+ .start = S5PV210_PA_PCM1,
+ .end = S5PV210_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 s5pv210_device_pcm1 = {
+ .name = "samsung-pcm",
+ .id = 1,
+ .num_resources = ARRAY_SIZE(s5pv210_pcm1_resource),
+ .resource = s5pv210_pcm1_resource,
+ .dev = {
+ .platform_data = &s3c_pcm_pdata,
+ },
+}; EXPORT_SYMBOL(s5pv210_device_pcm1);
+
+static struct resource s5pv210_pcm2_resource[] = {
+ [0] = {
+ .start = S5PV210_PA_PCM2,
+ .end = S5PV210_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 s5pv210_device_pcm2 = {
+ .name = "samsung-pcm",
+ .id = 2,
+ .num_resources = ARRAY_SIZE(s5pv210_pcm2_resource),
+ .resource = s5pv210_pcm2_resource,
+ .dev = {
+ .platform_data = &s3c_pcm_pdata,
+ },
+}; EXPORT_SYMBOL(s5pv210_device_pcm2);
+
+/* AC97 Controller platform devices */
+
+static int s5pv210_ac97_cfg_gpio(struct platform_device *pdev)
+{
+ s3c_gpio_cfgpin(S5PV210_GPC0(0), S3C_GPIO_SFN(4));
+ s3c_gpio_cfgpin(S5PV210_GPC0(1), S3C_GPIO_SFN(4));
+ s3c_gpio_cfgpin(S5PV210_GPC0(2), S3C_GPIO_SFN(4));
+ s3c_gpio_cfgpin(S5PV210_GPC0(3), S3C_GPIO_SFN(4));
+ s3c_gpio_cfgpin(S5PV210_GPC0(4), S3C_GPIO_SFN(4));
+
+ return 0;
+}
+
+static struct resource s5pv210_ac97_resource[] = {
+ [0] = {
+ .start = S5PV210_PA_AC97,
+ .end = S5PV210_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 = s5pv210_ac97_cfg_gpio,
+};
+
+static u64 s5pv210_ac97_dmamask = DMA_BIT_MASK(32);
+
+struct platform_device s5pv210_device_ac97 = {
+ .name = "s3c-ac97",
+ .id = -1,
+ .num_resources = ARRAY_SIZE(s5pv210_ac97_resource),
+ .resource = s5pv210_ac97_resource,
+ .dev = {
+ .platform_data = &s3c_ac97_pdata,
+ .dma_mask = &s5pv210_ac97_dmamask,
+ .coherent_dma_mask = DMA_BIT_MASK(32),
+ },
+}; EXPORT_SYMBOL(s5pv210_device_ac97);
diff --git a/arch/arm/mach-s5pv210/include/mach/map.h b/arch/arm/mach-s5pv210/include/mach/map.h
index c038585..5adcb9f 100644
--- a/arch/arm/mach-s5pv210/include/mach/map.h
+++ b/arch/arm/mach-s5pv210/include/mach/map.h
@@ -62,6 +62,19 @@
#define S5PV210_PA_SDRAM (0x20000000)
#define S5P_PA_SDRAM S5PV210_PA_SDRAM
+/* I2S */
+#define S5PV210_PA_IIS0 0xEEE30000
+#define S5PV210_PA_IIS1 0xE2100000
+#define S5PV210_PA_IIS2 0xE2A00000
+
+/* PCM */
+#define S5PV210_PA_PCM0 0xE2300000
+#define S5PV210_PA_PCM1 0xE1200000
+#define S5PV210_PA_PCM2 0xE2B00000
+
+/* AC97 */
+#define S5PV210_PA_AC97 0xE2200000
+
/* compatibiltiy defines. */
#define S3C_PA_UART S5PV210_PA_UART
#define S3C_PA_IIC S5PV210_PA_IIC0
diff --git a/arch/arm/plat-samsung/include/plat/devs.h b/arch/arm/plat-samsung/include/plat/devs.h
index 796d242..d8fda3a 100644
--- a/arch/arm/plat-samsung/include/plat/devs.h
+++ b/arch/arm/plat-samsung/include/plat/devs.h
@@ -64,6 +64,14 @@ extern struct platform_device s3c_device_nand;
extern struct platform_device s3c_device_usbgadget;
extern struct platform_device s3c_device_usb_hsotg;
+extern struct platform_device s5pv210_device_ac97;
+extern struct platform_device s5pv210_device_pcm0;
+extern struct platform_device s5pv210_device_pcm1;
+extern struct platform_device s5pv210_device_pcm2;
+extern struct platform_device s5pv210_device_iis0;
+extern struct platform_device s5pv210_device_iis1;
+extern struct platform_device s5pv210_device_iis2;
+
/* s3c2440 specific devices */
#ifdef CONFIG_CPU_S3C2440
--
1.6.2.5
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH 2/9] ARM: SMDKV210: Add audio devices on board
2010-05-18 5:10 [PATCH] SAMSUNG: Audio support Jassi Brar
2010-05-18 5:10 ` [PATCH 1/9] ARM: S5PV210: Add audio platform devices Jassi Brar
@ 2010-05-18 5:10 ` Jassi Brar
2010-05-18 5:10 ` [PATCH 3/9] ARM: SMDKC110: " Jassi Brar
` (7 subsequent siblings)
9 siblings, 0 replies; 16+ messages in thread
From: Jassi Brar @ 2010-05-18 5:10 UTC (permalink / raw)
To: linux-arm-kernel
Add audio platform devices on the smdk by default.
Signed-off-by: Jassi Brar <jassi.brar@samsung.com>
---
arch/arm/mach-s5pv210/mach-smdkv210.c | 2 ++
1 files changed, 2 insertions(+), 0 deletions(-)
diff --git a/arch/arm/mach-s5pv210/mach-smdkv210.c b/arch/arm/mach-s5pv210/mach-smdkv210.c
index a278832..3c29e18 100644
--- a/arch/arm/mach-s5pv210/mach-smdkv210.c
+++ b/arch/arm/mach-s5pv210/mach-smdkv210.c
@@ -72,6 +72,8 @@ static struct s3c2410_uartcfg smdkv210_uartcfgs[] __initdata = {
};
static struct platform_device *smdkv210_devices[] __initdata = {
+ &s5pv210_device_iis0,
+ &s5pv210_device_ac97,
};
static void __init smdkv210_map_io(void)
--
1.6.2.5
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH 3/9] ARM: SMDKC110: Add audio devices on board
2010-05-18 5:10 [PATCH] SAMSUNG: Audio support Jassi Brar
2010-05-18 5:10 ` [PATCH 1/9] ARM: S5PV210: Add audio platform devices Jassi Brar
2010-05-18 5:10 ` [PATCH 2/9] ARM: SMDKV210: Add audio devices on board Jassi Brar
@ 2010-05-18 5:10 ` Jassi Brar
2010-05-18 5:10 ` [PATCH 4/9] ARM: S5PC100: Add audio platform devices Jassi Brar
` (6 subsequent siblings)
9 siblings, 0 replies; 16+ messages in thread
From: Jassi Brar @ 2010-05-18 5:10 UTC (permalink / raw)
To: linux-arm-kernel
Add audio platform devices on the smdk by default.
Signed-off-by: Jassi Brar <jassi.brar@samsung.com>
---
arch/arm/mach-s5pv210/mach-smdkc110.c | 2 ++
1 files changed, 2 insertions(+), 0 deletions(-)
diff --git a/arch/arm/mach-s5pv210/mach-smdkc110.c b/arch/arm/mach-s5pv210/mach-smdkc110.c
index ab4869d..6f9fd32 100644
--- a/arch/arm/mach-s5pv210/mach-smdkc110.c
+++ b/arch/arm/mach-s5pv210/mach-smdkc110.c
@@ -72,6 +72,8 @@ static struct s3c2410_uartcfg smdkv210_uartcfgs[] __initdata = {
};
static struct platform_device *smdkc110_devices[] __initdata = {
+ &s5pv210_device_iis0,
+ &s5pv210_device_ac97,
};
static void __init smdkc110_map_io(void)
--
1.6.2.5
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH 4/9] ARM: S5PC100: Add audio platform devices
2010-05-18 5:10 [PATCH] SAMSUNG: Audio support Jassi Brar
` (2 preceding siblings ...)
2010-05-18 5:10 ` [PATCH 3/9] ARM: SMDKC110: " Jassi Brar
@ 2010-05-18 5:10 ` Jassi Brar
2010-05-18 5:10 ` [PATCH 5/9] ARM: SMDKC100: Add audio devices on board Jassi Brar
` (5 subsequent siblings)
9 siblings, 0 replies; 16+ messages in thread
From: Jassi Brar @ 2010-05-18 5:10 UTC (permalink / raw)
To: linux-arm-kernel
Define platform devices for all audio devices found on S5PC100
Signed-off-by: Jassi Brar <jassi.brar@samsung.com>
---
arch/arm/mach-s5pc100/Makefile | 3 +
arch/arm/mach-s5pc100/dev-audio.c | 293 +++++++++++++++++++++++++++++
arch/arm/mach-s5pc100/include/mach/map.h | 7 +
arch/arm/plat-samsung/include/plat/devs.h | 7 +
4 files changed, 310 insertions(+), 0 deletions(-)
create mode 100644 arch/arm/mach-s5pc100/dev-audio.c
diff --git a/arch/arm/mach-s5pc100/Makefile b/arch/arm/mach-s5pc100/Makefile
index c32801e..a81abef 100644
--- a/arch/arm/mach-s5pc100/Makefile
+++ b/arch/arm/mach-s5pc100/Makefile
@@ -19,3 +19,6 @@ obj-$(CONFIG_S5PC100_SETUP_SDHCI) += setup-sdhci.o
# machine support
obj-$(CONFIG_MACH_SMDKC100) += mach-smdkc100.o
+
+# device support
+obj-y += dev-audio.o
diff --git a/arch/arm/mach-s5pc100/dev-audio.c b/arch/arm/mach-s5pc100/dev-audio.c
new file mode 100644
index 0000000..194b825
--- /dev/null
+++ b/arch/arm/mach-s5pc100/dev-audio.c
@@ -0,0 +1,287 @@
+/* linux/arch/arm/mach-s5pc100/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 <plat/gpio-cfg.h>
+#include <plat/audio.h>
+
+#include <mach/gpio.h>
+#include <mach/map.h>
+#include <mach/dma.h>
+#include <mach/irqs.h>
+
+static int s5pc100_cfg_i2s(struct platform_device *pdev)
+{
+ /* configure GPIO for i2s port */
+ switch (pdev->id) {
+ case 1:
+ s3c_gpio_cfgpin(S5PC100_GPC(0), S3C_GPIO_SFN(2));
+ s3c_gpio_cfgpin(S5PC100_GPC(1), S3C_GPIO_SFN(2));
+ s3c_gpio_cfgpin(S5PC100_GPC(2), S3C_GPIO_SFN(2));
+ s3c_gpio_cfgpin(S5PC100_GPC(3), S3C_GPIO_SFN(2));
+ s3c_gpio_cfgpin(S5PC100_GPC(4), S3C_GPIO_SFN(2));
+ break;
+
+ case 2:
+ s3c_gpio_cfgpin(S5PC100_GPG3(0), S3C_GPIO_SFN(4));
+ s3c_gpio_cfgpin(S5PC100_GPG3(1), S3C_GPIO_SFN(4));
+ s3c_gpio_cfgpin(S5PC100_GPG3(2), S3C_GPIO_SFN(4));
+ s3c_gpio_cfgpin(S5PC100_GPG3(3), S3C_GPIO_SFN(4));
+ s3c_gpio_cfgpin(S5PC100_GPG3(4), S3C_GPIO_SFN(4));
+ break;
+
+ case -1: /* Dedicated pins */
+ break;
+
+ default:
+ printk(KERN_ERR "Invalid Device %d\n", pdev->id);
+ return -EINVAL;
+ }
+
+ return 0;
+}
+
+static struct s3c_audio_pdata s3c_i2s_pdata = {
+ .cfg_gpio = s5pc100_cfg_i2s,
+};
+
+static struct resource s5pc100_iis0_resource[] = {
+ [0] = {
+ .start = S5PC100_PA_I2S0,
+ .end = S5PC100_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,
+ },
+};
+
+struct platform_device s5pc100_device_iis0 = {
+ .name = "s3c64xx-iis-v4",
+ .id = -1,
+ .num_resources = ARRAY_SIZE(s5pc100_iis0_resource),
+ .resource = s5pc100_iis0_resource,
+ .dev = {
+ .platform_data = &s3c_i2s_pdata,
+ },
+}; EXPORT_SYMBOL(s5pc100_device_iis0);
+
+static struct resource s5pc100_iis1_resource[] = {
+ [0] = {
+ .start = S5PC100_PA_I2S1,
+ .end = S5PC100_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 s5pc100_device_iis1 = {
+ .name = "s3c64xx-iis",
+ .id = 1,
+ .num_resources = ARRAY_SIZE(s5pc100_iis1_resource),
+ .resource = s5pc100_iis1_resource,
+ .dev = {
+ .platform_data = &s3c_i2s_pdata,
+ },
+}; EXPORT_SYMBOL(s5pc100_device_iis1);
+
+static struct resource s5pc100_iis2_resource[] = {
+ [0] = {
+ .start = S5PC100_PA_I2S2,
+ .end = S5PC100_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 s5pc100_device_iis2 = {
+ .name = "s3c64xx-iis",
+ .id = 2,
+ .num_resources = ARRAY_SIZE(s5pc100_iis2_resource),
+ .resource = s5pc100_iis2_resource,
+ .dev = {
+ .platform_data = &s3c_i2s_pdata,
+ },
+}; EXPORT_SYMBOL(s5pc100_device_iis2);
+
+/* PCM Controller platform_devices */
+
+static int s5pc100_pcm_cfg_gpio(struct platform_device *pdev)
+{
+ switch (pdev->id) {
+ case 0:
+ s3c_gpio_cfgpin(S5PC100_GPG3(0), S3C_GPIO_SFN(5));
+ s3c_gpio_cfgpin(S5PC100_GPG3(1), S3C_GPIO_SFN(5));
+ s3c_gpio_cfgpin(S5PC100_GPG3(2), S3C_GPIO_SFN(5));
+ s3c_gpio_cfgpin(S5PC100_GPG3(3), S3C_GPIO_SFN(5));
+ s3c_gpio_cfgpin(S5PC100_GPG3(4), S3C_GPIO_SFN(5));
+ break;
+
+ case 1:
+ s3c_gpio_cfgpin(S5PC100_GPC(0), S3C_GPIO_SFN(3));
+ s3c_gpio_cfgpin(S5PC100_GPC(1), S3C_GPIO_SFN(3));
+ s3c_gpio_cfgpin(S5PC100_GPC(2), S3C_GPIO_SFN(3));
+ s3c_gpio_cfgpin(S5PC100_GPC(3), S3C_GPIO_SFN(3));
+ s3c_gpio_cfgpin(S5PC100_GPC(4), 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 = s5pc100_pcm_cfg_gpio,
+};
+
+static struct resource s5pc100_pcm0_resource[] = {
+ [0] = {
+ .start = S5PC100_PA_PCM0,
+ .end = S5PC100_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 s5pc100_device_pcm0 = {
+ .name = "samsung-pcm",
+ .id = 0,
+ .num_resources = ARRAY_SIZE(s5pc100_pcm0_resource),
+ .resource = s5pc100_pcm0_resource,
+ .dev = {
+ .platform_data = &s3c_pcm_pdata,
+ },
+}; EXPORT_SYMBOL(s5pc100_device_pcm0);
+
+static struct resource s5pc100_pcm1_resource[] = {
+ [0] = {
+ .start = S5PC100_PA_PCM1,
+ .end = S5PC100_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 s5pc100_device_pcm1 = {
+ .name = "samsung-pcm",
+ .id = 1,
+ .num_resources = ARRAY_SIZE(s5pc100_pcm1_resource),
+ .resource = s5pc100_pcm1_resource,
+ .dev = {
+ .platform_data = &s3c_pcm_pdata,
+ },
+}; EXPORT_SYMBOL(s5pc100_device_pcm1);
+
+/* AC97 Controller platform devices */
+
+static int s5pc100_ac97_cfg_gpio(struct platform_device *pdev)
+{
+ s3c_gpio_cfgpin(S5PC100_GPC(0), S3C_GPIO_SFN(4));
+ s3c_gpio_cfgpin(S5PC100_GPC(1), S3C_GPIO_SFN(4));
+ s3c_gpio_cfgpin(S5PC100_GPC(2), S3C_GPIO_SFN(4));
+ s3c_gpio_cfgpin(S5PC100_GPC(3), S3C_GPIO_SFN(4));
+ s3c_gpio_cfgpin(S5PC100_GPC(4), S3C_GPIO_SFN(4));
+
+ return 0;
+}
+
+static struct resource s5pc100_ac97_resource[] = {
+ [0] = {
+ .start = S5PC100_PA_AC97,
+ .end = S5PC100_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 = s5pc100_ac97_cfg_gpio,
+};
+
+static u64 s5pc100_ac97_dmamask = DMA_BIT_MASK(32);
+
+struct platform_device s5pc100_device_ac97 = {
+ .name = "s3c-ac97",
+ .id = -1,
+ .num_resources = ARRAY_SIZE(s5pc100_ac97_resource),
+ .resource = s5pc100_ac97_resource,
+ .dev = {
+ .platform_data = &s3c_ac97_pdata,
+ .dma_mask = &s5pc100_ac97_dmamask,
+ .coherent_dma_mask = DMA_BIT_MASK(32),
+ },
+}; EXPORT_SYMBOL(s5pc100_device_ac97);
diff --git a/arch/arm/mach-s5pc100/include/mach/map.h b/arch/arm/mach-s5pc100/include/mach/map.h
index 4681ebe..de3891c 100644
--- a/arch/arm/mach-s5pc100/include/mach/map.h
+++ b/arch/arm/mach-s5pc100/include/mach/map.h
@@ -106,6 +106,13 @@
#define S5PC100_PA_I2S1 (0xF2100000)
#define S5PC100_PA_I2S2 (0xF2200000)
+/* AC97 */
+#define S5PC100_PA_AC97 0xF2300000
+
+/* PCM */
+#define S5PC100_PA_PCM0 0xF2400000
+#define S5PC100_PA_PCM1 0xF2500000
+
/* KEYPAD */
#define S5PC100_PA_KEYPAD (0xF3100000)
diff --git a/arch/arm/plat-samsung/include/plat/devs.h b/arch/arm/plat-samsung/include/plat/devs.h
index d8fda3a..10cfcbb 100644
--- a/arch/arm/plat-samsung/include/plat/devs.h
+++ b/arch/arm/plat-samsung/include/plat/devs.h
@@ -72,6 +72,13 @@ extern struct platform_device s5pv210_device_iis0;
extern struct platform_device s5pv210_device_iis1;
extern struct platform_device s5pv210_device_iis2;
+extern struct platform_device s5pc100_device_ac97;
+extern struct platform_device s5pc100_device_pcm0;
+extern struct platform_device s5pc100_device_pcm1;
+extern struct platform_device s5pc100_device_iis0;
+extern struct platform_device s5pc100_device_iis1;
+extern struct platform_device s5pc100_device_iis2;
+
/* s3c2440 specific devices */
#ifdef CONFIG_CPU_S3C2440
--
1.6.2.5
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH 5/9] ARM: SMDKC100: Add audio devices on board
2010-05-18 5:10 [PATCH] SAMSUNG: Audio support Jassi Brar
` (3 preceding siblings ...)
2010-05-18 5:10 ` [PATCH 4/9] ARM: S5PC100: Add audio platform devices Jassi Brar
@ 2010-05-18 5:10 ` Jassi Brar
2010-05-18 5:10 ` [PATCH 6/9] ARM: S5P6442: Add audio platform devices Jassi Brar
` (4 subsequent siblings)
9 siblings, 0 replies; 16+ messages in thread
From: Jassi Brar @ 2010-05-18 5:10 UTC (permalink / raw)
To: linux-arm-kernel
Add audio platform devices on the smdk by default.
Signed-off-by: Jassi Brar <jassi.brar@samsung.com>
---
arch/arm/mach-s5pc100/mach-smdkc100.c | 2 ++
1 files changed, 2 insertions(+), 0 deletions(-)
diff --git a/arch/arm/mach-s5pc100/mach-smdkc100.c b/arch/arm/mach-s5pc100/mach-smdkc100.c
index ae3c52c..abd46de 100644
--- a/arch/arm/mach-s5pc100/mach-smdkc100.c
+++ b/arch/arm/mach-s5pc100/mach-smdkc100.c
@@ -151,6 +151,8 @@ static struct platform_device *smdkc100_devices[] __initdata = {
&s3c_device_hsmmc1,
&s3c_device_hsmmc2,
&smdkc100_lcd_powerdev,
+ &s5pc100_device_iis0,
+ &s5pc100_device_ac97,
};
static void __init smdkc100_map_io(void)
--
1.6.2.5
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH 6/9] ARM: S5P6442: Add audio platform devices
2010-05-18 5:10 [PATCH] SAMSUNG: Audio support Jassi Brar
` (4 preceding siblings ...)
2010-05-18 5:10 ` [PATCH 5/9] ARM: SMDKC100: Add audio devices on board Jassi Brar
@ 2010-05-18 5:10 ` Jassi Brar
2010-05-18 5:10 ` [PATCH 7/9] ARM: SMDK6442: Add audio devices on board Jassi Brar
` (3 subsequent siblings)
9 siblings, 0 replies; 16+ messages in thread
From: Jassi Brar @ 2010-05-18 5:10 UTC (permalink / raw)
To: linux-arm-kernel
Define platform devices for all audio devices found on S5P6442
Signed-off-by: Jassi Brar <jassi.brar@samsung.com>
---
arch/arm/mach-s5p6442/Makefile | 3 +
arch/arm/mach-s5p6442/dev-audio.c | 201 +++++++++++++++++++++++++++++
arch/arm/mach-s5p6442/include/mach/map.h | 8 +
arch/arm/plat-samsung/include/plat/devs.h | 5 +
4 files changed, 217 insertions(+), 0 deletions(-)
create mode 100644 arch/arm/mach-s5p6442/dev-audio.c
diff --git a/arch/arm/mach-s5p6442/Makefile b/arch/arm/mach-s5p6442/Makefile
index 17bd22e..bf30550 100644
--- a/arch/arm/mach-s5p6442/Makefile
+++ b/arch/arm/mach-s5p6442/Makefile
@@ -17,3 +17,6 @@ obj-$(CONFIG_CPU_S5P6442) += cpu.o init.o clock.o dma.o
# machine support
obj-$(CONFIG_MACH_SMDK6442) += mach-smdk6442.o
+
+# device support
+obj-y += dev-audio.o
diff --git a/arch/arm/mach-s5p6442/dev-audio.c b/arch/arm/mach-s5p6442/dev-audio.c
new file mode 100644
index 0000000..17cdd82
--- /dev/null
+++ b/arch/arm/mach-s5p6442/dev-audio.c
@@ -0,0 +1,197 @@
+/* linux/arch/arm/mach-s5p6442/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 <plat/gpio-cfg.h>
+#include <plat/audio.h>
+
+#include <mach/gpio.h>
+#include <mach/map.h>
+#include <mach/dma.h>
+#include <mach/irqs.h>
+
+static int s5p6442_cfg_i2s(struct platform_device *pdev)
+{
+ /* configure GPIO for i2s port */
+ switch (pdev->id) {
+ case 1:
+ s3c_gpio_cfgpin(S5P6442_GPC1(0), S3C_GPIO_SFN(2));
+ s3c_gpio_cfgpin(S5P6442_GPC1(1), S3C_GPIO_SFN(2));
+ s3c_gpio_cfgpin(S5P6442_GPC1(2), S3C_GPIO_SFN(2));
+ s3c_gpio_cfgpin(S5P6442_GPC1(3), S3C_GPIO_SFN(2));
+ s3c_gpio_cfgpin(S5P6442_GPC1(4), S3C_GPIO_SFN(2));
+ break;
+
+ case -1:
+ s3c_gpio_cfgpin(S5P6442_GPC0(0), S3C_GPIO_SFN(2));
+ s3c_gpio_cfgpin(S5P6442_GPC0(1), S3C_GPIO_SFN(2));
+ s3c_gpio_cfgpin(S5P6442_GPC0(2), S3C_GPIO_SFN(2));
+ s3c_gpio_cfgpin(S5P6442_GPC0(3), S3C_GPIO_SFN(2));
+ s3c_gpio_cfgpin(S5P6442_GPC0(4), S3C_GPIO_SFN(2));
+ break;
+
+ default:
+ printk(KERN_ERR "Invalid Device %d\n", pdev->id);
+ return -EINVAL;
+ }
+
+ return 0;
+}
+
+static struct s3c_audio_pdata s3c_i2s_pdata = {
+ .cfg_gpio = s5p6442_cfg_i2s,
+};
+
+static struct resource s5p6442_iis0_resource[] = {
+ [0] = {
+ .start = S5P6442_PA_I2S0,
+ .end = S5P6442_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,
+ },
+};
+
+struct platform_device s5p6442_device_iis0 = {
+ .name = "s3c64xx-iis-v4",
+ .id = -1,
+ .num_resources = ARRAY_SIZE(s5p6442_iis0_resource),
+ .resource = s5p6442_iis0_resource,
+ .dev = {
+ .platform_data = &s3c_i2s_pdata,
+ },
+}; EXPORT_SYMBOL(s5p6442_device_iis0);
+
+static struct resource s5p6442_iis1_resource[] = {
+ [0] = {
+ .start = S5P6442_PA_I2S1,
+ .end = S5P6442_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 s5p6442_device_iis1 = {
+ .name = "s3c64xx-iis",
+ .id = 1,
+ .num_resources = ARRAY_SIZE(s5p6442_iis1_resource),
+ .resource = s5p6442_iis1_resource,
+ .dev = {
+ .platform_data = &s3c_i2s_pdata,
+ },
+}; EXPORT_SYMBOL(s5p6442_device_iis1);
+
+/* PCM Controller platform_devices */
+
+static int s5p6442_pcm_cfg_gpio(struct platform_device *pdev)
+{
+ switch (pdev->id) {
+ case 0:
+ s3c_gpio_cfgpin(S5P6442_GPC0(0), S3C_GPIO_SFN(3));
+ s3c_gpio_cfgpin(S5P6442_GPC0(1), S3C_GPIO_SFN(3));
+ s3c_gpio_cfgpin(S5P6442_GPC0(2), S3C_GPIO_SFN(3));
+ s3c_gpio_cfgpin(S5P6442_GPC0(3), S3C_GPIO_SFN(3));
+ s3c_gpio_cfgpin(S5P6442_GPC0(4), S3C_GPIO_SFN(3));
+ break;
+
+ case 1:
+ s3c_gpio_cfgpin(S5P6442_GPC1(0), S3C_GPIO_SFN(3));
+ s3c_gpio_cfgpin(S5P6442_GPC1(1), S3C_GPIO_SFN(3));
+ s3c_gpio_cfgpin(S5P6442_GPC1(2), S3C_GPIO_SFN(3));
+ s3c_gpio_cfgpin(S5P6442_GPC1(3), S3C_GPIO_SFN(3));
+ s3c_gpio_cfgpin(S5P6442_GPC1(4), 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 = s5p6442_pcm_cfg_gpio,
+};
+
+static struct resource s5p6442_pcm0_resource[] = {
+ [0] = {
+ .start = S5P6442_PA_PCM0,
+ .end = S5P6442_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 s5p6442_device_pcm0 = {
+ .name = "samsung-pcm",
+ .id = 0,
+ .num_resources = ARRAY_SIZE(s5p6442_pcm0_resource),
+ .resource = s5p6442_pcm0_resource,
+ .dev = {
+ .platform_data = &s3c_pcm_pdata,
+ },
+}; EXPORT_SYMBOL(s5p6442_device_pcm0);
+
+static struct resource s5p6442_pcm1_resource[] = {
+ [0] = {
+ .start = S5P6442_PA_PCM1,
+ .end = S5P6442_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 s5p6442_device_pcm1 = {
+ .name = "samsung-pcm",
+ .id = 1,
+ .num_resources = ARRAY_SIZE(s5p6442_pcm1_resource),
+ .resource = s5p6442_pcm1_resource,
+ .dev = {
+ .platform_data = &s3c_pcm_pdata,
+ },
+}; EXPORT_SYMBOL(s5p6442_device_pcm1);
diff --git a/arch/arm/mach-s5p6442/include/mach/map.h b/arch/arm/mach-s5p6442/include/mach/map.h
index a263d77..7568dc0 100644
--- a/arch/arm/mach-s5p6442/include/mach/map.h
+++ b/arch/arm/mach-s5p6442/include/mach/map.h
@@ -54,6 +54,14 @@
#define S5P6442_PA_SDRAM (0x20000000)
#define S5P_PA_SDRAM S5P6442_PA_SDRAM
+/* I2S */
+#define S5P6442_PA_I2S0 0xC0B00000
+#define S5P6442_PA_I2S1 0xF2200000
+
+/* PCM */
+#define S5P6442_PA_PCM0 0xF2400000
+#define S5P6442_PA_PCM1 0xF2500000
+
/* compatibiltiy defines. */
#define S3C_PA_UART S5P6442_PA_UART
#define S3C_PA_IIC S5P6442_PA_IIC0
diff --git a/arch/arm/plat-samsung/include/plat/devs.h b/arch/arm/plat-samsung/include/plat/devs.h
index 10cfcbb..17c8ff8 100644
--- a/arch/arm/plat-samsung/include/plat/devs.h
+++ b/arch/arm/plat-samsung/include/plat/devs.h
@@ -79,6 +79,11 @@ extern struct platform_device s5pc100_device_iis0;
extern struct platform_device s5pc100_device_iis1;
extern struct platform_device s5pc100_device_iis2;
+extern struct platform_device s5p6442_device_pcm0;
+extern struct platform_device s5p6442_device_pcm1;
+extern struct platform_device s5p6442_device_iis0;
+extern struct platform_device s5p6442_device_iis1;
+
/* s3c2440 specific devices */
#ifdef CONFIG_CPU_S3C2440
--
1.6.2.5
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH 7/9] ARM: SMDK6442: Add audio devices on board
2010-05-18 5:10 [PATCH] SAMSUNG: Audio support Jassi Brar
` (5 preceding siblings ...)
2010-05-18 5:10 ` [PATCH 6/9] ARM: S5P6442: Add audio platform devices Jassi Brar
@ 2010-05-18 5:10 ` Jassi Brar
2010-05-18 5:10 ` [PATCH 8/9] ARM: S5P6440: Add audio platform devices Jassi Brar
` (2 subsequent siblings)
9 siblings, 0 replies; 16+ messages in thread
From: Jassi Brar @ 2010-05-18 5:10 UTC (permalink / raw)
To: linux-arm-kernel
Add audio platform devices on the smdk by default.
Signed-off-by: Jassi Brar <jassi.brar@samsung.com>
---
arch/arm/mach-s5p6442/mach-smdk6442.c | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
diff --git a/arch/arm/mach-s5p6442/mach-smdk6442.c b/arch/arm/mach-s5p6442/mach-smdk6442.c
index 0d63371..ebcf997 100644
--- a/arch/arm/mach-s5p6442/mach-smdk6442.c
+++ b/arch/arm/mach-s5p6442/mach-smdk6442.c
@@ -65,6 +65,7 @@ static struct s3c2410_uartcfg smdk6442_uartcfgs[] __initdata = {
};
static struct platform_device *smdk6442_devices[] __initdata = {
+ &s5p6442_device_iis0,
};
static void __init smdk6442_map_io(void)
--
1.6.2.5
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH 8/9] ARM: S5P6440: Add audio platform devices
2010-05-18 5:10 [PATCH] SAMSUNG: Audio support Jassi Brar
` (6 preceding siblings ...)
2010-05-18 5:10 ` [PATCH 7/9] ARM: SMDK6442: Add audio devices on board Jassi Brar
@ 2010-05-18 5:10 ` Jassi Brar
2010-05-18 5:10 ` [PATCH 9/9] ARM: SMDK6440: Add audio devices on board Jassi Brar
2010-05-18 18:47 ` [PATCH] SAMSUNG: Audio support Mark Brown
9 siblings, 0 replies; 16+ messages in thread
From: Jassi Brar @ 2010-05-18 5:10 UTC (permalink / raw)
To: linux-arm-kernel
Define platform devices for all audio devices found on S5P6440
Signed-off-by: Jassi Brar <jassi.brar@samsung.com>
---
arch/arm/mach-s5p6440/Makefile | 3 +
arch/arm/mach-s5p6440/dev-audio.c | 129 +++++++++++++++++++++++++++++
arch/arm/mach-s5p6440/include/mach/map.h | 6 ++
arch/arm/plat-samsung/include/plat/devs.h | 3 +
4 files changed, 141 insertions(+), 0 deletions(-)
create mode 100644 arch/arm/mach-s5p6440/dev-audio.c
diff --git a/arch/arm/mach-s5p6440/Makefile b/arch/arm/mach-s5p6440/Makefile
index 3f243dd..5fd17d3 100644
--- a/arch/arm/mach-s5p6440/Makefile
+++ b/arch/arm/mach-s5p6440/Makefile
@@ -17,3 +17,6 @@ obj-$(CONFIG_CPU_S5P6440) += cpu.o init.o clock.o gpio.o dma.o
# machine support
obj-$(CONFIG_MACH_SMDK6440) += mach-smdk6440.o
+
+# device support
+obj-y += dev-audio.o
diff --git a/arch/arm/mach-s5p6440/dev-audio.c b/arch/arm/mach-s5p6440/dev-audio.c
new file mode 100644
index 0000000..f1563ea
--- /dev/null
+++ b/arch/arm/mach-s5p6440/dev-audio.c
@@ -0,0 +1,127 @@
+/* linux/arch/arm/mach-s5p6440/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 <plat/gpio-cfg.h>
+#include <plat/audio.h>
+
+#include <mach/gpio.h>
+#include <mach/map.h>
+#include <mach/dma.h>
+#include <mach/irqs.h>
+
+static int s5p6440_cfg_i2s(struct platform_device *pdev)
+{
+ /* configure GPIO for i2s port */
+ switch (pdev->id) {
+ case -1:
+ s3c_gpio_cfgpin(S5P6440_GPR(4), S3C_GPIO_SFN(5));
+ s3c_gpio_cfgpin(S5P6440_GPR(5), S3C_GPIO_SFN(5));
+ s3c_gpio_cfgpin(S5P6440_GPR(6), S3C_GPIO_SFN(5));
+ s3c_gpio_cfgpin(S5P6440_GPR(7), S3C_GPIO_SFN(5));
+ s3c_gpio_cfgpin(S5P6440_GPR(8), S3C_GPIO_SFN(5));
+ s3c_gpio_cfgpin(S5P6440_GPR(13), S3C_GPIO_SFN(5));
+ s3c_gpio_cfgpin(S5P6440_GPR(14), S3C_GPIO_SFN(5));
+ break;
+
+ default:
+ printk(KERN_ERR "Invalid Device %d\n", pdev->id);
+ return -EINVAL;
+ }
+
+ return 0;
+}
+
+static struct s3c_audio_pdata s3c_i2s_pdata = {
+ .cfg_gpio = s5p6440_cfg_i2s,
+};
+
+static struct resource s5p6440_iis0_resource[] = {
+ [0] = {
+ .start = S5P6440_PA_I2S,
+ .end = S5P6440_PA_I2S + 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,
+ },
+};
+
+struct platform_device s5p6440_device_iis = {
+ .name = "s3c64xx-iis-v4",
+ .id = -1,
+ .num_resources = ARRAY_SIZE(s5p6440_iis0_resource),
+ .resource = s5p6440_iis0_resource,
+ .dev = {
+ .platform_data = &s3c_i2s_pdata,
+ },
+}; EXPORT_SYMBOL(s5p6440_device_iis);
+
+/* PCM Controller platform_devices */
+
+static int s5p6440_pcm_cfg_gpio(struct platform_device *pdev)
+{
+ switch (pdev->id) {
+ case 0:
+ s3c_gpio_cfgpin(S5P6440_GPR(7), S3C_GPIO_SFN(2));
+ s3c_gpio_cfgpin(S5P6440_GPR(13), S3C_GPIO_SFN(2));
+ s3c_gpio_cfgpin(S5P6440_GPR(14), S3C_GPIO_SFN(2));
+ s3c_gpio_cfgpin(S5P6440_GPR(8), S3C_GPIO_SFN(2));
+ s3c_gpio_cfgpin(S5P6440_GPR(6), S3C_GPIO_SFN(2));
+ break;
+
+ default:
+ printk(KERN_DEBUG "Invalid PCM Controller number!");
+ return -EINVAL;
+ }
+
+ return 0;
+}
+
+static struct s3c_audio_pdata s3c_pcm_pdata = {
+ .cfg_gpio = s5p6440_pcm_cfg_gpio,
+};
+
+static struct resource s5p6440_pcm0_resource[] = {
+ [0] = {
+ .start = S5P6440_PA_PCM,
+ .end = S5P6440_PA_PCM + 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 s5p6440_device_pcm = {
+ .name = "samsung-pcm",
+ .id = 0,
+ .num_resources = ARRAY_SIZE(s5p6440_pcm0_resource),
+ .resource = s5p6440_pcm0_resource,
+ .dev = {
+ .platform_data = &s3c_pcm_pdata,
+ },
+}; EXPORT_SYMBOL(s5p6440_device_pcm);
diff --git a/arch/arm/mach-s5p6440/include/mach/map.h b/arch/arm/mach-s5p6440/include/mach/map.h
index 0275784..72aedad 100644
--- a/arch/arm/mach-s5p6440/include/mach/map.h
+++ b/arch/arm/mach-s5p6440/include/mach/map.h
@@ -63,6 +63,12 @@
#define S5P6440_PA_SDRAM (0x20000000)
#define S5P_PA_SDRAM S5P6440_PA_SDRAM
+/* I2S */
+#define S5P6440_PA_I2S 0xF2000000
+
+/* PCM */
+#define S5P6440_PA_PCM 0xF2100000
+
/* compatibiltiy defines. */
#define S3C_PA_UART S5P6440_PA_UART
#define S3C_PA_IIC S5P6440_PA_IIC0
diff --git a/arch/arm/plat-samsung/include/plat/devs.h b/arch/arm/plat-samsung/include/plat/devs.h
index 17c8ff8..4380ca6 100644
--- a/arch/arm/plat-samsung/include/plat/devs.h
+++ b/arch/arm/plat-samsung/include/plat/devs.h
@@ -84,6 +84,9 @@ extern struct platform_device s5p6442_device_pcm1;
extern struct platform_device s5p6442_device_iis0;
extern struct platform_device s5p6442_device_iis1;
+extern struct platform_device s5p6440_device_pcm;
+extern struct platform_device s5p6440_device_iis;
+
/* s3c2440 specific devices */
#ifdef CONFIG_CPU_S3C2440
--
1.6.2.5
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH 9/9] ARM: SMDK6440: Add audio devices on board
2010-05-18 5:10 [PATCH] SAMSUNG: Audio support Jassi Brar
` (7 preceding siblings ...)
2010-05-18 5:10 ` [PATCH 8/9] ARM: S5P6440: Add audio platform devices Jassi Brar
@ 2010-05-18 5:10 ` Jassi Brar
2010-05-18 18:47 ` [PATCH] SAMSUNG: Audio support Mark Brown
9 siblings, 0 replies; 16+ messages in thread
From: Jassi Brar @ 2010-05-18 5:10 UTC (permalink / raw)
To: linux-arm-kernel
Add audio platform devices on the smdk by default.
Signed-off-by: Jassi Brar <jassi.brar@samsung.com>
---
arch/arm/mach-s5p6440/mach-smdk6440.c | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
diff --git a/arch/arm/mach-s5p6440/mach-smdk6440.c b/arch/arm/mach-s5p6440/mach-smdk6440.c
index 3ae88f2..d7fede9 100644
--- a/arch/arm/mach-s5p6440/mach-smdk6440.c
+++ b/arch/arm/mach-s5p6440/mach-smdk6440.c
@@ -84,6 +84,7 @@ static struct s3c2410_uartcfg smdk6440_uartcfgs[] __initdata = {
};
static struct platform_device *smdk6440_devices[] __initdata = {
+ &s5p6440_device_iis,
};
static void __init smdk6440_map_io(void)
--
1.6.2.5
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH 1/9] ARM: S5PV210: Add audio platform devices
2010-05-18 5:10 ` [PATCH 1/9] ARM: S5PV210: Add audio platform devices Jassi Brar
@ 2010-05-18 5:24 ` Ben Dooks
2010-05-18 5:34 ` Jassi Brar
0 siblings, 1 reply; 16+ messages in thread
From: Ben Dooks @ 2010-05-18 5:24 UTC (permalink / raw)
To: linux-arm-kernel
On Tue, May 18, 2010 at 02:10:14PM +0900, Jassi Brar wrote:
> Define platform devices for all audio devices found on S5PV210
>
> Signed-off-by: Jassi Brar <jassi.brar@samsung.com>
> ---
> arch/arm/mach-s5pv210/Makefile | 4 +
> arch/arm/mach-s5pv210/dev-audio.c | 334 +++++++++++++++++++++++++++++
> arch/arm/mach-s5pv210/include/mach/map.h | 13 ++
> arch/arm/plat-samsung/include/plat/devs.h | 8 +
> 4 files changed, 359 insertions(+), 0 deletions(-)
> create mode 100644 arch/arm/mach-s5pv210/dev-audio.c
>
> diff --git a/arch/arm/mach-s5pv210/Makefile b/arch/arm/mach-s5pv210/Makefile
> index f7f1cdc..6ecfa9d 100644
> --- a/arch/arm/mach-s5pv210/Makefile
> +++ b/arch/arm/mach-s5pv210/Makefile
> @@ -18,3 +18,7 @@ obj-$(CONFIG_CPU_S5PV210) += cpu.o init.o clock.o dma.o
>
> obj-$(CONFIG_MACH_SMDKV210) += mach-smdkv210.o
> obj-$(CONFIG_MACH_SMDKC110) += mach-smdkc110.o
> +
> +# device support
> +
> +obj-y += dev-audio.o
> diff --git a/arch/arm/mach-s5pv210/dev-audio.c b/arch/arm/mach-s5pv210/dev-audio.c
> new file mode 100644
> index 0000000..bdaa926
> --- /dev/null
> +++ b/arch/arm/mach-s5pv210/dev-audio.c
> @@ -0,0 +1,327 @@
> +/* linux/arch/arm/mach-s5pv210/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 <plat/gpio-cfg.h>
> +#include <plat/audio.h>
> +
> +#include <mach/gpio.h>
> +#include <mach/map.h>
> +#include <mach/dma.h>
> +#include <mach/irqs.h>
> +
> +static int s5pv210_cfg_i2s(struct platform_device *pdev)
> +{
> + /* configure GPIO for i2s port */
> + switch (pdev->id) {
> + case 1:
> + s3c_gpio_cfgpin(S5PV210_GPC0(0), S3C_GPIO_SFN(2));
> + s3c_gpio_cfgpin(S5PV210_GPC0(1), S3C_GPIO_SFN(2));
> + s3c_gpio_cfgpin(S5PV210_GPC0(2), S3C_GPIO_SFN(2));
> + s3c_gpio_cfgpin(S5PV210_GPC0(3), S3C_GPIO_SFN(2));
> + s3c_gpio_cfgpin(S5PV210_GPC0(4), S3C_GPIO_SFN(2));
> + break;
> +
> + case 2:
> + s3c_gpio_cfgpin(S5PV210_GPC1(0), S3C_GPIO_SFN(4));
> + s3c_gpio_cfgpin(S5PV210_GPC1(1), S3C_GPIO_SFN(4));
> + s3c_gpio_cfgpin(S5PV210_GPC1(2), S3C_GPIO_SFN(4));
> + s3c_gpio_cfgpin(S5PV210_GPC1(3), S3C_GPIO_SFN(4));
> + s3c_gpio_cfgpin(S5PV210_GPC1(4), S3C_GPIO_SFN(4));
> + break;
> +
> + case -1:
> + s3c_gpio_cfgpin(S5PV210_GPI(0), S3C_GPIO_SFN(2));
> + s3c_gpio_cfgpin(S5PV210_GPI(1), S3C_GPIO_SFN(2));
> + s3c_gpio_cfgpin(S5PV210_GPI(2), S3C_GPIO_SFN(2));
> + s3c_gpio_cfgpin(S5PV210_GPI(3), S3C_GPIO_SFN(2));
> + s3c_gpio_cfgpin(S5PV210_GPI(4), S3C_GPIO_SFN(2));
> + s3c_gpio_cfgpin(S5PV210_GPI(5), S3C_GPIO_SFN(2));
> + s3c_gpio_cfgpin(S5PV210_GPI(6), S3C_GPIO_SFN(2));
> + break;
> +
> + default:
> + printk(KERN_ERR "Invalid Device %d\n", pdev->id);
> + return -EINVAL;
> + }
> +
> + return 0;
> +}
> +
> +static struct s3c_audio_pdata s3c_i2s_pdata = {
> + .cfg_gpio = s5pv210_cfg_i2s,
> +};
> +
> +static struct resource s5pv210_iis0_resource[] = {
> + [0] = {
> + .start = S5PV210_PA_IIS0,
> + .end = S5PV210_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,
> + },
> +};
> +
> +struct platform_device s5pv210_device_iis0 = {
> + .name = "s3c64xx-iis-v4",
> + .id = -1,
> + .num_resources = ARRAY_SIZE(s5pv210_iis0_resource),
> + .resource = s5pv210_iis0_resource,
> + .dev = {
> + .platform_data = &s3c_i2s_pdata,
> + },
> +}; EXPORT_SYMBOL(s5pv210_device_iis0);
do we really need to be exporting these devices like this,
how much is needed otuside of machine support?
> +static struct resource s5pv210_iis1_resource[] = {
> + [0] = {
> + .start = S5PV210_PA_IIS1,
> + .end = S5PV210_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 s5pv210_device_iis1 = {
> + .name = "s3c64xx-iis",
> + .id = 1,
> + .num_resources = ARRAY_SIZE(s5pv210_iis1_resource),
> + .resource = s5pv210_iis1_resource,
> + .dev = {
> + .platform_data = &s3c_i2s_pdata,
> + },
> +}; EXPORT_SYMBOL(s5pv210_device_iis1);
> +
> +static struct resource s5pv210_iis2_resource[] = {
> + [0] = {
> + .start = S5PV210_PA_IIS2,
> + .end = S5PV210_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 s5pv210_device_iis2 = {
> + .name = "s3c64xx-iis",
> + .id = 2,
> + .num_resources = ARRAY_SIZE(s5pv210_iis2_resource),
> + .resource = s5pv210_iis2_resource,
> + .dev = {
> + .platform_data = &s3c_i2s_pdata,
> + },
> +}; EXPORT_SYMBOL(s5pv210_device_iis2);
> +
> +/* PCM Controller platform_devices */
> +
> +static int s5pv210_pcm_cfg_gpio(struct platform_device *pdev)
> +{
> + switch (pdev->id) {
> + case 0:
> + s3c_gpio_cfgpin(S5PV210_GPI(0), S3C_GPIO_SFN(3));
> + s3c_gpio_cfgpin(S5PV210_GPI(1), S3C_GPIO_SFN(3));
> + s3c_gpio_cfgpin(S5PV210_GPI(2), S3C_GPIO_SFN(3));
> + s3c_gpio_cfgpin(S5PV210_GPI(3), S3C_GPIO_SFN(3));
> + s3c_gpio_cfgpin(S5PV210_GPI(4), S3C_GPIO_SFN(3));
> + break;
> + case 1:
> + s3c_gpio_cfgpin(S5PV210_GPC0(0), S3C_GPIO_SFN(3));
> + s3c_gpio_cfgpin(S5PV210_GPC0(1), S3C_GPIO_SFN(3));
> + s3c_gpio_cfgpin(S5PV210_GPC0(2), S3C_GPIO_SFN(3));
> + s3c_gpio_cfgpin(S5PV210_GPC0(3), S3C_GPIO_SFN(3));
> + s3c_gpio_cfgpin(S5PV210_GPC0(4), S3C_GPIO_SFN(3));
> + break;
> + case 2:
> + s3c_gpio_cfgpin(S5PV210_GPC1(0), S3C_GPIO_SFN(2));
> + s3c_gpio_cfgpin(S5PV210_GPC1(1), S3C_GPIO_SFN(2));
> + s3c_gpio_cfgpin(S5PV210_GPC1(2), S3C_GPIO_SFN(2));
> + s3c_gpio_cfgpin(S5PV210_GPC1(3), S3C_GPIO_SFN(2));
> + s3c_gpio_cfgpin(S5PV210_GPC1(4), S3C_GPIO_SFN(2));
> + break;
> + default:
> + printk(KERN_DEBUG "Invalid PCM Controller number!");
> + return -EINVAL;
> + }
> +
> + return 0;
> +}
> +
> +static struct s3c_audio_pdata s3c_pcm_pdata = {
> + .cfg_gpio = s5pv210_pcm_cfg_gpio,
> +};
> +
> +static struct resource s5pv210_pcm0_resource[] = {
> + [0] = {
> + .start = S5PV210_PA_PCM0,
> + .end = S5PV210_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 s5pv210_device_pcm0 = {
> + .name = "samsung-pcm",
> + .id = 0,
> + .num_resources = ARRAY_SIZE(s5pv210_pcm0_resource),
> + .resource = s5pv210_pcm0_resource,
> + .dev = {
> + .platform_data = &s3c_pcm_pdata,
> + },
> +}; EXPORT_SYMBOL(s5pv210_device_pcm0);
> +
> +static struct resource s5pv210_pcm1_resource[] = {
> + [0] = {
> + .start = S5PV210_PA_PCM1,
> + .end = S5PV210_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 s5pv210_device_pcm1 = {
> + .name = "samsung-pcm",
> + .id = 1,
> + .num_resources = ARRAY_SIZE(s5pv210_pcm1_resource),
> + .resource = s5pv210_pcm1_resource,
> + .dev = {
> + .platform_data = &s3c_pcm_pdata,
> + },
> +}; EXPORT_SYMBOL(s5pv210_device_pcm1);
> +
> +static struct resource s5pv210_pcm2_resource[] = {
> + [0] = {
> + .start = S5PV210_PA_PCM2,
> + .end = S5PV210_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 s5pv210_device_pcm2 = {
> + .name = "samsung-pcm",
> + .id = 2,
> + .num_resources = ARRAY_SIZE(s5pv210_pcm2_resource),
> + .resource = s5pv210_pcm2_resource,
> + .dev = {
> + .platform_data = &s3c_pcm_pdata,
> + },
> +}; EXPORT_SYMBOL(s5pv210_device_pcm2);
> +
> +/* AC97 Controller platform devices */
> +
> +static int s5pv210_ac97_cfg_gpio(struct platform_device *pdev)
> +{
> + s3c_gpio_cfgpin(S5PV210_GPC0(0), S3C_GPIO_SFN(4));
> + s3c_gpio_cfgpin(S5PV210_GPC0(1), S3C_GPIO_SFN(4));
> + s3c_gpio_cfgpin(S5PV210_GPC0(2), S3C_GPIO_SFN(4));
> + s3c_gpio_cfgpin(S5PV210_GPC0(3), S3C_GPIO_SFN(4));
> + s3c_gpio_cfgpin(S5PV210_GPC0(4), S3C_GPIO_SFN(4));
> +
> + return 0;
> +}
> +
> +static struct resource s5pv210_ac97_resource[] = {
> + [0] = {
> + .start = S5PV210_PA_AC97,
> + .end = S5PV210_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 = s5pv210_ac97_cfg_gpio,
> +};
> +
> +static u64 s5pv210_ac97_dmamask = DMA_BIT_MASK(32);
> +
> +struct platform_device s5pv210_device_ac97 = {
> + .name = "s3c-ac97",
> + .id = -1,
> + .num_resources = ARRAY_SIZE(s5pv210_ac97_resource),
> + .resource = s5pv210_ac97_resource,
> + .dev = {
> + .platform_data = &s3c_ac97_pdata,
> + .dma_mask = &s5pv210_ac97_dmamask,
> + .coherent_dma_mask = DMA_BIT_MASK(32),
> + },
> +}; EXPORT_SYMBOL(s5pv210_device_ac97);
> diff --git a/arch/arm/mach-s5pv210/include/mach/map.h b/arch/arm/mach-s5pv210/include/mach/map.h
> index c038585..5adcb9f 100644
> --- a/arch/arm/mach-s5pv210/include/mach/map.h
> +++ b/arch/arm/mach-s5pv210/include/mach/map.h
> @@ -62,6 +62,19 @@
> #define S5PV210_PA_SDRAM (0x20000000)
> #define S5P_PA_SDRAM S5PV210_PA_SDRAM
>
> +/* I2S */
> +#define S5PV210_PA_IIS0 0xEEE30000
> +#define S5PV210_PA_IIS1 0xE2100000
> +#define S5PV210_PA_IIS2 0xE2A00000
> +
> +/* PCM */
> +#define S5PV210_PA_PCM0 0xE2300000
> +#define S5PV210_PA_PCM1 0xE1200000
> +#define S5PV210_PA_PCM2 0xE2B00000
> +
> +/* AC97 */
> +#define S5PV210_PA_AC97 0xE2200000
> +
> /* compatibiltiy defines. */
> #define S3C_PA_UART S5PV210_PA_UART
> #define S3C_PA_IIC S5PV210_PA_IIC0
> diff --git a/arch/arm/plat-samsung/include/plat/devs.h b/arch/arm/plat-samsung/include/plat/devs.h
> index 796d242..d8fda3a 100644
> --- a/arch/arm/plat-samsung/include/plat/devs.h
> +++ b/arch/arm/plat-samsung/include/plat/devs.h
> @@ -64,6 +64,14 @@ extern struct platform_device s3c_device_nand;
> extern struct platform_device s3c_device_usbgadget;
> extern struct platform_device s3c_device_usb_hsotg;
>
> +extern struct platform_device s5pv210_device_ac97;
> +extern struct platform_device s5pv210_device_pcm0;
> +extern struct platform_device s5pv210_device_pcm1;
> +extern struct platform_device s5pv210_device_pcm2;
> +extern struct platform_device s5pv210_device_iis0;
> +extern struct platform_device s5pv210_device_iis1;
> +extern struct platform_device s5pv210_device_iis2;
> +
> /* s3c2440 specific devices */
>
> #ifdef CONFIG_CPU_S3C2440
> --
> 1.6.2.5
>
--
--
Ben
Q: What's a light-year?
A: One-third less calories than a regular year.
^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH 1/9] ARM: S5PV210: Add audio platform devices
2010-05-18 5:24 ` Ben Dooks
@ 2010-05-18 5:34 ` Jassi Brar
2010-05-18 5:39 ` Ben Dooks
0 siblings, 1 reply; 16+ messages in thread
From: Jassi Brar @ 2010-05-18 5:34 UTC (permalink / raw)
To: linux-arm-kernel
On Tue, May 18, 2010 at 2:24 PM, Ben Dooks <ben-linux@fluff.org> wrote:
> On Tue, May 18, 2010 at 02:10:14PM +0900, Jassi Brar wrote:
.....
>> +struct platform_device s5pv210_device_iis0 = {
>> + ? ? .name ? ? ? ? ? ? = "s3c64xx-iis-v4",
>> + ? ? .id ? ? ? ? ? ? ? = -1,
>> + ? ? .num_resources ? ?= ARRAY_SIZE(s5pv210_iis0_resource),
>> + ? ? .resource ? ? ? ? = s5pv210_iis0_resource,
>> + ? ? .dev = {
>> + ? ? ? ? ? ? .platform_data = &s3c_i2s_pdata,
>> + ? ? },
>> +}; EXPORT_SYMBOL(s5pv210_device_iis0);
>
> do we really need to be exporting these devices like this,
> how much is needed otuside of machine support?
Not used except by machine code. Every platform device of
Samsung has been declared that way and I just don't wanna
stick my neck out where I can do without :)
^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH 1/9] ARM: S5PV210: Add audio platform devices
2010-05-18 5:34 ` Jassi Brar
@ 2010-05-18 5:39 ` Ben Dooks
2010-05-18 7:01 ` Jassi Brar
0 siblings, 1 reply; 16+ messages in thread
From: Ben Dooks @ 2010-05-18 5:39 UTC (permalink / raw)
To: linux-arm-kernel
On Tue, May 18, 2010 at 02:34:21PM +0900, Jassi Brar wrote:
> On Tue, May 18, 2010 at 2:24 PM, Ben Dooks <ben-linux@fluff.org> wrote:
> > On Tue, May 18, 2010 at 02:10:14PM +0900, Jassi Brar wrote:
>
> .....
>
> >> +struct platform_device s5pv210_device_iis0 = {
> >> + ? ? .name ? ? ? ? ? ? = "s3c64xx-iis-v4",
> >> + ? ? .id ? ? ? ? ? ? ? = -1,
> >> + ? ? .num_resources ? ?= ARRAY_SIZE(s5pv210_iis0_resource),
> >> + ? ? .resource ? ? ? ? = s5pv210_iis0_resource,
> >> + ? ? .dev = {
> >> + ? ? ? ? ? ? .platform_data = &s3c_i2s_pdata,
> >> + ? ? },
> >> +}; EXPORT_SYMBOL(s5pv210_device_iis0);
> >
> > do we really need to be exporting these devices like this,
> > how much is needed otuside of machine support?
> Not used except by machine code. Every platform device of
> Samsung has been declared that way and I just don't wanna
> stick my neck out where I can do without :)
not all of them have, and i'll probably go around finding
and culling any more as soon as possible.
--
Ben
Q: What's a light-year?
A: One-third less calories than a regular year.
^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH 1/9] ARM: S5PV210: Add audio platform devices
2010-05-18 5:39 ` Ben Dooks
@ 2010-05-18 7:01 ` Jassi Brar
0 siblings, 0 replies; 16+ messages in thread
From: Jassi Brar @ 2010-05-18 7:01 UTC (permalink / raw)
To: linux-arm-kernel
On Tue, May 18, 2010 at 2:39 PM, Ben Dooks <ben-linux@fluff.org> wrote:
> On Tue, May 18, 2010 at 02:34:21PM +0900, Jassi Brar wrote:
>> On Tue, May 18, 2010 at 2:24 PM, Ben Dooks <ben-linux@fluff.org> wrote:
>> > On Tue, May 18, 2010 at 02:10:14PM +0900, Jassi Brar wrote:
>>
>> .....
>>
>> >> +struct platform_device s5pv210_device_iis0 = {
>> >> + ? ? .name ? ? ? ? ? ? = "s3c64xx-iis-v4",
>> >> + ? ? .id ? ? ? ? ? ? ? = -1,
>> >> + ? ? .num_resources ? ?= ARRAY_SIZE(s5pv210_iis0_resource),
>> >> + ? ? .resource ? ? ? ? = s5pv210_iis0_resource,
>> >> + ? ? .dev = {
>> >> + ? ? ? ? ? ? .platform_data = &s3c_i2s_pdata,
>> >> + ? ? },
>> >> +}; EXPORT_SYMBOL(s5pv210_device_iis0);
>> >
>> > do we really need to be exporting these devices like this,
>> > how much is needed otuside of machine support?
>> Not used except by machine code. Every platform device of
>> Samsung has been declared that way and I just don't wanna
>> stick my neck out where I can do without :)
>
> not all of them have, and i'll probably go around finding
> and culling any more as soon as possible.
Ok. Thanks.
^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH 1/9] ARM: S5PV210: Add audio platform devices
2010-05-18 7:02 [PATCHv2] " Jassi Brar
@ 2010-05-18 7:02 ` Jassi Brar
0 siblings, 0 replies; 16+ messages in thread
From: Jassi Brar @ 2010-05-18 7:02 UTC (permalink / raw)
To: linux-arm-kernel
Define platform devices for all audio devices found on S5PV210
Signed-off-by: Jassi Brar <jassi.brar@samsung.com>
---
arch/arm/mach-s5pv210/Makefile | 4 +
arch/arm/mach-s5pv210/dev-audio.c | 334 +++++++++++++++++++++++++++++
arch/arm/mach-s5pv210/include/mach/map.h | 13 ++
arch/arm/plat-samsung/include/plat/devs.h | 8 +
4 files changed, 359 insertions(+), 0 deletions(-)
create mode 100644 arch/arm/mach-s5pv210/dev-audio.c
diff --git a/arch/arm/mach-s5pv210/Makefile b/arch/arm/mach-s5pv210/Makefile
index f7f1cdc..6ecfa9d 100644
--- a/arch/arm/mach-s5pv210/Makefile
+++ b/arch/arm/mach-s5pv210/Makefile
@@ -18,3 +18,7 @@ obj-$(CONFIG_CPU_S5PV210) += cpu.o init.o clock.o dma.o
obj-$(CONFIG_MACH_SMDKV210) += mach-smdkv210.o
obj-$(CONFIG_MACH_SMDKC110) += mach-smdkc110.o
+
+# device support
+
+obj-y += dev-audio.o
diff --git a/arch/arm/mach-s5pv210/dev-audio.c b/arch/arm/mach-s5pv210/dev-audio.c
new file mode 100644
index 0000000..bdaa926
--- /dev/null
+++ b/arch/arm/mach-s5pv210/dev-audio.c
@@ -0,0 +1,327 @@
+/* linux/arch/arm/mach-s5pv210/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 <plat/gpio-cfg.h>
+#include <plat/audio.h>
+
+#include <mach/gpio.h>
+#include <mach/map.h>
+#include <mach/dma.h>
+#include <mach/irqs.h>
+
+static int s5pv210_cfg_i2s(struct platform_device *pdev)
+{
+ /* configure GPIO for i2s port */
+ switch (pdev->id) {
+ case 1:
+ s3c_gpio_cfgpin(S5PV210_GPC0(0), S3C_GPIO_SFN(2));
+ s3c_gpio_cfgpin(S5PV210_GPC0(1), S3C_GPIO_SFN(2));
+ s3c_gpio_cfgpin(S5PV210_GPC0(2), S3C_GPIO_SFN(2));
+ s3c_gpio_cfgpin(S5PV210_GPC0(3), S3C_GPIO_SFN(2));
+ s3c_gpio_cfgpin(S5PV210_GPC0(4), S3C_GPIO_SFN(2));
+ break;
+
+ case 2:
+ s3c_gpio_cfgpin(S5PV210_GPC1(0), S3C_GPIO_SFN(4));
+ s3c_gpio_cfgpin(S5PV210_GPC1(1), S3C_GPIO_SFN(4));
+ s3c_gpio_cfgpin(S5PV210_GPC1(2), S3C_GPIO_SFN(4));
+ s3c_gpio_cfgpin(S5PV210_GPC1(3), S3C_GPIO_SFN(4));
+ s3c_gpio_cfgpin(S5PV210_GPC1(4), S3C_GPIO_SFN(4));
+ break;
+
+ case -1:
+ s3c_gpio_cfgpin(S5PV210_GPI(0), S3C_GPIO_SFN(2));
+ s3c_gpio_cfgpin(S5PV210_GPI(1), S3C_GPIO_SFN(2));
+ s3c_gpio_cfgpin(S5PV210_GPI(2), S3C_GPIO_SFN(2));
+ s3c_gpio_cfgpin(S5PV210_GPI(3), S3C_GPIO_SFN(2));
+ s3c_gpio_cfgpin(S5PV210_GPI(4), S3C_GPIO_SFN(2));
+ s3c_gpio_cfgpin(S5PV210_GPI(5), S3C_GPIO_SFN(2));
+ s3c_gpio_cfgpin(S5PV210_GPI(6), S3C_GPIO_SFN(2));
+ break;
+
+ default:
+ printk(KERN_ERR "Invalid Device %d\n", pdev->id);
+ return -EINVAL;
+ }
+
+ return 0;
+}
+
+static struct s3c_audio_pdata s3c_i2s_pdata = {
+ .cfg_gpio = s5pv210_cfg_i2s,
+};
+
+static struct resource s5pv210_iis0_resource[] = {
+ [0] = {
+ .start = S5PV210_PA_IIS0,
+ .end = S5PV210_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,
+ },
+};
+
+struct platform_device s5pv210_device_iis0 = {
+ .name = "s3c64xx-iis-v4",
+ .id = -1,
+ .num_resources = ARRAY_SIZE(s5pv210_iis0_resource),
+ .resource = s5pv210_iis0_resource,
+ .dev = {
+ .platform_data = &s3c_i2s_pdata,
+ },
+};
+
+static struct resource s5pv210_iis1_resource[] = {
+ [0] = {
+ .start = S5PV210_PA_IIS1,
+ .end = S5PV210_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 s5pv210_device_iis1 = {
+ .name = "s3c64xx-iis",
+ .id = 1,
+ .num_resources = ARRAY_SIZE(s5pv210_iis1_resource),
+ .resource = s5pv210_iis1_resource,
+ .dev = {
+ .platform_data = &s3c_i2s_pdata,
+ },
+};
+
+static struct resource s5pv210_iis2_resource[] = {
+ [0] = {
+ .start = S5PV210_PA_IIS2,
+ .end = S5PV210_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 s5pv210_device_iis2 = {
+ .name = "s3c64xx-iis",
+ .id = 2,
+ .num_resources = ARRAY_SIZE(s5pv210_iis2_resource),
+ .resource = s5pv210_iis2_resource,
+ .dev = {
+ .platform_data = &s3c_i2s_pdata,
+ },
+};
+
+/* PCM Controller platform_devices */
+
+static int s5pv210_pcm_cfg_gpio(struct platform_device *pdev)
+{
+ switch (pdev->id) {
+ case 0:
+ s3c_gpio_cfgpin(S5PV210_GPI(0), S3C_GPIO_SFN(3));
+ s3c_gpio_cfgpin(S5PV210_GPI(1), S3C_GPIO_SFN(3));
+ s3c_gpio_cfgpin(S5PV210_GPI(2), S3C_GPIO_SFN(3));
+ s3c_gpio_cfgpin(S5PV210_GPI(3), S3C_GPIO_SFN(3));
+ s3c_gpio_cfgpin(S5PV210_GPI(4), S3C_GPIO_SFN(3));
+ break;
+ case 1:
+ s3c_gpio_cfgpin(S5PV210_GPC0(0), S3C_GPIO_SFN(3));
+ s3c_gpio_cfgpin(S5PV210_GPC0(1), S3C_GPIO_SFN(3));
+ s3c_gpio_cfgpin(S5PV210_GPC0(2), S3C_GPIO_SFN(3));
+ s3c_gpio_cfgpin(S5PV210_GPC0(3), S3C_GPIO_SFN(3));
+ s3c_gpio_cfgpin(S5PV210_GPC0(4), S3C_GPIO_SFN(3));
+ break;
+ case 2:
+ s3c_gpio_cfgpin(S5PV210_GPC1(0), S3C_GPIO_SFN(2));
+ s3c_gpio_cfgpin(S5PV210_GPC1(1), S3C_GPIO_SFN(2));
+ s3c_gpio_cfgpin(S5PV210_GPC1(2), S3C_GPIO_SFN(2));
+ s3c_gpio_cfgpin(S5PV210_GPC1(3), S3C_GPIO_SFN(2));
+ s3c_gpio_cfgpin(S5PV210_GPC1(4), S3C_GPIO_SFN(2));
+ break;
+ default:
+ printk(KERN_DEBUG "Invalid PCM Controller number!");
+ return -EINVAL;
+ }
+
+ return 0;
+}
+
+static struct s3c_audio_pdata s3c_pcm_pdata = {
+ .cfg_gpio = s5pv210_pcm_cfg_gpio,
+};
+
+static struct resource s5pv210_pcm0_resource[] = {
+ [0] = {
+ .start = S5PV210_PA_PCM0,
+ .end = S5PV210_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 s5pv210_device_pcm0 = {
+ .name = "samsung-pcm",
+ .id = 0,
+ .num_resources = ARRAY_SIZE(s5pv210_pcm0_resource),
+ .resource = s5pv210_pcm0_resource,
+ .dev = {
+ .platform_data = &s3c_pcm_pdata,
+ },
+};
+
+static struct resource s5pv210_pcm1_resource[] = {
+ [0] = {
+ .start = S5PV210_PA_PCM1,
+ .end = S5PV210_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 s5pv210_device_pcm1 = {
+ .name = "samsung-pcm",
+ .id = 1,
+ .num_resources = ARRAY_SIZE(s5pv210_pcm1_resource),
+ .resource = s5pv210_pcm1_resource,
+ .dev = {
+ .platform_data = &s3c_pcm_pdata,
+ },
+};
+
+static struct resource s5pv210_pcm2_resource[] = {
+ [0] = {
+ .start = S5PV210_PA_PCM2,
+ .end = S5PV210_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 s5pv210_device_pcm2 = {
+ .name = "samsung-pcm",
+ .id = 2,
+ .num_resources = ARRAY_SIZE(s5pv210_pcm2_resource),
+ .resource = s5pv210_pcm2_resource,
+ .dev = {
+ .platform_data = &s3c_pcm_pdata,
+ },
+};
+
+/* AC97 Controller platform devices */
+
+static int s5pv210_ac97_cfg_gpio(struct platform_device *pdev)
+{
+ s3c_gpio_cfgpin(S5PV210_GPC0(0), S3C_GPIO_SFN(4));
+ s3c_gpio_cfgpin(S5PV210_GPC0(1), S3C_GPIO_SFN(4));
+ s3c_gpio_cfgpin(S5PV210_GPC0(2), S3C_GPIO_SFN(4));
+ s3c_gpio_cfgpin(S5PV210_GPC0(3), S3C_GPIO_SFN(4));
+ s3c_gpio_cfgpin(S5PV210_GPC0(4), S3C_GPIO_SFN(4));
+
+ return 0;
+}
+
+static struct resource s5pv210_ac97_resource[] = {
+ [0] = {
+ .start = S5PV210_PA_AC97,
+ .end = S5PV210_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 = s5pv210_ac97_cfg_gpio,
+};
+
+static u64 s5pv210_ac97_dmamask = DMA_BIT_MASK(32);
+
+struct platform_device s5pv210_device_ac97 = {
+ .name = "s3c-ac97",
+ .id = -1,
+ .num_resources = ARRAY_SIZE(s5pv210_ac97_resource),
+ .resource = s5pv210_ac97_resource,
+ .dev = {
+ .platform_data = &s3c_ac97_pdata,
+ .dma_mask = &s5pv210_ac97_dmamask,
+ .coherent_dma_mask = DMA_BIT_MASK(32),
+ },
+};
diff --git a/arch/arm/mach-s5pv210/include/mach/map.h b/arch/arm/mach-s5pv210/include/mach/map.h
index c038585..5adcb9f 100644
--- a/arch/arm/mach-s5pv210/include/mach/map.h
+++ b/arch/arm/mach-s5pv210/include/mach/map.h
@@ -62,6 +62,19 @@
#define S5PV210_PA_SDRAM (0x20000000)
#define S5P_PA_SDRAM S5PV210_PA_SDRAM
+/* I2S */
+#define S5PV210_PA_IIS0 0xEEE30000
+#define S5PV210_PA_IIS1 0xE2100000
+#define S5PV210_PA_IIS2 0xE2A00000
+
+/* PCM */
+#define S5PV210_PA_PCM0 0xE2300000
+#define S5PV210_PA_PCM1 0xE1200000
+#define S5PV210_PA_PCM2 0xE2B00000
+
+/* AC97 */
+#define S5PV210_PA_AC97 0xE2200000
+
/* compatibiltiy defines. */
#define S3C_PA_UART S5PV210_PA_UART
#define S3C_PA_IIC S5PV210_PA_IIC0
diff --git a/arch/arm/plat-samsung/include/plat/devs.h b/arch/arm/plat-samsung/include/plat/devs.h
index 796d242..d8fda3a 100644
--- a/arch/arm/plat-samsung/include/plat/devs.h
+++ b/arch/arm/plat-samsung/include/plat/devs.h
@@ -64,6 +64,14 @@ extern struct platform_device s3c_device_nand;
extern struct platform_device s3c_device_usbgadget;
extern struct platform_device s3c_device_usb_hsotg;
+extern struct platform_device s5pv210_device_ac97;
+extern struct platform_device s5pv210_device_pcm0;
+extern struct platform_device s5pv210_device_pcm1;
+extern struct platform_device s5pv210_device_pcm2;
+extern struct platform_device s5pv210_device_iis0;
+extern struct platform_device s5pv210_device_iis1;
+extern struct platform_device s5pv210_device_iis2;
+
/* s3c2440 specific devices */
#ifdef CONFIG_CPU_S3C2440
--
1.6.2.5
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH] SAMSUNG: Audio support
2010-05-18 5:10 [PATCH] SAMSUNG: Audio support Jassi Brar
` (8 preceding siblings ...)
2010-05-18 5:10 ` [PATCH 9/9] ARM: SMDK6440: Add audio devices on board Jassi Brar
@ 2010-05-18 18:47 ` Mark Brown
9 siblings, 0 replies; 16+ messages in thread
From: Mark Brown @ 2010-05-18 18:47 UTC (permalink / raw)
To: linux-arm-kernel
On Tue, May 18, 2010 at 02:10:02PM +0900, Jassi Brar wrote:
> Hi,
> Following are few patches to define and add audio devices' support
> for latest Samsung SoCs, namely S5P6440, S5P6442, S5PC100, S5PC110
> and S5PV210 on respective SMDK board.
> The device drivers will be enabled to run these via ASoC tree.
All of these look good to me, FWIW
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
^ permalink raw reply [flat|nested] 16+ messages in thread
end of thread, other threads:[~2010-05-18 18:47 UTC | newest]
Thread overview: 16+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-05-18 5:10 [PATCH] SAMSUNG: Audio support Jassi Brar
2010-05-18 5:10 ` [PATCH 1/9] ARM: S5PV210: Add audio platform devices Jassi Brar
2010-05-18 5:24 ` Ben Dooks
2010-05-18 5:34 ` Jassi Brar
2010-05-18 5:39 ` Ben Dooks
2010-05-18 7:01 ` Jassi Brar
2010-05-18 5:10 ` [PATCH 2/9] ARM: SMDKV210: Add audio devices on board Jassi Brar
2010-05-18 5:10 ` [PATCH 3/9] ARM: SMDKC110: " Jassi Brar
2010-05-18 5:10 ` [PATCH 4/9] ARM: S5PC100: Add audio platform devices Jassi Brar
2010-05-18 5:10 ` [PATCH 5/9] ARM: SMDKC100: Add audio devices on board Jassi Brar
2010-05-18 5:10 ` [PATCH 6/9] ARM: S5P6442: Add audio platform devices Jassi Brar
2010-05-18 5:10 ` [PATCH 7/9] ARM: SMDK6442: Add audio devices on board Jassi Brar
2010-05-18 5:10 ` [PATCH 8/9] ARM: S5P6440: Add audio platform devices Jassi Brar
2010-05-18 5:10 ` [PATCH 9/9] ARM: SMDK6440: Add audio devices on board Jassi Brar
2010-05-18 18:47 ` [PATCH] SAMSUNG: Audio support Mark Brown
-- strict thread matches above, loose matches on Subject: below --
2010-05-18 7:02 [PATCHv2] " Jassi Brar
2010-05-18 7:02 ` [PATCH 1/9] ARM: S5PV210: Add audio platform devices Jassi Brar
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).