From: ben-linux@fluff.org (Ben Dooks)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 1/9] ARM: S5PV210: Add audio platform devices
Date: Tue, 18 May 2010 06:24:19 +0100 [thread overview]
Message-ID: <20100518052419.GM27571@trinity.fluff.org> (raw)
In-Reply-To: <1274159414-19297-1-git-send-email-jassi.brar@samsung.com>
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.
next prev parent reply other threads:[~2010-05-18 5:24 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
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 [this message]
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
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20100518052419.GM27571@trinity.fluff.org \
--to=ben-linux@fluff.org \
--cc=linux-arm-kernel@lists.infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.