diff options
author | Dave Airlie <airlied@redhat.com> | 2010-02-24 22:44:04 -0500 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2010-02-26 01:23:23 -0500 |
commit | eb6b6d7cdd5548fa03a919d14615195600013be2 (patch) | |
tree | c499472ef28a903f94b09da9a24f66b021412813 /drivers/gpu/drm/drm_edid.c | |
parent | 30d6c72c4a760cfc9069ee100786e4d6cf6de59d (diff) | |
parent | 383be5d1789d9a7a2e77dca1cb0aca89507d069e (diff) |
Merge remote branch 'korg/drm-radeon-testing' into drm-next-stage
* korg/drm-radeon-testing: (62 commits)
drm/radeon/kms: update new pll algo
drm/radeon/kms: add support for square microtiles on r3xx-r5xx
drm/radeon/kms: force pinning buffer into visible VRAM
drm/radeon/kms/evergreen: fix typo in cursor code
drm/radeon/kms: implement reading active PCIE lanes on R600+
drm/radeon/kms: for downclocking non-mobility check PERFORMANCE state
drm/radeon/kms: simplify storing current and requested PM mode
drm/radeon: fixes for r6xx/r7xx gfx init
drm/radeon/rv740: fix backend setup
drm/radeon/kms: fix R3XX/R4XX memory controller initialization
[rfc] drm/radeon/kms: pm debugging check for vbl.
drm/radeon: Fix memory allocation failures in the preKMS command stream checking.
drm: Add generic multipart buffer.
drm/radeon/kms: simplify memory controller setup V2
drm/radeon: Add asic hook for dma copy to r200 cards.
drm/radeon/kms: Create asic structure for r300 pcie cards.
drm/radeon/kms: remove unused r600_gart_clear_page
drm/radeon/kms: remove HDP flushes from fence emit (v2)
drm/radeon/kms: add LVDS pll quirk for Dell Studio 15
drm/radeon/kms: simplify picking power state
...
Conflicts:
drivers/gpu/drm/radeon/atom.c
drivers/gpu/drm/radeon/atombios.h
drivers/gpu/drm/radeon/atombios_dp.c
drivers/gpu/drm/radeon/r600.c
drivers/gpu/drm/radeon/r600_audio.c
drivers/gpu/drm/radeon/r600_cp.c
drivers/gpu/drm/radeon/radeon.h
drivers/gpu/drm/radeon/radeon_connectors.c
drivers/gpu/drm/radeon/radeon_ring.c
drivers/gpu/drm/radeon/rv770.c
Diffstat (limited to 'drivers/gpu/drm/drm_edid.c')
-rw-r--r-- | drivers/gpu/drm/drm_edid.c | 30 |
1 files changed, 15 insertions, 15 deletions
diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c index ab6c97330412..f97e7c42ac8e 100644 --- a/drivers/gpu/drm/drm_edid.c +++ b/drivers/gpu/drm/drm_edid.c | |||
@@ -60,8 +60,7 @@ | |||
60 | #define EDID_QUIRK_FIRST_DETAILED_PREFERRED (1 << 5) | 60 | #define EDID_QUIRK_FIRST_DETAILED_PREFERRED (1 << 5) |
61 | /* use +hsync +vsync for detailed mode */ | 61 | /* use +hsync +vsync for detailed mode */ |
62 | #define EDID_QUIRK_DETAILED_SYNC_PP (1 << 6) | 62 | #define EDID_QUIRK_DETAILED_SYNC_PP (1 << 6) |
63 | /* define the number of Extension EDID block */ | 63 | |
64 | #define MAX_EDID_EXT_NUM 4 | ||
65 | 64 | ||
66 | #define LEVEL_DMT 0 | 65 | #define LEVEL_DMT 0 |
67 | #define LEVEL_GTF 1 | 66 | #define LEVEL_GTF 1 |
@@ -114,14 +113,14 @@ static const u8 edid_header[] = { | |||
114 | }; | 113 | }; |
115 | 114 | ||
116 | /** | 115 | /** |
117 | * edid_is_valid - sanity check EDID data | 116 | * drm_edid_is_valid - sanity check EDID data |
118 | * @edid: EDID data | 117 | * @edid: EDID data |
119 | * | 118 | * |
120 | * Sanity check the EDID block by looking at the header, the version number | 119 | * Sanity check the EDID block by looking at the header, the version number |
121 | * and the checksum. Return 0 if the EDID doesn't check out, or 1 if it's | 120 | * and the checksum. Return 0 if the EDID doesn't check out, or 1 if it's |
122 | * valid. | 121 | * valid. |
123 | */ | 122 | */ |
124 | static bool edid_is_valid(struct edid *edid) | 123 | bool drm_edid_is_valid(struct edid *edid) |
125 | { | 124 | { |
126 | int i, score = 0; | 125 | int i, score = 0; |
127 | u8 csum = 0; | 126 | u8 csum = 0; |
@@ -163,6 +162,7 @@ bad: | |||
163 | } | 162 | } |
164 | return 0; | 163 | return 0; |
165 | } | 164 | } |
165 | EXPORT_SYMBOL(drm_edid_is_valid); | ||
166 | 166 | ||
167 | /** | 167 | /** |
168 | * edid_vendor - match a string against EDID's obfuscated vendor field | 168 | * edid_vendor - match a string against EDID's obfuscated vendor field |
@@ -1112,8 +1112,8 @@ static int add_detailed_info_eedid(struct drm_connector *connector, | |||
1112 | } | 1112 | } |
1113 | 1113 | ||
1114 | /* Chose real EDID extension number */ | 1114 | /* Chose real EDID extension number */ |
1115 | edid_ext_num = edid->extensions > MAX_EDID_EXT_NUM ? | 1115 | edid_ext_num = edid->extensions > DRM_MAX_EDID_EXT_NUM ? |
1116 | MAX_EDID_EXT_NUM : edid->extensions; | 1116 | DRM_MAX_EDID_EXT_NUM : edid->extensions; |
1117 | 1117 | ||
1118 | /* Find CEA extension */ | 1118 | /* Find CEA extension */ |
1119 | for (i = 0; i < edid_ext_num; i++) { | 1119 | for (i = 0; i < edid_ext_num; i++) { |
@@ -1195,7 +1195,7 @@ static int drm_ddc_read_edid(struct drm_connector *connector, | |||
1195 | for (i = 0; i < 4; i++) { | 1195 | for (i = 0; i < 4; i++) { |
1196 | if (drm_do_probe_ddc_edid(adapter, buf, len)) | 1196 | if (drm_do_probe_ddc_edid(adapter, buf, len)) |
1197 | return -1; | 1197 | return -1; |
1198 | if (edid_is_valid((struct edid *)buf)) | 1198 | if (drm_edid_is_valid((struct edid *)buf)) |
1199 | return 0; | 1199 | return 0; |
1200 | } | 1200 | } |
1201 | 1201 | ||
@@ -1220,7 +1220,7 @@ struct edid *drm_get_edid(struct drm_connector *connector, | |||
1220 | int ret; | 1220 | int ret; |
1221 | struct edid *edid; | 1221 | struct edid *edid; |
1222 | 1222 | ||
1223 | edid = kmalloc(EDID_LENGTH * (MAX_EDID_EXT_NUM + 1), | 1223 | edid = kmalloc(EDID_LENGTH * (DRM_MAX_EDID_EXT_NUM + 1), |
1224 | GFP_KERNEL); | 1224 | GFP_KERNEL); |
1225 | if (edid == NULL) { | 1225 | if (edid == NULL) { |
1226 | dev_warn(&connector->dev->pdev->dev, | 1226 | dev_warn(&connector->dev->pdev->dev, |
@@ -1238,14 +1238,14 @@ struct edid *drm_get_edid(struct drm_connector *connector, | |||
1238 | if (edid->extensions != 0) { | 1238 | if (edid->extensions != 0) { |
1239 | int edid_ext_num = edid->extensions; | 1239 | int edid_ext_num = edid->extensions; |
1240 | 1240 | ||
1241 | if (edid_ext_num > MAX_EDID_EXT_NUM) { | 1241 | if (edid_ext_num > DRM_MAX_EDID_EXT_NUM) { |
1242 | dev_warn(&connector->dev->pdev->dev, | 1242 | dev_warn(&connector->dev->pdev->dev, |
1243 | "The number of extension(%d) is " | 1243 | "The number of extension(%d) is " |
1244 | "over max (%d), actually read number (%d)\n", | 1244 | "over max (%d), actually read number (%d)\n", |
1245 | edid_ext_num, MAX_EDID_EXT_NUM, | 1245 | edid_ext_num, DRM_MAX_EDID_EXT_NUM, |
1246 | MAX_EDID_EXT_NUM); | 1246 | DRM_MAX_EDID_EXT_NUM); |
1247 | /* Reset EDID extension number to be read */ | 1247 | /* Reset EDID extension number to be read */ |
1248 | edid_ext_num = MAX_EDID_EXT_NUM; | 1248 | edid_ext_num = DRM_MAX_EDID_EXT_NUM; |
1249 | } | 1249 | } |
1250 | /* Read EDID including extensions too */ | 1250 | /* Read EDID including extensions too */ |
1251 | ret = drm_ddc_read_edid(connector, adapter, (char *)edid, | 1251 | ret = drm_ddc_read_edid(connector, adapter, (char *)edid, |
@@ -1288,8 +1288,8 @@ bool drm_detect_hdmi_monitor(struct edid *edid) | |||
1288 | goto end; | 1288 | goto end; |
1289 | 1289 | ||
1290 | /* Chose real EDID extension number */ | 1290 | /* Chose real EDID extension number */ |
1291 | edid_ext_num = edid->extensions > MAX_EDID_EXT_NUM ? | 1291 | edid_ext_num = edid->extensions > DRM_MAX_EDID_EXT_NUM ? |
1292 | MAX_EDID_EXT_NUM : edid->extensions; | 1292 | DRM_MAX_EDID_EXT_NUM : edid->extensions; |
1293 | 1293 | ||
1294 | /* Find CEA extension */ | 1294 | /* Find CEA extension */ |
1295 | for (i = 0; i < edid_ext_num; i++) { | 1295 | for (i = 0; i < edid_ext_num; i++) { |
@@ -1346,7 +1346,7 @@ int drm_add_edid_modes(struct drm_connector *connector, struct edid *edid) | |||
1346 | if (edid == NULL) { | 1346 | if (edid == NULL) { |
1347 | return 0; | 1347 | return 0; |
1348 | } | 1348 | } |
1349 | if (!edid_is_valid(edid)) { | 1349 | if (!drm_edid_is_valid(edid)) { |
1350 | dev_warn(&connector->dev->pdev->dev, "%s: EDID invalid.\n", | 1350 | dev_warn(&connector->dev->pdev->dev, "%s: EDID invalid.\n", |
1351 | drm_get_connector_name(connector)); | 1351 | drm_get_connector_name(connector)); |
1352 | return 0; | 1352 | return 0; |