mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	powerpc/windfarm: Add useful accessors
Makes the code more readable Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
This commit is contained in:
		
							parent
							
								
									ea5c64b067
								
							
						
					
					
						commit
						33e6820b76
					
				
					 3 changed files with 52 additions and 31 deletions
				
			
		| 
						 | 
					@ -72,6 +72,26 @@ static inline int wf_control_set_min(struct wf_control *ct)
 | 
				
			||||||
	return ct->ops->set_value(ct, vmin);
 | 
						return ct->ops->set_value(ct, vmin);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static inline int wf_control_set(struct wf_control *ct, s32 val)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						return ct->ops->set_value(ct, val);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static inline int wf_control_get(struct wf_control *ct, s32 *val)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						return ct->ops->get_value(ct, val);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static inline s32 wf_control_get_min(struct wf_control *ct)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						return ct->ops->get_min(ct);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static inline s32 wf_control_get_max(struct wf_control *ct)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						return ct->ops->get_max(ct);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * Sensor objects
 | 
					 * Sensor objects
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
| 
						 | 
					@ -100,6 +120,11 @@ extern struct wf_sensor * wf_find_sensor(const char *name);
 | 
				
			||||||
extern int wf_get_sensor(struct wf_sensor *sr);
 | 
					extern int wf_get_sensor(struct wf_sensor *sr);
 | 
				
			||||||
