]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
ARM: ixp4xx: Turn the NPE into a platform device
authorLinus Walleij <linus.walleij@linaro.org>
Sun, 10 Feb 2019 16:05:29 +0000 (17:05 +0100)
committerLinus Walleij <linus.walleij@linaro.org>
Tue, 23 Apr 2019 14:02:15 +0000 (16:02 +0200)
Instead of registering everything related to the NPE
unconditionally in the module_init() call (which will
never work with multiplatform) create a platform device
and probe the NPE like any other device.

Put the device first in the list of devices added for
the platform so it is there when the dependent network
and crypto drivers probe later on.

This probe() path will not be taken unconditionally on
device tree boots, so remove the DT guard.

Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
arch/arm/mach-ixp4xx/common.c
drivers/soc/ixp4xx/ixp4xx-npe.c

index fc4c9b21ca962dd0c29a3e9d97c16709bc258f04..e7789d06c39b19207ed7abcc3ac0e7e85c7b718c 100644 (file)
@@ -150,7 +150,13 @@ static struct platform_device ixp4xx_udc_device = {
        },
 };
 
+static struct platform_device ixp4xx_npe_device = {
+       .name           = "ixp4xx-npe",
+       .id             = -1,
+};
+
 static struct platform_device *ixp4xx_devices[] __initdata = {
+       &ixp4xx_npe_device,
        &ixp4xx_gpio_device,
        &ixp4xx_udc_device,
 };
index 1f6e01369d54ad3c847b633bc678834eafe3d9bf..e3294457b5defb5bf15c4231e1ce93e3c93fa587 100644 (file)
@@ -21,6 +21,7 @@
 #include <linux/kernel.h>
 #include <linux/module.h>
 #include <linux/of.h>
+#include <linux/platform_device.h>
 #include <linux/soc/ixp4xx/npe.h>
 
 #define DEBUG_MSG                      0
@@ -683,16 +684,10 @@ void npe_release(struct npe *npe)
        module_put(THIS_MODULE);
 }
 
-
-static int __init npe_init_module(void)
+static int ixp4xx_npe_probe(struct platform_device *pdev)
 {
-
        int i, found = 0;
 
-       /* This driver does not work with device tree */
-       if (of_have_populated_dt())
-               return -ENODEV;
-
        for (i = 0; i < NPE_COUNT; i++) {
                struct npe *npe = &npe_tab[i];
                if (!(ixp4xx_read_feature_bits() &
@@ -717,7 +712,7 @@ static int __init npe_init_module(void)
        return 0;
 }
 
-static void __exit npe_cleanup_module(void)
+static int ixp4xx_npe_remove(struct platform_device *pdev)
 {
        int i;
 
@@ -726,10 +721,18 @@ static void __exit npe_cleanup_module(void)
                        npe_reset(&npe_tab[i]);
                        release_resource(npe_tab[i].mem_res);
                }
+
+       return 0;
 }
 
-module_init(npe_init_module);
-module_exit(npe_cleanup_module);
+static struct platform_driver ixp4xx_npe_driver = {
+       .driver = {
+               .name           = "ixp4xx-npe",
+       },
+       .probe = ixp4xx_npe_probe,
+       .remove = ixp4xx_npe_remove,
+};
+module_platform_driver(ixp4xx_npe_driver);
 
 MODULE_AUTHOR("Krzysztof Halasa");
 MODULE_LICENSE("GPL v2");