Make pvpanic mmio driver as seperate file and modify code
in order to adapt the framework.

Signed-off-by: Peng Hao <peng.h...@zte.com.cn>
---
 drivers/misc/pvpanic/Kconfig      |  4 +++
 drivers/misc/pvpanic/Makefile     |  1 +
 drivers/misc/pvpanic/pvpanic-of.c | 53 +++++++++++++++++++++++++++++++++++++++
 3 files changed, 58 insertions(+)
 create mode 100644 drivers/misc/pvpanic/pvpanic-of.c

diff --git a/drivers/misc/pvpanic/Kconfig b/drivers/misc/pvpanic/Kconfig
index d274130..47f8709 100644
--- a/drivers/misc/pvpanic/Kconfig
+++ b/drivers/misc/pvpanic/Kconfig
@@ -13,4 +13,8 @@ config PVPANIC_ACPI
        depends on ACPI
        default PVPANIC
 
+config PVPANIC_OF
+       tristate "pvpanic mmio driver"
+       depends on OF
+
 endif
diff --git a/drivers/misc/pvpanic/Makefile b/drivers/misc/pvpanic/Makefile
index c5b73ca..63ef0db 100644
--- a/drivers/misc/pvpanic/Makefile
+++ b/drivers/misc/pvpanic/Makefile
@@ -4,3 +4,4 @@
 
 obj-$(CONFIG_PVPANIC)            += pvpanic.o
 obj-$(CONFIG_PVPANIC_ACPI)      += pvpanic-acpi.o
+obj-$(CONFIG_PVPANIC_OF)        += pvpanic-of.o
diff --git a/drivers/misc/pvpanic/pvpanic-of.c 
b/drivers/misc/pvpanic/pvpanic-of.c
new file mode 100644
index 0000000..73ca5f3
--- /dev/null
+++ b/drivers/misc/pvpanic/pvpanic-of.c
@@ -0,0 +1,53 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ *  pvpanic of driver.
+ *
+ *  Copyright (C) 2019 ZTE Ltd.
+ *  Author: Peng Hao <peng.h...@zte.com.cn>
+ */
+
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/of.h>
+#include <linux/of_address.h>
+#include <linux/platform_device.h>
+#include <linux/types.h>
+#include "pvpanic.h"
+
+static int pvpanic_mmio_probe(struct platform_device *pdev)
+{
+       struct resource *res;
+       int ret;
+
+       res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+       if (!res)
+               return -EINVAL;
+
+       ret = pvpanic_add_device(&pdev->dev, res);
+       if (ret)
+               return -ENODEV;
+
+       return 0;
+}
+
+static int pvpanic_mmio_remove(struct platform_device *pdev)
+{
+       pvpanic_remove_device();
+       return 0;
+}
+
+static const struct of_device_id pvpanic_mmio_match[] = {
+       { .compatible = "qemu,pvpanic-mmio", },
+       {}
+};
+
+static struct platform_driver pvpanic_mmio_driver = {
+       .driver = {
+               .name = "pvpanic-mmio",
+               .of_match_table = pvpanic_mmio_match,
+       },
+       .probe = pvpanic_mmio_probe,
+       .remove = pvpanic_mmio_remove,
+};
+
+module_platform_driver(pvpanic_mmio_driver);
-- 
1.8.3.1

Reply via email to