|
@@ -464,11 +464,38 @@ static void __devexit serial_pnp_remove(struct pnp_dev *dev)
|
|
|
serial8250_unregister_port(line - 1);
|
|
|
}
|
|
|
|
|
|
+#ifdef CONFIG_PM
|
|
|
+static int serial_pnp_suspend(struct pnp_dev *dev, pm_message_t state)
|
|
|
+{
|
|
|
+ long line = (long)pnp_get_drvdata(dev);
|
|
|
+
|
|
|
+ if (!line)
|
|
|
+ return -ENODEV;
|
|
|
+ serial8250_suspend_port(line - 1);
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
+static int serial_pnp_resume(struct pnp_dev *dev)
|
|
|
+{
|
|
|
+ long line = (long)pnp_get_drvdata(dev);
|
|
|
+
|
|
|
+ if (!line)
|
|
|
+ return -ENODEV;
|
|
|
+ serial8250_resume_port(line - 1);
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+#else
|
|
|
+#define serial_pnp_suspend NULL
|
|
|
+#define serial_pnp_resume NULL
|
|
|
+#endif /* CONFIG_PM */
|
|
|
+
|
|
|
static struct pnp_driver serial_pnp_driver = {
|
|
|
.name = "serial",
|
|
|
- .id_table = pnp_dev_table,
|
|
|
.probe = serial_pnp_probe,
|
|
|
.remove = __devexit_p(serial_pnp_remove),
|
|
|
+ .suspend = serial_pnp_suspend,
|
|
|
+ .resume = serial_pnp_resume,
|
|
|
+ .id_table = pnp_dev_table,
|
|
|
};
|
|
|
|
|
|
static int __init serial8250_pnp_init(void)
|