@@ -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);