#include <linux/cpu_pm.h>
 #include <linux/of.h>
 #include <linux/of_device.h>
+#include <linux/psci.h>
 
 #include <asm/cpuidle.h>
 #include <asm/cpu_ops.h>
 
 int acpi_processor_ffh_lpi_probe(unsigned int cpu)
 {
-       return arm_cpuidle_init(cpu);
+       return psci_cpu_init_idle(cpu);
 }
 
 int acpi_processor_ffh_lpi_enter(struct acpi_lpi_state *lpi)
 {
        if (ARM64_LPI_IS_RETENTION_STATE(lpi->arch_flags))
-               return CPU_PM_CPU_IDLE_ENTER_RETENTION(arm_cpuidle_suspend,
+               return CPU_PM_CPU_IDLE_ENTER_RETENTION(psci_cpu_suspend_enter,
                                                lpi->index);
        else
-               return CPU_PM_CPU_IDLE_ENTER(arm_cpuidle_suspend, lpi->index);
+               return CPU_PM_CPU_IDLE_ENTER(psci_cpu_suspend_enter, lpi->index);
 }
 #endif
 
 
 const struct cpu_operations cpu_psci_ops = {
        .name           = "psci",
-#ifdef CONFIG_CPU_IDLE
-       .cpu_init_idle  = psci_cpu_init_idle,
-       .cpu_suspend    = psci_cpu_suspend_enter,
-#endif
        .cpu_init       = cpu_psci_cpu_init,
        .cpu_prepare    = cpu_psci_cpu_prepare,
        .cpu_boot       = cpu_psci_cpu_boot,
 
           provided by architecture code.
 
 config ARM_PSCI_CPUIDLE
-       bool
+       bool "PSCI CPU idle Driver"
        depends on ARM_PSCI_FW
        select DT_IDLE_STATES
        select CPU_IDLE_MULTIPLE_DRIVERS
 
 
        return ret;
 }
-
-/* ARM specific CPU idle operations */
-#ifdef CONFIG_ARM
-static const struct cpuidle_ops psci_cpuidle_ops __initconst = {
-       .suspend = psci_cpu_suspend_enter,
-       .init = psci_dt_cpu_init_idle,
-};
-
-CPUIDLE_METHOD_OF_DECLARE(psci, "psci", &psci_cpuidle_ops);
-#endif
 #endif
 
 static int psci_system_suspend(unsigned long unused)