radeon_hd: Add encoder crtc source table 1.3
Change-Id: I9020f9bf270509c162987a9c1656f7e1cce33490 Reviewed-on: https://review.haiku-os.org/c/haiku/+/5529 Reviewed-by: waddlesplash <waddlesplash@gmail.com> Reviewed-by: Alex von Gluck IV <kallisti5@unixzen.com> Reviewed-by: Jérôme Duval <jerome.duval@gmail.com>
This commit is contained in:
parent
967cfb4d56
commit
9bceb7fb3c
@ -35,6 +35,29 @@ extern "C" void _sPrintf(const char* format, ...);
|
||||
#define ERROR(x...) _sPrintf("radeon_hd: " x)
|
||||
|
||||
|
||||
static uint32
|
||||
encoder_get_bpc()
|
||||
{
|
||||
/*
|
||||
switch (8) {
|
||||
case 0:
|
||||
return PANEL_BPC_UNDEFINE;
|
||||
case 6:
|
||||
return PANEL_6BIT_PER_COLOR;
|
||||
case 8:
|
||||
return PANEL_8BIT_PER_COLOR;
|
||||
case 10:
|
||||
return PANEL_10BIT_PER_COLOR;
|
||||
case 12:
|
||||
return PANEL_12BIT_PER_COLOR;
|
||||
case 16:
|
||||
return PANEL_16BIT_PER_COLOR;
|
||||
}
|
||||
*/
|
||||
return PANEL_8BIT_PER_COLOR;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
encoder_init()
|
||||
{
|
||||
@ -92,6 +115,7 @@ encoder_assign_crtc(uint8 crtcID)
|
||||
union crtcSourceParam {
|
||||
SELECT_CRTC_SOURCE_PS_ALLOCATION v1;
|
||||
SELECT_CRTC_SOURCE_PARAMETERS_V2 v2;
|
||||
SELECT_CRTC_SOURCE_PARAMETERS_V3 v3;
|
||||
};
|
||||
union crtcSourceParam args;
|
||||
memset(&args, 0, sizeof(args));
|
||||
@ -205,6 +229,74 @@ encoder_assign_crtc(uint8 crtcID)
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
args.v3.ucCRTC = crtcID;
|
||||
// TODO: Better bridge logic
|
||||
args.v2.ucEncodeMode
|
||||
= display_get_encoder_mode(connectorIndex);
|
||||
args.v3.ucDstBpc = encoder_get_bpc();
|
||||
switch (encoderID) {
|
||||
case ENCODER_OBJECT_ID_INTERNAL_UNIPHY:
|
||||
case ENCODER_OBJECT_ID_INTERNAL_UNIPHY1:
|
||||
case ENCODER_OBJECT_ID_INTERNAL_UNIPHY2:
|
||||
case ENCODER_OBJECT_ID_INTERNAL_UNIPHY3:
|
||||
case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_LVTMA:
|
||||
switch (encoder_pick_dig(connectorIndex)) {
|
||||
case 0:
|
||||
args.v3.ucEncoderID
|
||||
= ASIC_INT_DIG1_ENCODER_ID;
|
||||
break;
|
||||
case 1:
|
||||
args.v3.ucEncoderID
|
||||
= ASIC_INT_DIG2_ENCODER_ID;
|
||||
break;
|
||||
case 2:
|
||||
args.v3.ucEncoderID
|
||||
= ASIC_INT_DIG3_ENCODER_ID;
|
||||
break;
|
||||
case 3:
|
||||
args.v3.ucEncoderID
|
||||
= ASIC_INT_DIG4_ENCODER_ID;
|
||||
break;
|
||||
case 4:
|
||||
args.v3.ucEncoderID
|
||||
= ASIC_INT_DIG5_ENCODER_ID;
|
||||
break;
|
||||
case 5:
|
||||
args.v3.ucEncoderID
|
||||
= ASIC_INT_DIG6_ENCODER_ID;
|
||||
break;
|
||||
case 6:
|
||||
args.v3.ucEncoderID
|
||||
= ASIC_INT_DIG7_ENCODER_ID;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DVO1:
|
||||
args.v3.ucEncoderID = ASIC_INT_DVO_ENCODER_ID;
|
||||
break;
|
||||
case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DAC1:
|
||||
if ((connectorFlags
|
||||
& ATOM_DEVICE_TV_SUPPORT) != 0) {
|
||||
args.v3.ucEncoderID = ASIC_INT_TV_ENCODER_ID;
|
||||
} else if ((connectorFlags
|
||||
& ATOM_DEVICE_CV_SUPPORT) != 0) {
|
||||
args.v3.ucEncoderID = ASIC_INT_TV_ENCODER_ID;
|
||||
} else
|
||||
args.v3.ucEncoderID = ASIC_INT_DAC1_ENCODER_ID;
|
||||
break;
|
||||
case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DAC2:
|
||||
if ((connectorFlags
|
||||
& ATOM_DEVICE_TV_SUPPORT) != 0) {
|
||||
args.v3.ucEncoderID = ASIC_INT_TV_ENCODER_ID;
|
||||
} else if ((connectorFlags
|
||||
& ATOM_DEVICE_CV_SUPPORT) != 0) {
|
||||
args.v3.ucEncoderID = ASIC_INT_TV_ENCODER_ID;
|
||||
} else
|
||||
args.v3.ucEncoderID = ASIC_INT_DAC2_ENCODER_ID;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
@ -258,6 +350,8 @@ encoder_pick_dig(uint32 connectorIndex)
|
||||
return linkB ? 3 : 2;
|
||||
case ENCODER_OBJECT_ID_INTERNAL_UNIPHY2:
|
||||
return linkB ? 5 : 4;
|
||||
case ENCODER_OBJECT_ID_INTERNAL_UNIPHY3:
|
||||
return 6;
|
||||
}
|
||||
}
|
||||
|
||||
@ -551,29 +645,6 @@ encoder_digital_setup(uint32 connectorIndex, uint32 pixelClock, int command)
|
||||
}
|
||||
|
||||
|
||||
static uint32
|
||||
encoder_get_bpc()
|
||||
{
|
||||
/*
|
||||
switch (8) {
|
||||
case 0:
|
||||
return PANEL_BPC_UNDEFINE;
|
||||
case 6:
|
||||
return PANEL_6BIT_PER_COLOR;
|
||||
case 8:
|
||||
return PANEL_8BIT_PER_COLOR;
|
||||
case 10:
|
||||
return PANEL_10BIT_PER_COLOR;
|
||||
case 12:
|
||||
return PANEL_12BIT_PER_COLOR;
|
||||
case 16:
|
||||
return PANEL_16BIT_PER_COLOR;
|
||||
}
|
||||
*/
|
||||
return PANEL_8BIT_PER_COLOR;
|
||||
}
|
||||
|
||||
|
||||
status_t
|
||||
encoder_dig_setup(uint32 connectorIndex, uint32 pixelClock, int command)
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user