soc: fsl: guts: embed fsl_guts_get_svr() in probe()
[platform/kernel/linux-starfive.git] / drivers / soc / fsl / guts.c
index 5ed2fc1..4e5675a 100644 (file)
 #include <linux/platform_device.h>
 #include <linux/fsl/guts.h>
 
-struct guts {
-       struct ccsr_guts __iomem *regs;
-       bool little_endian;
-};
-
 struct fsl_soc_die_attr {
        char    *die;
        u32     svr;
        u32     mask;
 };
 
-static struct guts *guts;
 static struct soc_device_attribute soc_dev_attr;
-static struct soc_device *soc_dev;
 
 
 /* SoC die attribute definition for QorIQ platform */
@@ -120,39 +113,27 @@ static const struct fsl_soc_die_attr *fsl_soc_die_match(
        return NULL;
 }
 
-static u32 fsl_guts_get_svr(void)
-{
-       u32 svr = 0;
-
-       if (!guts || !guts->regs)
-               return svr;
-
-       if (guts->little_endian)
-               svr = ioread32(&guts->regs->svr);
-       else
-               svr = ioread32be(&guts->regs->svr);
-
-       return svr;
-}
-
 static int fsl_guts_probe(struct platform_device *pdev)
 {
        struct device_node *root, *np = pdev->dev.of_node;
+       static struct soc_device *soc_dev;
        struct device *dev = &pdev->dev;
        const struct fsl_soc_die_attr *soc_die;
-       const char *machine;
+       struct ccsr_guts __iomem *regs;
+       const char *machine = NULL;
+       bool little_endian;
        u32 svr;
 
-       /* Initialize guts */
-       guts = devm_kzalloc(dev, sizeof(*guts), GFP_KERNEL);
-       if (!guts)
-               return -ENOMEM;
-
-       guts->little_endian = of_property_read_bool(np, "little-endian");
+       regs = of_iomap(np, 0);
+       if (IS_ERR(regs))
+               return PTR_ERR(regs);
 
-       guts->regs = devm_platform_ioremap_resource(pdev, 0);
-       if (IS_ERR(guts->regs))
-               return PTR_ERR(guts->regs);
+       little_endian = of_property_read_bool(np, "little-endian");
+       if (little_endian)
+               svr = ioread32(&regs->svr);
+       else
+               svr = ioread32be(&regs->svr);
+       iounmap(regs);
 
        /* Register soc device */
        root = of_find_node_by_path("/");
@@ -167,7 +148,6 @@ static int fsl_guts_probe(struct platform_device *pdev)
        }
        of_node_put(root);
 
-       svr = fsl_guts_get_svr();
        soc_die = fsl_soc_die_match(svr, fsl_soc_die);
        if (soc_die) {
                soc_dev_attr.family = devm_kasprintf(dev, GFP_KERNEL,
@@ -197,12 +177,6 @@ static int fsl_guts_probe(struct platform_device *pdev)
        return 0;
 }
 
-static int fsl_guts_remove(struct platform_device *dev)
-{
-       soc_device_unregister(soc_dev);
-       return 0;
-}
-
 /*
  * Table for matching compatible strings, for device tree
  * guts node, for Freescale QorIQ SOCs.
@@ -242,7 +216,6 @@ static struct platform_driver fsl_guts_driver = {
                .of_match_table = fsl_guts_of_match,
        },
        .probe = fsl_guts_probe,
-       .remove = fsl_guts_remove,
 };
 
 static int __init fsl_guts_init(void)
@@ -250,9 +223,3 @@ static int __init fsl_guts_init(void)
        return platform_driver_register(&fsl_guts_driver);
 }
 core_initcall(fsl_guts_init);
-
-static void __exit fsl_guts_exit(void)
-{
-       platform_driver_unregister(&fsl_guts_driver);
-}
-module_exit(fsl_guts_exit);