wm8350_reg_write(wm8350, WM8350_SYSTEM_INTERRUPTS_MASK, 0x0);
 
+       wm8350_client_dev_register(wm8350, "wm8350-codec",
+                                  &(wm8350->codec.pdev));
+       wm8350_client_dev_register(wm8350, "wm8350-gpio",
+                                  &(wm8350->gpio.pdev));
+       wm8350_client_dev_register(wm8350, "wm8350-power",
+                                  &(wm8350->power.pdev));
+       wm8350_client_dev_register(wm8350, "wm8350-rtc", &(wm8350->rtc.pdev));
+       wm8350_client_dev_register(wm8350, "wm8350-wdt", &(wm8350->wdt.pdev));
+
        return 0;
 
 err:
        int i;
 
        for (i = 0; i < ARRAY_SIZE(wm8350->pmic.pdev); i++)
-               if (wm8350->pmic.pdev[i] != NULL)
-                       platform_device_unregister(wm8350->pmic.pdev[i]);
+               platform_device_unregister(wm8350->pmic.pdev[i]);
+
+       platform_device_unregister(wm8350->wdt.pdev);
+       platform_device_unregister(wm8350->rtc.pdev);
+       platform_device_unregister(wm8350->power.pdev);
+       platform_device_unregister(wm8350->gpio.pdev);
+       platform_device_unregister(wm8350->codec.pdev);
 
        free_irq(wm8350->chip_irq, wm8350);
        flush_work(&wm8350->irq_work);
 
 #ifndef __LINUX_MFD_WM8350_AUDIO_H_
 #define __LINUX_MFD_WM8350_AUDIO_H_
 
+#include <linux/platform_device.h>
+
 #define WM8350_CLOCK_CONTROL_1                  0x28
 #define WM8350_CLOCK_CONTROL_2                  0x29
 #define WM8350_FLL_CONTROL_1                    0x2A
 #define WM8350_IRQ_CODEC_MICSCD                        41
 #define WM8350_IRQ_CODEC_MICD                  42
 
+struct wm8350_codec {
+       struct platform_device *pdev;
+};
+
 #endif
 
 #include <linux/mutex.h>
 #include <linux/workqueue.h>
 
+#include <linux/mfd/wm8350/audio.h>
+#include <linux/mfd/wm8350/gpio.h>
 #include <linux/mfd/wm8350/pmic.h>
+#include <linux/mfd/wm8350/rtc.h>
+#include <linux/mfd/wm8350/supply.h>
+#include <linux/mfd/wm8350/wdt.h>
 
 /*
  * Register values.
        int chip_irq;
 
        /* Client devices */
+       struct wm8350_codec codec;
+       struct wm8350_gpio gpio;
        struct wm8350_pmic pmic;
+       struct wm8350_power power;
+       struct wm8350_rtc rtc;
+       struct wm8350_wdt wdt;
 };
 
 /**
 
 #ifndef __LINUX_MFD_WM8350_GPIO_H_
 #define __LINUX_MFD_WM8350_GPIO_H_
 
+#include <linux/platform_device.h>
+
 /*
  * GPIO Registers.
  */
 int wm8350_gpio_config(struct wm8350 *wm8350, int gpio, int dir, int func,
                       int pol, int pull, int invert, int debounce);
 
+struct wm8350_gpio {
+       struct platform_device *pdev;
+};
+
 /*
  * GPIO Interrupts
  */
 
 #ifndef __LINUX_MFD_WM8350_RTC_H
 #define __LINUX_MFD_WM8350_RTC_H
 
+#include <linux/platform_device.h>
+
 /*
  * Register values.
  */
 #define WM8350_IRQ_RTC_SEC                     8
 #define WM8350_IRQ_RTC_ALM                     9
 
+struct wm8350_rtc {
+       struct platform_device *pdev;
+};
+
 #endif
 
 #ifndef __LINUX_MFD_WM8350_SUPPLY_H_
 #define __LINUX_MFD_WM8350_SUPPLY_H_
 
+#include <linux/platform_device.h>
+
 /*
  * Charger registers
  */
 #define WM8350_IRQ_EXT_WALL_FB                 37
 #define WM8350_IRQ_EXT_BAT_FB                  38
 
+struct wm8350_power {
+       struct platform_device *pdev;
+};
+
 #endif
 
 /*
  * wdt.h  --  Watchdog Driver for Wolfson WM8350 PMIC
  *
- * Copyright 2007 Wolfson Microelectronics PLC
+ * Copyright 2007, 2008 Wolfson Microelectronics PLC
  *
  *  This program is free software; you can redistribute  it and/or modify it
  *  under  the terms of  the GNU General  Public License as published by the
 #ifndef __LINUX_MFD_WM8350_WDT_H_
 #define __LINUX_MFD_WM8350_WDT_H_
 
+#include <linux/platform_device.h>
+
 #define WM8350_WDOG_HIB_MODE                    0x0080
 #define WM8350_WDOG_DEBUG                       0x0040
 #define WM8350_WDOG_MODE_MASK                   0x0030
 
 #define WM8350_IRQ_SYS_WDOG_TO                 24
 
+struct wm8350_wdt {
+       struct platform_device *pdev;
+};
+
 #endif