Commit bc4d7eaf authored by Linus Walleij's avatar Linus Walleij

ARM: ixp4xx: Turn the NPE into a platform device

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: default avatarLinus Walleij <linus.walleij@linaro.org>
parent 4af20dc5
...@@ -150,7 +150,13 @@ static struct platform_device ixp4xx_udc_device = { ...@@ -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 = { static struct platform_device *ixp4xx_devices[] __initdata = {
&ixp4xx_npe_device,
&ixp4xx_gpio_device, &ixp4xx_gpio_device,
&ixp4xx_udc_device, &ixp4xx_udc_device,
}; };
......
...@@ -21,6 +21,7 @@ ...@@ -21,6 +21,7 @@
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/of.h> #include <linux/of.h>
#include <linux/platform_device.h>
#include <linux/soc/ixp4xx/npe.h> #include <linux/soc/ixp4xx/npe.h>
#define DEBUG_MSG 0 #define DEBUG_MSG 0
...@@ -683,16 +684,10 @@ void npe_release(struct npe *npe) ...@@ -683,16 +684,10 @@ void npe_release(struct npe *npe)
module_put(THIS_MODULE); module_put(THIS_MODULE);
} }
static int ixp4xx_npe_probe(struct platform_device *pdev)
static int __init npe_init_module(void)
{ {
int i, found = 0; 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++) { for (i = 0; i < NPE_COUNT; i++) {
struct npe *npe = &npe_tab[i]; struct npe *npe = &npe_tab[i];
if (!(ixp4xx_read_feature_bits() & if (!(ixp4xx_read_feature_bits() &
...@@ -717,7 +712,7 @@ static int __init npe_init_module(void) ...@@ -717,7 +712,7 @@ static int __init npe_init_module(void)
return 0; return 0;
} }
static void __exit npe_cleanup_module(void) static int ixp4xx_npe_remove(struct platform_device *pdev)
{ {
int i; int i;
...@@ -726,10 +721,18 @@ static void __exit npe_cleanup_module(void) ...@@ -726,10 +721,18 @@ static void __exit npe_cleanup_module(void)
npe_reset(&npe_tab[i]); npe_reset(&npe_tab[i]);
release_resource(npe_tab[i].mem_res); release_resource(npe_tab[i].mem_res);
} }
return 0;
} }
module_init(npe_init_module); static struct platform_driver ixp4xx_npe_driver = {
module_exit(npe_cleanup_module); .driver = {
.name = "ixp4xx-npe",
},
.probe = ixp4xx_npe_probe,
.remove = ixp4xx_npe_remove,
};
module_platform_driver(ixp4xx_npe_driver);
MODULE_AUTHOR("Krzysztof Halasa"); MODULE_AUTHOR("Krzysztof Halasa");
MODULE_LICENSE("GPL v2"); MODULE_LICENSE("GPL v2");
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment