diff options
| -rw-r--r-- | arch/arm/mach-s3c64xx/dev-audio.c | 78 | ||||
| -rw-r--r-- | arch/arm/plat-samsung/include/plat/audio.h | 8 | ||||
| -rw-r--r-- | arch/arm/plat-samsung/include/plat/devs.h | 3 |
3 files changed, 89 insertions, 0 deletions
diff --git a/arch/arm/mach-s3c64xx/dev-audio.c b/arch/arm/mach-s3c64xx/dev-audio.c index aaffb8066707..c3e9e73bd0f9 100644 --- a/arch/arm/mach-s3c64xx/dev-audio.c +++ b/arch/arm/mach-s3c64xx/dev-audio.c | |||
| @@ -11,6 +11,7 @@ | |||
| 11 | #include <linux/kernel.h> | 11 | #include <linux/kernel.h> |
| 12 | #include <linux/string.h> | 12 | #include <linux/string.h> |
| 13 | #include <linux/platform_device.h> | 13 | #include <linux/platform_device.h> |
| 14 | #include <linux/dma-mapping.h> | ||
| 14 | 15 | ||
| 15 | #include <mach/irqs.h> | 16 | #include <mach/irqs.h> |
| 16 | #include <mach/map.h> | 17 | #include <mach/map.h> |
| @@ -255,3 +256,80 @@ struct platform_device s3c64xx_device_pcm1 = { | |||
| 255 | }, | 256 | }, |
| 256 | }; | 257 | }; |
| 257 | EXPORT_SYMBOL(s3c64xx_device_pcm1); | 258 | EXPORT_SYMBOL(s3c64xx_device_pcm1); |
| 259 | |||
| 260 | /* AC97 Controller platform devices */ | ||
| 261 | |||
| 262 | static int s3c64xx_ac97_cfg_gpd(struct platform_device *pdev) | ||
| 263 | { | ||
| 264 | s3c_gpio_cfgpin(S3C64XX_GPD(0), S3C64XX_GPD0_AC97_BITCLK); | ||
| 265 | s3c_gpio_cfgpin(S3C64XX_GPD(1), S3C64XX_GPD1_AC97_nRESET); | ||
| 266 | s3c_gpio_cfgpin(S3C64XX_GPD(2), S3C64XX_GPD2_AC97_SYNC); | ||
| 267 | s3c_gpio_cfgpin(S3C64XX_GPD(3), S3C64XX_GPD3_AC97_SDI); | ||
| 268 | s3c_gpio_cfgpin(S3C64XX_GPD(4), S3C64XX_GPD4_AC97_SDO); | ||
| 269 | |||
| 270 | return 0; | ||
| 271 | } | ||
| 272 | |||
| 273 | static int s3c64xx_ac97_cfg_gpe(struct platform_device *pdev) | ||
| 274 | { | ||
| 275 | s3c_gpio_cfgpin(S3C64XX_GPE(0), S3C64XX_GPE0_AC97_BITCLK); | ||
| 276 | s3c_gpio_cfgpin(S3C64XX_GPE(1), S3C64XX_GPE1_AC97_nRESET); | ||
| 277 | s3c_gpio_cfgpin(S3C64XX_GPE(2), S3C64XX_GPE2_AC97_SYNC); | ||
| 278 | s3c_gpio_cfgpin(S3C64XX_GPE(3), S3C64XX_GPE3_AC97_SDI); | ||
| 279 | s3c_gpio_cfgpin(S3C64XX_GPE(4), S3C64XX_GPE4_AC97_SDO); | ||
| 280 | |||
| 281 | return 0; | ||
| 282 | } | ||
| 283 | |||
| 284 | static struct resource s3c64xx_ac97_resource[] = { | ||
| 285 | [0] = { | ||
| 286 | .start = S3C64XX_PA_AC97, | ||
| 287 | .end = S3C64XX_PA_AC97 + 0x100 - 1, | ||
| 288 | .flags = IORESOURCE_MEM, | ||
| 289 | }, | ||
| 290 | [1] = { | ||
| 291 | .start = DMACH_AC97_PCMOUT, | ||
| 292 | .end = DMACH_AC97_PCMOUT, | ||
| 293 | .flags = IORESOURCE_DMA, | ||
| 294 | }, | ||
| 295 | [2] = { | ||
| 296 | .start = DMACH_AC97_PCMIN, | ||
| 297 | .end = DMACH_AC97_PCMIN, | ||
| 298 | .flags = IORESOURCE_DMA, | ||
| 299 | }, | ||
| 300 | [3] = { | ||
| 301 | .start = DMACH_AC97_MICIN, | ||
| 302 | .end = DMACH_AC97_MICIN, | ||
| 303 | .flags = IORESOURCE_DMA, | ||
| 304 | }, | ||
| 305 | [4] = { | ||
| 306 | .start = IRQ_AC97, | ||
| 307 | .end = IRQ_AC97, | ||
| 308 | .flags = IORESOURCE_IRQ, | ||
| 309 | }, | ||
| 310 | }; | ||
| 311 | |||
| 312 | static struct s3c_audio_pdata s3c_ac97_pdata; | ||
| 313 | |||
| 314 | static u64 s3c64xx_ac97_dmamask = DMA_BIT_MASK(32); | ||
| 315 | |||
| 316 | struct platform_device s3c64xx_device_ac97 = { | ||
| 317 | .name = "s3c-ac97", | ||
| 318 | .id = -1, | ||
| 319 | .num_resources = ARRAY_SIZE(s3c64xx_ac97_resource), | ||
| 320 | .resource = s3c64xx_ac97_resource, | ||
| 321 | .dev = { | ||
| 322 | .platform_data = &s3c_ac97_pdata, | ||
| 323 | .dma_mask = &s3c64xx_ac97_dmamask, | ||
| 324 | .coherent_dma_mask = DMA_BIT_MASK(32), | ||
| 325 | }, | ||
| 326 | }; | ||
| 327 | EXPORT_SYMBOL(s3c64xx_device_ac97); | ||
| 328 | |||
| 329 | void __init s3c64xx_ac97_setup_gpio(int num) | ||
| 330 | { | ||
| 331 | if (num == S3C64XX_AC97_GPD) | ||
| 332 | s3c_ac97_pdata.cfg_gpio = s3c64xx_ac97_cfg_gpd; | ||
| 333 | else | ||
| 334 | s3c_ac97_pdata.cfg_gpio = s3c64xx_ac97_cfg_gpe; | ||
| 335 | } | ||
diff --git a/arch/arm/plat-samsung/include/plat/audio.h b/arch/arm/plat-samsung/include/plat/audio.h index da561da2154f..e32f9edfd4b7 100644 --- a/arch/arm/plat-samsung/include/plat/audio.h +++ b/arch/arm/plat-samsung/include/plat/audio.h | |||
| @@ -8,6 +8,14 @@ | |||
| 8 | * published by the Free Software Foundation. | 8 | * published by the Free Software Foundation. |
| 9 | */ | 9 | */ |
| 10 | 10 | ||
| 11 | /* The machine init code calls s3c*_ac97_setup_gpio with | ||
| 12 | * one of these defines in order to select appropriate bank | ||
| 13 | * of GPIO for AC97 pins | ||
| 14 | */ | ||
| 15 | #define S3C64XX_AC97_GPD 0 | ||
| 16 | #define S3C64XX_AC97_GPE 1 | ||
| 17 | extern void s3c64xx_ac97_setup_gpio(int); | ||
| 18 | |||
| 11 | /** | 19 | /** |
| 12 | * struct s3c_audio_pdata - common platform data for audio device drivers | 20 | * struct s3c_audio_pdata - common platform data for audio device drivers |
| 13 | * @cfg_gpio: Callback function to setup mux'ed pins in I2S/PCM/AC97 mode | 21 | * @cfg_gpio: Callback function to setup mux'ed pins in I2S/PCM/AC97 mode |
diff --git a/arch/arm/plat-samsung/include/plat/devs.h b/arch/arm/plat-samsung/include/plat/devs.h index 0597ffae0cfc..796d24258313 100644 --- a/arch/arm/plat-samsung/include/plat/devs.h +++ b/arch/arm/plat-samsung/include/plat/devs.h | |||
| @@ -35,7 +35,10 @@ extern struct platform_device s3c64xx_device_spi1; | |||
| 35 | extern struct platform_device s3c64xx_device_pcm0; | 35 | extern struct platform_device s3c64xx_device_pcm0; |
| 36 | extern struct platform_device s3c64xx_device_pcm1; | 36 | extern struct platform_device s3c64xx_device_pcm1; |
| 37 | 37 | ||
| 38 | extern struct platform_device s3c64xx_device_ac97; | ||
| 39 | |||
| 38 | extern struct platform_device s3c_device_ts; | 40 | extern struct platform_device s3c_device_ts; |
| 41 | |||
| 39 | extern struct platform_device s3c_device_fb; | 42 | extern struct platform_device s3c_device_fb; |
| 40 | extern struct platform_device s3c_device_ohci; | 43 | extern struct platform_device s3c_device_ohci; |
| 41 | extern struct platform_device s3c_device_lcd; | 44 | extern struct platform_device s3c_device_lcd; |
