OLD | NEW |
1 /* | 1 /* |
2 * linux/drivers/mmc/host/sdhci.c - Secure Digital Host Controller Interface dr
iver | 2 * linux/drivers/mmc/host/sdhci.c - Secure Digital Host Controller Interface dr
iver |
3 * | 3 * |
4 * Copyright (C) 2005-2008 Pierre Ossman, All Rights Reserved. | 4 * Copyright (C) 2005-2008 Pierre Ossman, All Rights Reserved. |
5 * | 5 * |
6 * This program is free software; you can redistribute it and/or modify | 6 * This program is free software; you can redistribute it and/or modify |
7 * it under the terms of the GNU General Public License as published by | 7 * it under the terms of the GNU General Public License as published by |
8 * the Free Software Foundation; either version 2 of the License, or (at | 8 * the Free Software Foundation; either version 2 of the License, or (at |
9 * your option) any later version. | 9 * your option) any later version. |
10 * | 10 * |
(...skipping 1636 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1647 int sdhci_suspend_host(struct sdhci_host *host, pm_message_t state) | 1647 int sdhci_suspend_host(struct sdhci_host *host, pm_message_t state) |
1648 { | 1648 { |
1649 int ret = 0; | 1649 int ret = 0; |
1650 struct mmc_host *mmc = host->mmc; | 1650 struct mmc_host *mmc = host->mmc; |
1651 | 1651 |
1652 sdhci_disable_card_detection(host); | 1652 sdhci_disable_card_detection(host); |
1653 | 1653 |
1654 if (mmc->card && (mmc->card->type != MMC_TYPE_SDIO)) | 1654 if (mmc->card && (mmc->card->type != MMC_TYPE_SDIO)) |
1655 ret = mmc_suspend_host(host->mmc); | 1655 ret = mmc_suspend_host(host->mmc); |
1656 | 1656 |
| 1657 /* Save the original intmask to restore later */ |
| 1658 host->save_intmask = sdhci_readl(host, SDHCI_INT_ENABLE); |
1657 sdhci_mask_irqs(host, SDHCI_INT_ALL_MASK); | 1659 sdhci_mask_irqs(host, SDHCI_INT_ALL_MASK); |
1658 | 1660 |
1659 if (host->vmmc) | 1661 if (host->vmmc) |
1660 ret = regulator_disable(host->vmmc); | 1662 ret = regulator_disable(host->vmmc); |
1661 | 1663 |
1662 if (host->irq) | 1664 if (host->irq) |
1663 disable_irq(host->irq); | 1665 disable_irq(host->irq); |
1664 | 1666 |
1665 return ret; | 1667 return ret; |
1666 } | 1668 } |
(...skipping 21 matching lines...) Expand all Loading... |
1688 enable_irq(host->irq); | 1690 enable_irq(host->irq); |
1689 | 1691 |
1690 sdhci_init(host, (host->mmc->pm_flags & MMC_PM_KEEP_POWER)); | 1692 sdhci_init(host, (host->mmc->pm_flags & MMC_PM_KEEP_POWER)); |
1691 mmiowb(); | 1693 mmiowb(); |
1692 | 1694 |
1693 if (mmc->card && (mmc->card->type != MMC_TYPE_SDIO)) | 1695 if (mmc->card && (mmc->card->type != MMC_TYPE_SDIO)) |
1694 ret = mmc_resume_host(host->mmc); | 1696 ret = mmc_resume_host(host->mmc); |
1695 | 1697 |
1696 sdhci_enable_card_detection(host); | 1698 sdhci_enable_card_detection(host); |
1697 | 1699 |
| 1700 /* Restore the original intmask */ |
| 1701 sdhci_unmask_irqs(host, host->save_intmask); |
| 1702 |
1698 return ret; | 1703 return ret; |
1699 } | 1704 } |
1700 | 1705 |
1701 EXPORT_SYMBOL_GPL(sdhci_resume_host); | 1706 EXPORT_SYMBOL_GPL(sdhci_resume_host); |
1702 | 1707 |
1703 void sdhci_enable_irq_wakeups(struct sdhci_host *host) | 1708 void sdhci_enable_irq_wakeups(struct sdhci_host *host) |
1704 { | 1709 { |
1705 u8 val; | 1710 u8 val; |
1706 val = sdhci_readb(host, SDHCI_WAKE_UP_CONTROL); | 1711 val = sdhci_readb(host, SDHCI_WAKE_UP_CONTROL); |
1707 val |= SDHCI_WAKE_ON_INT; | 1712 val |= SDHCI_WAKE_ON_INT; |
(...skipping 409 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2117 module_init(sdhci_drv_init); | 2122 module_init(sdhci_drv_init); |
2118 module_exit(sdhci_drv_exit); | 2123 module_exit(sdhci_drv_exit); |
2119 | 2124 |
2120 module_param(debug_quirks, uint, 0444); | 2125 module_param(debug_quirks, uint, 0444); |
2121 | 2126 |
2122 MODULE_AUTHOR("Pierre Ossman <pierre@ossman.eu>"); | 2127 MODULE_AUTHOR("Pierre Ossman <pierre@ossman.eu>"); |
2123 MODULE_DESCRIPTION("Secure Digital Host Controller Interface core driver"); | 2128 MODULE_DESCRIPTION("Secure Digital Host Controller Interface core driver"); |
2124 MODULE_LICENSE("GPL"); | 2129 MODULE_LICENSE("GPL"); |
2125 | 2130 |
2126 MODULE_PARM_DESC(debug_quirks, "Force certain quirks."); | 2131 MODULE_PARM_DESC(debug_quirks, "Force certain quirks."); |
OLD | NEW |