diff options
| author | Rabin Vincent <rabin.vincent@stericsson.com> | 2010-07-21 07:50:31 -0400 |
|---|---|---|
| committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2010-07-27 05:48:44 -0400 |
| commit | f5e2574e734650bbeb801a31cc99e628f9a027af (patch) | |
| tree | e7705dae6e6be70cc7b20129471c2498f9def7ac | |
| parent | 528320db013b687c5f0150fd77eb4dc02ca328d1 (diff) | |
ARM: 6239/1: mmci: let core poll for card detection
Use the MMC core's ability to poll for card detection. This also has
the advantage of doing the gpio_get_value from a workqueue instead of
timer, allowing the gpio to be on a sleeping gpiochip.
Acked-by: Linus Walleij <linus.walleij@stericsson.com>
Signed-off-by: Rabin Vincent <rabin.vincent@stericsson.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
| -rw-r--r-- | drivers/mmc/host/mmci.c | 22 |
1 files changed, 1 insertions, 21 deletions
diff --git a/drivers/mmc/host/mmci.c b/drivers/mmc/host/mmci.c index ddcfc4c7e6ac..3eaa0e9373cd 100644 --- a/drivers/mmc/host/mmci.c +++ b/drivers/mmc/host/mmci.c | |||
| @@ -567,18 +567,6 @@ static const struct mmc_host_ops mmci_ops = { | |||
| 567 | .get_cd = mmci_get_cd, | 567 | .get_cd = mmci_get_cd, |
| 568 | }; | 568 | }; |
| 569 | 569 | ||
| 570 | static void mmci_check_status(unsigned long data) | ||
| 571 | { | ||
| 572 | struct mmci_host *host = (struct mmci_host *)data; | ||
| 573 | unsigned int status = mmci_get_cd(host->mmc); | ||
| 574 | |||
| 575 | if (status ^ host->oldstat) | ||
| 576 | mmc_detect_change(host->mmc, 0); | ||
| 577 | |||
| 578 | host->oldstat = status; | ||
| 579 | mod_timer(&host->timer, jiffies + HZ); | ||
| 580 | } | ||
| 581 | |||
| 582 | static int __devinit mmci_probe(struct amba_device *dev, struct amba_id *id) | 570 | static int __devinit mmci_probe(struct amba_device *dev, struct amba_id *id) |
| 583 | { | 571 | { |
| 584 | struct mmci_platform_data *plat = dev->dev.platform_data; | 572 | struct mmci_platform_data *plat = dev->dev.platform_data; |
| @@ -685,6 +673,7 @@ static int __devinit mmci_probe(struct amba_device *dev, struct amba_id *id) | |||
| 685 | if (host->vcc == NULL) | 673 | if (host->vcc == NULL) |
| 686 | mmc->ocr_avail = plat->ocr_mask; | 674 | mmc->ocr_avail = plat->ocr_mask; |
| 687 | mmc->caps = plat->capabilities; | 675 | mmc->caps = plat->capabilities; |
| 676 | mmc->caps |= MMC_CAP_NEEDS_POLL; | ||
| 688 | 677 | ||
| 689 | /* | 678 | /* |
| 690 | * We can do SGIO | 679 | * We can do SGIO |
| @@ -750,7 +739,6 @@ static int __devinit mmci_probe(struct amba_device *dev, struct amba_id *id) | |||
| 750 | writel(MCI_IRQENABLE, host->base + MMCIMASK0); | 739 | writel(MCI_IRQENABLE, host->base + MMCIMASK0); |
| 751 | 740 | ||
| 752 | amba_set_drvdata(dev, mmc); | 741 | amba_set_drvdata(dev, mmc); |
| 753 | host->oldstat = mmci_get_cd(host->mmc); | ||
| 754 | 742 | ||
| 755 | mmc_add_host(mmc); | 743 | mmc_add_host(mmc); |
| 756 | 744 | ||
| @@ -758,12 +746,6 @@ static int __devinit mmci_probe(struct amba_device *dev, struct amba_id *id) | |||
| 758 | mmc_hostname(mmc), amba_rev(dev), amba_config(dev), | 746 | mmc_hostname(mmc), amba_rev(dev), amba_config(dev), |
| 759 | (unsigned long long)dev->res.start, dev->irq[0], dev->irq[1]); | 747 | (unsigned long long)dev->res.start, dev->irq[0], dev->irq[1]); |
| 760 | 748 | ||
| 761 | init_timer(&host->timer); | ||
| 762 | host->timer.data = (unsigned long)host; | ||
| 763 | host->timer.function = mmci_check_status; | ||
| 764 | host->timer.expires = jiffies + HZ; | ||
| 765 | add_timer(&host->timer); | ||
| 766 | |||
| 767 | return 0; | 749 | return 0; |
| 768 | 750 | ||
| 769 | irq0_free: | 751 | irq0_free: |
| @@ -797,8 +779,6 @@ static int __devexit mmci_remove(struct amba_device *dev) | |||
| 797 | if (mmc) { | 779 | if (mmc) { |
| 798 | struct mmci_host *host = mmc_priv(mmc); | 780 | struct mmci_host *host = mmc_priv(mmc); |
| 799 | 781 | ||
| 800 | del_timer_sync(&host->timer); | ||
| 801 | |||
| 802 | mmc_remove_host(mmc); | 782 | mmc_remove_host(mmc); |
| 803 | 783 | ||
| 804 | writel(0, host->base + MMCIMASK0); | 784 | writel(0, host->base + MMCIMASK0); |
