* Return:
  *     On success, 0. On failure, -errno.
  */
-static int ftpm_tee_probe(struct platform_device *pdev)
+static int ftpm_tee_probe(struct device *dev)
 {
        int rc;
        struct tpm_chip *chip;
-       struct device *dev = &pdev->dev;
        struct ftpm_tee_private *pvt_data = NULL;
        struct tee_ioctl_open_session_arg sess_arg;
 
        return rc;
 }
 
+static int ftpm_plat_tee_probe(struct platform_device *pdev)
+{
+       struct device *dev = &pdev->dev;
+
+       return ftpm_tee_probe(dev);
+}
+
 /**
  * ftpm_tee_remove() - remove the TPM device
  * @pdev: the platform_device description.
  * Return:
  *     0 always.
  */
-static int ftpm_tee_remove(struct platform_device *pdev)
+static int ftpm_tee_remove(struct device *dev)
 {
-       struct ftpm_tee_private *pvt_data = dev_get_drvdata(&pdev->dev);
+       struct ftpm_tee_private *pvt_data = dev_get_drvdata(dev);
 
        /* Release the chip */
        tpm_chip_unregister(pvt_data->chip);
        return 0;
 }
 
+static int ftpm_plat_tee_remove(struct platform_device *pdev)
+{
+       struct device *dev = &pdev->dev;
+
+       return ftpm_tee_remove(dev);
+}
+
 /**
  * ftpm_tee_shutdown() - shutdown the TPM device
  * @pdev: the platform_device description.
  */
-static void ftpm_tee_shutdown(struct platform_device *pdev)
+static void ftpm_plat_tee_shutdown(struct platform_device *pdev)
 {
        struct ftpm_tee_private *pvt_data = dev_get_drvdata(&pdev->dev);
 
 };
 MODULE_DEVICE_TABLE(of, of_ftpm_tee_ids);
 
-static struct platform_driver ftpm_tee_driver = {
+static struct platform_driver ftpm_tee_plat_driver = {
        .driver = {
                .name = "ftpm-tee",
                .of_match_table = of_match_ptr(of_ftpm_tee_ids),
        },
-       .probe = ftpm_tee_probe,
-       .remove = ftpm_tee_remove,
-       .shutdown = ftpm_tee_shutdown,
+       .shutdown = ftpm_plat_tee_shutdown,
+       .probe = ftpm_plat_tee_probe,
+       .remove = ftpm_plat_tee_remove,
+};
+
+/* UUID of the fTPM TA */
+static const struct tee_client_device_id optee_ftpm_id_table[] = {
+       {UUID_INIT(0xbc50d971, 0xd4c9, 0x42c4,
+                  0x82, 0xcb, 0x34, 0x3f, 0xb7, 0xf3, 0x78, 0x96)},
+       {}
 };
 
-module_platform_driver(ftpm_tee_driver);
+MODULE_DEVICE_TABLE(tee, optee_ftpm_id_table);
+
+static struct tee_client_driver ftpm_tee_driver = {
+       .id_table       = optee_ftpm_id_table,
+       .driver         = {
+               .name           = "optee-ftpm",
+               .bus            = &tee_bus_type,
+               .probe          = ftpm_tee_probe,
+               .remove         = ftpm_tee_remove,
+       },
+};
+
+static int __init ftpm_mod_init(void)
+{
+       int rc;
+
+       rc = platform_driver_register(&ftpm_tee_plat_driver);
+       if (rc)
+               return rc;
+
+       return driver_register(&ftpm_tee_driver.driver);
+}
+
+static void __exit ftpm_mod_exit(void)
+{
+       platform_driver_unregister(&ftpm_tee_plat_driver);
+       driver_unregister(&ftpm_tee_driver.driver);
+}
+
+module_init(ftpm_mod_init);
+module_exit(ftpm_mod_exit);
 
 MODULE_AUTHOR("Thirupathaiah Annapureddy <thiruan@microsoft.com>");
 MODULE_DESCRIPTION("TPM Driver for fTPM TA in TEE");