intel_extreme: Clean up DisplayPort Port class
* DisplayPort != DigitalPort * i2c needs wrapped in DP AUX transaction code * Mode-setting comes with DP link training as well * We need to try and share DP code with radeon_hd
This commit is contained in:
@@ -554,14 +554,14 @@ struct intel_free_graphics_memory {
|
|||||||
#define CHV_DISPLAY_PORT_D (VLV_DISPLAY_BASE + 0x64300)
|
#define CHV_DISPLAY_PORT_D (VLV_DISPLAY_BASE + 0x64300)
|
||||||
|
|
||||||
// DP AUX channels
|
// DP AUX channels
|
||||||
#define INTEL_DPA_AUX_CTL (0x4010 | REGS_NORTH_PIPE_AND_PORT)
|
#define INTEL_DP_AUX_CTL_A (0x4010 | REGS_NORTH_PIPE_AND_PORT)
|
||||||
#define INTEL_DPB_AUX_CTL (0x4110 | REGS_SOUTH_TRANSCODER_PORT)
|
#define INTEL_DP_AUX_CTL_B (0x4110 | REGS_SOUTH_TRANSCODER_PORT)
|
||||||
#define INTEL_DPC_AUX_CTL (0x4210 | REGS_SOUTH_TRANSCODER_PORT)
|
#define INTEL_DP_AUX_CTL_C (0x4210 | REGS_SOUTH_TRANSCODER_PORT)
|
||||||
#define INTEL_DPD_AUX_CTL (0x4310 | REGS_SOUTH_TRANSCODER_PORT)
|
#define INTEL_DP_AUX_CTL_D (0x4310 | REGS_SOUTH_TRANSCODER_PORT)
|
||||||
|
|
||||||
#define VLV_DPB_AUX_CTL (VLV_DISPLAY_BASE + 0x64110)
|
#define VLV_DP_AUX_CTL_B (VLV_DISPLAY_BASE + 0x64110)
|
||||||
#define VLV_DPC_AUX_CTL (VLV_DISPLAY_BASE + 0x64210)
|
#define VLV_DP_AUX_CTL_C (VLV_DISPLAY_BASE + 0x64210)
|
||||||
#define CHV_DPC_AUX_CTL (VLV_DISPLAY_BASE + 0x64310)
|
#define CHV_DP_AUX_CTL_D (VLV_DISPLAY_BASE + 0x64310)
|
||||||
|
|
||||||
#define INTEL_DP_AUX_CTL_BUSY (1 << 31)
|
#define INTEL_DP_AUX_CTL_BUSY (1 << 31)
|
||||||
#define INTEL_DP_AUX_CTL_DONE (1 << 30)
|
#define INTEL_DP_AUX_CTL_DONE (1 << 30)
|
||||||
|
|||||||
@@ -834,7 +834,7 @@ HDMIPort::_PortRegister()
|
|||||||
|
|
||||||
DisplayPort::DisplayPort(port_index index, const char* baseName)
|
DisplayPort::DisplayPort(port_index index, const char* baseName)
|
||||||
:
|
:
|
||||||
DigitalPort(index, baseName)
|
Port(index, baseName)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -853,6 +853,35 @@ DisplayPort::IsConnected()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
addr_t
|
||||||
|
DisplayPort::_DDCRegister()
|
||||||
|
{
|
||||||
|
// TODO: Do VLV + CHV use the VLV_DP_AUX_CTL_B + VLV_DP_AUX_CTL_C?
|
||||||
|
switch (PortIndex()) {
|
||||||
|
case INTEL_PORT_A:
|
||||||
|
return INTEL_DP_AUX_CTL_A;
|
||||||
|
case INTEL_PORT_B:
|
||||||
|
if (gInfo->shared_info->device_type.InGroup(INTEL_GROUP_VLV))
|
||||||
|
return VLV_DP_AUX_CTL_B;
|
||||||
|
return INTEL_DP_AUX_CTL_B;
|
||||||
|
case INTEL_PORT_C:
|
||||||
|
if (gInfo->shared_info->device_type.InGroup(INTEL_GROUP_VLV))
|
||||||
|
return VLV_DP_AUX_CTL_C;
|
||||||
|
return INTEL_DP_AUX_CTL_C;
|
||||||
|
case INTEL_PORT_D:
|
||||||
|
if (gInfo->shared_info->device_type.InGroup(INTEL_GROUP_CHV))
|
||||||
|
return CHV_DP_AUX_CTL_D;
|
||||||
|
else if (gInfo->shared_info->device_type.InGroup(INTEL_GROUP_VLV))
|
||||||
|
return 0;
|
||||||
|
return INTEL_DP_AUX_CTL_D;
|
||||||
|
default:
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
addr_t
|
addr_t
|
||||||
DisplayPort::_PortRegister()
|
DisplayPort::_PortRegister()
|
||||||
{
|
{
|
||||||
@@ -862,8 +891,10 @@ DisplayPort::_PortRegister()
|
|||||||
// ignore DisplayPort on ValleyView / CherryView
|
// ignore DisplayPort on ValleyView / CherryView
|
||||||
|
|
||||||
if (gInfo->shared_info->device_type.InGroup(INTEL_GROUP_VLV)
|
if (gInfo->shared_info->device_type.InGroup(INTEL_GROUP_VLV)
|
||||||
|| gInfo->shared_info->device_type.InGroup(INTEL_GROUP_CHV))
|
|| gInfo->shared_info->device_type.InGroup(INTEL_GROUP_CHV)) {
|
||||||
|
ERROR("TODO: DisplayPort on ValleyView / CherryView");
|
||||||
return 0;
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
// Intel, are humans even involved anymore?
|
// Intel, are humans even involved anymore?
|
||||||
// This is a lot more complex than this code makes it look. (see defines)
|
// This is a lot more complex than this code makes it look. (see defines)
|
||||||
@@ -894,6 +925,17 @@ DisplayPort::_PortRegister()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
status_t
|
||||||
|
DisplayPort::SetDisplayMode(display_mode* target, uint32 colorMode)
|
||||||
|
{
|
||||||
|
TRACE("%s: %s %dx%d\n", __func__, PortName(), target->virtual_width,
|
||||||
|
target->virtual_height);
|
||||||
|
|
||||||
|
ERROR("TODO: DisplayPort\n");
|
||||||
|
return B_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// #pragma mark - Embedded DisplayPort
|
// #pragma mark - Embedded DisplayPort
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -170,7 +170,7 @@ virtual addr_t _PortRegister();
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
class DisplayPort : public DigitalPort {
|
class DisplayPort : public Port {
|
||||||
public:
|
public:
|
||||||
DisplayPort(port_index index,
|
DisplayPort(port_index index,
|
||||||
const char* baseName = "DisplayPort");
|
const char* baseName = "DisplayPort");
|
||||||
@@ -180,7 +180,11 @@ virtual uint32 Type() const
|
|||||||
|
|
||||||
virtual bool IsConnected();
|
virtual bool IsConnected();
|
||||||
|
|
||||||
|
virtual status_t SetDisplayMode(display_mode* mode,
|
||||||
|
uint32 colorMode);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
virtual addr_t _DDCRegister();
|
||||||
virtual addr_t _PortRegister();
|
virtual addr_t _PortRegister();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user