diff options
Diffstat (limited to 'drivers/macintosh/windfarm_pm121.c')
| -rw-r--r-- | drivers/macintosh/windfarm_pm121.c | 27 | 
1 files changed, 20 insertions, 7 deletions
diff --git a/drivers/macintosh/windfarm_pm121.c b/drivers/macintosh/windfarm_pm121.c index 30e6195e19d..b350fb86ff0 100644 --- a/drivers/macintosh/windfarm_pm121.c +++ b/drivers/macintosh/windfarm_pm121.c @@ -215,7 +215,6 @@  #include <asm/prom.h>  #include <asm/machdep.h>  #include <asm/io.h> -#include <asm/system.h>  #include <asm/sections.h>  #include <asm/smu.h> @@ -277,6 +276,7 @@ static const char *loop_names[N_LOOPS] = {  static unsigned int pm121_failure_state;  static int pm121_readjust, pm121_skipping; +static bool pm121_overtemp;  static s32 average_power;  struct pm121_correction { @@ -555,8 +555,18 @@ static void pm121_create_sys_fans(int loop_id)  	pid_param.interval	= PM121_SYS_INTERVAL;  	pid_param.history_len	= PM121_SYS_HISTORY_SIZE;  	pid_param.itarget	= param->itarget; -	pid_param.min		= control->ops->get_min(control); -	pid_param.max		= control->ops->get_max(control); +	if(control) +	{ +		pid_param.min		= control->ops->get_min(control); +		pid_param.max		= control->ops->get_max(control); +	} else { +		/* +		 * This is probably not the right!? +		 * Perhaps goto fail  if control == NULL  above? +		 */ +		pid_param.min		= 0; +		pid_param.max		= 0; +	}  	wf_pid_init(&pm121_sys_state[loop_id]->pid, &pid_param); @@ -571,7 +581,7 @@ static void pm121_create_sys_fans(int loop_id)  	   control the same control */  	printk(KERN_WARNING "pm121: failed to set up %s loop "  	       "setting \"%s\" to max speed.\n", -	       loop_names[loop_id], control->name); +	       loop_names[loop_id], control ? control->name : "uninitialized value");  	if (control)  		wf_control_set_max(control); @@ -848,6 +858,7 @@ static void pm121_tick(void)  	if (new_failure & FAILURE_OVERTEMP) {  		wf_set_overtemp();  		pm121_skipping = 2; +		pm121_overtemp = true;  	}  	/* We only clear the overtemp condition if overtemp is cleared @@ -856,8 +867,10 @@ static void pm121_tick(void)  	 * the control loop levels, but we don't want to keep it clear  	 * here in this case  	 */ -	if (new_failure == 0 && last_failure & FAILURE_OVERTEMP) +	if (!pm121_failure_state && pm121_overtemp) {  		wf_clear_overtemp(); +		pm121_overtemp = false; +	}  } @@ -988,7 +1001,7 @@ static int pm121_probe(struct platform_device *ddev)  	return 0;  } -static int __devexit pm121_remove(struct platform_device *ddev) +static int pm121_remove(struct platform_device *ddev)  {  	wf_unregister_client(&pm121_events);  	return 0; @@ -996,7 +1009,7 @@ static int __devexit pm121_remove(struct platform_device *ddev)  static struct platform_driver pm121_driver = {  	.probe = pm121_probe, -	.remove = __devexit_p(pm121_remove), +	.remove = pm121_remove,  	.driver = {  		.name = "windfarm",  		.bus = &platform_bus_type,  | 
