浏览代码

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: Maxim Levitsky <maximlevitsky@gmail.com>
Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
Maxim Levitsky 15 年之前
父节点
当前提交
9bf70717a5
共有 2 个文件被更改,包括 1 次插入31 次删除
  1. 1 29
      drivers/mtd/nand/r852.c
  2. 0 2
      drivers/mtd/nand/r852.h

+ 1 - 29
drivers/mtd/nand/r852.c

@@ -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)
 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)
 	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;
-
-	pci_save_state(to_pci_dev(device));
-	return pci_prepare_to_sleep(to_pci_dev(device));
+	return 0;
 }
 }
 
 
 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);
 
 
 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,

+ 0 - 2
drivers/mtd/nand/r852.h

@@ -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 */