From adabc89fd3c2de6d0fc7b1348df1802e7242a98a Mon Sep 17 00:00:00 2001 From: Axel Lin Date: Thu, 22 Dec 2011 11:08:59 +0800 Subject: [PATCH] --- yaml --- r: 284083 b: refs/heads/master c: b425b88418e302caf27e9cf44aa987b83c04cb2d h: refs/heads/master i: 284081: 27be3f079e561f246be5234fca78e9f36b306d53 284079: 64d6e24d159dc5dc1e9b95dd308195e24dd4c7a2 v: v3 --- [refs] | 2 +- trunk/arch/arm/mach-pxa/corgi.c | 9 --- trunk/arch/arm/mach-pxa/poodle.c | 6 -- trunk/sound/soc/au1x/ac97c.c | 40 +++++++---- trunk/sound/soc/au1x/dbdma2.c | 14 ++-- trunk/sound/soc/au1x/dma.c | 12 +++- trunk/sound/soc/au1x/i2sc.c | 45 ++++++++---- trunk/sound/soc/au1x/psc-ac97.c | 41 +++++++---- trunk/sound/soc/au1x/psc-i2s.c | 42 +++++++---- trunk/sound/soc/codecs/88pm860x-codec.c | 7 +- trunk/sound/soc/codecs/ad1836.c | 7 +- trunk/sound/soc/codecs/ad193x.c | 19 ++--- trunk/sound/soc/codecs/adau1373.c | 6 +- trunk/sound/soc/codecs/adau1701.c | 6 +- trunk/sound/soc/codecs/ak4641.c | 7 +- trunk/sound/soc/codecs/alc5623.c | 11 ++- trunk/sound/soc/codecs/cs4270.c | 6 +- trunk/sound/soc/codecs/cs42l51.c | 8 ++- trunk/sound/soc/codecs/da7210.c | 84 ++-------------------- trunk/sound/soc/codecs/jz4740.c | 12 ++-- trunk/sound/soc/codecs/lm4857.c | 13 +++- trunk/sound/soc/codecs/max98088.c | 6 +- trunk/sound/soc/codecs/max98095.c | 7 +- trunk/sound/soc/codecs/max9850.c | 6 +- trunk/sound/soc/codecs/rt5631.c | 7 +- trunk/sound/soc/codecs/sgtl5000.c | 16 +++-- trunk/sound/soc/codecs/ssm2602.c | 12 ++-- trunk/sound/soc/codecs/sta32x.c | 14 ++-- trunk/sound/soc/codecs/tlv320aic23.c | 5 +- trunk/sound/soc/codecs/tlv320aic26.c | 8 ++- trunk/sound/soc/codecs/tlv320aic32x4.c | 6 +- trunk/sound/soc/codecs/tlv320aic3x.c | 5 +- trunk/sound/soc/codecs/tlv320dac33.c | 6 +- trunk/sound/soc/codecs/tpa6130a2.c | 5 +- trunk/sound/soc/codecs/uda1380.c | 6 +- trunk/sound/soc/codecs/wm5100.c | 9 --- trunk/sound/soc/codecs/wm8580.c | 8 +-- trunk/sound/soc/codecs/wm8776.c | 1 - trunk/sound/soc/codecs/wm8903.c | 18 ++--- trunk/sound/soc/codecs/wm8962.c | 19 +---- trunk/sound/soc/codecs/wm8994.c | 10 +-- trunk/sound/soc/codecs/wm8996.c | 8 --- trunk/sound/soc/davinci/davinci-i2s.c | 39 ++++++---- trunk/sound/soc/davinci/davinci-mcasp.c | 40 +++++++---- trunk/sound/soc/davinci/davinci-vcif.c | 14 ++-- trunk/sound/soc/kirkwood/kirkwood-i2s.c | 3 +- trunk/sound/soc/kirkwood/kirkwood-openrd.c | 14 +++- trunk/sound/soc/kirkwood/kirkwood-t5325.c | 24 +++++-- trunk/sound/soc/kirkwood/kirkwood.h | 1 + trunk/sound/soc/mxs/mxs-sgtl5000.c | 1 - trunk/sound/soc/omap/am3517evm.c | 1 + trunk/sound/soc/omap/ams-delta.c | 1 + trunk/sound/soc/omap/igep0020.c | 1 + trunk/sound/soc/omap/n810.c | 1 + trunk/sound/soc/omap/omap3evm.c | 1 + trunk/sound/soc/omap/omap3pandora.c | 1 + trunk/sound/soc/omap/omap4-hdmi-card.c | 1 + trunk/sound/soc/omap/osk5912.c | 1 + trunk/sound/soc/omap/overo.c | 1 + trunk/sound/soc/omap/rx51.c | 1 + trunk/sound/soc/omap/sdp3430.c | 1 + trunk/sound/soc/omap/sdp4430.c | 1 + trunk/sound/soc/omap/zoom2.c | 1 + trunk/sound/soc/pxa/corgi.c | 80 ++++++++++++--------- trunk/sound/soc/pxa/poodle.c | 79 +++++++++++--------- trunk/sound/soc/pxa/saarb.c | 23 +++--- trunk/sound/soc/pxa/spitz.c | 37 +++++++--- trunk/sound/soc/pxa/tavorevb3.c | 24 ++++--- trunk/sound/soc/pxa/z2.c | 28 +++++--- trunk/sound/soc/soc-pcm.c | 38 +++++----- 70 files changed, 595 insertions(+), 442 deletions(-) diff --git a/[refs] b/[refs] index 7a95705489b1..7eb73c3dc099 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 7a748e4318909e680b3900e3b97ea42a92724c68 +refs/heads/master: b425b88418e302caf27e9cf44aa987b83c04cb2d diff --git a/trunk/arch/arm/mach-pxa/corgi.c b/trunk/arch/arm/mach-pxa/corgi.c index e12b097a5b7e..549468d088b9 100644 --- a/trunk/arch/arm/mach-pxa/corgi.c +++ b/trunk/arch/arm/mach-pxa/corgi.c @@ -435,14 +435,6 @@ static struct platform_device corgiled_device = { }, }; -/* - * Corgi Audio - */ -static struct platform_device corgi_audio_device = { - .name = "corgi-audio", - .id = -1, -}; - /* * MMC/SD Device * @@ -649,7 +641,6 @@ static struct platform_device *devices[] __initdata = { &corgifb_device, &corgikbd_device, &corgiled_device, - &corgi_audio_device, &sharpsl_nand_device, &sharpsl_rom_device, }; diff --git a/trunk/arch/arm/mach-pxa/poodle.c b/trunk/arch/arm/mach-pxa/poodle.c index bd5682a31f34..50c833177866 100644 --- a/trunk/arch/arm/mach-pxa/poodle.c +++ b/trunk/arch/arm/mach-pxa/poodle.c @@ -158,11 +158,6 @@ static struct scoop_pcmcia_config poodle_pcmcia_config = { EXPORT_SYMBOL(poodle_scoop_device); -static struct platform_device poodle_audio_device = { - .name = "poodle-audio", - .id = -1, -}; - /* LoCoMo device */ static struct resource locomo_resources[] = { [0] = { @@ -412,7 +407,6 @@ static struct platform_device sharpsl_rom_device = { static struct platform_device *devices[] __initdata = { &poodle_locomo_device, &poodle_scoop_device, - &poodle_audio_device, &sharpsl_nand_device, &sharpsl_rom_device, }; diff --git a/trunk/sound/soc/au1x/ac97c.c b/trunk/sound/soc/au1x/ac97c.c index c5ac2449563a..7771934b93e2 100644 --- a/trunk/sound/soc/au1x/ac97c.c +++ b/trunk/sound/soc/au1x/ac97c.c @@ -229,34 +229,35 @@ static int __devinit au1xac97c_drvprobe(struct platform_device *pdev) struct resource *iores, *dmares; struct au1xpsc_audio_data *ctx; - ctx = devm_kzalloc(&pdev->dev, sizeof(*ctx), GFP_KERNEL); + ctx = kzalloc(sizeof(*ctx), GFP_KERNEL); if (!ctx) return -ENOMEM; mutex_init(&ctx->lock); iores = platform_get_resource(pdev, IORESOURCE_MEM, 0); - if (!iores) - return -ENODEV; + if (!iores) { + ret = -ENODEV; + goto out0; + } - if (!devm_request_mem_region(&pdev->dev, iores->start, - resource_size(iores), - pdev->name)) - return -EBUSY; + ret = -EBUSY; + if (!request_mem_region(iores->start, resource_size(iores), + pdev->name)) + goto out0; - ctx->mmio = devm_ioremap_nocache(&pdev->dev, iores->start, - resource_size(iores)); + ctx->mmio = ioremap_nocache(iores->start, resource_size(iores)); if (!ctx->mmio) - return -EBUSY; + goto out1; dmares = platform_get_resource(pdev, IORESOURCE_DMA, 0); if (!dmares) - return -EBUSY; + goto out2; ctx->dmaids[SNDRV_PCM_STREAM_PLAYBACK] = dmares->start; dmares = platform_get_resource(pdev, IORESOURCE_DMA, 1); if (!dmares) - return -EBUSY; + goto out2; ctx->dmaids[SNDRV_PCM_STREAM_CAPTURE] = dmares->start; /* switch it on */ @@ -270,20 +271,33 @@ static int __devinit au1xac97c_drvprobe(struct platform_device *pdev) ret = snd_soc_register_dai(&pdev->dev, &au1xac97c_dai_driver); if (ret) - return ret; + goto out2; ac97c_workdata = ctx; return 0; + +out2: + iounmap(ctx->mmio); +out1: + release_mem_region(iores->start, resource_size(iores)); +out0: + kfree(ctx); + return ret; } static int __devexit au1xac97c_drvremove(struct platform_device *pdev) { struct au1xpsc_audio_data *ctx = platform_get_drvdata(pdev); + struct resource *r = platform_get_resource(pdev, IORESOURCE_MEM, 0); snd_soc_unregister_dai(&pdev->dev); WR(ctx, AC97_ENABLE, EN_D); /* clock off, disable */ + iounmap(ctx->mmio); + release_mem_region(r->start, resource_size(r)); + kfree(ctx); + ac97c_workdata = NULL; /* MDEV */ return 0; diff --git a/trunk/sound/soc/au1x/dbdma2.c b/trunk/sound/soc/au1x/dbdma2.c index 8372cd35f0d6..92bc1b0346fa 100644 --- a/trunk/sound/soc/au1x/dbdma2.c +++ b/trunk/sound/soc/au1x/dbdma2.c @@ -350,21 +350,27 @@ static struct snd_soc_platform_driver au1xpsc_soc_platform = { static int __devinit au1xpsc_pcm_drvprobe(struct platform_device *pdev) { struct au1xpsc_audio_dmadata *dmadata; + int ret; - dmadata = devm_kzalloc(&pdev->dev, - 2 * sizeof(struct au1xpsc_audio_dmadata), - GFP_KERNEL); + dmadata = kzalloc(2 * sizeof(struct au1xpsc_audio_dmadata), GFP_KERNEL); if (!dmadata) return -ENOMEM; platform_set_drvdata(pdev, dmadata); - return snd_soc_register_platform(&pdev->dev, &au1xpsc_soc_platform); + ret = snd_soc_register_platform(&pdev->dev, &au1xpsc_soc_platform); + if (ret) + kfree(dmadata); + + return ret; } static int __devexit au1xpsc_pcm_drvremove(struct platform_device *pdev) { + struct au1xpsc_audio_dmadata *dmadata = platform_get_drvdata(pdev); + snd_soc_unregister_platform(&pdev->dev); + kfree(dmadata); return 0; } diff --git a/trunk/sound/soc/au1x/dma.c b/trunk/sound/soc/au1x/dma.c index 0a91b186a86f..c4017bd56ab8 100644 --- a/trunk/sound/soc/au1x/dma.c +++ b/trunk/sound/soc/au1x/dma.c @@ -325,19 +325,27 @@ static struct snd_soc_platform_driver alchemy_pcm_soc_platform = { static int __devinit alchemy_pcm_drvprobe(struct platform_device *pdev) { struct alchemy_pcm_ctx *ctx; + int ret; - ctx = devm_kzalloc(&pdev->dev, sizeof(*ctx), GFP_KERNEL); + ctx = kzalloc(sizeof(*ctx), GFP_KERNEL); if (!ctx) return -ENOMEM; platform_set_drvdata(pdev, ctx); - return snd_soc_register_platform(&pdev->dev, &alchemy_pcm_soc_platform); + ret = snd_soc_register_platform(&pdev->dev, &alchemy_pcm_soc_platform); + if (ret) + kfree(ctx); + + return ret; } static int __devexit alchemy_pcm_drvremove(struct platform_device *pdev) { + struct alchemy_pcm_ctx *ctx = platform_get_drvdata(pdev); + snd_soc_unregister_platform(&pdev->dev); + kfree(ctx); return 0; } diff --git a/trunk/sound/soc/au1x/i2sc.c b/trunk/sound/soc/au1x/i2sc.c index d4b9e364a47a..cb53ad87d0a9 100644 --- a/trunk/sound/soc/au1x/i2sc.c +++ b/trunk/sound/soc/au1x/i2sc.c @@ -227,50 +227,69 @@ static struct snd_soc_dai_driver au1xi2s_dai_driver = { static int __devinit au1xi2s_drvprobe(struct platform_device *pdev) { + int ret; struct resource *iores, *dmares; struct au1xpsc_audio_data *ctx; - ctx = devm_kzalloc(&pdev->dev, sizeof(*ctx), GFP_KERNEL); + ctx = kzalloc(sizeof(*ctx), GFP_KERNEL); if (!ctx) return -ENOMEM; iores = platform_get_resource(pdev, IORESOURCE_MEM, 0); - if (!iores) - return -ENODEV; + if (!iores) { + ret = -ENODEV; + goto out0; + } - if (!devm_request_mem_region(&pdev->dev, iores->start, - resource_size(iores), - pdev->name)) - return -EBUSY; + ret = -EBUSY; + if (!request_mem_region(iores->start, resource_size(iores), + pdev->name)) + goto out0; - ctx->mmio = devm_ioremap_nocache(&pdev->dev, iores->start, - resource_size(iores)); + ctx->mmio = ioremap_nocache(iores->start, resource_size(iores)); if (!ctx->mmio) - return -EBUSY; + goto out1; dmares = platform_get_resource(pdev, IORESOURCE_DMA, 0); if (!dmares) - return -EBUSY; + goto out2; ctx->dmaids[SNDRV_PCM_STREAM_PLAYBACK] = dmares->start; dmares = platform_get_resource(pdev, IORESOURCE_DMA, 1); if (!dmares) - return -EBUSY; + goto out2; ctx->dmaids[SNDRV_PCM_STREAM_CAPTURE] = dmares->start; platform_set_drvdata(pdev, ctx); - return snd_soc_register_dai(&pdev->dev, &au1xi2s_dai_driver); + ret = snd_soc_register_dai(&pdev->dev, &au1xi2s_dai_driver); + if (ret) + goto out2; + + return 0; + +out2: + iounmap(ctx->mmio); +out1: + release_mem_region(iores->start, resource_size(iores)); +out0: + kfree(ctx); + return ret; } static int __devexit au1xi2s_drvremove(struct platform_device *pdev) { struct au1xpsc_audio_data *ctx = platform_get_drvdata(pdev); + struct resource *r = platform_get_resource(pdev, IORESOURCE_MEM, 0); snd_soc_unregister_dai(&pdev->dev); WR(ctx, I2S_ENABLE, EN_D); /* clock off, disable */ + iounmap(ctx->mmio); + release_mem_region(r->start, resource_size(r)); + kfree(ctx); + return 0; } diff --git a/trunk/sound/soc/au1x/psc-ac97.c b/trunk/sound/soc/au1x/psc-ac97.c index 476b79a1c11a..87daf456b1c9 100644 --- a/trunk/sound/soc/au1x/psc-ac97.c +++ b/trunk/sound/soc/au1x/psc-ac97.c @@ -368,35 +368,35 @@ static int __devinit au1xpsc_ac97_drvprobe(struct platform_device *pdev) unsigned long sel; struct au1xpsc_audio_data *wd; - wd = devm_kzalloc(&pdev->dev, sizeof(struct au1xpsc_audio_data), - GFP_KERNEL); + wd = kzalloc(sizeof(struct au1xpsc_audio_data), GFP_KERNEL); if (!wd) return -ENOMEM; mutex_init(&wd->lock); iores = platform_get_resource(pdev, IORESOURCE_MEM, 0); - if (!iores) - return -ENODEV; + if (!iores) { + ret = -ENODEV; + goto out0; + } - if (!devm_request_mem_region(&pdev->dev, iores->start, - resource_size(iores), - pdev->name)) - return -EBUSY; + ret = -EBUSY; + if (!request_mem_region(iores->start, resource_size(iores), + pdev->name)) + goto out0; - wd->mmio = devm_ioremap(&pdev->dev, iores->start, - resource_size(iores)); + wd->mmio = ioremap(iores->start, resource_size(iores)); if (!wd->mmio) - return -EBUSY; + goto out1; dmares = platform_get_resource(pdev, IORESOURCE_DMA, 0); if (!dmares) - return -EBUSY; + goto out2; wd->dmaids[SNDRV_PCM_STREAM_PLAYBACK] = dmares->start; dmares = platform_get_resource(pdev, IORESOURCE_DMA, 1); if (!dmares) - return -EBUSY; + goto out2; wd->dmaids[SNDRV_PCM_STREAM_CAPTURE] = dmares->start; /* configuration: max dma trigger threshold, enable ac97 */ @@ -421,15 +421,24 @@ static int __devinit au1xpsc_ac97_drvprobe(struct platform_device *pdev) ret = snd_soc_register_dai(&pdev->dev, &wd->dai_drv); if (ret) - return ret; + goto out2; au1xpsc_ac97_workdata = wd; return 0; + +out2: + iounmap(wd->mmio); +out1: + release_mem_region(iores->start, resource_size(iores)); +out0: + kfree(wd); + return ret; } static int __devexit au1xpsc_ac97_drvremove(struct platform_device *pdev) { struct au1xpsc_audio_data *wd = platform_get_drvdata(pdev); + struct resource *r = platform_get_resource(pdev, IORESOURCE_MEM, 0); snd_soc_unregister_dai(&pdev->dev); @@ -439,6 +448,10 @@ static int __devexit au1xpsc_ac97_drvremove(struct platform_device *pdev) au_writel(PSC_CTRL_DISABLE, PSC_CTRL(wd)); au_sync(); + iounmap(wd->mmio); + release_mem_region(r->start, resource_size(r)); + kfree(wd); + au1xpsc_ac97_workdata = NULL; /* MDEV */ return 0; diff --git a/trunk/sound/soc/au1x/psc-i2s.c b/trunk/sound/soc/au1x/psc-i2s.c index 0607ba3d9258..5c1dc8a141ab 100644 --- a/trunk/sound/soc/au1x/psc-i2s.c +++ b/trunk/sound/soc/au1x/psc-i2s.c @@ -295,34 +295,33 @@ static int __devinit au1xpsc_i2s_drvprobe(struct platform_device *pdev) int ret; struct au1xpsc_audio_data *wd; - wd = devm_kzalloc(&pdev->dev, sizeof(struct au1xpsc_audio_data), - GFP_KERNEL); + wd = kzalloc(sizeof(struct au1xpsc_audio_data), GFP_KERNEL); if (!wd) return -ENOMEM; iores = platform_get_resource(pdev, IORESOURCE_MEM, 0); - if (!iores) - return -ENODEV; + if (!iores) { + ret = -ENODEV; + goto out0; + } ret = -EBUSY; - if (!devm_request_mem_region(&pdev->dev, iores->start, - resource_size(iores), - pdev->name)) - return -EBUSY; + if (!request_mem_region(iores->start, resource_size(iores), + pdev->name)) + goto out0; - wd->mmio = devm_ioremap(&pdev->dev, iores->start, - resource_size(iores)); + wd->mmio = ioremap(iores->start, resource_size(iores)); if (!wd->mmio) - return -EBUSY; + goto out1; dmares = platform_get_resource(pdev, IORESOURCE_DMA, 0); if (!dmares) - return -EBUSY; + goto out2; wd->dmaids[SNDRV_PCM_STREAM_PLAYBACK] = dmares->start; dmares = platform_get_resource(pdev, IORESOURCE_DMA, 1); if (!dmares) - return -EBUSY; + goto out2; wd->dmaids[SNDRV_PCM_STREAM_CAPTURE] = dmares->start; /* preserve PSC clock source set up by platform (dev.platform_data @@ -350,12 +349,23 @@ static int __devinit au1xpsc_i2s_drvprobe(struct platform_device *pdev) platform_set_drvdata(pdev, wd); - return snd_soc_register_dai(&pdev->dev, &wd->dai_drv); + ret = snd_soc_register_dai(&pdev->dev, &wd->dai_drv); + if (!ret) + return 0; + +out2: + iounmap(wd->mmio); +out1: + release_mem_region(iores->start, resource_size(iores)); +out0: + kfree(wd); + return ret; } static int __devexit au1xpsc_i2s_drvremove(struct platform_device *pdev) { struct au1xpsc_audio_data *wd = platform_get_drvdata(pdev); + struct resource *r = platform_get_resource(pdev, IORESOURCE_MEM, 0); snd_soc_unregister_dai(&pdev->dev); @@ -364,6 +374,10 @@ static int __devexit au1xpsc_i2s_drvremove(struct platform_device *pdev) au_writel(PSC_CTRL_DISABLE, PSC_CTRL(wd)); au_sync(); + iounmap(wd->mmio); + release_mem_region(r->start, resource_size(r)); + kfree(wd); + return 0; } diff --git a/trunk/sound/soc/codecs/88pm860x-codec.c b/trunk/sound/soc/codecs/88pm860x-codec.c index 9fd3b6827bba..99ca53c01676 100644 --- a/trunk/sound/soc/codecs/88pm860x-codec.c +++ b/trunk/sound/soc/codecs/88pm860x-codec.c @@ -1430,8 +1430,7 @@ static int __devinit pm860x_codec_probe(struct platform_device *pdev) struct resource *res; int i, ret; - pm860x = devm_kzalloc(&pdev->dev, sizeof(struct pm860x_priv), - GFP_KERNEL); + pm860x = kzalloc(sizeof(struct pm860x_priv), GFP_KERNEL); if (pm860x == NULL) return -ENOMEM; @@ -1460,13 +1459,17 @@ static int __devinit pm860x_codec_probe(struct platform_device *pdev) out: platform_set_drvdata(pdev, NULL); + kfree(pm860x); return -EINVAL; } static int __devexit pm860x_codec_remove(struct platform_device *pdev) { + struct pm860x_priv *pm860x = platform_get_drvdata(pdev); + snd_soc_unregister_codec(&pdev->dev); platform_set_drvdata(pdev, NULL); + kfree(pm860x); return 0; } diff --git a/trunk/sound/soc/codecs/ad1836.c b/trunk/sound/soc/codecs/ad1836.c index 982d201c2e86..919322daf6dd 100644 --- a/trunk/sound/soc/codecs/ad1836.c +++ b/trunk/sound/soc/codecs/ad1836.c @@ -341,8 +341,7 @@ static int __devinit ad1836_spi_probe(struct spi_device *spi) struct ad1836_priv *ad1836; int ret; - ad1836 = devm_kzalloc(&spi->dev, sizeof(struct ad1836_priv), - GFP_KERNEL); + ad1836 = kzalloc(sizeof(struct ad1836_priv), GFP_KERNEL); if (ad1836 == NULL) return -ENOMEM; @@ -352,15 +351,17 @@ static int __devinit ad1836_spi_probe(struct spi_device *spi) ret = snd_soc_register_codec(&spi->dev, &soc_codec_dev_ad1836, &ad183x_dais[ad1836->type], 1); + if (ret < 0) + kfree(ad1836); return ret; } static int __devexit ad1836_spi_remove(struct spi_device *spi) { snd_soc_unregister_codec(&spi->dev); + kfree(spi_get_drvdata(spi)); return 0; } - static const struct spi_device_id ad1836_ids[] = { { "ad1835", AD1835 }, { "ad1836", AD1836 }, diff --git a/trunk/sound/soc/codecs/ad193x.c b/trunk/sound/soc/codecs/ad193x.c index a4a6bef2c0bb..c1b7d928c347 100644 --- a/trunk/sound/soc/codecs/ad193x.c +++ b/trunk/sound/soc/codecs/ad193x.c @@ -385,15 +385,14 @@ static int __devinit ad193x_spi_probe(struct spi_device *spi) struct ad193x_priv *ad193x; int ret; - ad193x = devm_kzalloc(&spi->dev, sizeof(struct ad193x_priv), - GFP_KERNEL); + ad193x = kzalloc(sizeof(struct ad193x_priv), GFP_KERNEL); if (ad193x == NULL) return -ENOMEM; ad193x->regmap = regmap_init_spi(spi, &ad193x_spi_regmap_config); if (IS_ERR(ad193x->regmap)) { ret = PTR_ERR(ad193x->regmap); - goto err_out; + goto err_free; } spi_set_drvdata(spi, ad193x); @@ -407,7 +406,9 @@ static int __devinit ad193x_spi_probe(struct spi_device *spi) err_regmap_exit: regmap_exit(ad193x->regmap); -err_out: +err_free: + kfree(ad193x); + return ret; } @@ -417,6 +418,7 @@ static int __devexit ad193x_spi_remove(struct spi_device *spi) snd_soc_unregister_codec(&spi->dev); regmap_exit(ad193x->regmap); + kfree(ad193x); return 0; } @@ -453,15 +455,14 @@ static int __devinit ad193x_i2c_probe(struct i2c_client *client, struct ad193x_priv *ad193x; int ret; - ad193x = devm_kzalloc(&client->dev, sizeof(struct ad193x_priv), - GFP_KERNEL); + ad193x = kzalloc(sizeof(struct ad193x_priv), GFP_KERNEL); if (ad193x == NULL) return -ENOMEM; ad193x->regmap = regmap_init_i2c(client, &ad193x_i2c_regmap_config); if (IS_ERR(ad193x->regmap)) { ret = PTR_ERR(ad193x->regmap); - goto err_out; + goto err_free; } i2c_set_clientdata(client, ad193x); @@ -475,7 +476,8 @@ static int __devinit ad193x_i2c_probe(struct i2c_client *client, err_regmap_exit: regmap_exit(ad193x->regmap); -err_out: +err_free: + kfree(ad193x); return ret; } @@ -485,6 +487,7 @@ static int __devexit ad193x_i2c_remove(struct i2c_client *client) snd_soc_unregister_codec(&client->dev); regmap_exit(ad193x->regmap); + kfree(ad193x); return 0; } diff --git a/trunk/sound/soc/codecs/adau1373.c b/trunk/sound/soc/codecs/adau1373.c index 971ba4529171..637b114bea7f 100644 --- a/trunk/sound/soc/codecs/adau1373.c +++ b/trunk/sound/soc/codecs/adau1373.c @@ -1360,7 +1360,7 @@ static int __devinit adau1373_i2c_probe(struct i2c_client *client, struct adau1373 *adau1373; int ret; - adau1373 = devm_kzalloc(&client->dev, sizeof(*adau1373), GFP_KERNEL); + adau1373 = kzalloc(sizeof(*adau1373), GFP_KERNEL); if (!adau1373) return -ENOMEM; @@ -1368,12 +1368,16 @@ static int __devinit adau1373_i2c_probe(struct i2c_client *client, ret = snd_soc_register_codec(&client->dev, &adau1373_codec_driver, adau1373_dai_driver, ARRAY_SIZE(adau1373_dai_driver)); + if (ret < 0) + kfree(adau1373); + return ret; } static int __devexit adau1373_i2c_remove(struct i2c_client *client) { snd_soc_unregister_codec(&client->dev); + kfree(dev_get_drvdata(&client->dev)); return 0; } diff --git a/trunk/sound/soc/codecs/adau1701.c b/trunk/sound/soc/codecs/adau1701.c index 6b325ea03869..6a6af567f02a 100644 --- a/trunk/sound/soc/codecs/adau1701.c +++ b/trunk/sound/soc/codecs/adau1701.c @@ -496,19 +496,23 @@ static __devinit int adau1701_i2c_probe(struct i2c_client *client, struct adau1701 *adau1701; int ret; - adau1701 = devm_kzalloc(&client->dev, sizeof(*adau1701), GFP_KERNEL); + adau1701 = kzalloc(sizeof(*adau1701), GFP_KERNEL); if (!adau1701) return -ENOMEM; i2c_set_clientdata(client, adau1701); ret = snd_soc_register_codec(&client->dev, &adau1701_codec_drv, &adau1701_dai, 1); + if (ret < 0) + kfree(adau1701); + return ret; } static __devexit int adau1701_i2c_remove(struct i2c_client *client) { snd_soc_unregister_codec(&client->dev); + kfree(i2c_get_clientdata(client)); return 0; } diff --git a/trunk/sound/soc/codecs/ak4641.c b/trunk/sound/soc/codecs/ak4641.c index c4d165a4bddf..266ebea2b65a 100644 --- a/trunk/sound/soc/codecs/ak4641.c +++ b/trunk/sound/soc/codecs/ak4641.c @@ -339,7 +339,6 @@ static int ak4641_pcm_set_dai_fmt(struct snd_soc_dai *codec_dai, { struct snd_soc_codec *codec = codec_dai->codec; u8 btif; - int ret; /* interface format */ switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) { @@ -359,11 +358,7 @@ static int ak4641_pcm_set_dai_fmt(struct snd_soc_dai *codec_dai, return -EINVAL; } - ret = snd_soc_update_bits(codec, AK4641_BTIF, (0x3 << 5), btif); - if (ret < 0) - return ret; - - return 0; + return snd_soc_update_bits(codec, AK4641_BTIF, (0x3 << 5), btif); } static int ak4641_i2s_set_dai_fmt(struct snd_soc_dai *codec_dai, diff --git a/trunk/sound/soc/codecs/alc5623.c b/trunk/sound/soc/codecs/alc5623.c index 3feee569ceea..6a9b621ef32d 100644 --- a/trunk/sound/soc/codecs/alc5623.c +++ b/trunk/sound/soc/codecs/alc5623.c @@ -1022,8 +1022,7 @@ static int alc5623_i2c_probe(struct i2c_client *client, dev_dbg(&client->dev, "Found codec id : alc56%02x\n", vid2); - alc5623 = devm_kzalloc(&client->dev, sizeof(struct alc5623_priv), - GFP_KERNEL); + alc5623 = kzalloc(sizeof(struct alc5623_priv), GFP_KERNEL); if (alc5623 == NULL) return -ENOMEM; @@ -1045,6 +1044,7 @@ static int alc5623_i2c_probe(struct i2c_client *client, alc5623_dai.name = "alc5623-hifi"; break; default: + kfree(alc5623); return -EINVAL; } @@ -1053,15 +1053,20 @@ static int alc5623_i2c_probe(struct i2c_client *client, ret = snd_soc_register_codec(&client->dev, &soc_codec_device_alc5623, &alc5623_dai, 1); - if (ret != 0) + if (ret != 0) { dev_err(&client->dev, "Failed to register codec: %d\n", ret); + kfree(alc5623); + } return ret; } static int alc5623_i2c_remove(struct i2c_client *client) { + struct alc5623_priv *alc5623 = i2c_get_clientdata(client); + snd_soc_unregister_codec(&client->dev); + kfree(alc5623); return 0; } diff --git a/trunk/sound/soc/codecs/cs4270.c b/trunk/sound/soc/codecs/cs4270.c index 055536645da9..fef0f48330e4 100644 --- a/trunk/sound/soc/codecs/cs4270.c +++ b/trunk/sound/soc/codecs/cs4270.c @@ -671,8 +671,7 @@ static int cs4270_i2c_probe(struct i2c_client *i2c_client, i2c_client->addr); dev_info(&i2c_client->dev, "hardware revision %X\n", ret & 0xF); - cs4270 = devm_kzalloc(&i2c_client->dev, sizeof(struct cs4270_private), - GFP_KERNEL); + cs4270 = kzalloc(sizeof(struct cs4270_private), GFP_KERNEL); if (!cs4270) { dev_err(&i2c_client->dev, "could not allocate codec\n"); return -ENOMEM; @@ -683,6 +682,8 @@ static int cs4270_i2c_probe(struct i2c_client *i2c_client, ret = snd_soc_register_codec(&i2c_client->dev, &soc_codec_device_cs4270, &cs4270_dai, 1); + if (ret < 0) + kfree(cs4270); return ret; } @@ -695,6 +696,7 @@ static int cs4270_i2c_probe(struct i2c_client *i2c_client, static int cs4270_i2c_remove(struct i2c_client *i2c_client) { snd_soc_unregister_codec(&i2c_client->dev); + kfree(i2c_get_clientdata(i2c_client)); return 0; } diff --git a/trunk/sound/soc/codecs/cs42l51.c b/trunk/sound/soc/codecs/cs42l51.c index a8bf588e8740..ffce9f2a6643 100644 --- a/trunk/sound/soc/codecs/cs42l51.c +++ b/trunk/sound/soc/codecs/cs42l51.c @@ -577,8 +577,7 @@ static int cs42l51_i2c_probe(struct i2c_client *i2c_client, dev_info(&i2c_client->dev, "found device cs42l51 rev %d\n", ret & 7); - cs42l51 = devm_kzalloc(&i2c_client->dev, sizeof(struct cs42l51_private), - GFP_KERNEL); + cs42l51 = kzalloc(sizeof(struct cs42l51_private), GFP_KERNEL); if (!cs42l51) { dev_err(&i2c_client->dev, "could not allocate codec\n"); return -ENOMEM; @@ -589,13 +588,18 @@ static int cs42l51_i2c_probe(struct i2c_client *i2c_client, ret = snd_soc_register_codec(&i2c_client->dev, &soc_codec_device_cs42l51, &cs42l51_dai, 1); + if (ret < 0) + kfree(cs42l51); error: return ret; } static int cs42l51_i2c_remove(struct i2c_client *client) { + struct cs42l51_private *cs42l51 = i2c_get_clientdata(client); + snd_soc_unregister_codec(&client->dev); + kfree(cs42l51); return 0; } diff --git a/trunk/sound/soc/codecs/da7210.c b/trunk/sound/soc/codecs/da7210.c index ab38e93c3543..e4ca61c18605 100644 --- a/trunk/sound/soc/codecs/da7210.c +++ b/trunk/sound/soc/codecs/da7210.c @@ -181,14 +181,9 @@ /* AUX1_L bit fields */ #define DA7210_AUX1_L_VOL (0x3F << 0) -#define DA7210_AUX1_L_EN (1 << 7) /* AUX1_R bit fields */ #define DA7210_AUX1_R_VOL (0x3F << 0) -#define DA7210_AUX1_R_EN (1 << 7) - -/* AUX2 bit fields */ -#define DA7210_AUX2_EN (1 << 3) /* Minimum INPGA and AUX1 volume to enable noise suppression */ #define DA7210_INPGA_MIN_VOL_NS 0x0A /* 10.5dB */ @@ -239,19 +234,9 @@ static const unsigned int mono_vol_tlv[] = { 0x3, 0x7, TLV_DB_SCALE_ITEM(-1800, 600, 0) }; -static const unsigned int aux1_vol_tlv[] = { - TLV_DB_RANGE_HEAD(2), - 0x0, 0x10, TLV_DB_SCALE_ITEM(TLV_DB_GAIN_MUTE, 0, 1), - /* -48dB to 21dB */ - 0x11, 0x3f, TLV_DB_SCALE_ITEM(-4800, 150, 0) -}; - static const DECLARE_TLV_DB_SCALE(eq_gain_tlv, -1050, 150, 0); static const DECLARE_TLV_DB_SCALE(adc_eq_master_gain_tlv, -1800, 600, 1); static const DECLARE_TLV_DB_SCALE(dac_gain_tlv, -7725, 75, 0); -static const DECLARE_TLV_DB_SCALE(mic_vol_tlv, -600, 600, 0); -static const DECLARE_TLV_DB_SCALE(aux2_vol_tlv, -600, 600, 0); -static const DECLARE_TLV_DB_SCALE(inpga_gain_tlv, -450, 150, 0); /* ADC and DAC high pass filter f0 value */ static const char * const da7210_hpf_cutoff_txt[] = { @@ -359,17 +344,6 @@ static const struct snd_kcontrol_new da7210_snd_controls[] = { SOC_SINGLE_TLV("Mono Playback Volume", DA7210_OUT2, 0, 0x7, 0, mono_vol_tlv), - SOC_DOUBLE_R_TLV("Mic Capture Volume", - DA7210_MIC_L, DA7210_MIC_R, - 0, 0x5, 0, mic_vol_tlv), - SOC_DOUBLE_R_TLV("Aux1 Capture Volume", - DA7210_AUX1_L, DA7210_AUX1_R, - 0, 0x3f, 0, aux1_vol_tlv), - SOC_SINGLE_TLV("Aux2 Capture Volume", DA7210_AUX2, 0, 0x3, 0, - aux2_vol_tlv), - SOC_DOUBLE_TLV("In PGA Capture Volume", DA7210_IN_GAIN, 0, 4, 0xF, 0, - inpga_gain_tlv), - /* DAC Equalizer controls */ SOC_SINGLE("DAC EQ Switch", DA7210_DAC_EQ5, 7, 1, 0), SOC_SINGLE_TLV("DAC EQ1 Volume", DA7210_DAC_EQ1_2, 0, 0xf, 1, @@ -447,42 +421,26 @@ static const struct snd_kcontrol_new da7210_snd_controls[] = { static const struct snd_kcontrol_new da7210_dapm_inmixl_controls[] = { SOC_DAPM_SINGLE("Mic Left Switch", DA7210_INMIX_L, 0, 1, 0), SOC_DAPM_SINGLE("Mic Right Switch", DA7210_INMIX_L, 1, 1, 0), - SOC_DAPM_SINGLE("Aux1 Left Switch", DA7210_INMIX_L, 2, 1, 0), - SOC_DAPM_SINGLE("Aux2 Switch", DA7210_INMIX_L, 3, 1, 0), - SOC_DAPM_SINGLE("Outmix Left Switch", DA7210_INMIX_L, 4, 1, 0), }; /* In Mixer Right */ static const struct snd_kcontrol_new da7210_dapm_inmixr_controls[] = { SOC_DAPM_SINGLE("Mic Right Switch", DA7210_INMIX_R, 0, 1, 0), SOC_DAPM_SINGLE("Mic Left Switch", DA7210_INMIX_R, 1, 1, 0), - SOC_DAPM_SINGLE("Aux1 Right Switch", DA7210_INMIX_R, 2, 1, 0), - SOC_DAPM_SINGLE("Aux2 Switch", DA7210_INMIX_R, 3, 1, 0), - SOC_DAPM_SINGLE("Outmix Right Switch", DA7210_INMIX_R, 4, 1, 0), }; /* Out Mixer Left */ static const struct snd_kcontrol_new da7210_dapm_outmixl_controls[] = { - SOC_DAPM_SINGLE("Aux1 Left Switch", DA7210_OUTMIX_L, 0, 1, 0), - SOC_DAPM_SINGLE("Aux2 Switch", DA7210_OUTMIX_L, 1, 1, 0), - SOC_DAPM_SINGLE("INPGA Left Switch", DA7210_OUTMIX_L, 2, 1, 0), - SOC_DAPM_SINGLE("INPGA Right Switch", DA7210_OUTMIX_L, 3, 1, 0), SOC_DAPM_SINGLE("DAC Left Switch", DA7210_OUTMIX_L, 4, 1, 0), }; /* Out Mixer Right */ static const struct snd_kcontrol_new da7210_dapm_outmixr_controls[] = { - SOC_DAPM_SINGLE("Aux1 Right Switch", DA7210_OUTMIX_R, 0, 1, 0), - SOC_DAPM_SINGLE("Aux2 Switch", DA7210_OUTMIX_R, 1, 1, 0), - SOC_DAPM_SINGLE("INPGA Left Switch", DA7210_OUTMIX_R, 2, 1, 0), - SOC_DAPM_SINGLE("INPGA Right Switch", DA7210_OUTMIX_R, 3, 1, 0), SOC_DAPM_SINGLE("DAC Right Switch", DA7210_OUTMIX_R, 4, 1, 0), }; /* Mono Mixer */ static const struct snd_kcontrol_new da7210_dapm_monomix_controls[] = { - SOC_DAPM_SINGLE("INPGA Right Switch", DA7210_OUT2, 3, 1, 0), - SOC_DAPM_SINGLE("INPGA Left Switch", DA7210_OUT2, 4, 1, 0), SOC_DAPM_SINGLE("Outmix Right Switch", DA7210_OUT2, 5, 1, 0), SOC_DAPM_SINGLE("Outmix Left Switch", DA7210_OUT2, 6, 1, 0), }; @@ -493,23 +451,14 @@ static const struct snd_soc_dapm_widget da7210_dapm_widgets[] = { /* Input Lines */ SND_SOC_DAPM_INPUT("MICL"), SND_SOC_DAPM_INPUT("MICR"), - SND_SOC_DAPM_INPUT("AUX1L"), - SND_SOC_DAPM_INPUT("AUX1R"), - SND_SOC_DAPM_INPUT("AUX2"), /* Input PGAs */ SND_SOC_DAPM_PGA("Mic Left", DA7210_STARTUP3, 0, 1, NULL, 0), SND_SOC_DAPM_PGA("Mic Right", DA7210_STARTUP3, 1, 1, NULL, 0), - SND_SOC_DAPM_PGA("Aux1 Left", DA7210_STARTUP3, 2, 1, NULL, 0), - SND_SOC_DAPM_PGA("Aux1 Right", DA7210_STARTUP3, 3, 1, NULL, 0), - SND_SOC_DAPM_PGA("Aux2 Mono", DA7210_STARTUP3, 4, 1, NULL, 0), SND_SOC_DAPM_PGA("INPGA Left", DA7210_INMIX_L, 7, 0, NULL, 0), SND_SOC_DAPM_PGA("INPGA Right", DA7210_INMIX_R, 7, 0, NULL, 0), - /* MICBIAS */ - SND_SOC_DAPM_SUPPLY("Mic Bias", DA7210_MIC_L, 6, 0, NULL, 0), - /* Input Mixers */ SND_SOC_DAPM_MIXER("In Mixer Left", SND_SOC_NOPM, 0, 0, &da7210_dapm_inmixl_controls[0], @@ -565,21 +514,12 @@ static const struct snd_soc_dapm_route da7210_audio_map[] = { /* Input path */ {"Mic Left", NULL, "MICL"}, {"Mic Right", NULL, "MICR"}, - {"Aux1 Left", NULL, "AUX1L"}, - {"Aux1 Right", NULL, "AUX1R"}, - {"Aux2 Mono", NULL, "AUX2"}, {"In Mixer Left", "Mic Left Switch", "Mic Left"}, {"In Mixer Left", "Mic Right Switch", "Mic Right"}, - {"In Mixer Left", "Aux1 Left Switch", "Aux1 Left"}, - {"In Mixer Left", "Aux2 Switch", "Aux2 Mono"}, - {"In Mixer Left", "Outmix Left Switch", "Out Mixer Left"}, {"In Mixer Right", "Mic Right Switch", "Mic Right"}, {"In Mixer Right", "Mic Left Switch", "Mic Left"}, - {"In Mixer Right", "Aux1 Right Switch", "Aux1 Right"}, - {"In Mixer Right", "Aux2 Switch", "Aux2 Mono"}, - {"In Mixer Right", "Outmix Right Switch", "Out Mixer Right"}, {"INPGA Left", NULL, "In Mixer Left"}, {"ADC Left", NULL, "INPGA Left"}, @@ -588,20 +528,9 @@ static const struct snd_soc_dapm_route da7210_audio_map[] = { {"ADC Right", NULL, "INPGA Right"}, /* Output path */ - {"Out Mixer Left", "Aux1 Left Switch", "Aux1 Left"}, - {"Out Mixer Left", "Aux2 Switch", "Aux2 Mono"}, - {"Out Mixer Left", "INPGA Left Switch", "INPGA Left"}, - {"Out Mixer Left", "INPGA Right Switch", "INPGA Right"}, {"Out Mixer Left", "DAC Left Switch", "DAC Left"}, - - {"Out Mixer Right", "Aux1 Right Switch", "Aux1 Right"}, - {"Out Mixer Right", "Aux2 Switch", "Aux2 Mono"}, - {"Out Mixer Right", "INPGA Right Switch", "INPGA Right"}, - {"Out Mixer Right", "INPGA Left Switch", "INPGA Left"}, {"Out Mixer Right", "DAC Right Switch", "DAC Right"}, - {"Mono Mixer", "INPGA Right Switch", "INPGA Right"}, - {"Mono Mixer", "INPGA Left Switch", "INPGA Left"}, {"Mono Mixer", "Outmix Right Switch", "Out Mixer Right"}, {"Mono Mixer", "Outmix Left Switch", "Out Mixer Left"}, @@ -958,12 +887,6 @@ static int da7210_probe(struct snd_soc_codec *codec) snd_soc_write(codec, DA7210_OUT2, DA7210_OUT2_EN | DA7210_OUT2_OUTMIX_L | DA7210_OUT2_OUTMIX_R); - /* Enable Aux1 */ - snd_soc_write(codec, DA7210_AUX1_L, DA7210_AUX1_L_EN); - snd_soc_write(codec, DA7210_AUX1_R, DA7210_AUX1_R_EN); - /* Enable Aux2 */ - snd_soc_write(codec, DA7210_AUX2, DA7210_AUX2_EN); - /* Diable PLL and bypass it */ snd_soc_write(codec, DA7210_PLL, DA7210_PLL_FS_48000); @@ -1021,8 +944,7 @@ static int __devinit da7210_i2c_probe(struct i2c_client *i2c, struct da7210_priv *da7210; int ret; - da7210 = devm_kzalloc(&i2c->dev, sizeof(struct da7210_priv), - GFP_KERNEL); + da7210 = kzalloc(sizeof(struct da7210_priv), GFP_KERNEL); if (!da7210) return -ENOMEM; @@ -1031,12 +953,16 @@ static int __devinit da7210_i2c_probe(struct i2c_client *i2c, ret = snd_soc_register_codec(&i2c->dev, &soc_codec_dev_da7210, &da7210_dai, 1); + if (ret < 0) + kfree(da7210); + return ret; } static int __devexit da7210_i2c_remove(struct i2c_client *client) { snd_soc_unregister_codec(&client->dev); + kfree(i2c_get_clientdata(client)); return 0; } diff --git a/trunk/sound/soc/codecs/jz4740.c b/trunk/sound/soc/codecs/jz4740.c index 4624e752a188..d73d28317c00 100644 --- a/trunk/sound/soc/codecs/jz4740.c +++ b/trunk/sound/soc/codecs/jz4740.c @@ -353,8 +353,7 @@ static int __devinit jz4740_codec_probe(struct platform_device *pdev) struct jz4740_codec *jz4740_codec; struct resource *mem; - jz4740_codec = devm_kzalloc(&pdev->dev, sizeof(*jz4740_codec), - GFP_KERNEL); + jz4740_codec = kzalloc(sizeof(*jz4740_codec), GFP_KERNEL); if (!jz4740_codec) return -ENOMEM; @@ -362,14 +361,14 @@ static int __devinit jz4740_codec_probe(struct platform_device *pdev) if (!mem) { dev_err(&pdev->dev, "Failed to get mmio memory resource\n"); ret = -ENOENT; - goto err_out; + goto err_free_codec; } mem = request_mem_region(mem->start, resource_size(mem), pdev->name); if (!mem) { dev_err(&pdev->dev, "Failed to request mmio memory region\n"); ret = -EBUSY; - goto err_out; + goto err_free_codec; } jz4740_codec->base = ioremap(mem->start, resource_size(mem)); @@ -395,7 +394,9 @@ static int __devinit jz4740_codec_probe(struct platform_device *pdev) iounmap(jz4740_codec->base); err_release_mem_region: release_mem_region(mem->start, resource_size(mem)); -err_out: +err_free_codec: + kfree(jz4740_codec); + return ret; } @@ -410,6 +411,7 @@ static int __devexit jz4740_codec_remove(struct platform_device *pdev) release_mem_region(mem->start, resource_size(mem)); platform_set_drvdata(pdev, NULL); + kfree(jz4740_codec); return 0; } diff --git a/trunk/sound/soc/codecs/lm4857.c b/trunk/sound/soc/codecs/lm4857.c index 319039240e0f..c387dafc6ab6 100644 --- a/trunk/sound/soc/codecs/lm4857.c +++ b/trunk/sound/soc/codecs/lm4857.c @@ -215,7 +215,7 @@ static int __devinit lm4857_i2c_probe(struct i2c_client *i2c, struct lm4857 *lm4857; int ret; - lm4857 = devm_kzalloc(&i2c->dev, sizeof(*lm4857), GFP_KERNEL); + lm4857 = kzalloc(sizeof(*lm4857), GFP_KERNEL); if (!lm4857) return -ENOMEM; @@ -225,12 +225,21 @@ static int __devinit lm4857_i2c_probe(struct i2c_client *i2c, ret = snd_soc_register_codec(&i2c->dev, &soc_codec_dev_lm4857, NULL, 0); - return ret; + if (ret) { + kfree(lm4857); + return ret; + } + + return 0; } static int __devexit lm4857_i2c_remove(struct i2c_client *i2c) { + struct lm4857 *lm4857 = i2c_get_clientdata(i2c); + snd_soc_unregister_codec(&i2c->dev); + kfree(lm4857); + return 0; } diff --git a/trunk/sound/soc/codecs/max98088.c b/trunk/sound/soc/codecs/max98088.c index 006efcfe6dda..ba4f6f167a13 100644 --- a/trunk/sound/soc/codecs/max98088.c +++ b/trunk/sound/soc/codecs/max98088.c @@ -2069,8 +2069,7 @@ static int max98088_i2c_probe(struct i2c_client *i2c, struct max98088_priv *max98088; int ret; - max98088 = devm_kzalloc(&i2c->dev, sizeof(struct max98088_priv), - GFP_KERNEL); + max98088 = kzalloc(sizeof(struct max98088_priv), GFP_KERNEL); if (max98088 == NULL) return -ENOMEM; @@ -2081,12 +2080,15 @@ static int max98088_i2c_probe(struct i2c_client *i2c, ret = snd_soc_register_codec(&i2c->dev, &soc_codec_dev_max98088, &max98088_dai[0], 2); + if (ret < 0) + kfree(max98088); return ret; } static int __devexit max98088_i2c_remove(struct i2c_client *client) { snd_soc_unregister_codec(&client->dev); + kfree(i2c_get_clientdata(client)); return 0; } diff --git a/trunk/sound/soc/codecs/max98095.c b/trunk/sound/soc/codecs/max98095.c index fcfa7497d7b7..c69dd022bea8 100644 --- a/trunk/sound/soc/codecs/max98095.c +++ b/trunk/sound/soc/codecs/max98095.c @@ -2340,8 +2340,7 @@ static int max98095_i2c_probe(struct i2c_client *i2c, struct max98095_priv *max98095; int ret; - max98095 = devm_kzalloc(&i2c->dev, sizeof(struct max98095_priv), - GFP_KERNEL); + max98095 = kzalloc(sizeof(struct max98095_priv), GFP_KERNEL); if (max98095 == NULL) return -ENOMEM; @@ -2351,12 +2350,16 @@ static int max98095_i2c_probe(struct i2c_client *i2c, ret = snd_soc_register_codec(&i2c->dev, &soc_codec_dev_max98095, max98095_dai, ARRAY_SIZE(max98095_dai)); + if (ret < 0) + kfree(max98095); return ret; } static int __devexit max98095_i2c_remove(struct i2c_client *client) { snd_soc_unregister_codec(&client->dev); + kfree(i2c_get_clientdata(client)); + return 0; } diff --git a/trunk/sound/soc/codecs/max9850.c b/trunk/sound/soc/codecs/max9850.c index a1913091f56c..47060d2afe90 100644 --- a/trunk/sound/soc/codecs/max9850.c +++ b/trunk/sound/soc/codecs/max9850.c @@ -335,8 +335,7 @@ static int __devinit max9850_i2c_probe(struct i2c_client *i2c, struct max9850_priv *max9850; int ret; - max9850 = devm_kzalloc(&i2c->dev, sizeof(struct max9850_priv), - GFP_KERNEL); + max9850 = kzalloc(sizeof(struct max9850_priv), GFP_KERNEL); if (max9850 == NULL) return -ENOMEM; @@ -344,12 +343,15 @@ static int __devinit max9850_i2c_probe(struct i2c_client *i2c, ret = snd_soc_register_codec(&i2c->dev, &soc_codec_dev_max9850, &max9850_dai, 1); + if (ret < 0) + kfree(max9850); return ret; } static __devexit int max9850_i2c_remove(struct i2c_client *client) { snd_soc_unregister_codec(&client->dev); + kfree(i2c_get_clientdata(client)); return 0; } diff --git a/trunk/sound/soc/codecs/rt5631.c b/trunk/sound/soc/codecs/rt5631.c index 20c324c7c349..f6e4f5ed9286 100644 --- a/trunk/sound/soc/codecs/rt5631.c +++ b/trunk/sound/soc/codecs/rt5631.c @@ -1724,8 +1724,7 @@ static int rt5631_i2c_probe(struct i2c_client *i2c, struct rt5631_priv *rt5631; int ret; - rt5631 = devm_kzalloc(&i2c->dev, sizeof(struct rt5631_priv), - GFP_KERNEL); + rt5631 = kzalloc(sizeof(struct rt5631_priv), GFP_KERNEL); if (NULL == rt5631) return -ENOMEM; @@ -1733,12 +1732,16 @@ static int rt5631_i2c_probe(struct i2c_client *i2c, ret = snd_soc_register_codec(&i2c->dev, &soc_codec_dev_rt5631, rt5631_dai, ARRAY_SIZE(rt5631_dai)); + if (ret < 0) + kfree(rt5631); + return ret; } static __devexit int rt5631_i2c_remove(struct i2c_client *client) { snd_soc_unregister_codec(&client->dev); + kfree(i2c_get_clientdata(client)); return 0; } diff --git a/trunk/sound/soc/codecs/sgtl5000.c b/trunk/sound/soc/codecs/sgtl5000.c index fc9b127206e2..250175755eb2 100644 --- a/trunk/sound/soc/codecs/sgtl5000.c +++ b/trunk/sound/soc/codecs/sgtl5000.c @@ -1076,7 +1076,7 @@ static int sgtl5000_set_power_regs(struct snd_soc_codec *codec) /* according to datasheet, maximum voltage of supplies */ if (vdda > 3600 || vddio > 3600 || vddd > 1980) { dev_err(codec->dev, - "exceed max voltage vdda %dmV vddio %dmV vddd %dmV\n", + "exceed max voltage vdda %dmv vddio %dma vddd %dma\n", vdda, vddio, vddd); return -EINVAL; @@ -1401,8 +1401,7 @@ static __devinit int sgtl5000_i2c_probe(struct i2c_client *client, struct sgtl5000_priv *sgtl5000; int ret; - sgtl5000 = devm_kzalloc(&client->dev, sizeof(struct sgtl5000_priv), - GFP_KERNEL); + sgtl5000 = kzalloc(sizeof(struct sgtl5000_priv), GFP_KERNEL); if (!sgtl5000) return -ENOMEM; @@ -1410,13 +1409,22 @@ static __devinit int sgtl5000_i2c_probe(struct i2c_client *client, ret = snd_soc_register_codec(&client->dev, &sgtl5000_driver, &sgtl5000_dai, 1); - return ret; + if (ret) { + dev_err(&client->dev, "Failed to register codec: %d\n", ret); + kfree(sgtl5000); + return ret; + } + + return 0; } static __devexit int sgtl5000_i2c_remove(struct i2c_client *client) { + struct sgtl5000_priv *sgtl5000 = i2c_get_clientdata(client); + snd_soc_unregister_codec(&client->dev); + kfree(sgtl5000); return 0; } diff --git a/trunk/sound/soc/codecs/ssm2602.c b/trunk/sound/soc/codecs/ssm2602.c index 333dd98af39c..7dfc7b08114c 100644 --- a/trunk/sound/soc/codecs/ssm2602.c +++ b/trunk/sound/soc/codecs/ssm2602.c @@ -652,8 +652,7 @@ static int __devinit ssm2602_spi_probe(struct spi_device *spi) struct ssm2602_priv *ssm2602; int ret; - ssm2602 = devm_kzalloc(&spi->dev, sizeof(struct ssm2602_priv), - GFP_KERNEL); + ssm2602 = kzalloc(sizeof(struct ssm2602_priv), GFP_KERNEL); if (ssm2602 == NULL) return -ENOMEM; @@ -663,12 +662,15 @@ static int __devinit ssm2602_spi_probe(struct spi_device *spi) ret = snd_soc_register_codec(&spi->dev, &soc_codec_dev_ssm2602, &ssm2602_dai, 1); + if (ret < 0) + kfree(ssm2602); return ret; } static int __devexit ssm2602_spi_remove(struct spi_device *spi) { snd_soc_unregister_codec(&spi->dev); + kfree(spi_get_drvdata(spi)); return 0; } @@ -695,8 +697,7 @@ static int __devinit ssm2602_i2c_probe(struct i2c_client *i2c, struct ssm2602_priv *ssm2602; int ret; - ssm2602 = devm_kzalloc(&i2c->dev, sizeof(struct ssm2602_priv), - GFP_KERNEL); + ssm2602 = kzalloc(sizeof(struct ssm2602_priv), GFP_KERNEL); if (ssm2602 == NULL) return -ENOMEM; @@ -706,12 +707,15 @@ static int __devinit ssm2602_i2c_probe(struct i2c_client *i2c, ret = snd_soc_register_codec(&i2c->dev, &soc_codec_dev_ssm2602, &ssm2602_dai, 1); + if (ret < 0) + kfree(ssm2602); return ret; } static int __devexit ssm2602_i2c_remove(struct i2c_client *client) { snd_soc_unregister_codec(&client->dev); + kfree(i2c_get_clientdata(client)); return 0; } diff --git a/trunk/sound/soc/codecs/sta32x.c b/trunk/sound/soc/codecs/sta32x.c index 7db6fa515028..6648af6656c8 100644 --- a/trunk/sound/soc/codecs/sta32x.c +++ b/trunk/sound/soc/codecs/sta32x.c @@ -522,7 +522,6 @@ static int sta32x_set_dai_sysclk(struct snd_soc_dai *codec_dai, rate_min = fs; if (fs > rate_max) rate_max = fs; - break; } } } @@ -969,23 +968,28 @@ static __devinit int sta32x_i2c_probe(struct i2c_client *i2c, struct sta32x_priv *sta32x; int ret; - sta32x = devm_kzalloc(&i2c->dev, sizeof(struct sta32x_priv), - GFP_KERNEL); + sta32x = kzalloc(sizeof(struct sta32x_priv), GFP_KERNEL); if (!sta32x) return -ENOMEM; i2c_set_clientdata(i2c, sta32x); ret = snd_soc_register_codec(&i2c->dev, &sta32x_codec, &sta32x_dai, 1); - if (ret != 0) + if (ret != 0) { dev_err(&i2c->dev, "Failed to register codec (%d)\n", ret); + kfree(sta32x); + return ret; + } - return ret; + return 0; } static __devexit int sta32x_i2c_remove(struct i2c_client *client) { + struct sta32x_priv *sta32x = i2c_get_clientdata(client); + snd_soc_unregister_codec(&client->dev); + kfree(sta32x); return 0; } diff --git a/trunk/sound/soc/codecs/tlv320aic23.c b/trunk/sound/soc/codecs/tlv320aic23.c index dfa41a96599b..60d08aeac22a 100644 --- a/trunk/sound/soc/codecs/tlv320aic23.c +++ b/trunk/sound/soc/codecs/tlv320aic23.c @@ -634,7 +634,7 @@ static int tlv320aic23_codec_probe(struct i2c_client *i2c, if (!i2c_check_functionality(i2c->adapter, I2C_FUNC_SMBUS_BYTE_DATA)) return -EINVAL; - aic23 = devm_kzalloc(&i2c->dev, sizeof(struct aic23), GFP_KERNEL); + aic23 = kzalloc(sizeof(struct aic23), GFP_KERNEL); if (aic23 == NULL) return -ENOMEM; @@ -643,11 +643,14 @@ static int tlv320aic23_codec_probe(struct i2c_client *i2c, ret = snd_soc_register_codec(&i2c->dev, &soc_codec_dev_tlv320aic23, &tlv320aic23_dai, 1); + if (ret < 0) + kfree(aic23); return ret; } static int __exit tlv320aic23_i2c_remove(struct i2c_client *i2c) { snd_soc_unregister_codec(&i2c->dev); + kfree(i2c_get_clientdata(i2c)); return 0; } diff --git a/trunk/sound/soc/codecs/tlv320aic26.c b/trunk/sound/soc/codecs/tlv320aic26.c index a038daec682b..86d1fa38ed2e 100644 --- a/trunk/sound/soc/codecs/tlv320aic26.c +++ b/trunk/sound/soc/codecs/tlv320aic26.c @@ -416,7 +416,7 @@ static int aic26_spi_probe(struct spi_device *spi) dev_dbg(&spi->dev, "probing tlv320aic26 spi device\n"); /* Allocate driver data */ - aic26 = devm_kzalloc(&spi->dev, sizeof *aic26, GFP_KERNEL); + aic26 = kzalloc(sizeof *aic26, GFP_KERNEL); if (!aic26) return -ENOMEM; @@ -427,12 +427,18 @@ static int aic26_spi_probe(struct spi_device *spi) ret = snd_soc_register_codec(&spi->dev, &aic26_soc_codec_dev, &aic26_dai, 1); + if (ret < 0) + kfree(aic26); return ret; + + dev_dbg(&spi->dev, "SPI device initialized\n"); + return 0; } static int aic26_spi_remove(struct spi_device *spi) { snd_soc_unregister_codec(&spi->dev); + kfree(spi_get_drvdata(spi)); return 0; } diff --git a/trunk/sound/soc/codecs/tlv320aic32x4.c b/trunk/sound/soc/codecs/tlv320aic32x4.c index eb401ef021fb..81a26e1090b3 100644 --- a/trunk/sound/soc/codecs/tlv320aic32x4.c +++ b/trunk/sound/soc/codecs/tlv320aic32x4.c @@ -709,8 +709,7 @@ static __devinit int aic32x4_i2c_probe(struct i2c_client *i2c, struct aic32x4_priv *aic32x4; int ret; - aic32x4 = devm_kzalloc(&i2c->dev, sizeof(struct aic32x4_priv), - GFP_KERNEL); + aic32x4 = kzalloc(sizeof(struct aic32x4_priv), GFP_KERNEL); if (aic32x4 == NULL) return -ENOMEM; @@ -729,12 +728,15 @@ static __devinit int aic32x4_i2c_probe(struct i2c_client *i2c, ret = snd_soc_register_codec(&i2c->dev, &soc_codec_dev_aic32x4, &aic32x4_dai, 1); + if (ret < 0) + kfree(aic32x4); return ret; } static __devexit int aic32x4_i2c_remove(struct i2c_client *client) { snd_soc_unregister_codec(&client->dev); + kfree(i2c_get_clientdata(client)); return 0; } diff --git a/trunk/sound/soc/codecs/tlv320aic3x.c b/trunk/sound/soc/codecs/tlv320aic3x.c index 492f22f8a4d7..6f963c50e76e 100644 --- a/trunk/sound/soc/codecs/tlv320aic3x.c +++ b/trunk/sound/soc/codecs/tlv320aic3x.c @@ -1504,7 +1504,7 @@ static int aic3x_i2c_probe(struct i2c_client *i2c, struct aic3x_priv *aic3x; int ret; - aic3x = devm_kzalloc(&i2c->dev, sizeof(struct aic3x_priv), GFP_KERNEL); + aic3x = kzalloc(sizeof(struct aic3x_priv), GFP_KERNEL); if (aic3x == NULL) { dev_err(&i2c->dev, "failed to create private data\n"); return -ENOMEM; @@ -1524,12 +1524,15 @@ static int aic3x_i2c_probe(struct i2c_client *i2c, ret = snd_soc_register_codec(&i2c->dev, &soc_codec_dev_aic3x, &aic3x_dai, 1); + if (ret < 0) + kfree(aic3x); return ret; } static int aic3x_i2c_remove(struct i2c_client *client) { snd_soc_unregister_codec(&client->dev); + kfree(i2c_get_clientdata(client)); return 0; } diff --git a/trunk/sound/soc/codecs/tlv320dac33.c b/trunk/sound/soc/codecs/tlv320dac33.c index f0aad26cdb31..c7a61fbdae4b 100644 --- a/trunk/sound/soc/codecs/tlv320dac33.c +++ b/trunk/sound/soc/codecs/tlv320dac33.c @@ -1532,8 +1532,7 @@ static int __devinit dac33_i2c_probe(struct i2c_client *client, } pdata = client->dev.platform_data; - dac33 = devm_kzalloc(&client->dev, sizeof(struct tlv320dac33_priv), - GFP_KERNEL); + dac33 = kzalloc(sizeof(struct tlv320dac33_priv), GFP_KERNEL); if (dac33 == NULL) return -ENOMEM; @@ -1588,6 +1587,7 @@ static int __devinit dac33_i2c_probe(struct i2c_client *client, if (dac33->power_gpio >= 0) gpio_free(dac33->power_gpio); err_gpio: + kfree(dac33); return ret; } @@ -1604,6 +1604,8 @@ static int __devexit dac33_i2c_remove(struct i2c_client *client) regulator_bulk_free(ARRAY_SIZE(dac33->supplies), dac33->supplies); snd_soc_unregister_codec(&client->dev); + kfree(dac33); + return 0; } diff --git a/trunk/sound/soc/codecs/tpa6130a2.c b/trunk/sound/soc/codecs/tpa6130a2.c index 363b99dad8e9..7eeca79d7387 100644 --- a/trunk/sound/soc/codecs/tpa6130a2.c +++ b/trunk/sound/soc/codecs/tpa6130a2.c @@ -376,7 +376,7 @@ static int __devinit tpa6130a2_probe(struct i2c_client *client, return -ENODEV; } - data = devm_kzalloc(&client->dev, sizeof(*data), GFP_KERNEL); + data = kzalloc(sizeof(*data), GFP_KERNEL); if (data == NULL) { dev_err(dev, "Can not allocate memory\n"); return -ENOMEM; @@ -450,6 +450,7 @@ static int __devinit tpa6130a2_probe(struct i2c_client *client, if (data->power_gpio >= 0) gpio_free(data->power_gpio); err_gpio: + kfree(data); tpa6130a2_client = NULL; return ret; @@ -465,6 +466,8 @@ static int __devexit tpa6130a2_remove(struct i2c_client *client) gpio_free(data->power_gpio); regulator_put(data->supply); + + kfree(data); tpa6130a2_client = NULL; return 0; diff --git a/trunk/sound/soc/codecs/uda1380.c b/trunk/sound/soc/codecs/uda1380.c index 4f1b23d7e404..8f734d69f651 100644 --- a/trunk/sound/soc/codecs/uda1380.c +++ b/trunk/sound/soc/codecs/uda1380.c @@ -803,8 +803,7 @@ static __devinit int uda1380_i2c_probe(struct i2c_client *i2c, struct uda1380_priv *uda1380; int ret; - uda1380 = devm_kzalloc(&i2c->dev, sizeof(struct uda1380_priv), - GFP_KERNEL); + uda1380 = kzalloc(sizeof(struct uda1380_priv), GFP_KERNEL); if (uda1380 == NULL) return -ENOMEM; @@ -813,12 +812,15 @@ static __devinit int uda1380_i2c_probe(struct i2c_client *i2c, ret = snd_soc_register_codec(&i2c->dev, &soc_codec_dev_uda1380, uda1380_dai, ARRAY_SIZE(uda1380_dai)); + if (ret < 0) + kfree(uda1380); return ret; } static int __devexit uda1380_i2c_remove(struct i2c_client *i2c) { snd_soc_unregister_codec(&i2c->dev); + kfree(i2c_get_clientdata(i2c)); return 0; } diff --git a/trunk/sound/soc/codecs/wm5100.c b/trunk/sound/soc/codecs/wm5100.c index 8b24323d6b2c..a234b70377fc 100644 --- a/trunk/sound/soc/codecs/wm5100.c +++ b/trunk/sound/soc/codecs/wm5100.c @@ -2568,13 +2568,6 @@ static int wm5100_remove(struct snd_soc_codec *codec) return 0; } -static int wm5100_soc_volatile(struct snd_soc_codec *codec, - unsigned int reg) -{ - return true; -} - - static struct snd_soc_codec_driver soc_codec_dev_wm5100 = { .probe = wm5100_probe, .remove = wm5100_remove, @@ -2583,8 +2576,6 @@ static struct snd_soc_codec_driver soc_codec_dev_wm5100 = { .set_pll = wm5100_set_fll, .set_bias_level = wm5100_set_bias_level, .idle_bias_off = 1, - .reg_cache_size = WM5100_MAX_REGISTER, - .volatile_register = wm5100_soc_volatile, .seq_notifier = wm5100_seq_notifier, .controls = wm5100_snd_controls, diff --git a/trunk/sound/soc/codecs/wm8580.c b/trunk/sound/soc/codecs/wm8580.c index 211285164d70..b1c8d3de08b2 100644 --- a/trunk/sound/soc/codecs/wm8580.c +++ b/trunk/sound/soc/codecs/wm8580.c @@ -670,7 +670,7 @@ static int wm8580_set_sysclk(struct snd_soc_dai *dai, int clk_id, { struct snd_soc_codec *codec = dai->codec; struct wm8580_priv *wm8580 = snd_soc_codec_get_drvdata(codec); - int ret, sel, sel_mask, sel_shift; + int sel, sel_mask, sel_shift; switch (dai->driver->id) { case WM8580_DAI_PAIFRX: @@ -711,11 +711,7 @@ static int wm8580_set_sysclk(struct snd_soc_dai *dai, int clk_id, /* We really should validate PLL settings but not yet */ wm8580->sysclk[dai->driver->id] = freq; - ret = snd_soc_update_bits(codec, WM8580_CLKSEL, sel_mask, sel); - if (ret < 0) - return ret; - - return 0; + return snd_soc_update_bits(codec, WM8580_CLKSEL, sel_mask, sel); } static int wm8580_digital_mute(struct snd_soc_dai *codec_dai, int mute) diff --git a/trunk/sound/soc/codecs/wm8776.c b/trunk/sound/soc/codecs/wm8776.c index 33e97d1d8f46..38b455662195 100644 --- a/trunk/sound/soc/codecs/wm8776.c +++ b/trunk/sound/soc/codecs/wm8776.c @@ -234,7 +234,6 @@ static int wm8776_hw_params(struct snd_pcm_substream *substream, switch (snd_pcm_format_width(params_format(params))) { case 16: iface = 0; - break; case 20: iface = 0x10; break; diff --git a/trunk/sound/soc/codecs/wm8903.c b/trunk/sound/soc/codecs/wm8903.c index c91fb2f99c13..d88b727d7f99 100644 --- a/trunk/sound/soc/codecs/wm8903.c +++ b/trunk/sound/soc/codecs/wm8903.c @@ -1777,18 +1777,13 @@ static int wm8903_gpio_direction_in(struct gpio_chip *chip, unsigned offset) struct wm8903_priv *wm8903 = gpio_to_wm8903(chip); struct snd_soc_codec *codec = wm8903->codec; unsigned int mask, val; - int ret; mask = WM8903_GP1_FN_MASK | WM8903_GP1_DIR_MASK; val = (WM8903_GPn_FN_GPIO_INPUT << WM8903_GP1_FN_SHIFT) | WM8903_GP1_DIR; - ret = snd_soc_update_bits(codec, WM8903_GPIO_CONTROL_1 + offset, - mask, val); - if (ret < 0) - return ret; - - return 0; + return snd_soc_update_bits(codec, WM8903_GPIO_CONTROL_1 + offset, + mask, val); } static int wm8903_gpio_get(struct gpio_chip *chip, unsigned offset) @@ -1808,18 +1803,13 @@ static int wm8903_gpio_direction_out(struct gpio_chip *chip, struct wm8903_priv *wm8903 = gpio_to_wm8903(chip); struct snd_soc_codec *codec = wm8903->codec; unsigned int mask, val; - int ret; mask = WM8903_GP1_FN_MASK | WM8903_GP1_DIR_MASK | WM8903_GP1_LVL_MASK; val = (WM8903_GPn_FN_GPIO_OUTPUT << WM8903_GP1_FN_SHIFT) | (value << WM8903_GP2_LVL_SHIFT); - ret = snd_soc_update_bits(codec, WM8903_GPIO_CONTROL_1 + offset, - mask, val); - if (ret < 0) - return ret; - - return 0; + return snd_soc_update_bits(codec, WM8903_GPIO_CONTROL_1 + offset, + mask, val); } static void wm8903_gpio_set(struct gpio_chip *chip, unsigned offset, int value) diff --git a/trunk/sound/soc/codecs/wm8962.c b/trunk/sound/soc/codecs/wm8962.c index 296de4e30d26..be35b6468cb1 100644 --- a/trunk/sound/soc/codecs/wm8962.c +++ b/trunk/sound/soc/codecs/wm8962.c @@ -3878,17 +3878,13 @@ static int wm8962_gpio_direction_out(struct gpio_chip *chip, { struct wm8962_priv *wm8962 = gpio_to_wm8962(chip); struct snd_soc_codec *codec = wm8962->codec; - int ret, val; + int val; /* Force function 1 (logic output) */ val = (1 << WM8962_GP2_FN_SHIFT) | (value << WM8962_GP2_LVL_SHIFT); - ret = snd_soc_update_bits(codec, WM8962_GPIO_BASE + offset, - WM8962_GP2_FN_MASK | WM8962_GP2_LVL, val); - if (ret < 0) - return ret; - - return 0; + return snd_soc_update_bits(codec, WM8962_GPIO_BASE + offset, + WM8962_GP2_FN_MASK | WM8962_GP2_LVL, val); } static struct gpio_chip wm8962_template_chip = { @@ -4127,20 +4123,11 @@ static int wm8962_remove(struct snd_soc_codec *codec) return 0; } -static int wm8962_soc_volatile(struct snd_soc_codec *codec, - unsigned int reg) -{ - return true; -} - - static struct snd_soc_codec_driver soc_codec_dev_wm8962 = { .probe = wm8962_probe, .remove = wm8962_remove, .set_bias_level = wm8962_set_bias_level, .set_pll = wm8962_set_fll, - .reg_cache_size = WM8962_MAX_REGISTER, - .volatile_register = wm8962_soc_volatile, }; static const struct regmap_config wm8962_regmap = { diff --git a/trunk/sound/soc/codecs/wm8994.c b/trunk/sound/soc/codecs/wm8994.c index 93d27b660257..a9936904d1a0 100644 --- a/trunk/sound/soc/codecs/wm8994.c +++ b/trunk/sound/soc/codecs/wm8994.c @@ -3759,7 +3759,7 @@ static int wm8994_codec_probe(struct snd_soc_codec *codec) wm8994_free_irq(wm8994->wm8994, WM8994_IRQ_FIFOS_ERR, codec); wm8994_free_irq(wm8994->wm8994, WM8994_IRQ_TEMP_SHUT, codec); wm8994_free_irq(wm8994->wm8994, WM8994_IRQ_TEMP_WARN, codec); - +err: return ret; } @@ -3815,20 +3815,12 @@ static int wm8994_codec_remove(struct snd_soc_codec *codec) return 0; } -static int wm8994_soc_volatile(struct snd_soc_codec *codec, - unsigned int reg) -{ - return true; -} - static struct snd_soc_codec_driver soc_codec_dev_wm8994 = { .probe = wm8994_codec_probe, .remove = wm8994_codec_remove, .suspend = wm8994_suspend, .resume = wm8994_resume, .set_bias_level = wm8994_set_bias_level, - .reg_cache_size = WM8994_MAX_REGISTER, - .volatile_register = wm8994_soc_volatile, }; static int __devinit wm8994_probe(struct platform_device *pdev) diff --git a/trunk/sound/soc/codecs/wm8996.c b/trunk/sound/soc/codecs/wm8996.c index d8da10fe5b52..da7acaefa9d9 100644 --- a/trunk/sound/soc/codecs/wm8996.c +++ b/trunk/sound/soc/codecs/wm8996.c @@ -3039,12 +3039,6 @@ static int wm8996_remove(struct snd_soc_codec *codec) return 0; } -static int wm8996_soc_volatile_register(struct snd_soc_codec *codec, - unsigned int reg) -{ - return true; -} - static struct snd_soc_codec_driver soc_codec_dev_wm8996 = { .probe = wm8996_probe, .remove = wm8996_remove, @@ -3057,8 +3051,6 @@ static struct snd_soc_codec_driver soc_codec_dev_wm8996 = { .dapm_routes = wm8996_dapm_routes, .num_dapm_routes = ARRAY_SIZE(wm8996_dapm_routes), .set_pll = wm8996_set_fll, - .reg_cache_size = WM8996_MAX_REGISTER, - .volatile_register = wm8996_soc_volatile_register, }; #define WM8996_RATES (SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_16000 |\ diff --git a/trunk/sound/soc/davinci/davinci-i2s.c b/trunk/sound/soc/davinci/davinci-i2s.c index 0a74b9587a2c..ec187100367e 100644 --- a/trunk/sound/soc/davinci/davinci-i2s.c +++ b/trunk/sound/soc/davinci/davinci-i2s.c @@ -661,18 +661,18 @@ static int davinci_i2s_probe(struct platform_device *pdev) return -ENODEV; } - ioarea = devm_request_mem_region(&pdev->dev, mem->start, - resource_size(mem), - pdev->name); + ioarea = request_mem_region(mem->start, resource_size(mem), + pdev->name); if (!ioarea) { dev_err(&pdev->dev, "McBSP region already claimed\n"); return -EBUSY; } - dev = devm_kzalloc(&pdev->dev, sizeof(struct davinci_mcbsp_dev), - GFP_KERNEL); - if (!dev) - return -ENOMEM; + dev = kzalloc(sizeof(struct davinci_mcbsp_dev), GFP_KERNEL); + if (!dev) { + ret = -ENOMEM; + goto err_release_region; + } if (pdata) { dev->enable_channel_combine = pdata->enable_channel_combine; dev->dma_params[SNDRV_PCM_STREAM_PLAYBACK].sram_size = @@ -691,11 +691,13 @@ static int davinci_i2s_probe(struct platform_device *pdev) dev->dma_params[SNDRV_PCM_STREAM_CAPTURE].ram_chan_q = ram_chan_q; dev->clk = clk_get(&pdev->dev, NULL); - if (IS_ERR(dev->clk)) - return -ENODEV; + if (IS_ERR(dev->clk)) { + ret = -ENODEV; + goto err_free_mem; + } clk_enable(dev->clk); - dev->base = devm_ioremap(&pdev->dev, mem->start, resource_size(mem)); + dev->base = ioremap(mem->start, resource_size(mem)); if (!dev->base) { dev_err(&pdev->dev, "ioremap failed\n"); ret = -ENOMEM; @@ -713,7 +715,7 @@ static int davinci_i2s_probe(struct platform_device *pdev) if (!res) { dev_err(&pdev->dev, "no DMA resource\n"); ret = -ENXIO; - goto err_release_clk; + goto err_iounmap; } dev->dma_params[SNDRV_PCM_STREAM_PLAYBACK].channel = res->start; @@ -721,7 +723,7 @@ static int davinci_i2s_probe(struct platform_device *pdev) if (!res) { dev_err(&pdev->dev, "no DMA resource\n"); ret = -ENXIO; - goto err_release_clk; + goto err_iounmap; } dev->dma_params[SNDRV_PCM_STREAM_CAPTURE].channel = res->start; dev->dev = &pdev->dev; @@ -730,24 +732,35 @@ static int davinci_i2s_probe(struct platform_device *pdev) ret = snd_soc_register_dai(&pdev->dev, &davinci_i2s_dai); if (ret != 0) - goto err_release_clk; + goto err_iounmap; return 0; +err_iounmap: + iounmap(dev->base); err_release_clk: clk_disable(dev->clk); clk_put(dev->clk); +err_free_mem: + kfree(dev); +err_release_region: + release_mem_region(mem->start, resource_size(mem)); + return ret; } static int davinci_i2s_remove(struct platform_device *pdev) { struct davinci_mcbsp_dev *dev = dev_get_drvdata(&pdev->dev); + struct resource *mem; snd_soc_unregister_dai(&pdev->dev); clk_disable(dev->clk); clk_put(dev->clk); dev->clk = NULL; + kfree(dev); + mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); + release_mem_region(mem->start, resource_size(mem)); return 0; } diff --git a/trunk/sound/soc/davinci/davinci-mcasp.c b/trunk/sound/soc/davinci/davinci-mcasp.c index 95441bfc8190..2152ff5c04f6 100644 --- a/trunk/sound/soc/davinci/davinci-mcasp.c +++ b/trunk/sound/soc/davinci/davinci-mcasp.c @@ -865,35 +865,38 @@ static int davinci_mcasp_probe(struct platform_device *pdev) struct resource *mem, *ioarea, *res; struct snd_platform_data *pdata; struct davinci_audio_dev *dev; - int ret; + int ret = 0; - dev = devm_kzalloc(&pdev->dev, sizeof(struct davinci_audio_dev), - GFP_KERNEL); + dev = kzalloc(sizeof(struct davinci_audio_dev), GFP_KERNEL); if (!dev) return -ENOMEM; mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); if (!mem) { dev_err(&pdev->dev, "no mem resource?\n"); - return -ENODEV; + ret = -ENODEV; + goto err_release_data; } - ioarea = devm_request_mem_region(&pdev->dev, mem->start, + ioarea = request_mem_region(mem->start, resource_size(mem), pdev->name); if (!ioarea) { dev_err(&pdev->dev, "Audio region already claimed\n"); - return -EBUSY; + ret = -EBUSY; + goto err_release_data; } pdata = pdev->dev.platform_data; dev->clk = clk_get(&pdev->dev, NULL); - if (IS_ERR(dev->clk)) - return -ENODEV; + if (IS_ERR(dev->clk)) { + ret = -ENODEV; + goto err_release_region; + } clk_enable(dev->clk); dev->clk_active = 1; - dev->base = devm_ioremap(&pdev->dev, mem->start, resource_size(mem)); + dev->base = ioremap(mem->start, resource_size(mem)); if (!dev->base) { dev_err(&pdev->dev, "ioremap failed\n"); ret = -ENOMEM; @@ -921,7 +924,7 @@ static int davinci_mcasp_probe(struct platform_device *pdev) if (!res) { dev_err(&pdev->dev, "no DMA resource\n"); ret = -ENODEV; - goto err_release_clk; + goto err_iounmap; } dma_data->channel = res->start; @@ -937,7 +940,7 @@ static int davinci_mcasp_probe(struct platform_device *pdev) if (!res) { dev_err(&pdev->dev, "no DMA resource\n"); ret = -ENODEV; - goto err_release_clk; + goto err_iounmap; } dma_data->channel = res->start; @@ -945,24 +948,37 @@ static int davinci_mcasp_probe(struct platform_device *pdev) ret = snd_soc_register_dai(&pdev->dev, &davinci_mcasp_dai[pdata->op_mode]); if (ret != 0) - goto err_release_clk; + goto err_iounmap; return 0; +err_iounmap: + iounmap(dev->base); err_release_clk: clk_disable(dev->clk); clk_put(dev->clk); +err_release_region: + release_mem_region(mem->start, resource_size(mem)); +err_release_data: + kfree(dev); + return ret; } static int davinci_mcasp_remove(struct platform_device *pdev) { struct davinci_audio_dev *dev = dev_get_drvdata(&pdev->dev); + struct resource *mem; snd_soc_unregister_dai(&pdev->dev); clk_disable(dev->clk); clk_put(dev->clk); dev->clk = NULL; + mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); + release_mem_region(mem->start, resource_size(mem)); + + kfree(dev); + return 0; } diff --git a/trunk/sound/soc/davinci/davinci-vcif.c b/trunk/sound/soc/davinci/davinci-vcif.c index da030ff883d5..70ce10c5d998 100644 --- a/trunk/sound/soc/davinci/davinci-vcif.c +++ b/trunk/sound/soc/davinci/davinci-vcif.c @@ -210,9 +210,7 @@ static int davinci_vcif_probe(struct platform_device *pdev) struct davinci_vcif_dev *davinci_vcif_dev; int ret; - davinci_vcif_dev = devm_kzalloc(&pdev->dev, - sizeof(struct davinci_vcif_dev), - GFP_KERNEL); + davinci_vcif_dev = kzalloc(sizeof(struct davinci_vcif_dev), GFP_KERNEL); if (!davinci_vcif_dev) { dev_dbg(&pdev->dev, "could not allocate memory for private data\n"); @@ -237,15 +235,23 @@ static int davinci_vcif_probe(struct platform_device *pdev) ret = snd_soc_register_dai(&pdev->dev, &davinci_vcif_dai); if (ret != 0) { dev_err(&pdev->dev, "could not register dai\n"); - return ret; + goto fail; } return 0; + +fail: + kfree(davinci_vcif_dev); + + return ret; } static int davinci_vcif_remove(struct platform_device *pdev) { + struct davinci_vcif_dev *davinci_vcif_dev = dev_get_drvdata(&pdev->dev); + snd_soc_unregister_dai(&pdev->dev); + kfree(davinci_vcif_dev); return 0; } diff --git a/trunk/sound/soc/kirkwood/kirkwood-i2s.c b/trunk/sound/soc/kirkwood/kirkwood-i2s.c index 3cb9aa4299d3..f6bb21156876 100644 --- a/trunk/sound/soc/kirkwood/kirkwood-i2s.c +++ b/trunk/sound/soc/kirkwood/kirkwood-i2s.c @@ -441,12 +441,13 @@ static __devinit int kirkwood_i2s_dev_probe(struct platform_device *pdev) goto err_ioremap; } - if (!data) { + if (!data || !data->dram) { dev_err(&pdev->dev, "no platform data ?!\n"); err = -EINVAL; goto err_ioremap; } + priv->dram = data->dram; priv->burst = data->burst; return snd_soc_register_dai(&pdev->dev, &kirkwood_i2s_dai); diff --git a/trunk/sound/soc/kirkwood/kirkwood-openrd.c b/trunk/sound/soc/kirkwood/kirkwood-openrd.c index 55d2ed3df30d..8a5a3ddaa5e2 100644 --- a/trunk/sound/soc/kirkwood/kirkwood-openrd.c +++ b/trunk/sound/soc/kirkwood/kirkwood-openrd.c @@ -26,7 +26,18 @@ static int openrd_client_hw_params(struct snd_pcm_substream *substream, { struct snd_soc_pcm_runtime *rtd = substream->private_data; struct snd_soc_dai *codec_dai = rtd->codec_dai; - unsigned int freq; + struct snd_soc_dai *cpu_dai = rtd->cpu_dai; + int ret; + unsigned int freq, fmt; + + fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_CBS_CFS; + ret = snd_soc_dai_set_fmt(cpu_dai, fmt); + if (ret < 0) + return ret; + + ret = snd_soc_dai_set_fmt(codec_dai, fmt); + if (ret < 0) + return ret; switch (params_rate(params)) { default: @@ -58,7 +69,6 @@ static struct snd_soc_dai_link openrd_client_dai[] = { .platform_name = "kirkwood-pcm-audio", .codec_dai_name = "cs42l51-hifi", .codec_name = "cs42l51-codec.0-004a", - .dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_CBS_CFS, .ops = &openrd_client_ops, }, }; diff --git a/trunk/sound/soc/kirkwood/kirkwood-t5325.c b/trunk/sound/soc/kirkwood/kirkwood-t5325.c index b47cc4e9b746..a8930c7c9d1e 100644 --- a/trunk/sound/soc/kirkwood/kirkwood-t5325.c +++ b/trunk/sound/soc/kirkwood/kirkwood-t5325.c @@ -25,7 +25,18 @@ static int t5325_hw_params(struct snd_pcm_substream *substream, { struct snd_soc_pcm_runtime *rtd = substream->private_data; struct snd_soc_dai *codec_dai = rtd->codec_dai; - unsigned int freq; + struct snd_soc_dai *cpu_dai = rtd->cpu_dai; + int ret; + unsigned int freq, fmt; + + fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_CBS_CFS; + ret = snd_soc_dai_set_fmt(cpu_dai, fmt); + if (ret < 0) + return ret; + + ret = snd_soc_dai_set_fmt(codec_dai, fmt); + if (ret < 0) + return ret; freq = params_rate(params) * 256; @@ -59,6 +70,11 @@ static int t5325_dai_init(struct snd_soc_pcm_runtime *rtd) struct snd_soc_codec *codec = rtd->codec; struct snd_soc_dapm_context *dapm = &codec->dapm; + snd_soc_dapm_new_controls(dapm, t5325_dapm_widgets, + ARRAY_SIZE(t5325_dapm_widgets)); + + snd_soc_dapm_add_routes(dapm, t5325_route, ARRAY_SIZE(t5325_route)); + snd_soc_dapm_enable_pin(dapm, "Mic Jack"); snd_soc_dapm_enable_pin(dapm, "Headphone Jack"); snd_soc_dapm_enable_pin(dapm, "Speaker"); @@ -74,7 +90,6 @@ static struct snd_soc_dai_link t5325_dai[] = { .platform_name = "kirkwood-pcm-audio", .codec_dai_name = "alc5621-hifi", .codec_name = "alc562x-codec.0-001a", - .dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_CBS_CFS, .ops = &t5325_ops, .init = t5325_dai_init, }, @@ -86,11 +101,6 @@ static struct snd_soc_card t5325 = { .owner = THIS_MODULE, .dai_link = t5325_dai, .num_links = ARRAY_SIZE(t5325_dai), - - .dapm_widgets = t5325_dapm_widgets, - .num_dapm_widgets = ARRAY_SIZE(t5325_dapm_widgets), - .dapm_routes = t5325_route, - .num_dapm_routes = ARRAY_SIZE(t5325_route), }; static struct platform_device *t5325_snd_device; diff --git a/trunk/sound/soc/kirkwood/kirkwood.h b/trunk/sound/soc/kirkwood/kirkwood.h index 9047436b3937..bb6e6a5648c9 100644 --- a/trunk/sound/soc/kirkwood/kirkwood.h +++ b/trunk/sound/soc/kirkwood/kirkwood.h @@ -123,6 +123,7 @@ struct kirkwood_dma_data { void __iomem *io; int irq; int burst; + struct mbus_dram_target_info *dram; }; #endif diff --git a/trunk/sound/soc/mxs/mxs-sgtl5000.c b/trunk/sound/soc/mxs/mxs-sgtl5000.c index 60f052b7cf22..259278f95cdf 100644 --- a/trunk/sound/soc/mxs/mxs-sgtl5000.c +++ b/trunk/sound/soc/mxs/mxs-sgtl5000.c @@ -105,7 +105,6 @@ static struct snd_soc_dai_link mxs_sgtl5000_dai[] = { static struct snd_soc_card mxs_sgtl5000 = { .name = "mxs_sgtl5000", - .owner = THIS_MODULE, .dai_link = mxs_sgtl5000_dai, .num_links = ARRAY_SIZE(mxs_sgtl5000_dai), }; diff --git a/trunk/sound/soc/omap/am3517evm.c b/trunk/sound/soc/omap/am3517evm.c index c1cd4a0cbe9e..add4866d7e67 100644 --- a/trunk/sound/soc/omap/am3517evm.c +++ b/trunk/sound/soc/omap/am3517evm.c @@ -107,6 +107,7 @@ static struct snd_soc_dai_link am3517evm_dai = { /* Audio machine driver */ static struct snd_soc_card snd_soc_am3517evm = { .name = "am3517evm", + .owner = THIS_MODULE, .dai_link = &am3517evm_dai, .num_links = 1, diff --git a/trunk/sound/soc/omap/ams-delta.c b/trunk/sound/soc/omap/ams-delta.c index a04a4338fdac..3e523a7a9efb 100644 --- a/trunk/sound/soc/omap/ams-delta.c +++ b/trunk/sound/soc/omap/ams-delta.c @@ -597,6 +597,7 @@ static struct snd_soc_dai_link ams_delta_dai_link = { /* Audio card driver */ static struct snd_soc_card ams_delta_audio_card = { .name = "AMS_DELTA", + .owner = THIS_MODULE, .dai_link = &ams_delta_dai_link, .num_links = 1, .set_bias_level = ams_delta_set_bias_level, diff --git a/trunk/sound/soc/omap/igep0020.c b/trunk/sound/soc/omap/igep0020.c index 591fbf8f7cd9..ccae58a1339c 100644 --- a/trunk/sound/soc/omap/igep0020.c +++ b/trunk/sound/soc/omap/igep0020.c @@ -72,6 +72,7 @@ static struct snd_soc_dai_link igep2_dai = { /* Audio machine driver */ static struct snd_soc_card snd_soc_card_igep2 = { .name = "igep2", + .owner = THIS_MODULE, .dai_link = &igep2_dai, .num_links = 1, }; diff --git a/trunk/sound/soc/omap/n810.c b/trunk/sound/soc/omap/n810.c index fc6209b3f20c..597be412f1e4 100644 --- a/trunk/sound/soc/omap/n810.c +++ b/trunk/sound/soc/omap/n810.c @@ -289,6 +289,7 @@ static struct snd_soc_dai_link n810_dai = { /* Audio machine driver */ static struct snd_soc_card snd_soc_n810 = { .name = "N810", + .owner = THIS_MODULE, .dai_link = &n810_dai, .num_links = 1, diff --git a/trunk/sound/soc/omap/omap3evm.c b/trunk/sound/soc/omap/omap3evm.c index 68578959e4aa..071fcb09b8b2 100644 --- a/trunk/sound/soc/omap/omap3evm.c +++ b/trunk/sound/soc/omap/omap3evm.c @@ -70,6 +70,7 @@ static struct snd_soc_dai_link omap3evm_dai = { /* Audio machine driver */ static struct snd_soc_card snd_soc_omap3evm = { .name = "omap3evm", + .owner = THIS_MODULE, .dai_link = &omap3evm_dai, .num_links = 1, }; diff --git a/trunk/sound/soc/omap/omap3pandora.c b/trunk/sound/soc/omap/omap3pandora.c index 7605c37c91e7..07794bd10952 100644 --- a/trunk/sound/soc/omap/omap3pandora.c +++ b/trunk/sound/soc/omap/omap3pandora.c @@ -233,6 +233,7 @@ static struct snd_soc_dai_link omap3pandora_dai[] = { /* SoC card */ static struct snd_soc_card snd_soc_card_omap3pandora = { .name = "omap3pandora", + .owner = THIS_MODULE, .dai_link = omap3pandora_dai, .num_links = ARRAY_SIZE(omap3pandora_dai), }; diff --git a/trunk/sound/soc/omap/omap4-hdmi-card.c b/trunk/sound/soc/omap/omap4-hdmi-card.c index 52d471c1eeed..28d689b2714d 100644 --- a/trunk/sound/soc/omap/omap4-hdmi-card.c +++ b/trunk/sound/soc/omap/omap4-hdmi-card.c @@ -74,6 +74,7 @@ static struct snd_soc_dai_link omap4_hdmi_dai = { static struct snd_soc_card snd_soc_omap4_hdmi = { .name = "OMAP4HDMI", + .owner = THIS_MODULE, .dai_link = &omap4_hdmi_dai, .num_links = 1, }; diff --git a/trunk/sound/soc/omap/osk5912.c b/trunk/sound/soc/omap/osk5912.c index 351ec9db384d..d859b597e7ec 100644 --- a/trunk/sound/soc/omap/osk5912.c +++ b/trunk/sound/soc/omap/osk5912.c @@ -108,6 +108,7 @@ static struct snd_soc_dai_link osk_dai = { /* Audio machine driver */ static struct snd_soc_card snd_soc_card_osk = { .name = "OSK5912", + .owner = THIS_MODULE, .dai_link = &osk_dai, .num_links = 1, diff --git a/trunk/sound/soc/omap/overo.c b/trunk/sound/soc/omap/overo.c index c3550aeee533..2ee889c50256 100644 --- a/trunk/sound/soc/omap/overo.c +++ b/trunk/sound/soc/omap/overo.c @@ -72,6 +72,7 @@ static struct snd_soc_dai_link overo_dai = { /* Audio machine driver */ static struct snd_soc_card snd_soc_card_overo = { .name = "overo", + .owner = THIS_MODULE, .dai_link = &overo_dai, .num_links = 1, }; diff --git a/trunk/sound/soc/omap/rx51.c b/trunk/sound/soc/omap/rx51.c index ad16db536320..fada6ef43eea 100644 --- a/trunk/sound/soc/omap/rx51.c +++ b/trunk/sound/soc/omap/rx51.c @@ -383,6 +383,7 @@ static struct snd_soc_codec_conf rx51_codec_conf[] = { /* Audio card */ static struct snd_soc_card rx51_sound_card = { .name = "RX-51", + .owner = THIS_MODULE, .dai_link = rx51_dai, .num_links = ARRAY_SIZE(rx51_dai), .aux_dev = rx51_aux_dev, diff --git a/trunk/sound/soc/omap/sdp3430.c b/trunk/sound/soc/omap/sdp3430.c index e8fbf8efdbb8..2c850662ea7e 100644 --- a/trunk/sound/soc/omap/sdp3430.c +++ b/trunk/sound/soc/omap/sdp3430.c @@ -213,6 +213,7 @@ static struct snd_soc_dai_link sdp3430_dai[] = { /* Audio machine driver */ static struct snd_soc_card snd_soc_sdp3430 = { .name = "SDP3430", + .owner = THIS_MODULE, .dai_link = sdp3430_dai, .num_links = ARRAY_SIZE(sdp3430_dai), diff --git a/trunk/sound/soc/omap/sdp4430.c b/trunk/sound/soc/omap/sdp4430.c index 2735fa03b74b..175ba9a04edf 100644 --- a/trunk/sound/soc/omap/sdp4430.c +++ b/trunk/sound/soc/omap/sdp4430.c @@ -226,6 +226,7 @@ static struct snd_soc_dai_link sdp4430_dai[] = { /* Audio machine driver */ static struct snd_soc_card snd_soc_sdp4430 = { .name = "SDP4430", + .owner = THIS_MODULE, .dai_link = sdp4430_dai, .num_links = ARRAY_SIZE(sdp4430_dai), diff --git a/trunk/sound/soc/omap/zoom2.c b/trunk/sound/soc/omap/zoom2.c index 7641a7fa8f97..981616d61f67 100644 --- a/trunk/sound/soc/omap/zoom2.c +++ b/trunk/sound/soc/omap/zoom2.c @@ -157,6 +157,7 @@ static struct snd_soc_dai_link zoom2_dai[] = { /* Audio machine driver */ static struct snd_soc_card snd_soc_zoom2 = { .name = "Zoom2", + .owner = THIS_MODULE, .dai_link = zoom2_dai, .num_links = ARRAY_SIZE(zoom2_dai), diff --git a/trunk/sound/soc/pxa/corgi.c b/trunk/sound/soc/pxa/corgi.c index bc21944851c4..5e5004a84073 100644 --- a/trunk/sound/soc/pxa/corgi.c +++ b/trunk/sound/soc/pxa/corgi.c @@ -142,6 +142,18 @@ static int corgi_hw_params(struct snd_pcm_substream *substream, break; } + /* set codec DAI configuration */ + ret = snd_soc_dai_set_fmt(codec_dai, SND_SOC_DAIFMT_I2S | + SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_CBS_CFS); + if (ret < 0) + return ret; + + /* set cpu DAI configuration */ + ret = snd_soc_dai_set_fmt(cpu_dai, SND_SOC_DAIFMT_I2S | + SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_CBS_CFS); + if (ret < 0) + return ret; + /* set the codec system clock for DAC and ADC */ ret = snd_soc_dai_set_sysclk(codec_dai, WM8731_SYSCLK_XTAL, clk, SND_SOC_CLOCK_IN); @@ -227,7 +239,7 @@ SND_SOC_DAPM_HP("Headset Jack", NULL), }; /* Corgi machine audio map (connections to the codec pins) */ -static const struct snd_soc_dapm_route corgi_audio_map[] = { +static const struct snd_soc_dapm_route audio_map[] = { /* headset Jack - in = micin, out = LHPOUT*/ {"Headset Jack", NULL, "LHPOUT"}, @@ -269,10 +281,24 @@ static int corgi_wm8731_init(struct snd_soc_pcm_runtime *rtd) { struct snd_soc_codec *codec = rtd->codec; struct snd_soc_dapm_context *dapm = &codec->dapm; + int err; snd_soc_dapm_nc_pin(dapm, "LLINEIN"); snd_soc_dapm_nc_pin(dapm, "RLINEIN"); + /* Add corgi specific controls */ + err = snd_soc_add_controls(codec, wm8731_corgi_controls, + ARRAY_SIZE(wm8731_corgi_controls)); + if (err < 0) + return err; + + /* Add corgi specific widgets */ + snd_soc_dapm_new_controls(dapm, wm8731_dapm_widgets, + ARRAY_SIZE(wm8731_dapm_widgets)); + + /* Set up corgi specific audio path audio_map */ + snd_soc_dapm_add_routes(dapm, audio_map, ARRAY_SIZE(audio_map)); + return 0; } @@ -285,61 +311,49 @@ static struct snd_soc_dai_link corgi_dai = { .platform_name = "pxa-pcm-audio", .codec_name = "wm8731.0-001b", .init = corgi_wm8731_init, - .dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF | - SND_SOC_DAIFMT_CBS_CFS, .ops = &corgi_ops, }; /* corgi audio machine driver */ -static struct snd_soc_card corgi = { +static struct snd_soc_card snd_soc_corgi = { .name = "Corgi", .owner = THIS_MODULE, .dai_link = &corgi_dai, .num_links = 1, - - .controls = wm8731_corgi_controls, - .num_controls = ARRAY_SIZE(wm8731_corgi_controls), - .dapm_widgets = wm8731_dapm_widgets, - .num_dapm_widgets = ARRAY_SIZE(wm8731_dapm_widgets), - .dapm_routes = corgi_audio_map, - .num_dapm_routes = ARRAY_SIZE(corgi_audio_map), }; -static int __devinit corgi_probe(struct platform_device *pdev) +static struct platform_device *corgi_snd_device; + +static int __init corgi_init(void) { - struct snd_soc_card *card = &corgi; int ret; - card->dev = &pdev->dev; + if (!(machine_is_corgi() || machine_is_shepherd() || + machine_is_husky())) + return -ENODEV; + + corgi_snd_device = platform_device_alloc("soc-audio", -1); + if (!corgi_snd_device) + return -ENOMEM; + + platform_set_drvdata(corgi_snd_device, &snd_soc_corgi); + ret = platform_device_add(corgi_snd_device); - ret = snd_soc_register_card(card); if (ret) - dev_err(&pdev->dev, "snd_soc_register_card() failed: %d\n", - ret); + platform_device_put(corgi_snd_device); + return ret; } -static int __devexit corgi_remove(struct platform_device *pdev) +static void __exit corgi_exit(void) { - struct snd_soc_card *card = platform_get_drvdata(pdev); - - snd_soc_unregister_card(card); - return 0; + platform_device_unregister(corgi_snd_device); } -static struct platform_driver corgi_driver = { - .driver = { - .name = "corgi-audio", - .owner = THIS_MODULE, - }, - .probe = corgi_probe, - .remove = __devexit_p(corgi_remove), -}; - -module_platform_driver(corgi_driver); +module_init(corgi_init); +module_exit(corgi_exit); /* Module information */ MODULE_AUTHOR("Richard Purdie"); MODULE_DESCRIPTION("ALSA SoC Corgi"); MODULE_LICENSE("GPL"); -MODULE_ALIAS("platform:corgi-audio"); diff --git a/trunk/sound/soc/pxa/poodle.c b/trunk/sound/soc/pxa/poodle.c index fd0ed10c6fe7..4c29bc1f9cfe 100644 --- a/trunk/sound/soc/pxa/poodle.c +++ b/trunk/sound/soc/pxa/poodle.c @@ -121,6 +121,18 @@ static int poodle_hw_params(struct snd_pcm_substream *substream, break; } + /* set codec DAI configuration */ + ret = snd_soc_dai_set_fmt(codec_dai, SND_SOC_DAIFMT_I2S | + SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_CBS_CFS); + if (ret < 0) + return ret; + + /* set cpu DAI configuration */ + ret = snd_soc_dai_set_fmt(cpu_dai, SND_SOC_DAIFMT_I2S | + SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_CBS_CFS); + if (ret < 0) + return ret; + /* set the codec system clock for DAC and ADC */ ret = snd_soc_dai_set_sysclk(codec_dai, WM8731_SYSCLK_XTAL, clk, SND_SOC_CLOCK_IN); @@ -202,7 +214,7 @@ SND_SOC_DAPM_SPK("Ext Spk", poodle_amp_event), }; /* Corgi machine connections to the codec pins */ -static const struct snd_soc_dapm_route poodle_audio_map[] = { +static const struct snd_soc_dapm_route audio_map[] = { /* headphone connected to LHPOUT1, RHPOUT1 */ {"Headphone Jack", NULL, "LHPOUT"}, @@ -234,11 +246,25 @@ static int poodle_wm8731_init(struct snd_soc_pcm_runtime *rtd) { struct snd_soc_codec *codec = rtd->codec; struct snd_soc_dapm_context *dapm = &codec->dapm; + int err; snd_soc_dapm_nc_pin(dapm, "LLINEIN"); snd_soc_dapm_nc_pin(dapm, "RLINEIN"); snd_soc_dapm_enable_pin(dapm, "MICIN"); + /* Add poodle specific controls */ + err = snd_soc_add_controls(codec, wm8731_poodle_controls, + ARRAY_SIZE(wm8731_poodle_controls)); + if (err < 0) + return err; + + /* Add poodle specific widgets */ + snd_soc_dapm_new_controls(dapm, wm8731_dapm_widgets, + ARRAY_SIZE(wm8731_dapm_widgets)); + + /* Set up poodle specific audio path audio_map */ + snd_soc_dapm_add_routes(dapm, audio_map, ARRAY_SIZE(audio_map)); + return 0; } @@ -251,31 +277,26 @@ static struct snd_soc_dai_link poodle_dai = { .platform_name = "pxa-pcm-audio", .codec_name = "wm8731.0-001b", .init = poodle_wm8731_init, - .dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF | - SND_SOC_DAIFMT_CBS_CFS, .ops = &poodle_ops, }; /* poodle audio machine driver */ -static struct snd_soc_card poodle = { +static struct snd_soc_card snd_soc_poodle = { .name = "Poodle", .dai_link = &poodle_dai, .num_links = 1, .owner = THIS_MODULE, - - .controls = wm8731_poodle_controls, - .num_controls = ARRAY_SIZE(wm8731_poodle_controls), - .dapm_widgets = wm8731_dapm_widgets, - .num_dapm_widgets = ARRAY_SIZE(wm8731_dapm_widgets), - .dapm_routes = poodle_audio_map, - .num_dapm_routes = ARRAY_SIZE(poodle_audio_map), }; -static int __devinit poodle_probe(struct platform_device *pdev) +static struct platform_device *poodle_snd_device; + +static int __init poodle_init(void) { - struct snd_soc_card *card = &poodle; int ret; + if (!machine_is_poodle()) + return -ENODEV; + locomo_gpio_set_dir(&poodle_locomo_device.dev, POODLE_LOCOMO_GPIO_AMP_ON, 0); /* should we mute HP at startup - burning power ?*/ @@ -284,36 +305,28 @@ static int __devinit poodle_probe(struct platform_device *pdev) locomo_gpio_set_dir(&poodle_locomo_device.dev, POODLE_LOCOMO_GPIO_MUTE_R, 0); - card->dev = &pdev->dev; + poodle_snd_device = platform_device_alloc("soc-audio", -1); + if (!poodle_snd_device) + return -ENOMEM; + + platform_set_drvdata(poodle_snd_device, &snd_soc_poodle); + ret = platform_device_add(poodle_snd_device); - ret = snd_soc_register_card(card); if (ret) - dev_err(&pdev->dev, "snd_soc_register_card() failed: %d\n", - ret); + platform_device_put(poodle_snd_device); + return ret; } -static int __devexit poodle_remove(struct platform_device *pdev) +static void __exit poodle_exit(void) { - struct snd_soc_card *card = platform_get_drvdata(pdev); - - snd_soc_unregister_card(card); - return 0; + platform_device_unregister(poodle_snd_device); } -static struct platform_driver poodle_driver = { - .driver = { - .name = "poodle-audio", - .owner = THIS_MODULE, - }, - .probe = poodle_probe, - .remove = __devexit_p(poodle_remove), -}; - -module_platform_driver(poodle_driver); +module_init(poodle_init); +module_exit(poodle_exit); /* Module information */ MODULE_AUTHOR("Richard Purdie"); MODULE_DESCRIPTION("ALSA SoC Poodle"); MODULE_LICENSE("GPL"); -MODULE_ALIAS("platform:poodle-audio"); diff --git a/trunk/sound/soc/pxa/saarb.c b/trunk/sound/soc/pxa/saarb.c index c34146b776b4..2e21712cec67 100644 --- a/trunk/sound/soc/pxa/saarb.c +++ b/trunk/sound/soc/pxa/saarb.c @@ -51,7 +51,7 @@ static const struct snd_soc_dapm_widget saarb_dapm_widgets[] = { }; /* saarb machine audio map */ -static const struct snd_soc_dapm_route saarb_audio_map[] = { +static const struct snd_soc_dapm_route audio_map[] = { {"Headset Stereophone", NULL, "HS1"}, {"Headset Stereophone", NULL, "HS2"}, @@ -92,6 +92,15 @@ static int saarb_i2s_hw_params(struct snd_pcm_substream *substream, if (ret < 0) return ret; + ret = snd_soc_dai_set_fmt(cpu_dai, SND_SOC_DAIFMT_I2S | + SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_CBM_CFM); + if (ret < 0) + return ret; + ret = snd_soc_dai_set_fmt(codec_dai, SND_SOC_DAIFMT_I2S | + SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_CBM_CFM); + if (ret < 0) + return ret; + ret = snd_soc_dai_set_tdm_slot(cpu_dai, 3, 3, 2, width); return ret; @@ -110,8 +119,6 @@ static struct snd_soc_dai_link saarb_dai[] = { .platform_name = "pxa-pcm-audio", .codec_name = "88pm860x-codec", .init = saarb_pm860x_init, - .dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF | - SND_SOC_DAIFMT_CBM_CFM, .ops = &saarb_i2s_ops, }, }; @@ -121,17 +128,17 @@ static struct snd_soc_card snd_soc_card_saarb = { .owner = THIS_MODULE, .dai_link = saarb_dai, .num_links = ARRAY_SIZE(saarb_dai), - - .dapm_widgets = saarb_dapm_widgets, - .num_dapm_widgets = ARRAY_SIZE(saarb_dapm_widgets), - .dapm_routes = saarb_audio_map, - .num_dapm_routes = ARRAY_SIZE(saarb_audio_map), }; static int saarb_pm860x_init(struct snd_soc_pcm_runtime *rtd) { struct snd_soc_codec *codec = rtd->codec; struct snd_soc_dapm_context *dapm = &codec->dapm; + int ret; + + snd_soc_dapm_new_controls(dapm, saarb_dapm_widgets, + ARRAY_SIZE(saarb_dapm_widgets)); + snd_soc_dapm_add_routes(dapm, audio_map, ARRAY_SIZE(audio_map)); /* connected pins */ snd_soc_dapm_enable_pin(dapm, "Ext Speaker"); diff --git a/trunk/sound/soc/pxa/spitz.c b/trunk/sound/soc/pxa/spitz.c index 90c5245c4742..bb060482c00d 100644 --- a/trunk/sound/soc/pxa/spitz.c +++ b/trunk/sound/soc/pxa/spitz.c @@ -143,6 +143,18 @@ static int spitz_hw_params(struct snd_pcm_substream *substream, break; } + /* set codec DAI configuration */ + ret = snd_soc_dai_set_fmt(codec_dai, SND_SOC_DAIFMT_I2S | + SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_CBS_CFS); + if (ret < 0) + return ret; + + /* set cpu DAI configuration */ + ret = snd_soc_dai_set_fmt(cpu_dai, SND_SOC_DAIFMT_I2S | + SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_CBS_CFS); + if (ret < 0) + return ret; + /* set the codec system clock for DAC and ADC */ ret = snd_soc_dai_set_sysclk(codec_dai, WM8750_SYSCLK, clk, SND_SOC_CLOCK_IN); @@ -222,7 +234,7 @@ static const struct snd_soc_dapm_widget wm8750_dapm_widgets[] = { }; /* Spitz machine audio_map */ -static const struct snd_soc_dapm_route spitz_audio_map[] = { +static const struct snd_soc_dapm_route audio_map[] = { /* headphone connected to LOUT1, ROUT1 */ {"Headphone Jack", NULL, "LOUT1"}, @@ -265,6 +277,7 @@ static int spitz_wm8750_init(struct snd_soc_pcm_runtime *rtd) { struct snd_soc_codec *codec = rtd->codec; struct snd_soc_dapm_context *dapm = &codec->dapm; + int err; /* NC codec pins */ snd_soc_dapm_nc_pin(dapm, "RINPUT1"); @@ -275,6 +288,19 @@ static int spitz_wm8750_init(struct snd_soc_pcm_runtime *rtd) snd_soc_dapm_nc_pin(dapm, "OUT3"); snd_soc_dapm_nc_pin(dapm, "MONO1"); + /* Add spitz specific controls */ + err = snd_soc_add_controls(codec, wm8750_spitz_controls, + ARRAY_SIZE(wm8750_spitz_controls)); + if (err < 0) + return err; + + /* Add spitz specific widgets */ + snd_soc_dapm_new_controls(dapm, wm8750_dapm_widgets, + ARRAY_SIZE(wm8750_dapm_widgets)); + + /* Set up spitz specific audio paths */ + snd_soc_dapm_add_routes(dapm, audio_map, ARRAY_SIZE(audio_map)); + return 0; } @@ -287,8 +313,6 @@ static struct snd_soc_dai_link spitz_dai = { .platform_name = "pxa-pcm-audio", .codec_name = "wm8750.0-001b", .init = spitz_wm8750_init, - .dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF | - SND_SOC_DAIFMT_CBS_CFS, .ops = &spitz_ops, }; @@ -298,13 +322,6 @@ static struct snd_soc_card snd_soc_spitz = { .owner = THIS_MODULE, .dai_link = &spitz_dai, .num_links = 1, - - .controls = wm8750_spitz_controls, - .num_controls = ARRAY_SIZE(wm8750_spitz_controls), - .dapm_widgets = wm8750_dapm_widgets, - .num_dapm_widgets = ARRAY_SIZE(wm8750_dapm_widgets), - .dapm_routes = spitz_audio_map, - .num_dapm_routes = ARRAY_SIZE(spitz_audio_map), }; static struct platform_device *spitz_snd_device; diff --git a/trunk/sound/soc/pxa/tavorevb3.c b/trunk/sound/soc/pxa/tavorevb3.c index 8b5ab8f72726..4bef12cd424d 100644 --- a/trunk/sound/soc/pxa/tavorevb3.c +++ b/trunk/sound/soc/pxa/tavorevb3.c @@ -51,7 +51,7 @@ static const struct snd_soc_dapm_widget evb3_dapm_widgets[] = { }; /* tavorevb3 machine audio map */ -static const struct snd_soc_dapm_route evb3_audio_map[] = { +static const struct snd_soc_dapm_route audio_map[] = { {"Headset Stereophone", NULL, "HS1"}, {"Headset Stereophone", NULL, "HS2"}, @@ -92,6 +92,16 @@ static int evb3_i2s_hw_params(struct snd_pcm_substream *substream, if (ret < 0) return ret; + ret = snd_soc_dai_set_fmt(cpu_dai, SND_SOC_DAIFMT_I2S | + SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_CBM_CFM); + if (ret < 0) + return ret; + + ret = snd_soc_dai_set_fmt(codec_dai, SND_SOC_DAIFMT_I2S | + SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_CBM_CFM); + if (ret < 0) + return ret; + ret = snd_soc_dai_set_tdm_slot(cpu_dai, 3, 3, 2, width); return ret; } @@ -109,8 +119,6 @@ static struct snd_soc_dai_link evb3_dai[] = { .platform_name = "pxa-pcm-audio", .codec_name = "88pm860x-codec", .init = evb3_pm860x_init, - .dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF | - SND_SOC_DAIFMT_CBM_CFM, .ops = &evb3_i2s_ops, }, }; @@ -120,17 +128,17 @@ static struct snd_soc_card snd_soc_card_evb3 = { .owner = THIS_MODULE, .dai_link = evb3_dai, .num_links = ARRAY_SIZE(evb3_dai), - - .dapm_widgets = evb3_dapm_widgets, - .num_dapm_widgets = ARRAY_SIZE(evb3_dapm_widgets), - .dapm_routes = evb3_audio_map, - .num_dapm_routes = ARRAY_SIZE(evb3_audio_map), }; static int evb3_pm860x_init(struct snd_soc_pcm_runtime *rtd) { struct snd_soc_codec *codec = rtd->codec; struct snd_soc_dapm_context *dapm = &codec->dapm; + int ret; + + snd_soc_dapm_new_controls(dapm, evb3_dapm_widgets, + ARRAY_SIZE(evb3_dapm_widgets)); + snd_soc_dapm_add_routes(dapm, audio_map, ARRAY_SIZE(audio_map)); /* connected pins */ snd_soc_dapm_enable_pin(dapm, "Ext Speaker"); diff --git a/trunk/sound/soc/pxa/z2.c b/trunk/sound/soc/pxa/z2.c index 76ccb172d0a7..d6807e0372bd 100644 --- a/trunk/sound/soc/pxa/z2.c +++ b/trunk/sound/soc/pxa/z2.c @@ -56,6 +56,18 @@ static int z2_hw_params(struct snd_pcm_substream *substream, break; } + /* set codec DAI configuration */ + ret = snd_soc_dai_set_fmt(codec_dai, SND_SOC_DAIFMT_I2S | + SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_CBS_CFS); + if (ret < 0) + return ret; + + /* set cpu DAI configuration */ + ret = snd_soc_dai_set_fmt(cpu_dai, SND_SOC_DAIFMT_I2S | + SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_CBS_CFS); + if (ret < 0) + return ret; + /* set the codec system clock for DAC and ADC */ ret = snd_soc_dai_set_sysclk(codec_dai, WM8750_SYSCLK, clk, SND_SOC_CLOCK_IN); @@ -112,7 +124,7 @@ static const struct snd_soc_dapm_widget wm8750_dapm_widgets[] = { }; /* Z2 machine audio_map */ -static const struct snd_soc_dapm_route z2_audio_map[] = { +static const struct snd_soc_dapm_route audio_map[] = { /* headphone connected to LOUT1, ROUT1 */ {"Headphone Jack", NULL, "LOUT1"}, @@ -142,6 +154,13 @@ static int z2_wm8750_init(struct snd_soc_pcm_runtime *rtd) snd_soc_dapm_disable_pin(dapm, "OUT3"); snd_soc_dapm_disable_pin(dapm, "MONO1"); + /* Add z2 specific widgets */ + snd_soc_dapm_new_controls(dapm, wm8750_dapm_widgets, + ARRAY_SIZE(wm8750_dapm_widgets)); + + /* Set up z2 specific audio paths */ + snd_soc_dapm_add_routes(dapm, audio_map, ARRAY_SIZE(audio_map)); + /* Jack detection API stuff */ ret = snd_soc_jack_new(codec, "Headset Jack", SND_JACK_HEADSET, &hs_jack); @@ -177,8 +196,6 @@ static struct snd_soc_dai_link z2_dai = { .platform_name = "pxa-pcm-audio", .codec_name = "wm8750.0-001b", .init = z2_wm8750_init, - .dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF | - SND_SOC_DAIFMT_CBS_CFS, .ops = &z2_ops, }; @@ -188,11 +205,6 @@ static struct snd_soc_card snd_soc_z2 = { .owner = THIS_MODULE, .dai_link = &z2_dai, .num_links = 1, - - .dapm_widgets = wm8750_dapm_widgets, - .num_dapm_widgets = ARRAY_SIZE(wm8750_dapm_widgets), - .dapm_routes = z2_audio_map, - .num_dapm_routes = ARRAY_SIZE(z2_audio_map), }; static struct platform_device *z2_snd_device; diff --git a/trunk/sound/soc/soc-pcm.c b/trunk/sound/soc/soc-pcm.c index cdc860a5ff37..8aa7cec6eab2 100644 --- a/trunk/sound/soc/soc-pcm.c +++ b/trunk/sound/soc/soc-pcm.c @@ -598,6 +598,17 @@ static snd_pcm_uframes_t soc_pcm_pointer(struct snd_pcm_substream *substream) return offset; } +/* ASoC PCM operations */ +static struct snd_pcm_ops soc_pcm_ops = { + .open = soc_pcm_open, + .close = soc_pcm_close, + .hw_params = soc_pcm_hw_params, + .hw_free = soc_pcm_hw_free, + .prepare = soc_pcm_prepare, + .trigger = soc_pcm_trigger, + .pointer = soc_pcm_pointer, +}; + /* create a new pcm */ int soc_new_pcm(struct snd_soc_pcm_runtime *rtd, int num) { @@ -605,19 +616,10 @@ int soc_new_pcm(struct snd_soc_pcm_runtime *rtd, int num) struct snd_soc_platform *platform = rtd->platform; struct snd_soc_dai *codec_dai = rtd->codec_dai; struct snd_soc_dai *cpu_dai = rtd->cpu_dai; - struct snd_pcm_ops *soc_pcm_ops = &rtd->ops; struct snd_pcm *pcm; char new_name[64]; int ret = 0, playback = 0, capture = 0; - soc_pcm_ops->open = soc_pcm_open; - soc_pcm_ops->close = soc_pcm_close; - soc_pcm_ops->hw_params = soc_pcm_hw_params; - soc_pcm_ops->hw_free = soc_pcm_hw_free; - soc_pcm_ops->prepare = soc_pcm_prepare; - soc_pcm_ops->trigger = soc_pcm_trigger; - soc_pcm_ops->pointer = soc_pcm_pointer; - /* check client and interface hw capabilities */ snprintf(new_name, sizeof(new_name), "%s %s-%d", rtd->dai_link->stream_name, codec_dai->name, num); @@ -641,20 +643,20 @@ int soc_new_pcm(struct snd_soc_pcm_runtime *rtd, int num) rtd->pcm = pcm; pcm->private_data = rtd; if (platform->driver->ops) { - soc_pcm_ops->mmap = platform->driver->ops->mmap; - soc_pcm_ops->pointer = platform->driver->ops->pointer; - soc_pcm_ops->ioctl = platform->driver->ops->ioctl; - soc_pcm_ops->copy = platform->driver->ops->copy; - soc_pcm_ops->silence = platform->driver->ops->silence; - soc_pcm_ops->ack = platform->driver->ops->ack; - soc_pcm_ops->page = platform->driver->ops->page; + soc_pcm_ops.mmap = platform->driver->ops->mmap; + soc_pcm_ops.pointer = platform->driver->ops->pointer; + soc_pcm_ops.ioctl = platform->driver->ops->ioctl; + soc_pcm_ops.copy = platform->driver->ops->copy; + soc_pcm_ops.silence = platform->driver->ops->silence; + soc_pcm_ops.ack = platform->driver->ops->ack; + soc_pcm_ops.page = platform->driver->ops->page; } if (playback) - snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, soc_pcm_ops); + snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, &soc_pcm_ops); if (capture) - snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE, soc_pcm_ops); + snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE, &soc_pcm_ops); if (platform->driver->pcm_new) { ret = platform->driver->pcm_new(rtd);