Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3841b0a1 authored by Jordan Crouse's avatar Jordan Crouse Committed by Linus Torvalds
Browse files

[PATCH] APM Screen Blanking fix



- Fix screen blanking on BIOSes that return APM_NOT_ENGAGED when APM enabled
  screen blanking is not turned on.

  The original code only tried to set the state on device 0x100, and then
  0x1FF, and I added 0x101 to the mix too.

- Clean up logic in apm_console_blank().

- Prevent the error message from printing out twice.

Cc: Jordan Crouse <jordan.crouse@amd.com>
Cc: Stephen Rothwell <sfr@canb.auug.org.au>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent a7a4ad09
Loading
Loading
Loading
Loading
+14 −13
Original line number Diff line number Diff line
@@ -1064,22 +1064,23 @@ static int apm_engage_power_management(u_short device, int enable)
 
static int apm_console_blank(int blank)
{
	int	error;
	int error, i;
	u_short state;
	static const u_short dev[3] = { 0x100, 0x1FF, 0x101 };

	state = blank ? APM_STATE_STANDBY : APM_STATE_READY;
	/* Blank the first display device */
	error = set_power_state(0x100, state);
	if ((error != APM_SUCCESS) && (error != APM_NO_ERROR)) {
		/* try to blank them all instead */
		error = set_power_state(0x1ff, state);
		if ((error != APM_SUCCESS) && (error != APM_NO_ERROR))
			/* try to blank device one instead */
			error = set_power_state(0x101, state);
	}

	for (i = 0; i < ARRAY_SIZE(dev); i++) {
		error = set_power_state(dev[i], state);

		if ((error == APM_SUCCESS) || (error == APM_NO_ERROR))
			return 1;
	if (error == APM_NOT_ENGAGED) {

		if (error == APM_NOT_ENGAGED)
			break;
	}

	if (error == APM_NOT_ENGAGED && state != APM_STATE_READY) {
		static int tried;
		int eng_error;
		if (tried++ == 0) {