]> rtime.felk.cvut.cz Git - zynq/linux.git/blobdiff - drivers/firmware/xilinx/zynqmp.c
drivers: soc: xilinx: Add ZynqMP power domain driver
[zynq/linux.git] / drivers / firmware / xilinx / zynqmp.c
index af5cffd3ac432e2d954bca3e5c210382565090d4..98f936125643d9194f1aba79191c71823479604e 100644 (file)
@@ -14,6 +14,7 @@
 #include <linux/compiler.h>
 #include <linux/device.h>
 #include <linux/init.h>
+#include <linux/mfd/core.h>
 #include <linux/module.h>
 #include <linux/of.h>
 #include <linux/of_platform.h>
 #include <linux/firmware/xlnx-zynqmp.h>
 #include "zynqmp-debug.h"
 
+static const struct mfd_cell firmware_devs[] = {
+       {
+               .name = "zynqmp_power_controller",
+       },
+};
+
 /**
  * zynqmp_pm_ret_code() - Convert PMU-FW error codes to Linux error codes
  * @ret_status:                PMUFW return code
@@ -689,11 +696,19 @@ static int zynqmp_firmware_probe(struct platform_device *pdev)
 
        zynqmp_pm_api_debugfs_init();
 
+       ret = mfd_add_devices(&pdev->dev, PLATFORM_DEVID_NONE, firmware_devs,
+                             ARRAY_SIZE(firmware_devs), NULL, 0, NULL);
+       if (ret) {
+               dev_err(&pdev->dev, "failed to add MFD devices %d\n", ret);
+               return ret;
+       }
+
        return of_platform_populate(dev->of_node, NULL, NULL, dev);
 }
 
 static int zynqmp_firmware_remove(struct platform_device *pdev)
 {
+       mfd_remove_devices(&pdev->dev);
        zynqmp_pm_api_debugfs_exit();
 
        return 0;