summaryrefslogtreecommitdiff
path: root/sys/dev
diff options
context:
space:
mode:
authorJohn Baldwin <jhb@FreeBSD.org>2013-02-28 18:49:40 +0000
committerJohn Baldwin <jhb@FreeBSD.org>2013-02-28 18:49:40 +0000
commitbca3cb4005006c8563929efd0489e9c0ae1e3d42 (patch)
tree1e954eeddc66ed69762908d55b40e7e426caca0a /sys/dev
parent0a31d21d7bfa32fdeb6934643ef6759eea9c4934 (diff)
MFC 241748:
When checking to see if a video output's _ADR matches an entry in the parent adapter's _DOD list, only check the low 16 bits of both _ADR and _DOD. The language in the ACPI spec seems to indicate that the _ADR values should exactly match the entries in _DOD. However, I assume that the masking added to _DOD values was added to work around some known busted machines (the commit history doesn't indicate either way), and the ACPI spec does require that the low 16 bits are unique for all video outputs, so only checking the low 16 bits should be fine. This fixes recognition of video outputs that use the new standardized device ID scheme in ACPI 3.0 that set bit 31 such as certain Dell laptops.
Notes
svn path=/stable/8/; revision=247488
Diffstat (limited to 'sys/dev')
-rw-r--r--sys/dev/acpica/acpi_video.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/sys/dev/acpica/acpi_video.c b/sys/dev/acpica/acpi_video.c
index 933370c79c61..b5bd41e80e61 100644
--- a/sys/dev/acpica/acpi_video.c
+++ b/sys/dev/acpica/acpi_video.c
@@ -874,7 +874,8 @@ vid_enum_outputs_subr(ACPI_HANDLE handle, UINT32 level __unused,
for (i = 0; i < argset->dod_pkg->Package.Count; i++) {
if (acpi_PkgInt32(argset->dod_pkg, i, &val) == 0 &&
- (val & DOD_DEVID_MASK_FULL) == adr) {
+ (val & DOD_DEVID_MASK_FULL) ==
+ (adr & DOD_DEVID_MASK_FULL)) {
argset->callback(handle, val, argset->context);
argset->count++;
}