Skip to content

Commit

Permalink
ASoC: OMAP4: McPDM: Convert to hwmod/omap_device
Browse files Browse the repository at this point in the history
In order to probe, and operate correctly, the OMAP McPDM driver needs to
be converted to use hwmod.
The device name has been changed to probe the driver.
Replace the clk_* with pm_runtime_* calls to manage the clocks correctly.
Missing request_mem_region/release_mem_region added.

Signed-off-by: Peter Ujfalusi <peter.ujfalusi@ti.com>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Acked-by: Liam Girdwood <lrg@ti.com>
  • Loading branch information
Peter Ujfalusi committed Sep 22, 2011
1 parent b199adf commit 3a98cd6
Show file tree
Hide file tree
Showing 4 changed files with 23 additions and 20 deletions.
38 changes: 21 additions & 17 deletions sound/soc/omap/mcpdm.c
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
#include <linux/slab.h>
#include <linux/interrupt.h>
#include <linux/err.h>
#include <linux/clk.h>
#include <linux/pm_runtime.h>
#include <linux/delay.h>
#include <linux/io.h>
#include <linux/irq.h>
Expand Down Expand Up @@ -322,11 +322,11 @@ static irqreturn_t omap_mcpdm_irq_handler(int irq, void *dev_id)
return IRQ_HANDLED;
}

int omap_mcpdm_request(void)
int omap_mcpdm_request(void)
{
int ret;

clk_enable(mcpdm->clk);
pm_runtime_get_sync(mcpdm->dev);

spin_lock(&mcpdm->lock);

Expand All @@ -353,7 +353,8 @@ int omap_mcpdm_request(void)
return 0;

err:
clk_disable(mcpdm->clk);
mcpdm->free = 1;
pm_runtime_put_sync(mcpdm->dev);
return ret;
}

Expand All @@ -368,7 +369,7 @@ void omap_mcpdm_free(void)
mcpdm->free = 1;
spin_unlock(&mcpdm->lock);

clk_disable(mcpdm->clk);
pm_runtime_put_sync(mcpdm->dev);

free_irq(mcpdm->irq, (void *)mcpdm);
}
Expand Down Expand Up @@ -421,28 +422,29 @@ int __devinit omap_mcpdm_probe(struct platform_device *pdev)

spin_lock_init(&mcpdm->lock);
mcpdm->free = 1;

if (!request_mem_region(res->start, resource_size(res), "McPDM")) {
ret = -EBUSY;
goto err_resource;
}

mcpdm->io_base = ioremap(res->start, resource_size(res));
if (!mcpdm->io_base) {
ret = -ENOMEM;
goto err_resource;
goto err_remap;
}

mcpdm->irq = platform_get_irq(pdev, 0);

mcpdm->clk = clk_get(&pdev->dev, "pdm_ck");
if (IS_ERR(mcpdm->clk)) {
ret = PTR_ERR(mcpdm->clk);
dev_err(&pdev->dev, "unable to get pdm_ck: %d\n", ret);
goto err_clk;
}

mcpdm->dev = &pdev->dev;
platform_set_drvdata(pdev, mcpdm);

pm_runtime_enable(mcpdm->dev);

return 0;

err_clk:
iounmap(mcpdm->io_base);
err_remap:
release_mem_region(res->start, resource_size(res));
err_resource:
kfree(mcpdm);
exit:
Expand All @@ -452,14 +454,16 @@ int __devinit omap_mcpdm_probe(struct platform_device *pdev)
int __devexit omap_mcpdm_remove(struct platform_device *pdev)
{
struct omap_mcpdm *mcpdm_ptr = platform_get_drvdata(pdev);
struct resource *res;

platform_set_drvdata(pdev, NULL);

clk_put(mcpdm_ptr->clk);
pm_runtime_disable(mcpdm_ptr->dev);

iounmap(mcpdm_ptr->io_base);
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
release_mem_region(res->start, resource_size(res));

mcpdm_ptr->clk = NULL;
mcpdm_ptr->free = 0;
mcpdm_ptr->dev = NULL;

Expand Down
1 change: 0 additions & 1 deletion sound/soc/omap/mcpdm.h
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,6 @@ struct omap_mcpdm {

spinlock_t lock;
struct omap_mcpdm_platform_data *pdata;
struct clk *clk;
struct omap_mcpdm_link *downlink;
struct omap_mcpdm_link *uplink;
struct completion irq_completion;
Expand Down
2 changes: 1 addition & 1 deletion sound/soc/omap/omap-mcpdm.c
Original file line number Diff line number Diff line change
Expand Up @@ -254,7 +254,7 @@ static int __devexit asoc_mcpdm_remove(struct platform_device *pdev)

static struct platform_driver asoc_mcpdm_driver = {
.driver = {
.name = "omap-mcpdm-dai",
.name = "omap-mcpdm",
.owner = THIS_MODULE,
},

Expand Down
2 changes: 1 addition & 1 deletion sound/soc/omap/sdp4430.c
Original file line number Diff line number Diff line change
Expand Up @@ -165,7 +165,7 @@ static int sdp4430_twl6040_init(struct snd_soc_pcm_runtime *rtd)
static struct snd_soc_dai_link sdp4430_dai = {
.name = "TWL6040",
.stream_name = "TWL6040",
.cpu_dai_name ="omap-mcpdm-dai",
.cpu_dai_name = "omap-mcpdm",
.codec_dai_name = "twl6040-hifi",
.platform_name = "omap-pcm-audio",
.codec_name = "twl6040-codec",
Expand Down

0 comments on commit 3a98cd6

Please sign in to comment.