summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/gpu/drm/drm_edid.c33
1 files changed, 18 insertions, 15 deletions
diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
index 116451101426..c9179df82627 100644
--- a/drivers/gpu/drm/drm_edid.c
+++ b/drivers/gpu/drm/drm_edid.c
@@ -3212,15 +3212,22 @@ static u8 *drm_find_edid_extension(const struct edid *edid, int ext_id)
}
-static u8 *drm_find_displayid_extension(const struct edid *edid)
+static u8 *drm_find_displayid_extension(const struct edid *edid, int *idx)
{
- return drm_find_edid_extension(edid, DISPLAYID_EXT);
+ u8 *displayid = drm_find_edid_extension(edid, DISPLAYID_EXT);
+
+ if (!displayid)
+ return NULL;
+
+ *idx = 1;
+
+ return displayid;
}
static u8 *drm_find_cea_extension(const struct edid *edid)
{
int ret;
- int idx = 1;
+ int idx;
int length = EDID_LENGTH;
struct displayid_block *block;
u8 *cea;
@@ -3232,7 +3239,7 @@ static u8 *drm_find_cea_extension(const struct edid *edid)
return cea;
/* CEA blocks can also be found embedded in a DisplayID block */
- displayid = drm_find_displayid_extension(edid);
+ displayid = drm_find_displayid_extension(edid, &idx);
if (!displayid)
return NULL;
@@ -5181,12 +5188,12 @@ static int add_displayid_detailed_modes(struct drm_connector *connector,
{
u8 *displayid;
int ret;
- int idx = 1;
+ int idx;
int length = EDID_LENGTH;
struct displayid_block *block;
int num_modes = 0;
- displayid = drm_find_displayid_extension(edid);
+ displayid = drm_find_displayid_extension(edid, &idx);
if (!displayid)
return 0;
@@ -5836,17 +5843,11 @@ static int drm_parse_tiled_block(struct drm_connector *connector,
}
static int drm_parse_display_id(struct drm_connector *connector,
- u8 *displayid, int length,
- bool is_edid_extension)
+ u8 *displayid, int length, int idx)
{
- /* if this is an EDID extension the first byte will be 0x70 */
- int idx = 0;
struct displayid_block *block;
int ret;
- if (is_edid_extension)
- idx = 1;
-
ret = validate_displayid(displayid, length, idx);
if (ret)
return ret;
@@ -5880,15 +5881,17 @@ static void drm_get_displayid(struct drm_connector *connector,
struct edid *edid)
{
void *displayid = NULL;
+ int idx;
int ret;
+
connector->has_tile = false;
- displayid = drm_find_displayid_extension(edid);
+ displayid = drm_find_displayid_extension(edid, &idx);
if (!displayid) {
/* drop reference to any tile group we had */
goto out_drop_ref;
}
- ret = drm_parse_display_id(connector, displayid, EDID_LENGTH, true);
+ ret = drm_parse_display_id(connector, displayid, EDID_LENGTH, idx);
if (ret < 0)
goto out_drop_ref;
if (!connector->has_tile)