Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/drzeus/mmc
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/drzeus/mmc: sdhci: make sure to clear the error interrupt mmc: at91_mci: wakeup on card insertion (or removal) mmc: add maintainer for at91
This commit is contained in:
commit
5c4c1489b9
|
@ -651,7 +651,12 @@ W: http://linux-atm.sourceforge.net
|
|||
S: Maintained
|
||||
|
||||
ATMEL AT91 MCI DRIVER
|
||||
S: Orphan
|
||||
P: Nicolas Ferre
|
||||
M: nicolas.ferre@rfo.atmel.com
|
||||
L: linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
|
||||
W: http://www.atmel.com/products/AT91/
|
||||
W: http://www.at91.com/
|
||||
S: Maintained
|
||||
|
||||
ATMEL MACB ETHERNET DRIVER
|
||||
P: Haavard Skinnemoen
|
||||
|
|
|
@ -903,8 +903,10 @@ static int __init at91_mci_probe(struct platform_device *pdev)
|
|||
/*
|
||||
* Add host to MMC layer
|
||||
*/
|
||||
if (host->board->det_pin)
|
||||
if (host->board->det_pin) {
|
||||
host->present = !at91_get_gpio_value(host->board->det_pin);
|
||||
device_init_wakeup(&pdev->dev, 1);
|
||||
}
|
||||
else
|
||||
host->present = -1;
|
||||
|
||||
|
@ -940,6 +942,7 @@ static int __exit at91_mci_remove(struct platform_device *pdev)
|
|||
host = mmc_priv(mmc);
|
||||
|
||||
if (host->present != -1) {
|
||||
device_init_wakeup(&pdev->dev, 0);
|
||||
free_irq(host->board->det_pin, host);
|
||||
cancel_delayed_work(&host->mmc->detect);
|
||||
}
|
||||
|
@ -966,8 +969,12 @@ static int __exit at91_mci_remove(struct platform_device *pdev)
|
|||
static int at91_mci_suspend(struct platform_device *pdev, pm_message_t state)
|
||||
{
|
||||
struct mmc_host *mmc = platform_get_drvdata(pdev);
|
||||
struct at91mci_host *host = mmc_priv(mmc);
|
||||
int ret = 0;
|
||||
|
||||
if (device_may_wakeup(&pdev->dev))
|
||||
enable_irq_wake(host->board->det_pin);
|
||||
|
||||
if (mmc)
|
||||
ret = mmc_suspend_host(mmc, state);
|
||||
|
||||
|
@ -977,8 +984,12 @@ static int at91_mci_suspend(struct platform_device *pdev, pm_message_t state)
|
|||
static int at91_mci_resume(struct platform_device *pdev)
|
||||
{
|
||||
struct mmc_host *mmc = platform_get_drvdata(pdev);
|
||||
struct at91mci_host *host = mmc_priv(mmc);
|
||||
int ret = 0;
|
||||
|
||||
if (device_may_wakeup(&pdev->dev))
|
||||
disable_irq_wake(host->board->det_pin);
|
||||
|
||||
if (mmc)
|
||||
ret = mmc_resume_host(mmc);
|
||||
|
||||
|
|
|
@ -1024,6 +1024,8 @@ static irqreturn_t sdhci_irq(int irq, void *dev_id)
|
|||
|
||||
intmask &= ~(SDHCI_INT_CMD_MASK | SDHCI_INT_DATA_MASK);
|
||||
|
||||
intmask &= ~SDHCI_INT_ERROR;
|
||||
|
||||
if (intmask & SDHCI_INT_BUS_POWER) {
|
||||
printk(KERN_ERR "%s: Card is consuming too much power!\n",
|
||||
mmc_hostname(host->mmc));
|
||||
|
|
|
@ -107,6 +107,7 @@
|
|||
#define SDHCI_INT_CARD_INSERT 0x00000040
|
||||
#define SDHCI_INT_CARD_REMOVE 0x00000080
|
||||
#define SDHCI_INT_CARD_INT 0x00000100
|
||||
#define SDHCI_INT_ERROR 0x00008000
|
||||
#define SDHCI_INT_TIMEOUT 0x00010000
|
||||
#define SDHCI_INT_CRC 0x00020000
|
||||
#define SDHCI_INT_END_BIT 0x00040000
|
||||
|
|
Loading…
Reference in a new issue