Re: Patch to fix this Re: Dell/acpi_video hw.acpi.video.out0 is probably a bug, and an important one. Re: Dell laptops

Bruno Ducrot <[email protected]>
Newsgroups gmane.os.freebsd.devel.mobile,gmane.os.freebsd.devel.acpi
Message-ID <[email protected]>
On Sat, Jul 15, 2006 at 08:38:04PM +0200, Bruno Ducrot wrote:
> 
> I would suggest something like that (not even compile tested):
> 

Gna, bad patch.  Consider that one instead.

Index: acpi_video.c
===================================================================
RCS file: /home/ncvs/src/sys/dev/acpica/acpi_video.c,v
retrieving revision 1.12
diff -u -p -r1.12 acpi_video.c
--- acpi_video.c	20 Dec 2005 22:42:16 -0000	1.12
+++ acpi_video.c	15 Jul 2006 18:45:52 -0000
@@ -109,10 +109,12 @@ static void	vo_set_device_state(ACPI_HAN
 #define DOS_BRIGHTNESS_BY_BIOS	(1 << 2)
 
 /* _DOD and subdev's _ADR */
-#define DOD_DEVID_MASK		0xffff
+#define DOD_DEVID_MASK		0x0400
 #define DOD_DEVID_MONITOR	0x0100
-#define DOD_DEVID_PANEL		0x0110
 #define DOD_DEVID_TV		0x0200
+#define DOD_DEVID_DIGITAL	0x0300
+#define DOD_DEVID_PANEL		0x0400
+#define DOD_DEVID_PANEL_COMPAT	0x0110
 #define DOD_BIOS		(1 << 16)
 #define DOD_NONVGA		(1 << 17)
 #define DOD_HEAD_ID_SHIFT	18
@@ -409,27 +411,37 @@ acpi_video_vo_init(UINT32 adr)
 	struct acpi_video_output_queue *voqh;
 
 	ACPI_SERIAL_ASSERT(video);
-	switch (adr & DOD_DEVID_MASK) {
-	case DOD_DEVID_MONITOR:
-		desc = "CRT monitor";
-		type = "crt";
-		voqh = &crt_units;
-		break;
-	case DOD_DEVID_PANEL:
+	if ((adr & 0xffff) == DOD_DEVID_PANEL_COMPAT) {
 		desc = "LCD panel";
 		type = "lcd";
 		voqh = &lcd_units;
-		break;
-	case DOD_DEVID_TV:
-		desc = "TV";
-		type = "tv";
-		voqh = &tv_units;
-		break;
-	default:
-		desc = "unknown output";
-		type = "out";
-		voqh = &other_units;
-	}
+	} else
+		switch (adr & DOD_DEVID_MASK) {
+		case DOD_DEVID_MONITOR:
+			desc = "CRT monitor";
+			type = "crt";
+			voqh = &crt_units;
+			break;
+		case DOD_DEVID_DIGITAL:
+			desc = "Digital monitor";
+			type = "crt";
+			voqh = &crt_units;
+			break;
+		case DOD_DEVID_PANEL:
+			desc = "LCD panel";
+			type = "lcd";
+			voqh = &lcd_units;
+			break;
+		case DOD_DEVID_TV:
+			desc = "TV";
+			type = "tv";
+			voqh = &tv_units;
+			break;
+		default:
+			desc = "unknown output";
+			type = "out";
+			voqh = &other_units;
+		}
 
 	n = 0;
 	vn = vp = NULL;
@@ -553,19 +565,29 @@ acpi_video_vo_destroy(struct acpi_video_
 	if (vo->vo_levels != NULL)
 		AcpiOsFree(vo->vo_levels);
 
-	switch (vo->adr & DOD_DEVID_MASK) {
-	case DOD_DEVID_MONITOR:
-		voqh = &crt_units;
-		break;
-	case DOD_DEVID_PANEL:
+	if ((adr & 0xffff) == DOD_DEVID_PANEL_COMPAT) {
+		desc = "LCD panel";
+		type = "lcd";
 		voqh = &lcd_units;
-		break;
-	case DOD_DEVID_TV:
-		voqh = &tv_units;
-		break;
-	default:
-		voqh = &other_units;
-	}
+	} else
+		switch (vo->adr & DOD_DEVID_MASK) {
+		case DOD_DEVID_MONITOR:
+			voqh = &crt_units;
+			break;
+		case DOD_DEVID_DIGITAL:
+			desc = "Digital monitor";
+			type = "crt";
+			voqh = &crt_units;
+			break;
+		case DOD_DEVID_PANEL:
+			voqh = &lcd_units;
+			break;
+		case DOD_DEVID_TV:
+			voqh = &tv_units;
+			break;
+		default:
+			voqh = &other_units;
+		}
 	STAILQ_REMOVE(voqh, vo, acpi_video_output, vo_unit.next);
 	free(vo, M_ACPIVIDEO);
 }

-- 
Bruno Ducrot

--  Which is worse:  ignorance or apathy?
--  Don't know.  Don't care.
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-mobile
To unsubscribe, send any mail to "[email protected]"
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.