diff --git a/headers/private/graphics/intel_extreme/intel_extreme.h b/headers/private/graphics/intel_extreme/intel_extreme.h index d4828d13ab..6158d4b413 100644 --- a/headers/private/graphics/intel_extreme/intel_extreme.h +++ b/headers/private/graphics/intel_extreme/intel_extreme.h @@ -119,6 +119,11 @@ struct DeviceType { { return (type & INTEL_TYPE_MODEL_MASK) == model; } + + bool HasPlatformControlHub() const + { + return InGroup(INTEL_TYPE_SNB); + } }; // info about PLL on graphics card diff --git a/src/add-ons/accelerants/intel_extreme/accelerant.cpp b/src/add-ons/accelerants/intel_extreme/accelerant.cpp index 465f9b6fde..095251de24 100644 --- a/src/add-ons/accelerants/intel_extreme/accelerant.cpp +++ b/src/add-ons/accelerants/intel_extreme/accelerant.cpp @@ -209,9 +209,9 @@ intel_init_accelerant(int device) // assume it is the valid panel size.. // Later we query for proper EDID info if it exists, or figure something // else out. (Default modes, etc.) - bool isSNB = gInfo->shared_info->device_type.InGroup(INTEL_TYPE_SNB); - if ((isSNB && (lvds & PCH_LVDS_DETECTED) != 0) - || (!isSNB && (lvds & DISPLAY_PIPE_ENABLED) != 0)) { + bool hasPCH = gInfo->shared_info->device_type.HasPlatformControlHub(); + if ((hasPCH && (lvds & PCH_LVDS_DETECTED) != 0) + || (!hasPCH && (lvds & DISPLAY_PIPE_ENABLED) != 0)) { save_lvds_mode(); gInfo->head_mode |= HEAD_MODE_LVDS_PANEL; } diff --git a/src/add-ons/accelerants/intel_extreme/dpms.cpp b/src/add-ons/accelerants/intel_extreme/dpms.cpp index bbd2ec37bd..21820743a3 100644 --- a/src/add-ons/accelerants/intel_extreme/dpms.cpp +++ b/src/add-ons/accelerants/intel_extreme/dpms.cpp @@ -95,14 +95,14 @@ enable_display_pipe(bool enable) static void enable_lvds_panel(bool enable) { - bool isSNB = gInfo->shared_info->device_type.InGroup(INTEL_TYPE_SNB); - if (isSNB) { - // TODO: fix for SNB + bool hasPCH = gInfo->shared_info->device_type.HasPlatformControlHub(); + if (hasPCH) { + // TODO: fix for PCH return; } - int controlRegister = isSNB ? PCH_PANEL_CONTROL : INTEL_PANEL_CONTROL; - int statusRegister = isSNB ? PCH_PANEL_STATUS : INTEL_PANEL_STATUS; + int controlRegister = hasPCH ? PCH_PANEL_CONTROL : INTEL_PANEL_CONTROL; + int statusRegister = hasPCH ? PCH_PANEL_STATUS : INTEL_PANEL_STATUS; uint32 control = read32(controlRegister); uint32 panelStatus; @@ -110,7 +110,7 @@ enable_lvds_panel(bool enable) if (enable) { if ((control & PANEL_CONTROL_POWER_TARGET_ON) == 0) { write32(controlRegister, control | PANEL_CONTROL_POWER_TARGET_ON - | (isSNB ? PANEL_REGISTER_UNLOCK : 0)); + | (hasPCH ? PANEL_REGISTER_UNLOCK : 0)); } do { @@ -119,7 +119,7 @@ enable_lvds_panel(bool enable) } else { if ((control & PANEL_CONTROL_POWER_TARGET_ON) != 0) { write32(controlRegister, (control & ~PANEL_CONTROL_POWER_TARGET_ON) - | (isSNB ? PANEL_REGISTER_UNLOCK : 0)); + | (hasPCH ? PANEL_REGISTER_UNLOCK : 0)); } do { diff --git a/src/add-ons/kernel/drivers/graphics/intel_extreme/intel_extreme.cpp b/src/add-ons/kernel/drivers/graphics/intel_extreme/intel_extreme.cpp index 7e445d218d..9cfd428b0b 100644 --- a/src/add-ons/kernel/drivers/graphics/intel_extreme/intel_extreme.cpp +++ b/src/add-ons/kernel/drivers/graphics/intel_extreme/intel_extreme.cpp @@ -83,8 +83,8 @@ intel_interrupt_handler(void* data) int32 handled = B_HANDLED_INTERRUPT; // TODO: verify that these aren't actually the same - bool isSNB = info.device_type.InGroup(INTEL_TYPE_SNB); - uint16 mask = isSNB ? PCH_INTERRUPT_VBLANK_PIPEA : INTERRUPT_VBLANK_PIPEA; + bool hasPCH = info.device_type.HasPlatformControlHub(); + uint16 mask = hasPCH ? PCH_INTERRUPT_VBLANK_PIPEA : INTERRUPT_VBLANK_PIPEA; if ((identity & mask) != 0) { handled = release_vblank_sem(info); @@ -93,7 +93,7 @@ intel_interrupt_handler(void* data) DISPLAY_PIPE_VBLANK_STATUS | DISPLAY_PIPE_VBLANK_ENABLED); } - mask = isSNB ? PCH_INTERRUPT_VBLANK_PIPEB : INTERRUPT_VBLANK_PIPEB; + mask = hasPCH ? PCH_INTERRUPT_VBLANK_PIPEB : INTERRUPT_VBLANK_PIPEB; if ((identity & mask) != 0) { handled = release_vblank_sem(info); @@ -145,8 +145,8 @@ init_interrupt_handler(intel_info &info) write16(info, INTEL_INTERRUPT_IDENTITY, ~0); // enable interrupts - we only want VBLANK interrupts - bool isSNB = info.device_type.InGroup(INTEL_TYPE_SNB); - uint16 enable = isSNB + bool hasPCH = info.device_type.HasPlatformControlHub(); + uint16 enable = hasPCH ? (PCH_INTERRUPT_VBLANK_PIPEA | PCH_INTERRUPT_VBLANK_PIPEB) : (INTERRUPT_VBLANK_PIPEA | INTERRUPT_VBLANK_PIPEB); @@ -248,7 +248,7 @@ intel_extreme_init(intel_info &info) blocks[REGISTER_BLOCK(REGS_FLAT)] = 0; // setup the register blocks for the different architectures - if (info.device_type.InGroup(INTEL_TYPE_SNB)) { + if (info.device_type.HasPlatformControlHub()) { // PCH based platforms (IronLake and up) blocks[REGISTER_BLOCK(REGS_INTERRUPT)] = PCH_DE_INTERRUPT_REGISTER_BASE;