aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/i386/kernel/apm.c27
1 files changed, 14 insertions, 13 deletions
diff --git a/arch/i386/kernel/apm.c b/arch/i386/kernel/apm.c
index d0b488056cc4..2d793d4aef1a 100644
--- a/arch/i386/kernel/apm.c
+++ b/arch/i386/kernel/apm.c
@@ -1064,22 +1064,23 @@ static int apm_engage_power_management(u_short device, int enable)
1064 1064
1065static int apm_console_blank(int blank) 1065static int apm_console_blank(int blank)
1066{ 1066{
1067 int error; 1067 int error, i;
1068 u_short state; 1068 u_short state;
1069 static const u_short dev[3] = { 0x100, 0x1FF, 0x101 };
1069 1070
1070 state = blank ? APM_STATE_STANDBY : APM_STATE_READY; 1071 state = blank ? APM_STATE_STANDBY : APM_STATE_READY;
1071 /* Blank the first display device */ 1072
1072 error = set_power_state(0x100, state); 1073 for (i = 0; i < ARRAY_SIZE(dev); i++) {
1073 if ((error != APM_SUCCESS) && (error != APM_NO_ERROR)) { 1074 error = set_power_state(dev[i], state);
1074 /* try to blank them all instead */ 1075
1075 error = set_power_state(0x1ff, state); 1076 if ((error == APM_SUCCESS) || (error == APM_NO_ERROR))
1076 if ((error != APM_SUCCESS) && (error != APM_NO_ERROR)) 1077 return 1;
1077 /* try to blank device one instead */ 1078
1078 error = set_power_state(0x101, state); 1079 if (error == APM_NOT_ENGAGED)
1080 break;
1079 } 1081 }
1080 if ((error == APM_SUCCESS) || (error == APM_NO_ERROR)) 1082
1081 return 1; 1083 if (error == APM_NOT_ENGAGED && state != APM_STATE_READY) {
1082 if (error == APM_NOT_ENGAGED) {
1083 static int tried; 1084 static int tried;
1084 int eng_error; 1085 int eng_error;
1085 if (tried++ == 0) { 1086 if (tried++ == 0) {