Skip to content

Commit

Permalink
sata_mv: support clkdev framework
Browse files Browse the repository at this point in the history
Signed-off-by: Saeed Bishara <saeed@marvell.com>
Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
  • Loading branch information
Saeed Bishara authored and Jeff Garzik committed Dec 17, 2009
1 parent d7b0c14 commit c77a2f4
Showing 1 changed file with 34 additions and 3 deletions.
37 changes: 34 additions & 3 deletions drivers/ata/sata_mv.c
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@
#include <linux/dmapool.h>
#include <linux/dma-mapping.h>
#include <linux/device.h>
#include <linux/clk.h>
#include <linux/platform_device.h>
#include <linux/ata_platform.h>
#include <linux/mbus.h>
Expand Down Expand Up @@ -548,6 +549,10 @@ struct mv_host_priv {
u32 irq_cause_offset;
u32 irq_mask_offset;
u32 unmask_all_irqs;

#if defined(CONFIG_HAVE_CLK)
struct clk *clk;
#endif
/*
* These consistent DMA memory pools give us guaranteed
* alignment for hardware-accessed data structures,
Expand Down Expand Up @@ -4041,6 +4046,14 @@ static int mv_platform_probe(struct platform_device *pdev)
resource_size(res));
hpriv->base -= SATAHC0_REG_BASE;

#if defined(CONFIG_HAVE_CLK)
hpriv->clk = clk_get(&pdev->dev, NULL);
if (IS_ERR(hpriv->clk))
dev_notice(&pdev->dev, "cannot get clkdev\n");
else
clk_enable(hpriv->clk);
#endif

/*
* (Re-)program MBUS remapping windows if we are asked to.
*/
Expand All @@ -4049,19 +4062,28 @@ static int mv_platform_probe(struct platform_device *pdev)

rc = mv_create_dma_pools(hpriv, &pdev->dev);
if (rc)
return rc;
goto err;

/* initialize adapter */
rc = mv_init_host(host, chip_soc);
if (rc)
return rc;
goto err;

dev_printk(KERN_INFO, &pdev->dev,
"slots %u ports %d\n", (unsigned)MV_MAX_Q_DEPTH,
host->n_ports);

return ata_host_activate(host, platform_get_irq(pdev, 0), mv_interrupt,
IRQF_SHARED, &mv6_sht);
err:
#if defined(CONFIG_HAVE_CLK)
if (!IS_ERR(hpriv->clk)) {
clk_disable(hpriv->clk);
clk_put(hpriv->clk);
}
#endif

return rc;
}

/*
Expand All @@ -4076,8 +4098,17 @@ static int __devexit mv_platform_remove(struct platform_device *pdev)
{
struct device *dev = &pdev->dev;
struct ata_host *host = dev_get_drvdata(dev);

#if defined(CONFIG_HAVE_CLK)
struct mv_host_priv *hpriv = host->private_data;
#endif
ata_host_detach(host);

#if defined(CONFIG_HAVE_CLK)
if (!IS_ERR(hpriv->clk)) {
clk_disable(hpriv->clk);
clk_put(hpriv->clk);
}
#endif
return 0;
}

Expand Down

0 comments on commit c77a2f4

Please sign in to comment.