Commit | Line | Data |
---|---|---|
d64f84f6 LP |
1 | /* |
2 | * ARM64 CPU idle arch support | |
3 | * | |
4 | * Copyright (C) 2014 ARM Ltd. | |
5 | * Author: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com> | |
6 | * | |
7 | * This program is free software; you can redistribute it and/or modify | |
8 | * it under the terms of the GNU General Public License version 2 as | |
9 | * published by the Free Software Foundation. | |
10 | */ | |
11 | ||
12 | #include <linux/of.h> | |
13 | #include <linux/of_device.h> | |
14 | ||
15 | #include <asm/cpuidle.h> | |
16 | #include <asm/cpu_ops.h> | |
17 | ||
ea389daa | 18 | int __init arm_cpuidle_init(unsigned int cpu) |
d64f84f6 LP |
19 | { |
20 | int ret = -EOPNOTSUPP; | |
d64f84f6 LP |
21 | |
22 | if (cpu_ops[cpu] && cpu_ops[cpu]->cpu_init_idle) | |
819a8826 | 23 | ret = cpu_ops[cpu]->cpu_init_idle(cpu); |
d64f84f6 | 24 | |
d64f84f6 LP |
25 | return ret; |
26 | } | |
af3cfdbf LP |
27 | |
28 | /** | |
29 | * cpu_suspend() - function to enter a low-power idle state | |
30 | * @arg: argument to pass to CPU suspend operations | |
31 | * | |
32 | * Return: 0 on success, -EOPNOTSUPP if CPU suspend hook not initialized, CPU | |
33 | * operations back-end error code otherwise. | |
34 | */ | |
af391b15 | 35 | int arm_cpuidle_suspend(int index) |
af3cfdbf LP |
36 | { |
37 | int cpu = smp_processor_id(); | |
38 | ||
39 | /* | |
40 | * If cpu_ops have not been registered or suspend | |
41 | * has not been initialized, cpu_suspend call fails early. | |
42 | */ | |
43 | if (!cpu_ops[cpu] || !cpu_ops[cpu]->cpu_suspend) | |
44 | return -EOPNOTSUPP; | |
af391b15 | 45 | return cpu_ops[cpu]->cpu_suspend(index); |
af3cfdbf | 46 | } |