Makes more sense to register in the mach file, plus it will allow more
functionality later on.

Also, this probably enables multi-omap for real.

Signed-off-by: Felipe Contreras <[email protected]>
---
 arch/arm/mach-omap1/devices.c |   38 ----------------
 arch/arm/mach-omap1/mailbox.c |   56 ++++++++++++++++++++++++
 arch/arm/mach-omap2/devices.c |   92 ---------------------------------------
 arch/arm/mach-omap2/mailbox.c |   96 +++++++++++++++++++++++++++++++++++++++--
 4 files changed, 148 insertions(+), 134 deletions(-)

diff --git a/arch/arm/mach-omap1/devices.c b/arch/arm/mach-omap1/devices.c
index da796f2..093dd13 100644
--- a/arch/arm/mach-omap1/devices.c
+++ b/arch/arm/mach-omap1/devices.c
@@ -63,43 +63,6 @@ static void omap_init_rtc(void)
 static inline void omap_init_rtc(void) {}
 #endif
 
-#if defined(CONFIG_OMAP_MBOX_FWK) || defined(CONFIG_OMAP_MBOX_FWK_MODULE)
-
-#if defined(CONFIG_ARCH_OMAP15XX)
-#  define OMAP1_MBOX_SIZE      0x23
-#  define INT_DSP_MAILBOX1     INT_1510_DSP_MAILBOX1
-#elif defined(CONFIG_ARCH_OMAP16XX)
-#  define OMAP1_MBOX_SIZE      0x2f
-#  define INT_DSP_MAILBOX1     INT_1610_DSP_MAILBOX1
-#endif
-
-static struct resource mbox_resources[] = {
-       {
-               .start          = OMAP16XX_MAILBOX_BASE,
-               .end            = OMAP16XX_MAILBOX_BASE + OMAP1_MBOX_SIZE,
-               .flags          = IORESOURCE_MEM,
-       },
-       {
-               .start          = INT_DSP_MAILBOX1,
-               .flags          = IORESOURCE_IRQ,
-       },
-};
-
-static struct platform_device mbox_device = {
-       .name           = "omap1-mailbox",
-       .id             = -1,
-       .num_resources  = ARRAY_SIZE(mbox_resources),
-       .resource       = mbox_resources,
-};
-
-static inline void omap_init_mbox(void)
-{
-       platform_device_register(&mbox_device);
-}
-#else
-static inline void omap_init_mbox(void) { }
-#endif
-
 /*-------------------------------------------------------------------------*/
 
 #if defined(CONFIG_MMC_OMAP) || defined(CONFIG_MMC_OMAP_MODULE)
@@ -293,7 +256,6 @@ static int __init omap1_init_devices(void)
         * in alphabetical order so they're easier to sort through.
         */
 
-       omap_init_mbox();
        omap_init_rtc();
        omap_init_spi100k();
        omap_init_sti();
diff --git a/arch/arm/mach-omap1/mailbox.c b/arch/arm/mach-omap1/mailbox.c
index d81b238..25f1f89 100644
--- a/arch/arm/mach-omap1/mailbox.c
+++ b/arch/arm/mach-omap1/mailbox.c
@@ -147,6 +147,20 @@ EXPORT_SYMBOL(mbox_dsp_info);
 
 struct omap_mbox *omap1_mboxes[] = { &mbox_dsp_info, NULL };
 
+#if defined(CONFIG_ARCH_OMAP15XX) || defined(CONFIG_ARCH_OMAP16XX)
+static struct resource omap1_mbox_resources[] = {
+       {
+               .start          = OMAP16XX_MAILBOX_BASE,
+               .end            = OMAP16XX_MAILBOX_BASE, /* to be updated */
+               .flags          = IORESOURCE_MEM,
+       },
+       {
+               .start          = 10,
+               .flags          = IORESOURCE_IRQ,
+       },
+};
+#endif
+
 static int __devinit omap1_mbox_probe(struct platform_device *pdev)
 {
        struct resource *res;
@@ -198,7 +212,49 @@ static struct platform_driver omap1_mbox_driver = {
 
 static int __init omap1_mbox_init(void)
 {
+       int err;
+       struct platform_device *pdev;
+       struct resource *res;
+       unsigned num;
+
+       if (false);
+#if defined(CONFIG_ARCH_OMAP15XX)
+       else if (cpu_is_omap15xx()) {
+               res = omap1_mbox_resources;
+               num = ARRAY_SIZE(omap1_mbox_resources);
+               res[1].end += 0x23;
+       }
+#endif
+#if defined(CONFIG_ARCH_OMAP16XX)
+       else if (cpu_is_omap16xx()) {
+               res = omap1_mbox_resources;
+               num = ARRAY_SIZE(omap1_mbox_resources);
+               res[1].end += 0x2f;
+       }
+#endif
+       else {
+               pr_err("%s: platform not supported\n", __func__);
+               return -ENODEV;
+       }
+
+       pdev = platform_device_alloc("omap1-mailbox", -1);
+       if (!pdev) {
+               err = -ENOMEM;
+               goto err_out;
+       }
+
+       err = platform_device_add_resources(pdev, res, num);
+       if (err)
+               goto err_out;
+
+       err = platform_device_add(pdev);
+       if (err)
+               goto err_out;
+
        return platform_driver_register(&omap1_mbox_driver);
+
+err_out:
+       return err;
 }
 
 static void __exit omap1_mbox_exit(void)
diff --git a/arch/arm/mach-omap2/devices.c b/arch/arm/mach-omap2/devices.c
index 2271b9b..eac0e0f 100644
--- a/arch/arm/mach-omap2/devices.c
+++ b/arch/arm/mach-omap2/devices.c
@@ -136,97 +136,6 @@ static inline void omap_init_camera(void)
 }
 #endif
 
-#if defined(CONFIG_OMAP_MBOX_FWK) || defined(CONFIG_OMAP_MBOX_FWK_MODULE)
-
-#define MBOX_REG_SIZE   0x120
-
-#ifdef CONFIG_ARCH_OMAP2
-static struct resource omap2_mbox_resources[] = {
-       {
-               .start          = OMAP24XX_MAILBOX_BASE,
-               .end            = OMAP24XX_MAILBOX_BASE + MBOX_REG_SIZE - 1,
-               .flags          = IORESOURCE_MEM,
-       },
-       {
-               .start          = INT_24XX_MAIL_U0_MPU,
-               .flags          = IORESOURCE_IRQ,
-       },
-       {
-               .start          = INT_24XX_MAIL_U3_MPU,
-               .flags          = IORESOURCE_IRQ,
-       },
-};
-static int omap2_mbox_resources_sz = ARRAY_SIZE(omap2_mbox_resources);
-#else
-#define omap2_mbox_resources           NULL
-#define omap2_mbox_resources_sz                0
-#endif
-
-#ifdef CONFIG_ARCH_OMAP3
-static struct resource omap3_mbox_resources[] = {
-       {
-               .start          = OMAP34XX_MAILBOX_BASE,
-               .end            = OMAP34XX_MAILBOX_BASE + MBOX_REG_SIZE - 1,
-               .flags          = IORESOURCE_MEM,
-       },
-       {
-               .start          = INT_24XX_MAIL_U0_MPU,
-               .flags          = IORESOURCE_IRQ,
-       },
-};
-static int omap3_mbox_resources_sz = ARRAY_SIZE(omap3_mbox_resources);
-#else
-#define omap3_mbox_resources           NULL
-#define omap3_mbox_resources_sz                0
-#endif
-
-#ifdef CONFIG_ARCH_OMAP4
-
-#define OMAP4_MBOX_REG_SIZE    0x130
-static struct resource omap4_mbox_resources[] = {
-       {
-               .start          = OMAP44XX_MAILBOX_BASE,
-               .end            = OMAP44XX_MAILBOX_BASE +
-                                       OMAP4_MBOX_REG_SIZE - 1,
-               .flags          = IORESOURCE_MEM,
-       },
-       {
-               .start          = OMAP44XX_IRQ_MAIL_U0,
-               .flags          = IORESOURCE_IRQ,
-       },
-};
-static int omap4_mbox_resources_sz = ARRAY_SIZE(omap4_mbox_resources);
-#else
-#define omap4_mbox_resources           NULL
-#define omap4_mbox_resources_sz                0
-#endif
-
-static struct platform_device mbox_device = {
-       .name           = "omap2-mailbox",
-       .id             = -1,
-};
-
-static inline void omap_init_mbox(void)
-{
-       if (cpu_is_omap24xx()) {
-               mbox_device.resource = omap2_mbox_resources;
-               mbox_device.num_resources = omap2_mbox_resources_sz;
-       } else if (cpu_is_omap34xx()) {
-               mbox_device.resource = omap3_mbox_resources;
-               mbox_device.num_resources = omap3_mbox_resources_sz;
-       } else if (cpu_is_omap44xx()) {
-               mbox_device.resource = omap4_mbox_resources;
-               mbox_device.num_resources = omap4_mbox_resources_sz;
-       } else {
-               pr_err("%s: platform not supported\n", __func__);
-               return;
-       }
-       platform_device_register(&mbox_device);
-}
-#else
-static inline void omap_init_mbox(void) { }
-#endif /* CONFIG_OMAP_MBOX_FWK */
-
 #if defined(CONFIG_OMAP_STI)
 
 #if defined(CONFIG_ARCH_OMAP2)
@@ -795,7 +704,6 @@ static int __init omap2_init_devices(void)
         */
        omap_hsmmc_reset();
        omap_init_camera();
-       omap_init_mbox();
        omap_init_mcspi();
        omap_hdq_init();
        omap_init_sti();
diff --git a/arch/arm/mach-omap2/mailbox.c b/arch/arm/mach-omap2/mailbox.c
index 04b70ba..59e85fd 100644
--- a/arch/arm/mach-omap2/mailbox.c
+++ b/arch/arm/mach-omap2/mailbox.c
@@ -394,6 +394,52 @@ EXPORT_SYMBOL(mbox_2_info);
 struct omap_mbox *omap4_mboxes[] = { &mbox_1_info, &mbox_2_info, NULL };
 #endif
 
+#ifdef CONFIG_ARCH_OMAP2420
+static struct resource omap2_mbox_resources[] = {
+       {
+               .start          = OMAP24XX_MAILBOX_BASE,
+               .end            = OMAP24XX_MAILBOX_BASE + MBOX_REG_SIZE - 1,
+               .flags          = IORESOURCE_MEM,
+       },
+       {
+               .start          = INT_24XX_MAIL_U0_MPU,
+               .flags          = IORESOURCE_IRQ,
+       },
+       {
+               .start          = INT_24XX_MAIL_U3_MPU,
+               .flags          = IORESOURCE_IRQ,
+       },
+};
+#endif
+
+#ifdef CONFIG_ARCH_OMAP3430
+static struct resource omap3_mbox_resources[] = {
+       {
+               .start          = OMAP34XX_MAILBOX_BASE,
+               .end            = OMAP34XX_MAILBOX_BASE + MBOX_REG_SIZE - 1,
+               .flags          = IORESOURCE_MEM,
+       },
+       {
+               .start          = INT_24XX_MAIL_U0_MPU,
+               .flags          = IORESOURCE_IRQ,
+       },
+};
+#endif
+
+#ifdef CONFIG_ARCH_OMAP4
+static struct resource omap4_mbox_resources[] = {
+       {
+               .start          = OMAP44XX_MAILBOX_BASE,
+               .end            = OMAP44XX_MAILBOX_BASE + OMAP4_MBOX_REG_SIZE - 
1,
+               .flags          = IORESOURCE_MEM,
+       },
+       {
+               .start          = INT_44XX_MAIL_U0_MPU,
+               .flags          = IORESOURCE_IRQ,
+       },
+};
+#endif
+
 static int __devinit omap2_mbox_probe(struct platform_device *pdev)
 {
        struct resource *res;
@@ -430,10 +476,6 @@ static int __devinit omap2_mbox_probe(struct 
platform_device *pdev)
                list[1]->irq = res[1].start;
        }
 #endif
-       else {
-               pr_err("%s: platform not supported\n", __func__);
-               return -ENODEV;
-       }
 
        for (i = 0; list[i]; i++) {
                ret = omap_mbox_register(&pdev->dev, list[i]);
@@ -470,7 +512,53 @@ static struct platform_driver omap2_mbox_driver = {
 
 static int __init omap2_mbox_init(void)
 {
+       int err;
+       struct platform_device *pdev;
+       struct resource *res;
+       unsigned num;
+
+       if (false);
+#if defined(CONFIG_ARCH_OMAP3430)
+       else if (cpu_is_omap3430()) {
+               res = omap3_mbox_resources;
+               num = ARRAY_SIZE(omap3_mbox_resources);
+       }
+#endif
+#if defined(CONFIG_ARCH_OMAP2420)
+       else if (cpu_is_omap2420()) {
+               res = omap2_mbox_resources;
+               num = ARRAY_SIZE(omap2_mbox_resources);
+       }
+#endif
+#if defined(CONFIG_ARCH_OMAP4)
+       else if (cpu_is_omap44xx()) {
+               res = omap4_mbox_resources;
+               num = ARRAY_SIZE(omap4_mbox_resources);
+       }
+#endif
+       else {
+               pr_err("%s: platform not supported\n", __func__);
+               return -ENODEV;
+       }
+
+       pdev = platform_device_alloc("omap2-mailbox", -1);
+       if (!pdev) {
+               err = -ENOMEM;
+               goto err_out;
+       }
+
+       err = platform_device_add_resources(pdev, res, num);
+       if (err)
+               goto err_out;
+
+       err = platform_device_add(pdev);
+       if (err)
+               goto err_out;
+
        return platform_driver_register(&omap2_mbox_driver);
+
+err_out:
+       return err;
 }
 
 static void __exit omap2_mbox_exit(void)
-- 
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