diff options
author | Tushar Behera <tushar.behera@linaro.org> | 2012-08-21 12:18:56 +0530 |
---|---|---|
committer | Tushar Behera <tushar.behera@linaro.org> | 2012-08-21 12:18:56 +0530 |
commit | 24fefd295809480f38083815509a573010575cd8 (patch) | |
tree | 224a22c3d8d5c421d0bd3eef93b3c69409e9a316 | |
parent | 706a53a470b305f7dc25f334acb59d6bd443f4e1 (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.dts | 39 | ||||
-rw-r--r-- | arch/arm/boot/dts/exynos4210.dtsi | 22 | ||||
-rw-r--r-- | arch/arm/mach-exynos/clock-exynos4.c | 2 | ||||
-rw-r--r-- | arch/arm/mach-exynos/mach-exynos4-dt.c | 5 | ||||
-rw-r--r-- | drivers/staging/alc5625/alc5625.c | 16 | ||||
-rw-r--r-- | drivers/staging/alc5625/origen_alc5625.c | 7 | ||||
-rw-r--r-- | sound/soc/samsung/dma.c | 20 | ||||
-rw-r--r-- | sound/soc/samsung/i2s.c | 20 | ||||
-rw-r--r-- | sound/soc/soc-core.c | 10 |
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; } |