interrupt-controller;
                                #interrupt-cells = <2>;
  
+                               ab8500_gpio: ab8500-gpio {
+                                       gpio-controller;
+                                       #gpio-cells = <2>;
+                               };
+ 
                                ab8500-rtc {
                                        compatible = "stericsson,ab8500-rtc";
 -                                      interrupts = <17 0x4
 -                                                    18 0x4>;
 +                                      interrupts = <17 IRQ_TYPE_LEVEL_HIGH
 +                                                    18 IRQ_TYPE_LEVEL_HIGH>;
                                        interrupt-names = "60S", "ALARM";
                                };
  
 
  #include <linux/of.h>
  #include <linux/pinctrl/machine.h>
  #include <linux/platform_data/omap4-keypad.h>
 -#include <linux/platform_data/omap_ocp2scp.h>
 +#include <linux/wl12xx.h>
+ #include <linux/platform_data/mailbox-omap.h>
 -#include <linux/usb/omap_control_usb.h>
  
  #include <asm/mach-types.h>
  #include <asm/mach/map.h>
 
        select CPU_ARM920T
        select CPU_LLSERIAL_S3C2410
        select S3C2410_CLOCK
-       select S3C2410_CPUFREQ if CPU_FREQ_S3C24XX
+       select ARM_S3C2410_CPUFREQ if ARM_S3C24XX_CPUFREQ
        select S3C2410_PM if PM
        select SAMSUNG_HRT
 +      select SAMSUNG_WDT_RESET
        help
          Support for S3C2410 and S3C2410A family from the S3C24XX line
          of Samsung Mobile CPUs.
 
        else if (of_machine_is_compatible("st-ericsson,ccu9540")) {}
                /* TODO: Add pinmaps for ccu9540 board. */
  
-       /* TODO: Export SoC, USB, cpu-freq and DMA40 */
-       parent = u8500_of_init_devices();
- 
 -      /* automatically probe child nodes of db8500 device */
 -      of_platform_populate(NULL, u8500_local_bus_nodes, u8500_auxdata_lookup, parent);
 +      /* automatically probe child nodes of dbx5x0 devices */
 +      if (of_machine_is_compatible("st-ericsson,u8540"))
 +              of_platform_populate(NULL, u8500_local_bus_nodes,
 +                                   u8540_auxdata_lookup, parent);
 +      else
 +              of_platform_populate(NULL, u8500_local_bus_nodes,
 +                                   u8500_auxdata_lookup, parent);
  }
  
  static const char * stericsson_dt_platform_compat[] = {
 
        .set_vbus       = ux500_musb_set_vbus,
  };
  
+ static struct musb_hdrc_platform_data *
+ ux500_of_probe(struct platform_device *pdev, struct device_node *np)
+ {
+       struct musb_hdrc_platform_data *pdata;
+       const char *mode;
+       int strlen;
+ 
+       pdata = devm_kzalloc(&pdev->dev, sizeof(*pdata), GFP_KERNEL);
+       if (!pdata)
+               return NULL;
+ 
+       mode = of_get_property(np, "dr_mode", &strlen);
+       if (!mode) {
+               dev_err(&pdev->dev, "No 'dr_mode' property found\n");
+               return NULL;
+       }
+ 
+       if (strlen > 0) {
+               if (!strcmp(mode, "host"))
+                       pdata->mode = MUSB_HOST;
+               if (!strcmp(mode, "otg"))
+                       pdata->mode = MUSB_OTG;
+               if (!strcmp(mode, "peripheral"))
+                       pdata->mode = MUSB_PERIPHERAL;
+       }
+ 
+       return pdata;
+ }
+ 
  static int ux500_probe(struct platform_device *pdev)
  {
 +      struct resource musb_resources[2];
        struct musb_hdrc_platform_data  *pdata = pdev->dev.platform_data;
+       struct device_node              *np = pdev->dev.of_node;
        struct platform_device          *musb;
        struct ux500_glue               *glue;
        struct clk                      *clk;