extern void wf_put_sensor(struct wf_sensor *sr);
 | 
					extern void wf_put_sensor(struct wf_sensor *sr);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static inline int wf_sensor_get(struct wf_sensor *sr, s32 *val)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						return sr->ops->get_value(sr, val);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* For use by clients. Note that we are a bit racy here since
 | 
					/* For use by clients. Note that we are a bit racy here since
 | 
				
			||||||
 * notifier_block doesn't have a module owner field. I may fix
 | 
					 * notifier_block doesn't have a module owner field. I may fix
 | 
				
			||||||
 * it one day ...
 | 
					 * it one day ...
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -302,13 +302,13 @@ static void wf_smu_create_sys_fans(void)
 | 
				
			||||||
	pid_param.interval = WF_SMU_SYS_FANS_INTERVAL;
 | 
						pid_param.interval = WF_SMU_SYS_FANS_INTERVAL;
 | 
				
			||||||
	pid_param.history_len = WF_SMU_SYS_FANS_HISTORY_SIZE;
 | 
						pid_param.history_len = WF_SMU_SYS_FANS_HISTORY_SIZE;
 | 
				
			||||||
	pid_param.itarget = param->itarget;
 | 
						pid_param.itarget = param->itarget;
 | 
				
			||||||
	pid_param.min = fan_system->ops->get_min(fan_system);
 | 
						pid_param.min = wf_control_get_min(fan_system);
 | 
				
			||||||
	pid_param.max = fan_system->ops->get_max(fan_system);
 | 
						pid_param.max = wf_control_get_max(fan_system);
 | 
				
			||||||
	if (fan_hd) {
 | 
						if (fan_hd) {
 | 
				
			||||||
		pid_param.min =
 | 
							pid_param.min =
 | 
				
			||||||
			max(pid_param.min,fan_hd->ops->get_min(fan_hd));
 | 
								max(pid_param.min, wf_control_get_min(fan_hd));
 | 
				
			||||||
		pid_param.max =
 | 
							pid_param.max =
 | 
				
			||||||
			min(pid_param.max,fan_hd->ops->get_max(fan_hd));
 | 
								min(pid_param.max, wf_control_get_max(fan_hd));
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	wf_pid_init(&wf_smu_sys_fans->pid, &pid_param);
 | 
						wf_pid_init(&wf_smu_sys_fans->pid, &pid_param);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -337,7 +337,7 @@ static void wf_smu_sys_fans_tick(struct wf_smu_sys_fans_state *st)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	st->ticks = WF_SMU_SYS_FANS_INTERVAL;
 | 
						st->ticks = WF_SMU_SYS_FANS_INTERVAL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	rc = sensor_hd_temp->ops->get_value(sensor_hd_temp, &temp);
 | 
						rc = wf_sensor_get(sensor_hd_temp, &temp);
 | 
				
			||||||
	if (rc) {
 | 
						if (rc) {
 | 
				
			||||||
		printk(KERN_WARNING "windfarm: HD temp sensor error %d\n",
 | 
							printk(KERN_WARNING "windfarm: HD temp sensor error %d\n",
 | 
				
			||||||
		       rc);
 | 
							       rc);
 | 
				
			||||||
| 
						 | 
					@ -373,7 +373,7 @@ static void wf_smu_sys_fans_tick(struct wf_smu_sys_fans_state *st)
 | 
				
			||||||
	st->hd_setpoint = new_setpoint;
 | 
						st->hd_setpoint = new_setpoint;
 | 
				
			||||||
 readjust:
 | 
					 readjust:
 | 
				
			||||||
	if (fan_system && wf_smu_failure_state == 0) {
 | 
						if (fan_system && wf_smu_failure_state == 0) {
 | 
				
			||||||
		rc = fan_system->ops->set_value(fan_system, st->sys_setpoint);
 | 
							rc = wf_control_set(fan_system, st->sys_setpoint);
 | 
				
			||||||
		if (rc) {
 | 
							if (rc) {
 | 
				
			||||||
			printk(KERN_WARNING "windfarm: Sys fan error %d\n",
 | 
								printk(KERN_WARNING "windfarm: Sys fan error %d\n",
 | 
				
			||||||
			       rc);
 | 
								       rc);
 | 
				
			||||||
| 
						 | 
					@ -381,7 +381,7 @@ static void wf_smu_sys_fans_tick(struct wf_smu_sys_fans_state *st)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if (fan_hd && wf_smu_failure_state == 0) {
 | 
						if (fan_hd && wf_smu_failure_state == 0) {
 | 
				
			||||||
		rc = fan_hd->ops->set_value(fan_hd, st->hd_setpoint);
 | 
							rc = wf_control_set(fan_hd, st->hd_setpoint);
 | 
				
			||||||
		if (rc) {
 | 
							if (rc) {
 | 
				
			||||||
			printk(KERN_WARNING "windfarm: HD fan error %d\n",
 | 
								printk(KERN_WARNING "windfarm: HD fan error %d\n",
 | 
				
			||||||
			       rc);
 | 
								       rc);
 | 
				
			||||||
| 
						 | 
					@ -447,8 +447,8 @@ static void wf_smu_create_cpu_fans(void)
 | 
				
			||||||
	pid_param.ttarget = tmax - tdelta;
 | 
						pid_param.ttarget = tmax - tdelta;
 | 
				
			||||||
	pid_param.pmaxadj = maxpow - powadj;
 | 
						pid_param.pmaxadj = maxpow - powadj;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	pid_param.min = fan_cpu_main->ops->get_min(fan_cpu_main);
 | 
						pid_param.min = wf_control_get_min(fan_cpu_main);
 | 
				
			||||||
	pid_param.max = fan_cpu_main->ops->get_max(fan_cpu_main);
 | 
						pid_param.max = wf_control_get_max(fan_cpu_main);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	wf_cpu_pid_init(&wf_smu_cpu_fans->pid, &pid_param);
 | 
						wf_cpu_pid_init(&wf_smu_cpu_fans->pid, &pid_param);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -481,7 +481,7 @@ static void wf_smu_cpu_fans_tick(struct wf_smu_cpu_fans_state *st)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	st->ticks = WF_SMU_CPU_FANS_INTERVAL;
 | 
						st->ticks = WF_SMU_CPU_FANS_INTERVAL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	rc = sensor_cpu_temp->ops->get_value(sensor_cpu_temp, &temp);
 | 
						rc = wf_sensor_get(sensor_cpu_temp, &temp);
 | 
				
			||||||
	if (rc) {
 | 
						if (rc) {
 | 
				
			||||||
		printk(KERN_WARNING "windfarm: CPU temp sensor error %d\n",
 | 
							printk(KERN_WARNING "windfarm: CPU temp sensor error %d\n",
 | 
				
			||||||
		       rc);
 | 
							       rc);
 | 
				
			||||||
| 
						 | 
					@ -489,7 +489,7 @@ static void wf_smu_cpu_fans_tick(struct wf_smu_cpu_fans_state *st)
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	rc = sensor_cpu_power->ops->get_value(sensor_cpu_power, &power);
 | 
						rc = wf_sensor_get(sensor_cpu_power, &power);
 | 
				
			||||||
	if (rc) {
 | 
						if (rc) {
 | 
				
			||||||
		printk(KERN_WARNING "windfarm: CPU power sensor error %d\n",
 | 
							printk(KERN_WARNING "windfarm: CPU power sensor error %d\n",
 | 
				
			||||||
		       rc);
 | 
							       rc);
 | 
				
			||||||
| 
						 | 
					@ -525,8 +525,7 @@ static void wf_smu_cpu_fans_tick(struct wf_smu_cpu_fans_state *st)
 | 
				
			||||||
	st->cpu_setpoint = new_setpoint;
 | 
						st->cpu_setpoint = new_setpoint;
 | 
				
			||||||
 readjust:
 | 
					 readjust:
 | 
				
			||||||
	if (fan_cpu_main && wf_smu_failure_state == 0) {
 | 
						if (fan_cpu_main && wf_smu_failure_state == 0) {
 | 
				
			||||||
		rc = fan_cpu_main->ops->set_value(fan_cpu_main,
 | 
							rc = wf_control_set(fan_cpu_main, st->cpu_setpoint);
 | 
				
			||||||
						  st->cpu_setpoint);
 | 
					 | 
				
			||||||
		if (rc) {
 | 
							if (rc) {
 | 
				
			||||||
			printk(KERN_WARNING "windfarm: CPU main fan"
 | 
								printk(KERN_WARNING "windfarm: CPU main fan"
 | 
				
			||||||
			       " error %d\n", rc);
 | 
								       " error %d\n", rc);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -192,8 +192,8 @@ static void wf_smu_create_cpu_fans(void)
 | 
				
			||||||
	pid_param.ttarget = tmax - tdelta;
 | 
						pid_param.ttarget = tmax - tdelta;
 | 
				
			||||||
	pid_param.pmaxadj = maxpow - powadj;
 | 
						pid_param.pmaxadj = maxpow - powadj;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	pid_param.min = fan_cpu_main->ops->get_min(fan_cpu_main);
 | 
						pid_param.min = wf_control_get_min(fan_cpu_main);
 | 
				
			||||||
	pid_param.max = fan_cpu_main->ops->get_max(fan_cpu_main);
 | 
						pid_param.max = wf_control_get_max(fan_cpu_main);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	wf_cpu_pid_init(&wf_smu_cpu_fans->pid, &pid_param);
 | 
						wf_cpu_pid_init(&wf_smu_cpu_fans->pid, &pid_param);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -226,7 +226,7 @@ static void wf_smu_cpu_fans_tick(struct wf_smu_cpu_fans_state *st)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	st->ticks = WF_SMU_CPU_FANS_INTERVAL;
 | 
						st->ticks = WF_SMU_CPU_FANS_INTERVAL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	rc = sensor_cpu_temp->ops->get_value(sensor_cpu_temp, &temp);
 | 
						rc = wf_sensor_get(sensor_cpu_temp, &temp);
 | 
				
			||||||
	if (rc) {
 | 
						if (rc) {
 | 
				
			||||||
		printk(KERN_WARNING "windfarm: CPU temp sensor error %d\n",
 | 
							printk(KERN_WARNING "windfarm: CPU temp sensor error %d\n",
 | 
				
			||||||
		       rc);
 | 
							       rc);
 | 
				
			||||||
| 
						 | 
					@ -234,7 +234,7 @@ static void wf_smu_cpu_fans_tick(struct wf_smu_cpu_fans_state *st)
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	rc = sensor_cpu_power->ops->get_value(sensor_cpu_power, &power);
 | 
						rc = wf_sensor_get(&sensor_cpu_power, &power);
 | 
				
			||||||
	if (rc) {
 | 
						if (rc) {
 | 
				
			||||||
		printk(KERN_WARNING "windfarm: CPU power sensor error %d\n",
 | 
							printk(KERN_WARNING "windfarm: CPU power sensor error %d\n",
 | 
				
			||||||
		       rc);
 | 
							       rc);
 | 
				
			||||||
| 
						 | 
					@ -261,8 +261,7 @@ static void wf_smu_cpu_fans_tick(struct wf_smu_cpu_fans_state *st)
 | 
				
			||||||
	st->cpu_setpoint = new_setpoint;
 | 
						st->cpu_setpoint = new_setpoint;
 | 
				
			||||||
 readjust:
 | 
					 readjust:
 | 
				
			||||||
	if (fan_cpu_main && wf_smu_failure_state == 0) {
 | 
						if (fan_cpu_main && wf_smu_failure_state == 0) {
 | 
				
			||||||
		rc = fan_cpu_main->ops->set_value(fan_cpu_main,
 | 
							rc = wf_control_set(fan_cpu_main, st->cpu_setpoint);
 | 
				
			||||||
						  st->cpu_setpoint);
 | 
					 | 
				
			||||||
		if (rc) {
 | 
							if (rc) {
 | 
				
			||||||
			printk(KERN_WARNING "windfarm: CPU main fan"
 | 
								printk(KERN_WARNING "windfarm: CPU main fan"
 | 
				
			||||||
			       " error %d\n", rc);
 | 
								       " error %d\n", rc);
 | 
				
			||||||
| 
						 | 
					@ -270,8 +269,7 @@ static void wf_smu_cpu_fans_tick(struct wf_smu_cpu_fans_state *st)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if (fan_cpu_second && wf_smu_failure_state == 0) {
 | 
						if (fan_cpu_second && wf_smu_failure_state == 0) {
 | 
				
			||||||
		rc = fan_cpu_second->ops->set_value(fan_cpu_second,
 | 
							rc = wf_control_set(fan_cpu_second, st->cpu_setpoint);
 | 
				
			||||||
						    st->cpu_setpoint);
 | 
					 | 
				
			||||||
		if (rc) {
 | 
							if (rc) {
 | 
				
			||||||
			printk(KERN_WARNING "windfarm: CPU second fan"
 | 
								printk(KERN_WARNING "windfarm: CPU second fan"
 | 
				
			||||||
			       " error %d\n", rc);
 | 
								       " error %d\n", rc);
 | 
				
			||||||
| 
						 | 
					@ -279,8 +277,7 @@ static void wf_smu_cpu_fans_tick(struct wf_smu_cpu_fans_state *st)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if (fan_cpu_third && wf_smu_failure_state == 0) {
 | 
						if (fan_cpu_third && wf_smu_failure_state == 0) {
 | 
				
			||||||
		rc = fan_cpu_main->ops->set_value(fan_cpu_third,
 | 
							rc = wf_control_set(fan_cpu_third, st->cpu_setpoint);
 | 
				
			||||||
						  st->cpu_setpoint);
 | 
					 | 
				
			||||||
		if (rc) {
 | 
							if (rc) {
 | 
				
			||||||
			printk(KERN_WARNING "windfarm: CPU third fan"
 | 
								printk(KERN_WARNING "windfarm: CPU third fan"
 | 
				
			||||||
			       " error %d\n", rc);
 | 
								       " error %d\n", rc);
 | 
				
			||||||
| 
						 | 
					@ -312,8 +309,8 @@ static void wf_smu_create_drive_fans(void)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Fill PID params */
 | 
						/* Fill PID params */
 | 
				
			||||||
	param.additive = (fan_hd->type == WF_CONTROL_RPM_FAN);
 | 
						param.additive = (fan_hd->type == WF_CONTROL_RPM_FAN);
 | 
				
			||||||
	param.min = fan_hd->ops->get_min(fan_hd);
 | 
						param.min = wf_control_get_min(fan_hd);
 | 
				
			||||||
	param.max = fan_hd->ops->get_max(fan_hd);
 | 
						param.max = wf_control_get_max(fan_hd);
 | 
				
			||||||
	wf_pid_init(&wf_smu_drive_fans->pid, ¶m);
 | 
						wf_pid_init(&wf_smu_drive_fans->pid, ¶m);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	DBG("wf: Drive Fan control initialized.\n");
 | 
						DBG("wf: Drive Fan control initialized.\n");
 | 
				
			||||||
