#include <linux/of.h>
 #include <linux/of_address.h>
 #include <linux/of_device.h>
+#include <linux/mfd/core.h>
 #include <linux/mfd/syscon.h>
 #include <linux/platform_device.h>
 #include <linux/delay.h>
        { /*sentinel*/ },
 };
 
+static const struct mfd_cell exynos_pmu_devs[] = {
+       { .name = "exynos-clkout", },
+};
+
 struct regmap *exynos_get_pmu_regmap(void)
 {
        struct device_node *np = of_find_matching_node(NULL,
 static int exynos_pmu_probe(struct platform_device *pdev)
 {
        struct device *dev = &pdev->dev;
+       int ret;
 
        pmu_base_addr = devm_platform_ioremap_resource(pdev, 0);
        if (IS_ERR(pmu_base_addr))
 
        platform_set_drvdata(pdev, pmu_context);
 
+       ret = devm_mfd_add_devices(dev, PLATFORM_DEVID_NONE, exynos_pmu_devs,
+                                  ARRAY_SIZE(exynos_pmu_devs), NULL, 0, NULL);
+       if (ret)
+               return ret;
+
        if (devm_of_platform_populate(dev))
                dev_err(dev, "Error populating children, reboot and poweroff might not work properly\n");