Message ID | 205b3b8905375506dc9f508fe18652c226cc6a50.1655895388.git.jani.nikula@intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | drm/edid: expand on struct drm_edid usage | expand |
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
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;
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> --- 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(-)