* [PATCHv2 1/4] ASoC: S3C64XX: Move GPIO settings to platform
2010-07-16 6:16 [PATCHv2 0/4] ASoC: multi-component - Samsung S3C Platform Seungwhan Youn
@ 2010-07-16 6:20 ` Seungwhan Youn
2010-07-16 6:24 ` [PATCHv2 2/4] ASoC: S3C64XX: Move DMA " Seungwhan Youn
` (4 subsequent siblings)
5 siblings, 0 replies; 8+ messages in thread
From: Seungwhan Youn @ 2010-07-16 6:20 UTC (permalink / raw)
To: alsa-devel
Cc: Seungwhan Youn, Jassi Brar, Mark Brown, Seungwhan Youn,
Liam Girdwood
Now that we have platform data provide callbacks for gpio config,
remove the explicit settings from CPU driver and just call the
cfg_gpio callback.
Signed-off-by: Seungwhan Youn <sw.youn@samsung.com>
Reviewed-by: Jassi Brar <jassi.brar@samsung.com>
---
sound/soc/s3c24xx/s3c64xx-i2s-v4.c | 21 ++++++++----------
sound/soc/s3c24xx/s3c64xx-i2s.c | 40 +++++++++++++++--------------------
2 files changed, 26 insertions(+), 35 deletions(-)
diff --git a/sound/soc/s3c24xx/s3c64xx-i2s-v4.c b/sound/soc/s3c24xx/s3c64xx-i2s-v4.c
index 72708af..93ae973 100644
--- a/sound/soc/s3c24xx/s3c64xx-i2s-v4.c
+++ b/sound/soc/s3c24xx/s3c64xx-i2s-v4.c
@@ -16,9 +16,7 @@
#include <sound/soc.h>
#include <sound/pcm_params.h>
-#include <mach/gpio-bank-c.h>
-#include <mach/gpio-bank-h.h>
-#include <plat/gpio-cfg.h>
+#include <plat/audio.h>
#include <mach/map.h>
#include <mach/dma.h>
@@ -41,15 +39,7 @@ static struct s3c_i2sv2_info s3c64xx_i2sv4;
static int s3c64xx_i2sv4_probe(struct snd_soc_dai *dai)
{
- /* configure GPIO for i2s port */
- s3c_gpio_cfgpin(S3C64XX_GPC(4), S3C64XX_GPC4_I2S_V40_DO0);
- s3c_gpio_cfgpin(S3C64XX_GPC(5), S3C64XX_GPC5_I2S_V40_DO1);
- s3c_gpio_cfgpin(S3C64XX_GPC(7), S3C64XX_GPC7_I2S_V40_DO2);
- s3c_gpio_cfgpin(S3C64XX_GPH(6), S3C64XX_GPH6_I2S_V40_BCLK);
- s3c_gpio_cfgpin(S3C64XX_GPH(7), S3C64XX_GPH7_I2S_V40_CDCLK);
- s3c_gpio_cfgpin(S3C64XX_GPH(8), S3C64XX_GPH8_I2S_V40_LRCLK);
- s3c_gpio_cfgpin(S3C64XX_GPH(9), S3C64XX_GPH9_I2S_V40_DI);
-
+ /* do nothing */
return 0;
}
@@ -117,6 +107,7 @@ EXPORT_SYMBOL_GPL(s3c64xx_i2s_v4_dai);
static __devinit int s3c64xx_i2sv4_dev_probe(struct platform_device *pdev)
{
+ struct s3c_audio_pdata *i2s_pdata;
struct s3c_i2sv2_info *i2s;
int ret;
@@ -137,6 +128,12 @@ static __devinit int s3c64xx_i2sv4_dev_probe(struct platform_device *pdev)
i2s->dma_playback->client = &s3c64xx_dma_client_out;
i2s->dma_playback->dma_size = 4;
+ i2s_pdata = pdev->dev.platform_data;
+ if (i2s_pdata && i2s_pdata->cfg_gpio && i2s_pdata->cfg_gpio(pdev)) {
+ dev_err(&pdev->dev, "Unable to configure gpio\n");
+ return -EINVAL;
+ }
+
i2s->iis_cclk = clk_get(&pdev->dev, "audio-bus");
if (IS_ERR(i2s->iis_cclk)) {
dev_err(&pdev->dev, "failed to get audio-bus\n");
diff --git a/sound/soc/s3c24xx/s3c64xx-i2s.c b/sound/soc/s3c24xx/s3c64xx-i2s.c
index 5017e31..ab2ae47 100644
--- a/sound/soc/s3c24xx/s3c64xx-i2s.c
+++ b/sound/soc/s3c24xx/s3c64xx-i2s.c
@@ -20,9 +20,6 @@
#include <sound/soc.h>
-#include <mach/gpio-bank-d.h>
-#include <mach/gpio-bank-e.h>
-#include <plat/gpio-cfg.h>
#include <plat/audio.h>
#include <mach/map.h>
@@ -47,6 +44,7 @@ static struct s3c2410_dma_client s3c64xx_dma_client_in = {
static struct s3c_dma_params s3c64xx_i2s_pcm_stereo_out[MAX_I2SV3];
static struct s3c_dma_params s3c64xx_i2s_pcm_stereo_in[MAX_I2SV3];
+static struct s3c_i2sv2_info s3c64xx_i2s[MAX_I2SV3];
static int s3c64xx_i2s_set_sysclk(struct snd_soc_dai *cpu_dai,
int clk_id, unsigned int freq, int dir)
@@ -102,9 +100,12 @@ static int s3c64xx_i2s_probe(struct snd_soc_dai *dai)
struct s3c_i2sv2_info *i2s;
int ret;
- i2s = kzalloc(sizeof(struct s3c_i2sv2_info), GFP_KERNEL);
- if (i2s == NULL)
- return -ENOMEM;
+ if (dai->id >= MAX_I2SV3) {
+ dev_err(dai->dev, "id %d out of range\n", dai->id);
+ return -EINVAL;
+ }
+
+ i2s = &s3c64xx_i2s[dai->id];
snd_soc_dai_set_drvdata(dai, i2s);
i2s->dma_capture = &s3c64xx_i2s_pcm_stereo_in[dai->id];
@@ -139,23 +140,6 @@ static int s3c64xx_i2s_probe(struct snd_soc_dai *dai)
clk_enable(i2s->iis_cclk);
- /* configure GPIO for i2s port */
- switch (dai->id) {
- case 0:
- s3c_gpio_cfgpin(S3C64XX_GPD(0), S3C64XX_GPD0_I2S0_CLK);
- s3c_gpio_cfgpin(S3C64XX_GPD(1), S3C64XX_GPD1_I2S0_CDCLK);
- s3c_gpio_cfgpin(S3C64XX_GPD(2), S3C64XX_GPD2_I2S0_LRCLK);
- s3c_gpio_cfgpin(S3C64XX_GPD(3), S3C64XX_GPD3_I2S0_DI);
- s3c_gpio_cfgpin(S3C64XX_GPD(4), S3C64XX_GPD4_I2S0_D0);
- break;
- case 1:
- s3c_gpio_cfgpin(S3C64XX_GPE(0), S3C64XX_GPE0_I2S1_CLK);
- s3c_gpio_cfgpin(S3C64XX_GPE(1), S3C64XX_GPE1_I2S1_CDCLK);
- s3c_gpio_cfgpin(S3C64XX_GPE(2), S3C64XX_GPE2_I2S1_LRCLK);
- s3c_gpio_cfgpin(S3C64XX_GPE(3), S3C64XX_GPE3_I2S1_DI);
- s3c_gpio_cfgpin(S3C64XX_GPE(4), S3C64XX_GPE4_I2S1_D0);
- }
-
return 0;
err:
@@ -213,12 +197,22 @@ EXPORT_SYMBOL_GPL(s3c64xx_i2s_dai);
static __devinit int s3c64xx_iis_dev_probe(struct platform_device *pdev)
{
+ struct s3c_audio_pdata *i2s_pdata;
+ struct s3c_i2sv2_info *i2s;
if (pdev->id >= MAX_I2SV3) {
dev_err(&pdev->dev, "id %d out of range\n", pdev->id);
return -EINVAL;
}
+ i2s = &s3c64xx_i2s[pdev->id];
+
+ i2s_pdata = pdev->dev.platform_data;
+ if (i2s_pdata && i2s_pdata->cfg_gpio && i2s_pdata->cfg_gpio(pdev)) {
+ dev_err(&pdev->dev, "Unable to configure gpio\n");
+ return -EINVAL;
+ }
+
return snd_soc_register_dais(&pdev->dev, s3c64xx_i2s_dai,
ARRAY_SIZE(s3c64xx_i2s_dai));
}
--
1.6.2.5
^ permalink raw reply related [flat|nested] 8+ messages in thread* [PATCHv2 2/4] ASoC: S3C64XX: Move DMA settings to platform
2010-07-16 6:16 [PATCHv2 0/4] ASoC: multi-component - Samsung S3C Platform Seungwhan Youn
2010-07-16 6:20 ` [PATCHv2 1/4] ASoC: S3C64XX: Move GPIO settings to platform Seungwhan Youn
@ 2010-07-16 6:24 ` Seungwhan Youn
2010-07-16 6:29 ` [PATCHv2 3/4] ASoC: multi-component - S3C - Get original functionality Seungwhan Youn
` (3 subsequent siblings)
5 siblings, 0 replies; 8+ messages in thread
From: Seungwhan Youn @ 2010-07-16 6:24 UTC (permalink / raw)
To: alsa-devel
Cc: Seungwhan Youn, Jassi Brar, Mark Brown, Seungwhan Youn,
Liam Girdwood
Remove the hardcoded values for DMA and SFR addresses. Instead enable
the CPU drivers to use the values provided via platform_data
Signed-off-by: Seungwhan Youn <sw.youn@samsung.com>
Reviewed-by: Jassi Brar <jassi.brar@samsung.com>
---
sound/soc/s3c24xx/s3c64xx-i2s-v4.c | 32 +++++++++++++++++--
sound/soc/s3c24xx/s3c64xx-i2s.c | 60 ++++++++++++++++++++++--------------
2 files changed, 65 insertions(+), 27 deletions(-)
diff --git a/sound/soc/s3c24xx/s3c64xx-i2s-v4.c b/sound/soc/s3c24xx/s3c64xx-i2s-v4.c
index 93ae973..74cf2b2 100644
--- a/sound/soc/s3c24xx/s3c64xx-i2s-v4.c
+++ b/sound/soc/s3c24xx/s3c64xx-i2s-v4.c
@@ -109,6 +109,7 @@ static __devinit int s3c64xx_i2sv4_dev_probe(struct platform_device *pdev)
{
struct s3c_audio_pdata *i2s_pdata;
struct s3c_i2sv2_info *i2s;
+ struct resource *res;
int ret;
i2s = &s3c64xx_i2sv4;
@@ -118,10 +119,33 @@ static __devinit int s3c64xx_i2sv4_dev_probe(struct platform_device *pdev)
i2s->dma_capture = &s3c64xx_i2sv4_pcm_stereo_in;
i2s->dma_playback = &s3c64xx_i2sv4_pcm_stereo_out;
- i2s->dma_capture->channel = DMACH_HSI_I2SV40_RX;
- i2s->dma_capture->dma_addr = S3C64XX_PA_IISV4 + S3C2412_IISRXD;
- i2s->dma_playback->channel = DMACH_HSI_I2SV40_TX;
- i2s->dma_playback->dma_addr = S3C64XX_PA_IISV4 + S3C2412_IISTXD;
+ res = platform_get_resource(pdev, IORESOURCE_DMA, 0);
+ if (!res) {
+ dev_err(&pdev->dev, "Unable to get I2S-TX dma resource\n");
+ return -ENXIO;
+ }
+ i2s->dma_playback->channel = res->start;
+
+ res = platform_get_resource(pdev, IORESOURCE_DMA, 1);
+ if (!res) {
+ dev_err(&pdev->dev, "Unable to get I2S-RX dma resource\n");
+ return -ENXIO;
+ }
+ i2s->dma_capture->channel = res->start;
+
+ res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+ if (!res) {
+ dev_err(&pdev->dev, "Unable to get I2S SFR address\n");
+ return -ENXIO;
+ }
+
+ if (!request_mem_region(res->start, resource_size(res),
+ "s3c64xx-i2s-v4")) {
+ dev_err(&pdev->dev, "Unable to request SFR region\n");
+ return -EBUSY;
+ }
+ i2s->dma_capture->dma_addr = res->start + S3C2412_IISRXD;
+ i2s->dma_playback->dma_addr = res->start + S3C2412_IISTXD;
i2s->dma_capture->client = &s3c64xx_dma_client_in;
i2s->dma_capture->dma_size = 4;
diff --git a/sound/soc/s3c24xx/s3c64xx-i2s.c b/sound/soc/s3c24xx/s3c64xx-i2s.c
index ab2ae47..c63925e 100644
--- a/sound/soc/s3c24xx/s3c64xx-i2s.c
+++ b/sound/soc/s3c24xx/s3c64xx-i2s.c
@@ -108,29 +108,6 @@ static int s3c64xx_i2s_probe(struct snd_soc_dai *dai)
i2s = &s3c64xx_i2s[dai->id];
snd_soc_dai_set_drvdata(dai, i2s);
- i2s->dma_capture = &s3c64xx_i2s_pcm_stereo_in[dai->id];
- i2s->dma_playback = &s3c64xx_i2s_pcm_stereo_out[dai->id];
-
- switch (dai->id) {
- case 0:
- i2s->dma_capture->channel = DMACH_I2S0_IN;
- i2s->dma_capture->dma_addr = S3C64XX_PA_IIS0 + S3C2412_IISRXD;
- i2s->dma_playback->channel = DMACH_I2S0_OUT;
- i2s->dma_playback->dma_addr = S3C64XX_PA_IIS0 + S3C2412_IISTXD;
- break;
- case 1:
- i2s->dma_capture->channel = DMACH_I2S1_IN;
- i2s->dma_capture->dma_addr = S3C64XX_PA_IIS1 + S3C2412_IISRXD;
- i2s->dma_playback->channel = DMACH_I2S1_OUT;
- i2s->dma_playback->dma_addr = S3C64XX_PA_IIS1 + S3C2412_IISTXD;
- break;
- }
-
- i2s->dma_capture->client = &s3c64xx_dma_client_in;
- i2s->dma_capture->dma_size = 4;
- i2s->dma_playback->client = &s3c64xx_dma_client_out;
- i2s->dma_playback->dma_size = 4;
-
i2s->iis_cclk = clk_get(dai->dev, "audio-bus");
if (IS_ERR(i2s->iis_cclk)) {
dev_err(dai->dev, "failed to get audio-bus\n");
@@ -199,6 +176,7 @@ static __devinit int s3c64xx_iis_dev_probe(struct platform_device *pdev)
{
struct s3c_audio_pdata *i2s_pdata;
struct s3c_i2sv2_info *i2s;
+ struct resource *res;
if (pdev->id >= MAX_I2SV3) {
dev_err(&pdev->dev, "id %d out of range\n", pdev->id);
@@ -207,11 +185,47 @@ static __devinit int s3c64xx_iis_dev_probe(struct platform_device *pdev)
i2s = &s3c64xx_i2s[pdev->id];
+ i2s->dma_capture = &s3c64xx_i2s_pcm_stereo_in[pdev->id];
+ i2s->dma_playback = &s3c64xx_i2s_pcm_stereo_out[pdev->id];
+
+ res = platform_get_resource(pdev, IORESOURCE_DMA, 0);
+ if (!res) {
+ dev_err(&pdev->dev, "Unable to get I2S-TX dma resource\n");
+ return -ENXIO;
+ }
+ i2s->dma_playback->channel = res->start;
+
+ res = platform_get_resource(pdev, IORESOURCE_DMA, 1);
+ if (!res) {
+ dev_err(&pdev->dev, "Unable to get I2S-RX dma resource\n");
+ return -ENXIO;
+ }
+ i2s->dma_capture->channel = res->start;
+
+ res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+ if (!res) {
+ dev_err(&pdev->dev, "Unable to get I2S SFR address\n");
+ return -ENXIO;
+ }
+
+ if (!request_mem_region(res->start, resource_size(res),
+ "s3c64xx-i2s")) {
+ dev_err(&pdev->dev, "Unable to request SFR region\n");
+ return -EBUSY;
+ }
+
i2s_pdata = pdev->dev.platform_data;
if (i2s_pdata && i2s_pdata->cfg_gpio && i2s_pdata->cfg_gpio(pdev)) {
dev_err(&pdev->dev, "Unable to configure gpio\n");
return -EINVAL;
}
+ i2s->dma_capture->dma_addr = res->start + S3C2412_IISRXD;
+ i2s->dma_playback->dma_addr = res->start + S3C2412_IISTXD;
+
+ i2s->dma_capture->client = &s3c64xx_dma_client_in;
+ i2s->dma_capture->dma_size = 4;
+ i2s->dma_playback->client = &s3c64xx_dma_client_out;
+ i2s->dma_playback->dma_size = 4;
return snd_soc_register_dais(&pdev->dev, s3c64xx_i2s_dai,
ARRAY_SIZE(s3c64xx_i2s_dai));
--
1.6.2.5
^ permalink raw reply related [flat|nested] 8+ messages in thread* [PATCHv2 3/4] ASoC: multi-component - S3C - Get original functionality
2010-07-16 6:16 [PATCHv2 0/4] ASoC: multi-component - Samsung S3C Platform Seungwhan Youn
2010-07-16 6:20 ` [PATCHv2 1/4] ASoC: S3C64XX: Move GPIO settings to platform Seungwhan Youn
2010-07-16 6:24 ` [PATCHv2 2/4] ASoC: S3C64XX: Move DMA " Seungwhan Youn
@ 2010-07-16 6:29 ` Seungwhan Youn
2010-07-16 8:52 ` Mark Brown
2010-07-16 6:35 ` [PATCHv2 4/4] ASoC: multi-component - S3C - Add WM9713 platform device Seungwhan Youn
` (2 subsequent siblings)
5 siblings, 1 reply; 8+ messages in thread
From: Seungwhan Youn @ 2010-07-16 6:29 UTC (permalink / raw)
To: alsa-devel
Cc: Seungwhan Youn, Jassi Brar, Mark Brown, Seungwhan Youn,
Liam Girdwood
In Samsung SoC's I2S was improved gradually from I2Sv2 to I2Sv4. So,
S3C I2S platform codes are designed to use privious features hierarchy.
This patch modify that s3c64xx-i2s use common features of s3c-i2s-v2
and remove duplicated function on s3c64xx-i2s.
Basically, restore the original code while keeping multicodec support
specific parts.
Signed-off-by: Seungwhan Youn <sw.youn@samsung.com>
Reviewed-by: Jassi Brar <jassi.brar@samsung.com>
---
sound/soc/s3c24xx/s3c-i2s-v2.h | 2 +
sound/soc/s3c24xx/s3c64xx-i2s-v4.c | 14 +++++++--
sound/soc/s3c24xx/s3c64xx-i2s.c | 56 +++++++++++-------------------------
3 files changed, 30 insertions(+), 42 deletions(-)
diff --git a/sound/soc/s3c24xx/s3c-i2s-v2.h b/sound/soc/s3c24xx/s3c-i2s-v2.h
index c2a4bad..d458301 100644
--- a/sound/soc/s3c24xx/s3c-i2s-v2.h
+++ b/sound/soc/s3c24xx/s3c-i2s-v2.h
@@ -66,6 +66,8 @@ struct s3c_i2sv2_info {
u32 suspend_iismod;
u32 suspend_iiscon;
u32 suspend_iispsr;
+
+ unsigned long base;
};
extern struct clk *s3c_i2sv2_get_clock(struct snd_soc_dai *cpu_dai);
diff --git a/sound/soc/s3c24xx/s3c64xx-i2s-v4.c b/sound/soc/s3c24xx/s3c64xx-i2s-v4.c
index 74cf2b2..f09d819 100644
--- a/sound/soc/s3c24xx/s3c64xx-i2s-v4.c
+++ b/sound/soc/s3c24xx/s3c64xx-i2s-v4.c
@@ -39,8 +39,14 @@ static struct s3c_i2sv2_info s3c64xx_i2sv4;
static int s3c64xx_i2sv4_probe(struct snd_soc_dai *dai)
{
- /* do nothing */
- return 0;
+ struct s3c_i2sv2_info *i2s = &s3c64xx_i2sv4;
+ int ret = 0;
+
+ snd_soc_dai_set_drvdata(dai, i2s);
+
+ ret = s3c_i2sv2_probe(dai, i2s, i2s->base);
+
+ return ret;
}
static int s3c_i2sv4_hw_params(struct snd_pcm_substream *substream,
@@ -152,6 +158,8 @@ static __devinit int s3c64xx_i2sv4_dev_probe(struct platform_device *pdev)
i2s->dma_playback->client = &s3c64xx_dma_client_out;
i2s->dma_playback->dma_size = 4;
+ i2s->base = res->start;
+
i2s_pdata = pdev->dev.platform_data;
if (i2s_pdata && i2s_pdata->cfg_gpio && i2s_pdata->cfg_gpio(pdev)) {
dev_err(&pdev->dev, "Unable to configure gpio\n");
@@ -167,7 +175,7 @@ static __devinit int s3c64xx_i2sv4_dev_probe(struct platform_device *pdev)
clk_enable(i2s->iis_cclk);
- ret = snd_soc_register_dai(&pdev->dev, pdev->id, &s3c64xx_i2s_v4_dai);
+ ret = s3c_i2sv2_register_dai(&pdev->dev, pdev->id, &s3c64xx_i2s_v4_dai);
if (ret != 0)
goto err_i2sv2;
diff --git a/sound/soc/s3c24xx/s3c64xx-i2s.c b/sound/soc/s3c24xx/s3c64xx-i2s.c
index c63925e..86bb639 100644
--- a/sound/soc/s3c24xx/s3c64xx-i2s.c
+++ b/sound/soc/s3c24xx/s3c64xx-i2s.c
@@ -46,43 +46,6 @@ static struct s3c_dma_params s3c64xx_i2s_pcm_stereo_out[MAX_I2SV3];
static struct s3c_dma_params s3c64xx_i2s_pcm_stereo_in[MAX_I2SV3];
static struct s3c_i2sv2_info s3c64xx_i2s[MAX_I2SV3];
-static int s3c64xx_i2s_set_sysclk(struct snd_soc_dai *cpu_dai,
- int clk_id, unsigned int freq, int dir)
-{
- struct s3c_i2sv2_info *i2s = snd_soc_dai_get_drvdata(cpu_dai);
- u32 iismod = readl(i2s->regs + S3C2412_IISMOD);
-
- switch (clk_id) {
- case S3C64XX_CLKSRC_PCLK:
- iismod &= ~S3C2412_IISMOD_IMS_SYSMUX;
- break;
-
- case S3C64XX_CLKSRC_MUX:
- iismod |= S3C2412_IISMOD_IMS_SYSMUX;
- break;
-
- case S3C64XX_CLKSRC_CDCLK:
- switch (dir) {
- case SND_SOC_CLOCK_IN:
- iismod |= S3C64XX_IISMOD_CDCLKCON;
- break;
- case SND_SOC_CLOCK_OUT:
- iismod &= ~S3C64XX_IISMOD_CDCLKCON;
- break;
- default:
- return -EINVAL;
- }
- break;
-
- default:
- return -EINVAL;
- }
-
- writel(iismod, i2s->regs + S3C2412_IISMOD);
-
- return 0;
-}
-
struct clk *s3c64xx_i2s_get_clock(struct snd_soc_dai *dai)
{
struct s3c_i2sv2_info *i2s = snd_soc_dai_get_drvdata(dai);
@@ -117,8 +80,15 @@ static int s3c64xx_i2s_probe(struct snd_soc_dai *dai)
clk_enable(i2s->iis_cclk);
+ ret = s3c_i2sv2_probe(dai, i2s, i2s->base);
+ if (ret)
+ goto err_clk;
+
return 0;
+err_clk:
+ clk_disable(i2s->iis_cclk);
+ clk_put(i2s->iis_cclk);
err:
kfree(i2s);
return ret;
@@ -177,6 +147,7 @@ static __devinit int s3c64xx_iis_dev_probe(struct platform_device *pdev)
struct s3c_audio_pdata *i2s_pdata;
struct s3c_i2sv2_info *i2s;
struct resource *res;
+ int i, ret;
if (pdev->id >= MAX_I2SV3) {
dev_err(&pdev->dev, "id %d out of range\n", pdev->id);
@@ -213,6 +184,7 @@ static __devinit int s3c64xx_iis_dev_probe(struct platform_device *pdev)
dev_err(&pdev->dev, "Unable to request SFR region\n");
return -EBUSY;
}
+ i2s->base = res->start;
i2s_pdata = pdev->dev.platform_data;
if (i2s_pdata && i2s_pdata->cfg_gpio && i2s_pdata->cfg_gpio(pdev)) {
@@ -227,8 +199,14 @@ static __devinit int s3c64xx_iis_dev_probe(struct platform_device *pdev)
i2s->dma_playback->client = &s3c64xx_dma_client_out;
i2s->dma_playback->dma_size = 4;
- return snd_soc_register_dais(&pdev->dev, s3c64xx_i2s_dai,
- ARRAY_SIZE(s3c64xx_i2s_dai));
+ for (i = 0; i < ARRAY_SIZE(s3c64xx_i2s_dai); i++) {
+ ret = s3c_i2sv2_register_dai(&pdev->dev, i,
+ &s3c64xx_i2s_dai[i]);
+ if (ret != 0)
+ return ret;
+ }
+
+ return 0;
}
static __devexit int s3c64xx_iis_dev_remove(struct platform_device *pdev)
--
1.6.2.5
^ permalink raw reply related [flat|nested] 8+ messages in thread* [PATCHv2 4/4] ASoC: multi-component - S3C - Add WM9713 platform device
2010-07-16 6:16 [PATCHv2 0/4] ASoC: multi-component - Samsung S3C Platform Seungwhan Youn
` (2 preceding siblings ...)
2010-07-16 6:29 ` [PATCHv2 3/4] ASoC: multi-component - S3C - Get original functionality Seungwhan Youn
@ 2010-07-16 6:35 ` Seungwhan Youn
2010-07-16 8:33 ` [PATCHv2 0/4] ASoC: multi-component - Samsung S3C Platform Mark Brown
2010-07-17 18:16 ` Liam Girdwood
5 siblings, 0 replies; 8+ messages in thread
From: Seungwhan Youn @ 2010-07-16 6:35 UTC (permalink / raw)
To: alsa-devel
Cc: Seungwhan Youn, Jassi Brar, Mark Brown, Seungwhan Youn,
Liam Girdwood
As a requirement of multicodec changes, we need a platform device
for each CODEC. Instead of add that in machine init code, do it here
so a new device is added only if we choose to use it.
Signed-off-by: Seungwhan Youn <sw.youn@samsung.com>
Reviewed-by: Jassi Brar <jassi.brar@samsung.com>
---
sound/soc/s3c24xx/smdk_wm9713.c | 22 +++++++++++++++++++---
1 files changed, 19 insertions(+), 3 deletions(-)
diff --git a/sound/soc/s3c24xx/smdk_wm9713.c b/sound/soc/s3c24xx/smdk_wm9713.c
index 001c2dd..f8aed14 100644
--- a/sound/soc/s3c24xx/smdk_wm9713.c
+++ b/sound/soc/s3c24xx/smdk_wm9713.c
@@ -60,22 +60,38 @@ static struct snd_soc_card smdk = {
.num_links = 1,
};
+static struct platform_device *smdk_snd_wm9713_device;
static struct platform_device *smdk_snd_ac97_device;
static int __init smdk_init(void)
{
int ret;
- smdk_snd_ac97_device = platform_device_alloc("soc-audio", -1);
- if (!smdk_snd_ac97_device)
+ smdk_snd_wm9713_device = platform_device_alloc("wm9713-codec", -1);
+ if (!smdk_snd_wm9713_device)
return -ENOMEM;
+ ret = platform_device_add(smdk_snd_wm9713_device);
+ if (ret)
+ goto err;
+
+ smdk_snd_ac97_device = platform_device_alloc("soc-audio", -1);
+ if (!smdk_snd_ac97_device) {
+ ret = -ENOMEM;
+ goto err;
+ }
+
platform_set_drvdata(smdk_snd_ac97_device, &smdk);
ret = platform_device_add(smdk_snd_ac97_device);
- if (ret)
+ if (ret) {
platform_device_put(smdk_snd_ac97_device);
+ goto err;
+ }
+ return 0;
+err:
+ platform_device_put(smdk_snd_wm9713_device);
return ret;
}
--
1.6.2.5
^ permalink raw reply related [flat|nested] 8+ messages in thread* Re: [PATCHv2 0/4] ASoC: multi-component - Samsung S3C Platform
2010-07-16 6:16 [PATCHv2 0/4] ASoC: multi-component - Samsung S3C Platform Seungwhan Youn
` (3 preceding siblings ...)
2010-07-16 6:35 ` [PATCHv2 4/4] ASoC: multi-component - S3C - Add WM9713 platform device Seungwhan Youn
@ 2010-07-16 8:33 ` Mark Brown
2010-07-17 18:16 ` Liam Girdwood
5 siblings, 0 replies; 8+ messages in thread
From: Mark Brown @ 2010-07-16 8:33 UTC (permalink / raw)
To: Seungwhan Youn; +Cc: alsa-devel, Jassi Brar, Seungwhan Youn, Liam Girdwood
On Fri, Jul 16, 2010 at 03:16:17PM +0900, Seungwhan Youn wrote:
> This is a second version of patch series adding support for multi
> component model on Samsung S3C Platform.
All of these look fine, though I do have one comment I'll reply with
separately.
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
^ permalink raw reply [flat|nested] 8+ messages in thread* Re: [PATCHv2 0/4] ASoC: multi-component - Samsung S3C Platform
2010-07-16 6:16 [PATCHv2 0/4] ASoC: multi-component - Samsung S3C Platform Seungwhan Youn
` (4 preceding siblings ...)
2010-07-16 8:33 ` [PATCHv2 0/4] ASoC: multi-component - Samsung S3C Platform Mark Brown
@ 2010-07-17 18:16 ` Liam Girdwood
5 siblings, 0 replies; 8+ messages in thread
From: Liam Girdwood @ 2010-07-17 18:16 UTC (permalink / raw)
To: Seungwhan Youn; +Cc: Jassi Brar, alsa-devel, Mark Brown, Seungwhan Youn
On Fri, 2010-07-16 at 15:16 +0900, Seungwhan Youn wrote:
> Hi,
>
> This is a second version of patch series adding support for multi
> component model on Samsung S3C Platform.
>
> This patch series can be apply upon "ASoC: multi-component - Fix S3C
> compile error" in the first patch of V1 that already applied by Liam.
>
> Changes since V1:
> - Support for GPIO, DMA and SFR settings pull from platform device
> resource.
> - Modify description of add WM9713 platform device on smdk board.
>
> The following patch series contains:
>
> [PATCHv2 1/4] ASoC: S3C64XX: Move GPIO settings to platform
> [PATCHv2 2/4] ASoC: S3C64XX: Move DMA settings to platform
> [PATCHv2 3/4] ASoC: multi-component - S3C - Get original functionality
> [PATCHv2 4/4] ASoC: multi-component - S3C - Add WM9713 platform device
>
Thanks
All applied.
Liam
--
Freelance Developer, SlimLogic Ltd
ASoC and Voltage Regulator Maintainer.
http://www.slimlogic.co.uk
^ permalink raw reply [flat|nested] 8+ messages in thread