intel_extreme: Add initial TMDS modesetting code
This commit is contained in:
@@ -452,7 +452,7 @@ struct intel_free_graphics_memory {
|
||||
#define DISPLAY_PLL_2X_CLOCK (1UL << 30)
|
||||
#define DISPLAY_PLL_SYNC_LOCK_ENABLED (1UL << 29)
|
||||
#define DISPLAY_PLL_NO_VGA_CONTROL (1UL << 28)
|
||||
#define DISPLAY_PLL_MODE_ANALOG (1UL << 26)
|
||||
#define DISPLAY_PLL_MODE_NORMAL (1UL << 26)
|
||||
#define DISPLAY_PLL_MODE_LVDS (2UL << 26)
|
||||
#define DISPLAY_PLL_DIVIDE_HIGH (1UL << 24)
|
||||
#define DISPLAY_PLL_DIVIDE_4X (1UL << 23)
|
||||
|
||||
@@ -254,7 +254,7 @@ AnalogPort::SetDisplayMode(display_mode* target, uint32 colorMode)
|
||||
|
||||
uint32 extraPLLFlags = 0;
|
||||
if (gInfo->shared_info->device_type.Generation() >= 4)
|
||||
extraPLLFlags |= DISPLAY_PLL_MODE_ANALOG;
|
||||
extraPLLFlags |= DISPLAY_PLL_MODE_NORMAL;
|
||||
|
||||
// Program pipe PLL's
|
||||
fDisplayPipe->ConfigureTimings(divisors, extraPLLFlags);
|
||||
@@ -655,11 +655,53 @@ DigitalPort::_DDCRegister()
|
||||
addr_t
|
||||
DigitalPort::_PortRegister()
|
||||
{
|
||||
ERROR("%s: %s PortRegister fallthrough\n", __func__, PortName());
|
||||
switch (PortIndex()) {
|
||||
case INTEL_PORT_A:
|
||||
return INTEL_DIGITAL_PORT_A;
|
||||
case INTEL_PORT_B:
|
||||
return INTEL_DIGITAL_PORT_B;
|
||||
case INTEL_PORT_C:
|
||||
return INTEL_DIGITAL_PORT_C;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
status_t
|
||||
DigitalPort::SetDisplayMode(display_mode* target, uint32 colorMode)
|
||||
{
|
||||
TRACE("%s: %s %dx%d\n", __func__, PortName(), target->virtual_width,
|
||||
target->virtual_height);
|
||||
|
||||
if (fDisplayPipe == NULL) {
|
||||
ERROR("%s: Setting display mode without assigned pipe!\n", __func__);
|
||||
return B_ERROR;
|
||||
}
|
||||
|
||||
pll_divisors divisors;
|
||||
compute_pll_divisors(target, &divisors, false);
|
||||
|
||||
uint32 extraPLLFlags = 0;
|
||||
if (gInfo->shared_info->device_type.Generation() >= 4)
|
||||
extraPLLFlags |= DISPLAY_PLL_MODE_NORMAL;
|
||||
|
||||
// Program pipe PLL's
|
||||
fDisplayPipe->ConfigureTimings(divisors, extraPLLFlags);
|
||||
|
||||
// Program target display mode
|
||||
fDisplayPipe->Enable(target, _PortRegister());
|
||||
|
||||
// XXX: Crashes?
|
||||
// Set fCurrentMode to our set display mode
|
||||
//memcpy(fCurrentMode, target, sizeof(display_mode));
|
||||
|
||||
return B_OK;
|
||||
}
|
||||
|
||||
|
||||
// #pragma mark - LVDS Panel
|
||||
// #pragma mark - HDMI
|
||||
|
||||
|
||||
|
||||
@@ -137,6 +137,8 @@ virtual uint32 Type() const
|
||||
|
||||
virtual bool IsConnected();
|
||||
|
||||
virtual status_t SetDisplayMode(display_mode* mode,
|
||||
uint32 colorMode);
|
||||
|
||||
protected:
|
||||
virtual addr_t _DDCRegister();
|
||||
|
||||
Reference in New Issue
Block a user