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

[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
Loading
Loading
Loading
Loading
+11 −4
Original line number Original line Diff line number Diff line
@@ -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)
	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)


	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);