git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22516 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Axel Dörfler
2007-10-12 15:56:08 +00:00
parent 4ff0c50078
commit 13a81299f1
6 changed files with 39 additions and 38 deletions
+5 -4
View File
@@ -5,7 +5,7 @@
#ifndef _EDID_H #ifndef _EDID_H
#define _EDID_H #define _EDID_H
//! EDID handling, including decoded EDID data block definition. //! Extended Display Identification Data (EDID)
#include "edid_raw.h" #include "edid_raw.h"
@@ -116,19 +116,20 @@ typedef struct {
} edid1_detailed_monitor; } edid1_detailed_monitor;
// EDID data block // EDID data block
typedef struct{ typedef struct edid1_info {
edid1_vendor vendor; edid1_vendor vendor;
edid1_version version; edid1_version version;
edid1_display display; edid1_display display;
edid1_established_timing established_timing; edid1_established_timing established_timing;
edid1_std_timing std_timing[EDID1_NUM_STD_TIMING]; edid1_std_timing std_timing[EDID1_NUM_STD_TIMING];
// since EDID version 1.2 // since EDID version 1.2
edid1_detailed_monitor detailed_monitor[EDID1_NUM_DETAILED_MONITOR_DESC]; edid1_detailed_monitor detailed_monitor[EDID1_NUM_DETAILED_MONITOR_DESC];
uint8 num_sections; uint8 num_sections;
} edid1_info; } edid1_info;
#define EDID_VERSION_1 1
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
+7 -7
View File
@@ -147,13 +147,13 @@ typedef struct _PACKED {
// types of detailed monitor description // types of detailed monitor description
enum { enum {
edid1_serial_number = 0xff, EDID1_SERIAL_NUMBER = 0xff,
edid1_ascii_data = 0xfe, EDID1_ASCII_DATA = 0xfe,
edid1_monitor_ranges = 0xfd, EDID1_MONITOR_RANGES = 0xfd,
edid1_monitor_name = 0xfc, EDID1_MONITOR_NAME = 0xfc,
edid1_add_colour_pointer = 0xfb, EDID1_ADD_COLOUR_POINTER = 0xfb,
edid1_add_std_timing = 0xfa, EDID1_ADD_STD_TIMING = 0xfa,
edid1_is_detailed_timing = 1 EDID1_IS_DETAILED_TIMING = 1
}; };
+15 -15
View File
@@ -179,7 +179,7 @@ decode_detailed_monitor(edid1_detailed_monitor *monitor,
int i, j; int i, j;
for (i = 0; i < EDID1_NUM_DETAILED_MONITOR_DESC; ++i, ++monitor, ++raw) { for (i = 0; i < EDID1_NUM_DETAILED_MONITOR_DESC; ++i, ++monitor, ++raw) {
monitor->monitor_desc_type = edid1_is_detailed_timing; monitor->monitor_desc_type = EDID1_IS_DETAILED_TIMING;
// workaround: normally, all four bytes must be zero for detailed // workaround: normally, all four bytes must be zero for detailed
// description, but at least some Formac monitors violate that: // description, but at least some Formac monitors violate that:
@@ -192,31 +192,31 @@ decode_detailed_monitor(edid1_detailed_monitor *monitor,
monitor->monitor_desc_type = raw->extra.monitor_desc_type; monitor->monitor_desc_type = raw->extra.monitor_desc_type;
switch (raw->extra.monitor_desc_type) { switch (raw->extra.monitor_desc_type) {
case edid1_serial_number: case EDID1_SERIAL_NUMBER:
copy_str( monitor->data.serial_number, copy_str(monitor->data.serial_number,
raw->extra.data.serial_number, EDID1_EXTRA_STRING_LEN ); raw->extra.data.serial_number, EDID1_EXTRA_STRING_LEN);
break; break;
case edid1_ascii_data: case EDID1_ASCII_DATA:
copy_str( monitor->data.ascii_data, copy_str(monitor->data.ascii_data,
raw->extra.data.ascii_data, EDID1_EXTRA_STRING_LEN ); raw->extra.data.ascii_data, EDID1_EXTRA_STRING_LEN);
break; break;
case edid1_monitor_ranges: case EDID1_MONITOR_RANGES:
monitor->data.monitor_range = raw->extra.data.monitor_range; monitor->data.monitor_range = raw->extra.data.monitor_range;
break; break;
case edid1_monitor_name: case EDID1_MONITOR_NAME:
copy_str( monitor->data.monitor_name, copy_str(monitor->data.monitor_name,
raw->extra.data.monitor_name, EDID1_EXTRA_STRING_LEN ); raw->extra.data.monitor_name, EDID1_EXTRA_STRING_LEN);
break; break;
case edid1_add_colour_pointer: case EDID1_ADD_COLOUR_POINTER:
decode_whitepoint( monitor->data.whitepoint, decode_whitepoint(monitor->data.whitepoint,
&raw->extra.data.whitepoint ); &raw->extra.data.whitepoint);
break; break;
case edid1_add_std_timing: case EDID1_ADD_STD_TIMING:
for (j = 0; j < EDID1_NUM_EXTRA_STD_TIMING; ++j) { for (j = 0; j < EDID1_NUM_EXTRA_STD_TIMING; ++j) {
decode_std_timing(&monitor->data.std_timing[j], decode_std_timing(&monitor->data.std_timing[j],
&raw->extra.data.std_timing[j]); &raw->extra.data.std_timing[j]);
+8 -8
View File
@@ -90,15 +90,15 @@ edid_dump(edid1_info *edid)
edid1_detailed_monitor *monitor = &edid->detailed_monitor[i]; edid1_detailed_monitor *monitor = &edid->detailed_monitor[i];
switch(monitor->monitor_desc_type) { switch(monitor->monitor_desc_type) {
case edid1_serial_number: case EDID1_SERIAL_NUMBER:
dprintf("Serial Number: %s\n", monitor->data.serial_number); dprintf("Serial Number: %s\n", monitor->data.serial_number);
break; break;
case edid1_ascii_data: case EDID1_ASCII_DATA:
dprintf(" %s\n", monitor->data.serial_number); dprintf(" %s\n", monitor->data.serial_number);
break; break;
case edid1_monitor_ranges: case EDID1_MONITOR_RANGES:
{ {
edid1_monitor_range monitor_range = monitor->data.monitor_range; edid1_monitor_range monitor_range = monitor->data.monitor_range;
@@ -110,11 +110,11 @@ edid_dump(edid1_info *edid)
break; break;
} }
case edid1_monitor_name: case EDID1_MONITOR_NAME:
dprintf("Monitor Name: %s\n", monitor->data.serial_number); dprintf("Monitor Name: %s\n", monitor->data.monitor_name);
break; break;
case edid1_add_colour_pointer: case EDID1_ADD_COLOUR_POINTER:
{ {
for (j = 0; j < EDID1_NUM_EXTRA_WHITEPOINTS; ++j) { for (j = 0; j < EDID1_NUM_EXTRA_WHITEPOINTS; ++j) {
edid1_whitepoint *whitepoint = &monitor->data.whitepoint[j]; edid1_whitepoint *whitepoint = &monitor->data.whitepoint[j];
@@ -131,7 +131,7 @@ edid_dump(edid1_info *edid)
break; break;
} }
case edid1_add_std_timing: case EDID1_ADD_STD_TIMING:
{ {
for (j = 0; j < EDID1_NUM_EXTRA_STD_TIMING; ++j) { for (j = 0; j < EDID1_NUM_EXTRA_STD_TIMING; ++j) {
edid1_std_timing *timing = &monitor->data.std_timing[j]; edid1_std_timing *timing = &monitor->data.std_timing[j];
@@ -146,7 +146,7 @@ edid_dump(edid1_info *edid)
break; break;
} }
case edid1_is_detailed_timing: case EDID1_IS_DETAILED_TIMING:
{ {
edid1_detailed_timing *timing = &monitor->data.detailed_timing; edid1_detailed_timing *timing = &monitor->data.detailed_timing;
@@ -696,7 +696,7 @@ Radeon_FindFPTiming_DetailedMonitorDesc(const edid1_info *edid, fp_info *fp,
int i; int i;
for (i = 0; i < EDID1_NUM_DETAILED_MONITOR_DESC; ++i) { for (i = 0; i < EDID1_NUM_DETAILED_MONITOR_DESC; ++i) {
if (edid->detailed_monitor[i].monitor_desc_type == edid1_is_detailed_timing) { if (edid->detailed_monitor[i].monitor_desc_type == EDID1_IS_DETAILED_TIMING) {
const edid1_detailed_timing *timing = &edid->detailed_monitor[i].data.detailed_timing; const edid1_detailed_timing *timing = &edid->detailed_monitor[i].data.detailed_timing;
SHOW_FLOW(2, "Found detailed timing for mode %dx%d in DDC data", SHOW_FLOW(2, "Found detailed timing for mode %dx%d in DDC data",
+3 -3
View File
@@ -289,10 +289,10 @@ vesa_get_vbe_info_block(vbe_info_block *info)
if (info->signature != VESA_SIGNATURE) if (info->signature != VESA_SIGNATURE)
return B_ERROR; return B_ERROR;
dprintf("VESA version = %lx\n", info->version); dprintf("VESA version = %d.%d\n", info->version.major, info->version.minor);
if (info->version.major < 2) { if (info->version.major < 2) {
dprintf("VESA support too old\n", info->version); dprintf("VESA support too old\n");
return B_ERROR; return B_ERROR;
} }
@@ -824,7 +824,7 @@ platform_init_video(void)
for (int32 i = 0; i < EDID1_NUM_DETAILED_MONITOR_DESC; i++) { for (int32 i = 0; i < EDID1_NUM_DETAILED_MONITOR_DESC; i++) {
edid1_detailed_monitor &monitor = info.detailed_monitor[i]; edid1_detailed_monitor &monitor = info.detailed_monitor[i];
if (monitor.monitor_desc_type == edid1_is_detailed_timing) { if (monitor.monitor_desc_type == EDID1_IS_DETAILED_TIMING) {
defaultMode = find_video_mode(monitor.data.detailed_timing.h_active, defaultMode = find_video_mode(monitor.data.detailed_timing.h_active,
monitor.data.detailed_timing.v_active); monitor.data.detailed_timing.v_active);
if (defaultMode != NULL) if (defaultMode != NULL)