• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/components/opensource/linux/linux-2.6.36/arch/arm/mach-s5p6442/
1/* linux/arch/arm/mach-s5p6442/dev-audio.c
2 *
3 * Copyright (c) 2010 Samsung Electronics Co. Ltd
4 *	Jaswinder Singh <jassi.brar@samsung.com>
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation.
9 */
10
11#include <linux/platform_device.h>
12#include <linux/dma-mapping.h>
13#include <linux/gpio.h>
14
15#include <plat/gpio-cfg.h>
16#include <plat/audio.h>
17
18#include <mach/map.h>
19#include <mach/dma.h>
20#include <mach/irqs.h>
21
22static int s5p6442_cfg_i2s(struct platform_device *pdev)
23{
24	/* configure GPIO for i2s port */
25	switch (pdev->id) {
26	case 1:
27		s3c_gpio_cfgpin(S5P6442_GPC1(0), S3C_GPIO_SFN(2));
28		s3c_gpio_cfgpin(S5P6442_GPC1(1), S3C_GPIO_SFN(2));
29		s3c_gpio_cfgpin(S5P6442_GPC1(2), S3C_GPIO_SFN(2));
30		s3c_gpio_cfgpin(S5P6442_GPC1(3), S3C_GPIO_SFN(2));
31		s3c_gpio_cfgpin(S5P6442_GPC1(4), S3C_GPIO_SFN(2));
32		break;
33
34	case -1:
35		s3c_gpio_cfgpin(S5P6442_GPC0(0), S3C_GPIO_SFN(2));
36		s3c_gpio_cfgpin(S5P6442_GPC0(1), S3C_GPIO_SFN(2));
37		s3c_gpio_cfgpin(S5P6442_GPC0(2), S3C_GPIO_SFN(2));
38		s3c_gpio_cfgpin(S5P6442_GPC0(3), S3C_GPIO_SFN(2));
39		s3c_gpio_cfgpin(S5P6442_GPC0(4), S3C_GPIO_SFN(2));
40		break;
41
42	default:
43		printk(KERN_ERR "Invalid Device %d\n", pdev->id);
44		return -EINVAL;
45	}
46
47	return 0;
48}
49
50static struct s3c_audio_pdata s3c_i2s_pdata = {
51	.cfg_gpio = s5p6442_cfg_i2s,
52};
53
54static struct resource s5p6442_iis0_resource[] = {
55	[0] = {
56		.start = S5P6442_PA_I2S0,
57		.end   = S5P6442_PA_I2S0 + 0x100 - 1,
58		.flags = IORESOURCE_MEM,
59	},
60	[1] = {
61		.start = DMACH_I2S0_TX,
62		.end   = DMACH_I2S0_TX,
63		.flags = IORESOURCE_DMA,
64	},
65	[2] = {
66		.start = DMACH_I2S0_RX,
67		.end   = DMACH_I2S0_RX,
68		.flags = IORESOURCE_DMA,
69	},
70};
71
72struct platform_device s5p6442_device_iis0 = {
73	.name		  = "s3c64xx-iis-v4",
74	.id		  = -1,
75	.num_resources	  = ARRAY_SIZE(s5p6442_iis0_resource),
76	.resource	  = s5p6442_iis0_resource,
77	.dev = {
78		.platform_data = &s3c_i2s_pdata,
79	},
80};
81
82static struct resource s5p6442_iis1_resource[] = {
83	[0] = {
84		.start = S5P6442_PA_I2S1,
85		.end   = S5P6442_PA_I2S1 + 0x100 - 1,
86		.flags = IORESOURCE_MEM,
87	},
88	[1] = {
89		.start = DMACH_I2S1_TX,
90		.end   = DMACH_I2S1_TX,
91		.flags = IORESOURCE_DMA,
92	},
93	[2] = {
94		.start = DMACH_I2S1_RX,
95		.end   = DMACH_I2S1_RX,
96		.flags = IORESOURCE_DMA,
97	},
98};
99
100struct platform_device s5p6442_device_iis1 = {
101	.name		  = "s3c64xx-iis",
102	.id		  = 1,
103	.num_resources	  = ARRAY_SIZE(s5p6442_iis1_resource),
104	.resource	  = s5p6442_iis1_resource,
105	.dev = {
106		.platform_data = &s3c_i2s_pdata,
107	},
108};
109
110/* PCM Controller platform_devices */
111
112static int s5p6442_pcm_cfg_gpio(struct platform_device *pdev)
113{
114	switch (pdev->id) {
115	case 0:
116		s3c_gpio_cfgpin(S5P6442_GPC0(0), S3C_GPIO_SFN(3));
117		s3c_gpio_cfgpin(S5P6442_GPC0(1), S3C_GPIO_SFN(3));
118		s3c_gpio_cfgpin(S5P6442_GPC0(2), S3C_GPIO_SFN(3));
119		s3c_gpio_cfgpin(S5P6442_GPC0(3), S3C_GPIO_SFN(3));
120		s3c_gpio_cfgpin(S5P6442_GPC0(4), S3C_GPIO_SFN(3));
121		break;
122
123	case 1:
124		s3c_gpio_cfgpin(S5P6442_GPC1(0), S3C_GPIO_SFN(3));
125		s3c_gpio_cfgpin(S5P6442_GPC1(1), S3C_GPIO_SFN(3));
126		s3c_gpio_cfgpin(S5P6442_GPC1(2), S3C_GPIO_SFN(3));
127		s3c_gpio_cfgpin(S5P6442_GPC1(3), S3C_GPIO_SFN(3));
128		s3c_gpio_cfgpin(S5P6442_GPC1(4), S3C_GPIO_SFN(3));
129		break;
130
131	default:
132		printk(KERN_DEBUG "Invalid PCM Controller number!");
133		return -EINVAL;
134	}
135
136	return 0;
137}
138
139static struct s3c_audio_pdata s3c_pcm_pdata = {
140	.cfg_gpio = s5p6442_pcm_cfg_gpio,
141};
142
143static struct resource s5p6442_pcm0_resource[] = {
144	[0] = {
145		.start = S5P6442_PA_PCM0,
146		.end   = S5P6442_PA_PCM0 + 0x100 - 1,
147		.flags = IORESOURCE_MEM,
148	},
149	[1] = {
150		.start = DMACH_PCM0_TX,
151		.end   = DMACH_PCM0_TX,
152		.flags = IORESOURCE_DMA,
153	},
154	[2] = {
155		.start = DMACH_PCM0_RX,
156		.end   = DMACH_PCM0_RX,
157		.flags = IORESOURCE_DMA,
158	},
159};
160
161struct platform_device s5p6442_device_pcm0 = {
162	.name		  = "samsung-pcm",
163	.id		  = 0,
164	.num_resources	  = ARRAY_SIZE(s5p6442_pcm0_resource),
165	.resource	  = s5p6442_pcm0_resource,
166	.dev = {
167		.platform_data = &s3c_pcm_pdata,
168	},
169};
170
171static struct resource s5p6442_pcm1_resource[] = {
172	[0] = {
173		.start = S5P6442_PA_PCM1,
174		.end   = S5P6442_PA_PCM1 + 0x100 - 1,
175		.flags = IORESOURCE_MEM,
176	},
177	[1] = {
178		.start = DMACH_PCM1_TX,
179		.end   = DMACH_PCM1_TX,
180		.flags = IORESOURCE_DMA,
181	},
182	[2] = {
183		.start = DMACH_PCM1_RX,
184		.end   = DMACH_PCM1_RX,
185		.flags = IORESOURCE_DMA,
186	},
187};
188
189struct platform_device s5p6442_device_pcm1 = {
190	.name		  = "samsung-pcm",
191	.id		  = 1,
192	.num_resources	  = ARRAY_SIZE(s5p6442_pcm1_resource),
193	.resource	  = s5p6442_pcm1_resource,
194	.dev = {
195		.platform_data = &s3c_pcm_pdata,
196	},
197};
198