|
@@ -263,3 +263,57 @@ struct platform_device s5pc100_device_ac97 = {
|
|
|
.coherent_dma_mask = DMA_BIT_MASK(32),
|
|
|
},
|
|
|
};
|
|
|
+
|
|
|
+/* S/PDIF Controller platform_device */
|
|
|
+static int s5pc100_spdif_cfg_gpd(struct platform_device *pdev)
|
|
|
+{
|
|
|
+ s3c_gpio_cfgpin_range(S5PC100_GPD(5), 2, S3C_GPIO_SFN(3));
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
+static int s5pc100_spdif_cfg_gpg3(struct platform_device *pdev)
|
|
|
+{
|
|
|
+ s3c_gpio_cfgpin_range(S5PC100_GPG3(5), 2, S3C_GPIO_SFN(3));
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
+static struct resource s5pc100_spdif_resource[] = {
|
|
|
+ [0] = {
|
|
|
+ .start = S5PC100_PA_SPDIF,
|
|
|
+ .end = S5PC100_PA_SPDIF + 0x100 - 1,
|
|
|
+ .flags = IORESOURCE_MEM,
|
|
|
+ },
|
|
|
+ [1] = {
|
|
|
+ .start = DMACH_SPDIF,
|
|
|
+ .end = DMACH_SPDIF,
|
|
|
+ .flags = IORESOURCE_DMA,
|
|
|
+ },
|
|
|
+};
|
|
|
+
|
|
|
+static struct s3c_audio_pdata s5p_spdif_pdata = {
|
|
|
+ .cfg_gpio = s5pc100_spdif_cfg_gpd,
|
|
|
+};
|
|
|
+
|
|
|
+static u64 s5pc100_spdif_dmamask = DMA_BIT_MASK(32);
|
|
|
+
|
|
|
+struct platform_device s5pc100_device_spdif = {
|
|
|
+ .name = "samsung-spdif",
|
|
|
+ .id = -1,
|
|
|
+ .num_resources = ARRAY_SIZE(s5pc100_spdif_resource),
|
|
|
+ .resource = s5pc100_spdif_resource,
|
|
|
+ .dev = {
|
|
|
+ .platform_data = &s5p_spdif_pdata,
|
|
|
+ .dma_mask = &s5pc100_spdif_dmamask,
|
|
|
+ .coherent_dma_mask = DMA_BIT_MASK(32),
|
|
|
+ },
|
|
|
+};
|
|
|
+
|
|
|
+void __init s5pc100_spdif_setup_gpio(int gpio)
|
|
|
+{
|
|
|
+ if (gpio == S5PC100_SPDIF_GPD)
|
|
|
+ s5p_spdif_pdata.cfg_gpio = s5pc100_spdif_cfg_gpd;
|
|
|
+ else
|
|
|
+ s5p_spdif_pdata.cfg_gpio = s5pc100_spdif_cfg_gpg3;
|
|
|
+}
|