Will be needed to split the platform_driver.

Signed-off-by: Felipe Contreras <[email protected]>
---
 arch/arm/mach-omap2/mailbox.c |   49 ++++++++++++++++++----------------------
 1 files changed, 22 insertions(+), 27 deletions(-)

diff --git a/arch/arm/mach-omap2/mailbox.c b/arch/arm/mach-omap2/mailbox.c
index e9a803c..474c1e7 100644
--- a/arch/arm/mach-omap2/mailbox.c
+++ b/arch/arm/mach-omap2/mailbox.c
@@ -418,31 +418,6 @@ static int __devinit omap2_mbox_probe(struct 
platform_device *pdev)
 
        res = pdev->resource;
 
-       mbox_base = ioremap(res->start, resource_size(res));
-       if (!mbox_base)
-               return -ENOMEM;
-
-       if (cpu_is_omap3430()) {
-               list.num = ARRAY_SIZE(omap3_mboxes);
-               list.mbox = omap3_mboxes;
-
-               list.mbox[0]->irq = res[1].start;
-       }
-       else if (cpu_is_omap2420()) {
-               list.num = ARRAY_SIZE(omap2_mboxes);
-               list.mbox = omap2_mboxes;
-
-               list.mbox[0]->irq = res[1].start;
-               list.mbox[1]->irq = res[2].start;
-       }
-       else if (cpu_is_omap44xx()) {
-               list.num = ARRAY_SIZE(omap4_mboxes);
-               list.mbox = omap4_mboxes;
-
-               list.mbox[0]->irq = res[1].start;
-               list.mbox[1]->irq = res[1].start;
-       }
-
        for (i = 0; i < list.num; i++) {
                struct omap_mbox *mbox = list.mbox[i];
                ret = omap_mbox_register(&pdev->dev, mbox);
@@ -454,7 +429,6 @@ static int __devinit omap2_mbox_probe(struct 
platform_device *pdev)
 err_out:
        while (i--)
                omap_mbox_unregister(list.mbox[i]);
-       iounmap(mbox_base);
        return ret;
 }
 
@@ -465,7 +439,6 @@ static int __devexit omap2_mbox_remove(struct 
platform_device *pdev)
        for (i = 0; i < list.num; i++)
                omap_mbox_unregister(list.mbox[i]);
 
-       iounmap(mbox_base);
        return 0;
 }
 
@@ -483,18 +456,33 @@ static int __init omap2_mbox_init(void)
        struct platform_device *pdev;
        struct resource *res;
        unsigned num;
+       struct omap_mbox_list list;
 
        if (cpu_is_omap3430()) {
                res = omap3_mbox_resources;
                num = ARRAY_SIZE(omap3_mbox_resources);
+               list.num = ARRAY_SIZE(omap3_mboxes);
+               list.mbox = omap3_mboxes;
+
+               list.mbox[0]->irq = res[1].start;
        }
        else if (cpu_is_omap2420()) {
                res = omap2_mbox_resources;
                num = ARRAY_SIZE(omap2_mbox_resources);
+               list.num = ARRAY_SIZE(omap2_mboxes);
+               list.mbox = omap2_mboxes;
+
+               list.mbox[0]->irq = res[1].start;
+               list.mbox[1]->irq = res[2].start;
        }
        else if (cpu_is_omap44xx()) {
                res = omap4_mbox_resources;
                num = ARRAY_SIZE(omap4_mbox_resources);
+               list.num = ARRAY_SIZE(omap4_mboxes);
+               list.mbox = omap4_mboxes;
+
+               list.mbox[0]->irq = res[1].start;
+               list.mbox[1]->irq = res[1].start;
        }
        else {
                pr_err("%s: platform not supported\n", __func__);
@@ -515,6 +503,12 @@ static int __init omap2_mbox_init(void)
        if (err)
                goto err_out;
 
+       mbox_base = ioremap(res[0].start, resource_size(&res[0]));
+       if (!mbox_base) {
+               platform_device_put(pdev);
+               return -ENOMEM;
+       }
+
        return platform_driver_register(&omap2_mbox_driver);
 
 err_out:
@@ -524,6 +518,7 @@ err_out:
 static void __exit omap2_mbox_exit(void)
 {
        platform_driver_unregister(&omap2_mbox_driver);
+       iounmap(mbox_base);
 }
 
 module_init(omap2_mbox_init);
-- 
1.7.1

--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to