On Wed, Jun 22, 2022 at 01:59:15PM +0300, Jani Nikula wrote:
The function needs access to drm_edid.c internals more than drm_connector.c. We can make drm_reset_display_info(), drm_add_display_info() and drm_update_tile_info() static. There will be more benefits with follow-up struct drm_edid refactoring.
Signed-off-by: Jani Nikula jani.nikula@intel.com
Reviewed-by: Ville Syrjälä ville.syrjala@linux.intel.com
drivers/gpu/drm/drm_connector.c | 74 ------------------------- drivers/gpu/drm/drm_crtc_internal.h | 3 - drivers/gpu/drm/drm_edid.c | 86 +++++++++++++++++++++++++++-- 3 files changed, 81 insertions(+), 82 deletions(-)
diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c index 28ea0f8196b9..2b9a8972eff1 100644 --- a/drivers/gpu/drm/drm_connector.c +++ b/drivers/gpu/drm/drm_connector.c @@ -2078,80 +2078,6 @@ int drm_connector_set_tile_property(struct drm_connector *connector) } EXPORT_SYMBOL(drm_connector_set_tile_property);
-/**
- drm_connector_update_edid_property - update the edid property of a connector
- @connector: drm connector
- @edid: new value of the edid property
- This function creates a new blob modeset object and assigns its id to the
- connector's edid property.
- Since we also parse tile information from EDID's displayID block, we also
- set the connector's tile property here. See drm_connector_set_tile_property()
- for more details.
- Returns:
- Zero on success, negative errno on failure.
- */
-int drm_connector_update_edid_property(struct drm_connector *connector,
const struct edid *edid)
-{
- struct drm_device *dev = connector->dev;
- size_t size = 0;
- int ret;
- const struct edid *old_edid;
- /* ignore requests to set edid when overridden */
- if (connector->override_edid)
return 0;
- if (edid)
size = EDID_LENGTH * (1 + edid->extensions);
- /* Set the display info, using edid if available, otherwise
* resetting the values to defaults. This duplicates the work
* done in drm_add_edid_modes, but that function is not
* consistently called before this one in all drivers and the
* computation is cheap enough that it seems better to
* duplicate it rather than attempt to ensure some arbitrary
* ordering of calls.
*/
- if (edid)
drm_add_display_info(connector, edid);
- else
drm_reset_display_info(connector);
- drm_update_tile_info(connector, edid);
- if (connector->edid_blob_ptr) {
old_edid = (const struct edid *)connector->edid_blob_ptr->data;
if (old_edid) {
if (!drm_edid_are_equal(edid, old_edid)) {
DRM_DEBUG_KMS("[CONNECTOR:%d:%s] Edid was changed.\n",
connector->base.id, connector->name);
connector->epoch_counter += 1;
DRM_DEBUG_KMS("Updating change counter to %llu\n",
connector->epoch_counter);
}
}
- }
- drm_object_property_set_value(&connector->base,
dev->mode_config.non_desktop_property,
connector->display_info.non_desktop);
- ret = drm_property_replace_global_blob(dev,
&connector->edid_blob_ptr,
size,
edid,
&connector->base,
dev->mode_config.edid_property);
- if (ret)
return ret;
- return drm_connector_set_tile_property(connector);
-} -EXPORT_SYMBOL(drm_connector_update_edid_property);
/**
- drm_connector_set_link_status_property - Set link status property of a connector
- @connector: drm connector
diff --git a/drivers/gpu/drm/drm_crtc_internal.h b/drivers/gpu/drm/drm_crtc_internal.h index 63279e984342..aecab5308bae 100644 --- a/drivers/gpu/drm/drm_crtc_internal.h +++ b/drivers/gpu/drm/drm_crtc_internal.h @@ -286,6 +286,3 @@ int drm_mode_page_flip_ioctl(struct drm_device *dev,
/* drm_edid.c */ void drm_mode_fixup_1366x768(struct drm_display_mode *mode); -void drm_reset_display_info(struct drm_connector *connector); -u32 drm_add_display_info(struct drm_connector *connector, const struct edid *edid); -void drm_update_tile_info(struct drm_connector *connector, const struct edid *edid); diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c index 2bdaf1e34a9d..36bf7b0fe8d9 100644 --- a/drivers/gpu/drm/drm_edid.c +++ b/drivers/gpu/drm/drm_edid.c @@ -5928,8 +5928,7 @@ static void drm_update_mso(struct drm_connector *connector, /* A connector has no EDID information, so we've got no EDID to compute quirks from. Reset
- all of the values which would have been set from EDID
*/ -void -drm_reset_display_info(struct drm_connector *connector) +static void drm_reset_display_info(struct drm_connector *connector) { struct drm_display_info *info = &connector->display_info;
@@ -6043,7 +6042,7 @@ static u32 update_display_info(struct drm_connector *connector, return quirks; }
-u32 drm_add_display_info(struct drm_connector *connector, const struct edid *edid) +static u32 drm_add_display_info(struct drm_connector *connector, const struct edid *edid) { struct drm_edid drm_edid;
@@ -6207,6 +6206,83 @@ static int drm_edid_connector_update(struct drm_connector *connector, return num_modes; }
+static void drm_update_tile_info(struct drm_connector *connector,
const struct edid *edid);
+/**
- drm_connector_update_edid_property - update the edid property of a connector
- @connector: drm connector
- @edid: new value of the edid property
- This function creates a new blob modeset object and assigns its id to the
- connector's edid property.
- Since we also parse tile information from EDID's displayID block, we also
- set the connector's tile property here. See drm_connector_set_tile_property()
- for more details.
- Returns:
- Zero on success, negative errno on failure.
- */
+int drm_connector_update_edid_property(struct drm_connector *connector,
const struct edid *edid)
+{
- struct drm_device *dev = connector->dev;
- size_t size = 0;
- int ret;
- const struct edid *old_edid;
- /* ignore requests to set edid when overridden */
- if (connector->override_edid)
return 0;
- if (edid)
size = EDID_LENGTH * (1 + edid->extensions);
- /*
* Set the display info, using edid if available, otherwise resetting
* the values to defaults. This duplicates the work done in
* drm_add_edid_modes, but that function is not consistently called
* before this one in all drivers and the computation is cheap enough
* that it seems better to duplicate it rather than attempt to ensure
* some arbitrary ordering of calls.
*/
- if (edid)
drm_add_display_info(connector, edid);
- else
drm_reset_display_info(connector);
- drm_update_tile_info(connector, edid);
- if (connector->edid_blob_ptr) {
old_edid = (const struct edid *)connector->edid_blob_ptr->data;
if (old_edid) {
if (!drm_edid_are_equal(edid, old_edid)) {
DRM_DEBUG_KMS("[CONNECTOR:%d:%s] Edid was changed.\n",
connector->base.id, connector->name);
connector->epoch_counter += 1;
DRM_DEBUG_KMS("Updating change counter to %llu\n",
connector->epoch_counter);
}
}
- }
- drm_object_property_set_value(&connector->base,
dev->mode_config.non_desktop_property,
connector->display_info.non_desktop);
- ret = drm_property_replace_global_blob(dev,
&connector->edid_blob_ptr,
size,
edid,
&connector->base,
dev->mode_config.edid_property);
- if (ret)
return ret;
- return drm_connector_set_tile_property(connector);
+} +EXPORT_SYMBOL(drm_connector_update_edid_property);
/**
- drm_add_edid_modes - add modes from EDID data, if available
- @connector: connector we're probing
@@ -6645,8 +6721,8 @@ static void _drm_update_tile_info(struct drm_connector *connector, } }
-void drm_update_tile_info(struct drm_connector *connector,
const struct edid *edid)
+static void drm_update_tile_info(struct drm_connector *connector,
const struct edid *edid)
{ struct drm_edid drm_edid;
-- 2.30.2