summaryrefslogtreecommitdiffstats
path: root/drivers/parport
diff options
context:
space:
mode:
authorAndy Shevchenko <andy.shevchenko@gmail.com>2018-02-07 14:47:52 -0500
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2018-03-14 12:54:09 -0400
commit1089c91111a13e93955057e37f6772c0af629a2a (patch)
tree5082b50231f96e83ebe3ba3e69c02aed9f475bbb /drivers/parport
parentec8e3893b41d56293f98d499de7dc123d362b2d5 (diff)
parport: PCI core handles power state for us
There is no need to repeat the work that is already done in the PCI driver core. The patch removes excerpts from suspend and resume callbacks. Note that there is no more calls performed to enable or disable a PCI device during suspend-resume cycle. Nowadays they seems to be superflous. Someone can read more in [1]. While here, convert calls to new driver API. [1] https://www.kernel.org/doc/ols/2009/ols2009-pages-319-330.pdf Tested-by: Nikola Ciprich <nikola.ciprich@linuxbox.cz> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Signed-off-by: Sudip Mukherjee <sudipm.mukherjee@gmail.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/parport')
-rw-r--r--drivers/parport/parport_serial.c40
1 files changed, 12 insertions, 28 deletions
diff --git a/drivers/parport/parport_serial.c b/drivers/parport/parport_serial.c
index 53a3eae65ade..d0a5bc542bac 100644
--- a/drivers/parport/parport_serial.c
+++ b/drivers/parport/parport_serial.c
@@ -664,57 +664,41 @@ static void parport_serial_pci_remove(struct pci_dev *dev)
664 return; 664 return;
665} 665}
666 666
667#ifdef CONFIG_PM 667static int __maybe_unused parport_serial_pci_suspend(struct device *dev)
668static int parport_serial_pci_suspend(struct pci_dev *dev, pm_message_t state)
669{ 668{
670 struct parport_serial_private *priv = pci_get_drvdata(dev); 669 struct pci_dev *pdev = to_pci_dev(dev);
670 struct parport_serial_private *priv = pci_get_drvdata(pdev);
671 671
672 if (priv->serial) 672 if (priv->serial)
673 pciserial_suspend_ports(priv->serial); 673 pciserial_suspend_ports(priv->serial);
674 674
675 /* FIXME: What about parport? */ 675 /* FIXME: What about parport? */
676
677 pci_save_state(dev);
678 pci_set_power_state(dev, pci_choose_state(dev, state));
679 return 0; 676 return 0;
680} 677}
681 678
682static int parport_serial_pci_resume(struct pci_dev *dev) 679static int __maybe_unused parport_serial_pci_resume(struct device *dev)
683{ 680{
684 struct parport_serial_private *priv = pci_get_drvdata(dev); 681 struct pci_dev *pdev = to_pci_dev(dev);
685 int err; 682 struct parport_serial_private *priv = pci_get_drvdata(pdev);
686
687 pci_set_power_state(dev, PCI_D0);
688 pci_restore_state(dev);
689
690 /*
691 * The device may have been disabled. Re-enable it.
692 */
693 err = pci_enable_device(dev);
694 if (err) {
695 printk(KERN_ERR "parport_serial: %s: error enabling "
696 "device for resume (%d)\n", pci_name(dev), err);
697 return err;
698 }
699 683
700 if (priv->serial) 684 if (priv->serial)
701 pciserial_resume_ports(priv->serial); 685 pciserial_resume_ports(priv->serial);
702 686
703 /* FIXME: What about parport? */ 687 /* FIXME: What about parport? */
704
705 return 0; 688 return 0;
706} 689}
707#endif 690
691static SIMPLE_DEV_PM_OPS(parport_serial_pm_ops,
692 parport_serial_pci_suspend, parport_serial_pci_resume);
708 693
709static struct pci_driver parport_serial_pci_driver = { 694static struct pci_driver parport_serial_pci_driver = {
710 .name = "parport_serial", 695 .name = "parport_serial",
711 .id_table = parport_serial_pci_tbl, 696 .id_table = parport_serial_pci_tbl,
712 .probe = parport_serial_pci_probe, 697 .probe = parport_serial_pci_probe,
713 .remove = parport_serial_pci_remove, 698 .remove = parport_serial_pci_remove,
714#ifdef CONFIG_PM 699 .driver = {
715 .suspend = parport_serial_pci_suspend, 700 .pm = &parport_serial_pm_ops,
716 .resume = parport_serial_pci_resume, 701 },
717#endif
718}; 702};
719 703
720 704