| 
						 | 
					@ -338,7 +335,7 @@ static void wf_smu_drive_fans_tick(struct wf_smu_drive_fans_state *st)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	st->ticks = st->pid.param.interval;
 | 
						st->ticks = st->pid.param.interval;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	rc = sensor_hd_temp->ops->get_value(sensor_hd_temp, &temp);
 | 
						rc = wf_sensor_get(sensor_hd_temp, &temp);
 | 
				
			||||||
	if (rc) {
 | 
						if (rc) {
 | 
				
			||||||
		printk(KERN_WARNING "windfarm: HD temp sensor error %d\n",
 | 
							printk(KERN_WARNING "windfarm: HD temp sensor error %d\n",
 | 
				
			||||||
		       rc);
 | 
							       rc);
 | 
				
			||||||
| 
						 | 
					@ -361,7 +358,7 @@ static void wf_smu_drive_fans_tick(struct wf_smu_drive_fans_state *st)
 | 
				
			||||||
	st->setpoint = new_setpoint;
 | 
						st->setpoint = new_setpoint;
 | 
				
			||||||
 readjust:
 | 
					 readjust:
 | 
				
			||||||
	if (fan_hd && wf_smu_failure_state == 0) {
 | 
						if (fan_hd && wf_smu_failure_state == 0) {
 | 
				
			||||||
		rc = fan_hd->ops->set_value(fan_hd, st->setpoint);
 | 
							rc = wf_control_set(fan_hd, st->setpoint);
 | 
				
			||||||
		if (rc) {
 | 
							if (rc) {
 | 
				
			||||||
			printk(KERN_WARNING "windfarm: HD fan error %d\n",
 | 
								printk(KERN_WARNING "windfarm: HD fan error %d\n",
 | 
				
			||||||
			       rc);
 | 
								       rc);
 | 
				
			||||||
| 
						 | 
					@ -393,8 +390,8 @@ static void wf_smu_create_slots_fans(void)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Fill PID params */
 | 
						/* Fill PID params */
 | 
				
			||||||
	param.additive = (fan_slots->type == WF_CONTROL_RPM_FAN);
 | 
						param.additive = (fan_slots->type == WF_CONTROL_RPM_FAN);
 | 
				
			||||||
	param.min = fan_slots->ops->get_min(fan_slots);
 | 
						param.min = wf_control_get_min(fan_slots);
 | 
				
			||||||
	param.max = fan_slots->ops->get_max(fan_slots);
 | 
						param.max = wf_control_get_max(fan_slots);
 | 
				
			||||||
	wf_pid_init(&wf_smu_slots_fans->pid, ¶m);
 | 
						wf_pid_init(&wf_smu_slots_fans->pid, ¶m);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	DBG("wf: Slots Fan control initialized.\n");
 | 
						DBG("wf: Slots Fan control initialized.\n");
 | 
				
			||||||
| 
						 | 
					@ -419,7 +416,7 @@ static void wf_smu_slots_fans_tick(struct wf_smu_slots_fans_state *st)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	st->ticks = st->pid.param.interval;
 | 
						st->ticks = st->pid.param.interval;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	rc = sensor_slots_power->ops->get_value(sensor_slots_power, &power);
 | 
						rc = wf_sensor_get(sensor_slots_power, &power);
 | 
				
			||||||
	if (rc) {
 | 
						if (rc) {
 | 
				
			||||||
		printk(KERN_WARNING "windfarm: Slots power sensor error %d\n",
 | 
							printk(KERN_WARNING "windfarm: Slots power sensor error %d\n",
 | 
				
			||||||
		       rc);
 | 
							       rc);
 | 
				
			||||||
| 
						 | 
					@ -444,7 +441,7 @@ static void wf_smu_slots_fans_tick(struct wf_smu_slots_fans_state *st)
 | 
				
			||||||
	st->setpoint = new_setpoint;
 | 
						st->setpoint = new_setpoint;
 | 
				
			||||||
 readjust:
 | 
					 readjust:
 | 
				
			||||||
	if (fan_slots && wf_smu_failure_state == 0) {
 | 
						if (fan_slots && wf_smu_failure_state == 0) {
 | 
				
			||||||
		rc = fan_slots->ops->set_value(fan_slots, st->setpoint);
 | 
							rc = wf_control_set(fan_slots, st->setpoint);
 | 
				
			||||||
		if (rc) {
 | 
							if (rc) {
 | 
				
			||||||
			printk(KERN_WARNING "windfarm: Slots fan error %d\n",
 | 
								printk(KERN_WARNING "windfarm: Slots fan error %d\n",
 | 
				
			||||||
			       rc);
 | 
								       rc);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue