]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - arch/arm/plat-omap/devices.c
Merge current mainline tree into linux-omap tree
[linux-2.6-omap-h63xx.git] / arch / arm / plat-omap / devices.c
index b3e014795b78372ca552840f4d10a85bc831493b..f22ccbb280cf37541e637c29526c6a9e84874df7 100644 (file)
 #include <linux/kernel.h>
 #include <linux/init.h>
 #include <linux/platform_device.h>
+#include <linux/i2c/menelaus.h>
 
-#include <asm/hardware.h>
+#include <mach/hardware.h>
 #include <asm/io.h>
 #include <asm/mach-types.h>
 #include <asm/mach/map.h>
 
-#include <asm/arch/tc.h>
-#include <asm/arch/control.h>
-#include <asm/arch/board.h>
-#include <asm/arch/mmc.h>
-#include <asm/arch/mux.h>
-#include <asm/arch/gpio.h>
-#include <asm/arch/menelaus.h>
-#include <asm/arch/dsp_common.h>
-#include <asm/arch/mcbsp.h>
+#include <mach/tc.h>
+#include <mach/control.h>
+#include <mach/board.h>
+#include <mach/mmc.h>
+#include <mach/mux.h>
+#include <mach/gpio.h>
+#include <mach/dsp_common.h>
+#include <mach/mcbsp.h>
 
 #if    defined(CONFIG_OMAP_DSP) || defined(CONFIG_OMAP_DSP_MODULE)
 
@@ -153,44 +153,41 @@ static inline void omap_init_kp(void) {}
 /*-------------------------------------------------------------------------*/
 #if defined(CONFIG_OMAP_MCBSP) || defined(CONFIG_OMAP_MCBSP_MODULE)
 
-static struct platform_device omap_mcbsp_devices[OMAP_MAX_MCBSP_COUNT];
-static int mcbsps_configured;
+static struct platform_device **omap_mcbsp_devices;
 
 void omap_mcbsp_register_board_cfg(struct omap_mcbsp_platform_data *config,
                                        int size)
 {
        int i;
 
-       if (size > OMAP_MAX_MCBSP_COUNT) {
-               printk(KERN_WARNING "Registered too many McBSPs platform_data."
-                       " Using maximum (%d) available.\n",
-                       OMAP_MAX_MCBSP_COUNT);
-               size = OMAP_MAX_MCBSP_COUNT;
+       omap_mcbsp_devices = kzalloc(size * sizeof(struct platform_device *),
+                                    GFP_KERNEL);
+       if (!omap_mcbsp_devices) {
+               printk(KERN_ERR "Could not register McBSP devices\n");
+               return;
        }
 
        for (i = 0; i < size; i++) {
-               struct platform_device *new_mcbsp = &omap_mcbsp_devices[i];
-               new_mcbsp->name = "omap-mcbsp";
-               new_mcbsp->id = i + 1;
+               struct platform_device *new_mcbsp;
+               int ret;
+
+               new_mcbsp = platform_device_alloc("omap-mcbsp", i + 1);
+               if (!new_mcbsp)
+                       continue;
                new_mcbsp->dev.platform_data = &config[i];
+               ret = platform_device_add(new_mcbsp);
+               if (ret) {
+                       platform_device_put(new_mcbsp);
+                       continue;
+               }
+               omap_mcbsp_devices[i] = new_mcbsp;
        }
-       mcbsps_configured = size;
 }
 
-static void __init omap_init_mcbsp(void)
-{
-       int i;
-
-       for (i = 0; i < mcbsps_configured; i++)
-               platform_device_register(&omap_mcbsp_devices[i]);
-}
 #else
 void omap_mcbsp_register_board_cfg(struct omap_mcbsp_platform_data *config,
                                        int size)
 {  }
-
-static inline void __init omap_init_mcbsp(void)
-{  }
 #endif
 
 /*-------------------------------------------------------------------------*/
@@ -555,7 +552,6 @@ static int __init omap_init_devices(void)
         */
        omap_init_dsp();
        omap_init_kp();
-       omap_init_mcbsp();
        omap_init_mmc();
        omap_init_uwire();
        omap_init_wdt();