aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTushar Behera <tushar.behera@linaro.org>2012-08-21 12:18:56 +0530
committerTushar Behera <tushar.behera@linaro.org>2012-08-21 12:18:56 +0530
commit24fefd295809480f38083815509a573010575cd8 (patch)
tree224a22c3d8d5c421d0bd3eef93b3c69409e9a316
parent706a53a470b305f7dc25f334acb59d6bd443f4e1 (diff)
origen-dt-audio: workingv3.6-rc2-origen-dt-audio-working
Signed-off-by: Tushar Behera <tushar.behera@linaro.org>
-rw-r--r--arch/arm/boot/dts/exynos4210-origen.dts39
-rw-r--r--arch/arm/boot/dts/exynos4210.dtsi22
-rw-r--r--arch/arm/mach-exynos/clock-exynos4.c2
-rw-r--r--arch/arm/mach-exynos/mach-exynos4-dt.c5
-rw-r--r--drivers/staging/alc5625/alc5625.c16
-rw-r--r--drivers/staging/alc5625/origen_alc5625.c7
-rw-r--r--sound/soc/samsung/dma.c20
-rw-r--r--sound/soc/samsung/i2s.c20
-rw-r--r--sound/soc/soc-core.c10
9 files changed, 122 insertions, 19 deletions
diff --git a/arch/arm/boot/dts/exynos4210-origen.dts b/arch/arm/boot/dts/exynos4210-origen.dts
index 304deeada10..3655e977306 100644
--- a/arch/arm/boot/dts/exynos4210-origen.dts
+++ b/arch/arm/boot/dts/exynos4210-origen.dts
@@ -243,6 +243,13 @@
regulator-always-on;
};
+ ldo11_reg: LDO11 {
+ regulator-name = "VDD_AUD_3V";
+ regulator-min-microvolt = <3000000>;
+ regulator-max-microvolt = <3000000>;
+ regulator-always-on;
+ };
+
ldo17_reg: LDO17 {
regulator-name = "vmmc";
regulator-min-microvolt = <3300000>;
@@ -261,7 +268,18 @@
};
i2c@13870000 {
- status = "disabled";
+ #address-cells = <1>;
+ #size-cells = <0>;
+ samsung,i2c-sda-delay = <100>;
+ samsung,i2c-max-bus-freq = <20000>;
+ gpios = <&gpd1 2 2 3 0>,
+ <&gpd1 3 2 3 0>;
+
+ codec: alc5625@1e {
+ compatible = "realtek,alc5625";
+ reg = <0x1e>;
+ };
+
};
i2c@13880000 {
@@ -299,6 +317,25 @@
spi_2: spi@13940000 {
status = "disabled";
};
+
+ i2s_0: i2s@03830000 {
+ gpios = <&gpz 0 2 0 0>,
+ <&gpz 1 2 0 0>,
+ <&gpz 2 2 0 0>,
+ <&gpz 3 2 0 0>,
+ <&gpz 4 2 0 0>,
+ <&gpz 5 2 0 0>,
+ <&gpz 6 2 0 0>;
+ idma-addr = <0x03000000>;
+ };
+
+ asoc_dma {
+ compatible = "samsung,audio-dma";
+ };
+
+ origen_audio {
+ compatible = "samsung,origen_audio";
+ };
pd_cam: pd-cam {
compatible = "samsung,exynos4210-pd";
diff --git a/arch/arm/boot/dts/exynos4210.dtsi b/arch/arm/boot/dts/exynos4210.dtsi
index 8ff1f2c4c01..df998b9da94 100644
--- a/arch/arm/boot/dts/exynos4210.dtsi
+++ b/arch/arm/boot/dts/exynos4210.dtsi
@@ -29,6 +29,7 @@
spi0 = &spi_0;
spi1 = &spi_1;
spi2 = &spi_2;
+ i2s0 = &i2s_0;
};
gic:interrupt-controller@10490000 {
@@ -479,15 +480,14 @@
interrupts = <0 70 0>;
};
-i2s@03830000 {
- compatible = "samsung,samsung-i2s";
- reg = <0x03830000 0x100>;
- tx-dma-channel-secondary = <&pdma0 8>;
- tx-dma-channel = <&pdma0 10>;
- rx-dma-channel = <&pdma0 9>;
- supports-6ch;
- supports-rstclr;
- supports-secdai;
-};
-
+ i2s_0: i2s@03830000 {
+ compatible = "samsung,samsung-i2s";
+ reg = <0x03830000 0x100>;
+ tx-dma-channel-secondary = <&pdma0 10>;
+ tx-dma-channel = <&pdma0 12>;
+ rx-dma-channel = <&pdma0 11>;
+ supports-6ch;
+ supports-rstclr;
+ supports-secdai;
+ };
};
diff --git a/arch/arm/mach-exynos/clock-exynos4.c b/arch/arm/mach-exynos/clock-exynos4.c
index 66ab620c893..88098161007 100644
--- a/arch/arm/mach-exynos/clock-exynos4.c
+++ b/arch/arm/mach-exynos/clock-exynos4.c
@@ -830,7 +830,7 @@ static struct clksrc_sources exynos4_clkset_mout_audss = {
static struct clksrc_clk exynos4_clk_mout_audss = {
.clk = {
- .name = "busclk",
+ .name = "i2s_opclk0",
},
.sources = &exynos4_clkset_mout_audss,
.reg_src = { .reg = EXYNOS4_CLKSRC_AUDSS, .shift = 0, .size = 1 },
diff --git a/arch/arm/mach-exynos/mach-exynos4-dt.c b/arch/arm/mach-exynos/mach-exynos4-dt.c
index 65b9f619f91..076a8a3e3b7 100644
--- a/arch/arm/mach-exynos/mach-exynos4-dt.c
+++ b/arch/arm/mach-exynos/mach-exynos4-dt.c
@@ -89,6 +89,8 @@ static const struct of_dev_auxdata exynos4210_auxdata_lookup[] __initconst = {
"exynos4-sdhci.3", NULL),
OF_DEV_AUXDATA("samsung,s3c2440-i2c", EXYNOS4_PA_IIC(0),
"s3c2440-i2c.0", NULL),
+ OF_DEV_AUXDATA("samsung,s3c2440-i2c", EXYNOS4_PA_IIC(1),
+ "s3c2440-i2c.1", NULL),
OF_DEV_AUXDATA("samsung,exynos4210-spi", EXYNOS4_PA_SPI0,
"exynos4210-spi.0", NULL),
OF_DEV_AUXDATA("samsung,exynos4210-spi", EXYNOS4_PA_SPI1,
@@ -103,6 +105,9 @@ static const struct of_dev_auxdata exynos4210_auxdata_lookup[] __initconst = {
&origen_ohci_pdata),
OF_DEV_AUXDATA("samsung,exynos4210-fimd", EXYNOS4_PA_FIMD0,
"exynos4-fb.0", NULL),
+ OF_DEV_AUXDATA("samsung,samsung-i2s", EXYNOS4_PA_I2S0,
+ "samsung-i2s.0", NULL),
+ OF_DEV_AUXDATA("samsung,audio-dma", 0, "samsung-audio", NULL),
{},
};
diff --git a/drivers/staging/alc5625/alc5625.c b/drivers/staging/alc5625/alc5625.c
index 8f1ae4c869e..33f37f93bde 100644
--- a/drivers/staging/alc5625/alc5625.c
+++ b/drivers/staging/alc5625/alc5625.c
@@ -2206,26 +2206,32 @@ static __devinit int alc5625_i2c_probe(struct i2c_client *i2c,
struct alc5625_priv *alc5625;
int ret;
+ printk("%s(%d)\n", __func__, __LINE__);
+
alc5625 = kzalloc(sizeof(struct alc5625_priv), GFP_KERNEL);
if (alc5625 == NULL)
return -ENOMEM;
+ printk("%s(%d)\n", __func__, __LINE__);
alc5625->regmap = regmap_init_i2c(i2c, &alc5625_i2c_regmap_config);
if (IS_ERR(alc5625->regmap)) {
ret = PTR_ERR(alc5625->regmap);
goto err_free;
}
+ printk("%s(%d)\n", __func__, __LINE__);
i2c_set_clientdata(i2c, alc5625);
alc5625->control_data = i2c;
alc5625->control_type = SND_SOC_REGMAP;
+ printk("%s(%d)\n", __func__, __LINE__);
ret = snd_soc_register_codec(&i2c->dev, &soc_codec_dev_alc5625,
alc5625_dai, ARRAY_SIZE(alc5625_dai));
if (ret < 0)
goto err_regmap;
+ printk("%s(%d) ret=%d\n", __func__, __LINE__, ret);
return ret;
err_regmap:
@@ -2233,6 +2239,7 @@ err_regmap:
err_free:
if (ret < 0)
kfree(alc5625);
+ printk("%s(%d) ret=%d\n", __func__, __LINE__, ret);
return ret;
}
@@ -2252,18 +2259,25 @@ static const struct i2c_device_id alc5625_i2c_id[] = {
};
MODULE_DEVICE_TABLE(i2c, alc5625_i2c_id);
+static const struct of_device_id alc5625_of_match[] = {
+ { .compatible = "realtek,alc5625", },
+ { }
+};
+MODULE_DEVICE_TABLE(of, alc5625_of_match);
+
static struct i2c_driver alc5625_i2c_driver = {
.driver = {
.name = "alc5625-codec",
.owner = THIS_MODULE,
+ .of_match_table = alc5625_of_match,
},
.probe = alc5625_i2c_probe,
.remove = __devexit_p(alc5625_i2c_remove),
.id_table = alc5625_i2c_id,
};
-#endif
module_i2c_driver(alc5625_i2c_driver);
+#endif
MODULE_DESCRIPTION("ASoC ALC5625 driver");
MODULE_LICENSE("GPL");
diff --git a/drivers/staging/alc5625/origen_alc5625.c b/drivers/staging/alc5625/origen_alc5625.c
index 75c1d2e6cd6..f2b6f3585a0 100644
--- a/drivers/staging/alc5625/origen_alc5625.c
+++ b/drivers/staging/alc5625/origen_alc5625.c
@@ -202,10 +202,17 @@ static int __devexit origen_audio_remove(struct platform_device *pdev)
return 0;
}
+static const struct of_device_id origen_audio_of_match[] = {
+ { .compatible = "samsung,origen_audio", },
+ { }
+};
+MODULE_DEVICE_TABLE(of, origen_audio_of_match);
+
static struct platform_driver origen_audio_driver = {
.driver = {
.name = "origen-audio",
.owner = THIS_MODULE,
+ .of_match_table = origen_audio_of_match,
},
.probe = origen_audio_probe,
.remove = __devexit_p(origen_audio_remove),
diff --git a/sound/soc/samsung/dma.c b/sound/soc/samsung/dma.c
index 28a7c374f86..085417e61ff 100644
--- a/sound/soc/samsung/dma.c
+++ b/sound/soc/samsung/dma.c
@@ -439,9 +439,20 @@ static struct snd_soc_platform_driver samsung_asoc_platform = {
.pcm_free = dma_free_dma_buffers,
};
+static u64 asoc_dma_mask = DMA_BIT_MASK(32);
+
static int __devinit samsung_asoc_platform_probe(struct platform_device *pdev)
{
- return snd_soc_register_platform(&pdev->dev, &samsung_asoc_platform);
+ int ret;
+
+ if (!pdev->dev.dma_mask)
+ pdev->dev.dma_mask = &asoc_dma_mask;
+ if (!pdev->dev.coherent_dma_mask)
+ pdev->dev.coherent_dma_mask = DMA_BIT_MASK(32);
+
+ ret = snd_soc_register_platform(&pdev->dev, &samsung_asoc_platform);
+ printk("### %s():%d ret(%d)\n", __func__, __LINE__, ret);
+ return ret;
}
static int __devexit samsung_asoc_platform_remove(struct platform_device *pdev)
@@ -450,10 +461,17 @@ static int __devexit samsung_asoc_platform_remove(struct platform_device *pdev)
return 0;
}
+static const struct of_device_id asoc_dma_of_match[] = {
+ { .compatible = "samsung,audio-dma", },
+ { }
+};
+MODULE_DEVICE_TABLE(of, asoc_dma_of_match);
+
static struct platform_driver asoc_dma_driver = {
.driver = {
.name = "samsung-audio",
.owner = THIS_MODULE,
+ .of_match_table = asoc_dma_of_match,
},
.probe = samsung_asoc_platform_probe,
diff --git a/sound/soc/samsung/i2s.c b/sound/soc/samsung/i2s.c
index 04b8ec8cc9d..403ffe2aba7 100644
--- a/sound/soc/samsung/i2s.c
+++ b/sound/soc/samsung/i2s.c
@@ -423,6 +423,7 @@ static int i2s_set_sysclk(struct snd_soc_dai *dai,
else
clk_id = 1;
+ printk("### %s():%d\n", __func__, __LINE__);
if (!any_active(i2s)) {
if (i2s->op_clk) {
if ((clk_id && !(mod & MOD_IMS_SYSMUX)) ||
@@ -432,6 +433,7 @@ static int i2s_set_sysclk(struct snd_soc_dai *dai,
} else {
i2s->rclk_srcrate =
clk_get_rate(i2s->op_clk);
+ printk("### %s():%d\n", __func__, __LINE__);
return 0;
}
}
@@ -439,6 +441,10 @@ static int i2s_set_sysclk(struct snd_soc_dai *dai,
sprintf(clk_name, "i2s_opclk%d", clk_id);
i2s->op_clk = clk_get(&i2s->pdev->dev,
clk_name);
+ if (IS_ERR(i2s->op_clk)) {
+ printk("### %s():%d failed to get %s\n", __func__, __LINE__, clk_name);
+ };
+
clk_enable(i2s->op_clk);
i2s->rclk_srcrate = clk_get_rate(i2s->op_clk);
@@ -1070,6 +1076,8 @@ static __devinit int samsung_i2s_probe(struct platform_device *pdev)
id = pdev->id;
}
+ printk("%s(%d) id = %d\n", __func__, __LINE__, id);
+
if (id >= SAMSUNG_I2S_SECOFF) {
sec_dai = dev_get_drvdata(&pdev->dev);
snd_soc_register_dai(&sec_dai->pdev->dev,
@@ -1077,12 +1085,14 @@ static __devinit int samsung_i2s_probe(struct platform_device *pdev)
return 0;
}
+ printk("%s(%d)\n", __func__, __LINE__);
pri_dai = i2s_alloc_dai(pdev, false);
if (!pri_dai) {
dev_err(&pdev->dev, "Unable to alloc I2S_pri\n");
return -ENOMEM;
}
+ printk("%s(%d)\n", __func__, __LINE__);
if (!np) {
res = platform_get_resource(pdev, IORESOURCE_DMA, 0);
if (!res) {
@@ -1091,6 +1101,7 @@ static __devinit int samsung_i2s_probe(struct platform_device *pdev)
return -ENXIO;
}
dma_pl_chan = res->start;
+ printk("%s(%d)\n", __func__, __LINE__);
res = platform_get_resource(pdev, IORESOURCE_DMA, 1);
if (!res) {
@@ -1099,6 +1110,7 @@ static __devinit int samsung_i2s_probe(struct platform_device *pdev)
return -ENXIO;
}
dma_cp_chan = res->start;
+ printk("%s(%d)\n", __func__, __LINE__);
res = platform_get_resource(pdev, IORESOURCE_DMA, 2);
if (res)
@@ -1114,6 +1126,7 @@ static __devinit int samsung_i2s_probe(struct platform_device *pdev)
"specified\n");
return -ENXIO;
}
+ printk("%s(%d)\n", __func__, __LINE__);
dma_pl_chan = DMACH_DT_PROP;
pri_dai->dma_playback.dma_prop = prop;
@@ -1123,6 +1136,7 @@ static __devinit int samsung_i2s_probe(struct platform_device *pdev)
"specified\n");
return -ENXIO;
}
+ printk("%s(%d)\n", __func__, __LINE__);
dma_cp_chan = DMACH_DT_PROP;
pri_dai->dma_capture.dma_prop = prop;
@@ -1141,6 +1155,7 @@ static __devinit int samsung_i2s_probe(struct platform_device *pdev)
"specified");
return -EINVAL;
}
+ printk("%s(%d)\n", __func__, __LINE__);
}
}
@@ -1149,12 +1164,14 @@ static __devinit int samsung_i2s_probe(struct platform_device *pdev)
dev_err(&pdev->dev, "Unable to get I2S SFR address\n");
return -ENXIO;
}
+ printk("%s(%d)\n", __func__, __LINE__);
if (!request_mem_region(res->start, resource_size(res),
"samsung-i2s")) {
dev_err(&pdev->dev, "Unable to request SFR region\n");
return -EBUSY;
}
+ printk("%s(%d)\n", __func__, __LINE__);
regs_base = res->start;
pri_dai->dma_playback.dma_addr = regs_base + I2STXD;
@@ -1208,6 +1225,7 @@ static __devinit int samsung_i2s_probe(struct platform_device *pdev)
pri_dai->sec_dai = sec_dai;
}
+ printk("%s(%d)\n", __func__, __LINE__);
if (np) {
if (samsung_i2s_parse_dt_gpio(pri_dai)) {
dev_err(&pdev->dev, "Unable to configure gpio\n");
@@ -1222,6 +1240,7 @@ static __devinit int samsung_i2s_probe(struct platform_device *pdev)
}
}
+ printk("%s(%d)\n", __func__, __LINE__);
snd_soc_register_dai(&pri_dai->pdev->dev, &pri_dai->i2s_dai_drv);
pm_runtime_enable(&pdev->dev);
@@ -1230,6 +1249,7 @@ static __devinit int samsung_i2s_probe(struct platform_device *pdev)
err:
release_mem_region(regs_base, resource_size(res));
+ printk("%s(%d)\n", __func__, __LINE__);
return ret;
}
diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c
index f81c5976b96..d83f461dd55 100644
--- a/sound/soc/soc-core.c
+++ b/sound/soc/soc-core.c
@@ -826,7 +826,7 @@ static int soc_bind_dai_link(struct snd_soc_card *card, int num)
}
if (!rtd->cpu_dai) {
- dev_dbg(card->dev, "CPU DAI %s not registered\n",
+ dev_err(card->dev, "CPU DAI %s not registered\n",
dai_link->cpu_dai_name);
return -EPROBE_DEFER;
}
@@ -857,14 +857,14 @@ static int soc_bind_dai_link(struct snd_soc_card *card, int num)
}
if (!rtd->codec_dai) {
- dev_dbg(card->dev, "CODEC DAI %s not registered\n",
+ dev_err(card->dev, "CODEC DAI %s not registered\n",
dai_link->codec_dai_name);
return -EPROBE_DEFER;
}
}
if (!rtd->codec) {
- dev_dbg(card->dev, "CODEC %s not registered\n",
+ dev_err(card->dev, "CODEC %s not registered\n",
dai_link->codec_name);
return -EPROBE_DEFER;
}
@@ -888,7 +888,7 @@ static int soc_bind_dai_link(struct snd_soc_card *card, int num)
rtd->platform = platform;
}
if (!rtd->platform) {
- dev_dbg(card->dev, "platform %s not registered\n",
+ dev_err(card->dev, "platform %s not registered\n",
dai_link->platform_name);
return -EPROBE_DEFER;
}
@@ -1481,6 +1481,8 @@ static int soc_check_aux_dev(struct snd_soc_card *card, int num)
return 0;
}
+ printk("%s(%d) deferring probe\n", __func__, __LINE__);
+
return -EPROBE_DEFER;
}