Commit 8ef1a143 authored by Pierre Ossman's avatar Pierre Ossman Committed by Russell King

[MMC] sdhci: check SDHCI base clock

A base clock value of 0 means that the driver must get the base clock through
some other means.  As we have no other way of getting it, we must abort.
Signed-off-by: default avatarPierre Ossman <drzeus@drzeus.cx>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
parent d63fb6c5
...@@ -1030,7 +1030,14 @@ static int __devinit sdhci_probe_slot(struct pci_dev *pdev, int slot) ...@@ -1030,7 +1030,14 @@ static int __devinit sdhci_probe_slot(struct pci_dev *pdev, int slot)
else /* XXX: Hack to get MMC layer to avoid highmem */ else /* XXX: Hack to get MMC layer to avoid highmem */
pdev->dma_mask = 0; pdev->dma_mask = 0;
host->max_clk = (caps & SDHCI_CLOCK_BASE_MASK) >> SDHCI_CLOCK_BASE_SHIFT; host->max_clk =
(caps & SDHCI_CLOCK_BASE_MASK) >> SDHCI_CLOCK_BASE_SHIFT;
if (host->max_clk == 0) {
printk(KERN_ERR "%s: Hardware doesn't specify base clock "
"frequency.\n", host->slot_descr);
ret = -ENODEV;
goto unmap;
}
host->max_clk *= 1000000; host->max_clk *= 1000000;
/* /*
...@@ -1078,7 +1085,7 @@ static int __devinit sdhci_probe_slot(struct pci_dev *pdev, int slot) ...@@ -1078,7 +1085,7 @@ static int __devinit sdhci_probe_slot(struct pci_dev *pdev, int slot)
ret = request_irq(host->irq, sdhci_irq, SA_SHIRQ, ret = request_irq(host->irq, sdhci_irq, SA_SHIRQ,
host->slot_descr, host); host->slot_descr, host);
if (ret) if (ret)
goto unmap; goto untasklet;
sdhci_init(host); sdhci_init(host);
...@@ -1097,10 +1104,10 @@ static int __devinit sdhci_probe_slot(struct pci_dev *pdev, int slot) ...@@ -1097,10 +1104,10 @@ static int __devinit sdhci_probe_slot(struct pci_dev *pdev, int slot)
return 0; return 0;
unmap: untasklet:
tasklet_kill(&host->card_tasklet); tasklet_kill(&host->card_tasklet);
tasklet_kill(&host->finish_tasklet); tasklet_kill(&host->finish_tasklet);
unmap:
iounmap(host->ioaddr); iounmap(host->ioaddr);
release: release:
pci_release_region(pdev, host->bar); pci_release_region(pdev, host->bar);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment