Skip to content

Commit

Permalink
drm: move edid property update and add modes out of edid firmware loader
Browse files Browse the repository at this point in the history
Make the firmware loader more generic and generally useful.

Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/1487344854-18777-2-git-send-email-jani.nikula@intel.com
  • Loading branch information
Jani Nikula committed Feb 21, 2017
1 parent fb70046 commit 07c2b84
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 17 deletions.
17 changes: 4 additions & 13 deletions drivers/gpu/drm/drm_edid_load.c
Original file line number Diff line number Diff line change
Expand Up @@ -256,15 +256,14 @@ static void *edid_load(struct drm_connector *connector, const char *name,
return edid;
}

int drm_load_edid_firmware(struct drm_connector *connector)
struct edid *drm_load_edid_firmware(struct drm_connector *connector)
{
const char *connector_name = connector->name;
char *edidname, *last, *colon, *fwstr, *edidstr, *fallback = NULL;
int ret;
struct edid *edid;

if (edid_firmware[0] == '\0')
return 0;
return ERR_PTR(-ENOENT);

/*
* If there are multiple edid files specified and separated
Expand Down Expand Up @@ -293,7 +292,7 @@ int drm_load_edid_firmware(struct drm_connector *connector)
if (!edidname) {
if (!fallback) {
kfree(fwstr);
return 0;
return ERR_PTR(-ENOENT);
}
edidname = fallback;
}
Expand All @@ -305,13 +304,5 @@ int drm_load_edid_firmware(struct drm_connector *connector)
edid = edid_load(connector, edidname, connector_name);
kfree(fwstr);

if (IS_ERR_OR_NULL(edid))
return 0;

drm_mode_connector_update_edid_property(connector, edid);
ret = drm_add_edid_modes(connector, edid);
drm_edid_to_eld(connector, edid);
kfree(edid);

return ret;
return edid;
}
8 changes: 7 additions & 1 deletion drivers/gpu/drm/drm_probe_helper.c
Original file line number Diff line number Diff line change
Expand Up @@ -311,7 +311,13 @@ int drm_helper_probe_single_connector_modes(struct drm_connector *connector,
count = drm_add_edid_modes(connector, edid);
drm_edid_to_eld(connector, edid);
} else {
count = drm_load_edid_firmware(connector);
struct edid *edid = drm_load_edid_firmware(connector);
if (!IS_ERR_OR_NULL(edid)) {
drm_mode_connector_update_edid_property(connector, edid);
count = drm_add_edid_modes(connector, edid);
drm_edid_to_eld(connector, edid);
kfree(edid);
}
if (count == 0)
count = (*connector_funcs->get_modes)(connector);
}
Expand Down
7 changes: 4 additions & 3 deletions include/drm/drm_edid.h
Original file line number Diff line number Diff line change
Expand Up @@ -331,11 +331,12 @@ int drm_av_sync_delay(struct drm_connector *connector,
const struct drm_display_mode *mode);

#ifdef CONFIG_DRM_LOAD_EDID_FIRMWARE
int drm_load_edid_firmware(struct drm_connector *connector);
struct edid *drm_load_edid_firmware(struct drm_connector *connector);
#else
static inline int drm_load_edid_firmware(struct drm_connector *connector)
static inline struct edid *
drm_load_edid_firmware(struct drm_connector *connector)
{
return 0;
return ERR_PTR(-ENOENT);
}
#endif

Expand Down

0 comments on commit 07c2b84

Please sign in to comment.