Commit 9bf70717 authored by Maxim Levitsky's avatar Maxim Levitsky Committed by David Woodhouse

mtd: r852: remove useless pci powerup/down from suspend/resume routines

It turns out that pci core now handles these, so this code is redundant
and can even cause bugs
Signed-off-by: default avatarMaxim Levitsky <maximlevitsky@gmail.com>
Signed-off-by: default avatarDavid Woodhouse <David.Woodhouse@intel.com>
parent 12aebf3e
...@@ -757,11 +757,6 @@ static irqreturn_t r852_irq(int irq, void *data) ...@@ -757,11 +757,6 @@ static irqreturn_t r852_irq(int irq, void *data)
spin_lock_irqsave(&dev->irqlock, flags); spin_lock_irqsave(&dev->irqlock, flags);
/* We can recieve shared interrupt while pci is suspended
in that case reads will return 0xFFFFFFFF.... */
if (dev->insuspend)
goto out;
/* handle card detection interrupts first */ /* handle card detection interrupts first */
card_status = r852_read_reg(dev, R852_CARD_IRQ_STA); card_status = r852_read_reg(dev, R852_CARD_IRQ_STA);
r852_write_reg(dev, R852_CARD_IRQ_STA, card_status); r852_write_reg(dev, R852_CARD_IRQ_STA, card_status);
...@@ -1035,7 +1030,6 @@ void r852_shutdown(struct pci_dev *pci_dev) ...@@ -1035,7 +1030,6 @@ void r852_shutdown(struct pci_dev *pci_dev)
int r852_suspend(struct device *device) int r852_suspend(struct device *device)
{ {
struct r852_device *dev = pci_get_drvdata(to_pci_dev(device)); struct r852_device *dev = pci_get_drvdata(to_pci_dev(device));
unsigned long flags;
if (dev->ctlreg & R852_CTL_CARDENABLE) if (dev->ctlreg & R852_CTL_CARDENABLE)
return -EBUSY; return -EBUSY;
...@@ -1047,43 +1041,22 @@ int r852_suspend(struct device *device) ...@@ -1047,43 +1041,22 @@ int r852_suspend(struct device *device)
r852_disable_irqs(dev); r852_disable_irqs(dev);
r852_engine_disable(dev); r852_engine_disable(dev);
spin_lock_irqsave(&dev->irqlock, flags);
dev->insuspend = 1;
spin_unlock_irqrestore(&dev->irqlock, flags);
/* At that point, even if interrupt handler is running, it will quit */
/* So wait for this to happen explictly */
synchronize_irq(dev->irq);
/* If card was pulled off just during the suspend, which is very /* If card was pulled off just during the suspend, which is very
unlikely, we will remove it on resume, it too late now unlikely, we will remove it on resume, it too late now
anyway... */ anyway... */
dev->card_unstable = 0; dev->card_unstable = 0;
return 0;
pci_save_state(to_pci_dev(device));
return pci_prepare_to_sleep(to_pci_dev(device));
} }
int r852_resume(struct device *device) int r852_resume(struct device *device)
{ {
struct r852_device *dev = pci_get_drvdata(to_pci_dev(device)); struct r852_device *dev = pci_get_drvdata(to_pci_dev(device));
unsigned long flags;
/* Turn on the hardware */
pci_back_from_sleep(to_pci_dev(device));
pci_restore_state(to_pci_dev(device));
r852_disable_irqs(dev); r852_disable_irqs(dev);
r852_card_update_present(dev); r852_card_update_present(dev);
r852_engine_disable(dev); r852_engine_disable(dev);
/* Now its safe for IRQ to run */
spin_lock_irqsave(&dev->irqlock, flags);
dev->insuspend = 0;
spin_unlock_irqrestore(&dev->irqlock, flags);
/* If card status changed, just do the work */ /* If card status changed, just do the work */
if (dev->card_detected != dev->card_registred) { if (dev->card_detected != dev->card_registred) {
dbg("card was %s during low power state", dbg("card was %s during low power state",
...@@ -1121,7 +1094,6 @@ MODULE_DEVICE_TABLE(pci, r852_pci_id_tbl); ...@@ -1121,7 +1094,6 @@ MODULE_DEVICE_TABLE(pci, r852_pci_id_tbl);
SIMPLE_DEV_PM_OPS(r852_pm_ops, r852_suspend, r852_resume); SIMPLE_DEV_PM_OPS(r852_pm_ops, r852_suspend, r852_resume);
static struct pci_driver r852_pci_driver = { static struct pci_driver r852_pci_driver = {
.name = DRV_NAME, .name = DRV_NAME,
.id_table = r852_pci_id_tbl, .id_table = r852_pci_id_tbl,
......
...@@ -140,8 +140,6 @@ struct r852_device { ...@@ -140,8 +140,6 @@ struct r852_device {
/* interrupt handling */ /* interrupt handling */
spinlock_t irqlock; /* IRQ protecting lock */ spinlock_t irqlock; /* IRQ protecting lock */
int irq; /* irq num */ int irq; /* irq num */
int insuspend; /* device is suspended */
/* misc */ /* misc */
void *tmp_buffer; /* temporary buffer */ void *tmp_buffer; /* temporary buffer */
uint8_t ctlreg; /* cached contents of control reg */ uint8_t ctlreg; /* cached contents of control reg */
......
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