Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 068b432d authored by Seungwhan Youn's avatar Seungwhan Youn Committed by Kukjin Kim
Browse files

ARM: S5PC100: Add S/PDIF platform device



This patch add S/PDIF platform device to support S/PDIF PCM audio
on S5PC100.

Signed-off-by: default avatarSeungwhan Youn <sw.youn@samsung.com>
Acked-by: default avatarJassi Brar <jassi.brar@samsung.com>
Acked-by: default avatarMark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: default avatarKukjin Kim <kgene.kim@samsung.com>
parent 6b2cff96
Loading
Loading
Loading
Loading
+54 −0
Original line number Diff line number Diff line
@@ -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;
}
+2 −0
Original line number Diff line number Diff line
@@ -110,6 +110,8 @@
#define S5PC100_PA_PCM0		0xF2400000
#define S5PC100_PA_PCM1		0xF2500000

#define S5PC100_PA_SPDIF	0xF2600000

#define S5PC100_PA_TSADC	(0xF3000000)

/* KEYPAD */
+4 −0
Original line number Diff line number Diff line
@@ -47,6 +47,7 @@
#include <plat/adc.h>
#include <plat/keypad.h>
#include <plat/ts.h>
#include <plat/audio.h>

/* Following are default values for UCON, ULCON and UFCON UART registers */
#define SMDKC100_UCON_DEFAULT	(S3C2410_UCON_TXILEVEL |	\
@@ -196,6 +197,7 @@ static struct platform_device *smdkc100_devices[] __initdata = {
	&s5p_device_fimc0,
	&s5p_device_fimc1,
	&s5p_device_fimc2,
	&s5pc100_device_spdif,
};

static struct s3c2410_ts_mach_info s3c_ts_platform __initdata = {
@@ -226,6 +228,8 @@ static void __init smdkc100_machine_init(void)

	samsung_keypad_set_platdata(&smdkc100_keypad_data);

	s5pc100_spdif_setup_gpio(S5PC100_SPDIF_GPD);

	/* LCD init */
	gpio_request(S5PC100_GPD(0), "GPD");
	gpio_request(S5PC100_GPH0(6), "GPH0");
+9 −0
Original line number Diff line number Diff line
@@ -16,6 +16,15 @@
#define S3C64XX_AC97_GPE  1
extern void s3c64xx_ac97_setup_gpio(int);

/*
 * The machine init code calls s5p*_spdif_setup_gpio with
 * one of these defines in order to select appropriate bank
 * of GPIO for S/PDIF pins
 */
#define S5PC100_SPDIF_GPD  0
#define S5PC100_SPDIF_GPG3 1
extern void s5pc100_spdif_setup_gpio(int);

/**
 * struct s3c_audio_pdata - common platform data for audio device drivers
 * @cfg_gpio: Callback function to setup mux'ed pins in I2S/PCM/AC97 mode
+1 −0
Original line number Diff line number Diff line
@@ -111,6 +111,7 @@ 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;
extern struct platform_device s5pc100_device_spdif;

extern struct platform_device samsung_device_keypad;