| 
									
										
										
										
											2012-03-20 15:22:42 -05:00
										 |  |  | #ifndef __ASM_ARM_CPUIDLE_H
 | 
					
						
							|  |  |  | #define __ASM_ARM_CPUIDLE_H
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-02 16:32:46 +01:00
										 |  |  | #include <asm/proc-fns.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-03-20 15:22:42 -05:00
										 |  |  | #ifdef CONFIG_CPU_IDLE
 | 
					
						
							|  |  |  | extern int arm_cpuidle_simple_enter(struct cpuidle_device *dev, | 
					
						
							|  |  |  | 		struct cpuidle_driver *drv, int index); | 
					
						
							|  |  |  | #else
 | 
					
						
							|  |  |  | static inline int arm_cpuidle_simple_enter(struct cpuidle_device *dev, | 
					
						
							|  |  |  | 		struct cpuidle_driver *drv, int index) { return -ENODEV; } | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* Common ARM WFI state */ | 
					
						
							|  |  |  | #define ARM_CPUIDLE_WFI_STATE_PWR(p) {\
 | 
					
						
							|  |  |  | 	.enter                  = arm_cpuidle_simple_enter,\ | 
					
						
							|  |  |  | 	.exit_latency           = 1,\ | 
					
						
							|  |  |  | 	.target_residency       = 1,\ | 
					
						
							|  |  |  | 	.power_usage		= p,\ | 
					
						
							|  |  |  | 	.name                   = "WFI",\ | 
					
						
							|  |  |  | 	.desc                   = "ARM WFI",\ | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  * in case power_specified == 1, give a default WFI power value needed | 
					
						
							|  |  |  |  * by some governors | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | #define ARM_CPUIDLE_WFI_STATE ARM_CPUIDLE_WFI_STATE_PWR(UINT_MAX)
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-02 16:32:45 +01:00
										 |  |  | struct device_node; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct cpuidle_ops { | 
					
						
							|  |  |  | 	int (*suspend)(int cpu, unsigned long arg); | 
					
						
							|  |  |  | 	int (*init)(struct device_node *, int cpu); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct of_cpuidle_method { | 
					
						
							|  |  |  | 	const char *method; | 
					
						
							|  |  |  | 	struct cpuidle_ops *ops; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define CPUIDLE_METHOD_OF_DECLARE(name, _method, _ops)			\
 | 
					
						
							|  |  |  | 	static const struct of_cpuidle_method __cpuidle_method_of_table_##name \ | 
					
						
							|  |  |  | 	__used __section(__cpuidle_method_of_table)			\ | 
					
						
							|  |  |  | 	= { .method = _method, .ops = _ops } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | extern int arm_cpuidle_suspend(int index); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | extern int arm_cpuidle_init(int cpu); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-03-20 15:22:42 -05:00
										 |  |  | #endif
 |