[Intel-gfx] [PATCH v6 05/12] drm/i915: Add plumbing for digital connector state, v3.
Some atomic properties are common between the various kinds of connectors, for example a lot of them use panel fitting mode. It makes sense to put a lot of it in a common place, so each connector can use it while they're being converted. Implement the properties required for the connectors: - scaling mode property - force audio property - broadcast rgb - aspect ratio While at it, make clear that intel_digital_connector_atomic_get_property is a hack that has to be removed when all connector properties are converted to atomic. Changes since v1: - Scaling mode and aspect ratio are partly handled in core now. Changes since v2: - Split out the scaling mode / aspect ratio changes to a preparation patch. - Use mode_changed for panel fitter, changes to this property are checked by fastset. - Allowed_scaling_modes is removed, handled through core now. Signed-off-by: Maarten Lankhorst --- drivers/gpu/drm/i915/intel_atomic.c | 131 +-- drivers/gpu/drm/i915/intel_display.c | 14 +++- drivers/gpu/drm/i915/intel_drv.h | 23 ++ 3 files changed, 159 insertions(+), 9 deletions(-) diff --git a/drivers/gpu/drm/i915/intel_atomic.c b/drivers/gpu/drm/i915/intel_atomic.c index 50fb1f76cc5f..182909f266f5 100644 --- a/drivers/gpu/drm/i915/intel_atomic.c +++ b/drivers/gpu/drm/i915/intel_atomic.c @@ -36,7 +36,7 @@ #include "intel_drv.h" /** - * intel_connector_atomic_get_property - fetch connector property value + * intel_connector_atomic_get_property - fetch legacy connector property value * @connector: connector to fetch property for * @state: state containing the property value * @property: property to look up @@ -45,12 +45,14 @@ * The DRM core does not store shadow copies of properties for * atomic-capable drivers. This entrypoint is used to fetch * the current value of a driver-specific connector property. + * + * This is a intermediary solution until all connectors are + * converted to support full atomic properties. */ -int -intel_connector_atomic_get_property(struct drm_connector *connector, - const struct drm_connector_state *state, - struct drm_property *property, - uint64_t *val) +int intel_connector_atomic_get_property(struct drm_connector *connector, + const struct drm_connector_state *state, + struct drm_property *property, + uint64_t *val) { int i; @@ -73,7 +75,122 @@ intel_connector_atomic_get_property(struct drm_connector *connector, return -EINVAL; } -/* +/** + * intel_digital_connector_atomic_get_property - hook for connector->atomic_get_property. + * @connector: Connector to get the property for. + * @state: Connector state to retrieve the property from. + * @property: Property to retrieve. + * @val: Return value for the property. + * + * Returns the atomic property value for a digital connector. + */ +int intel_digital_connector_atomic_get_property(struct drm_connector *connector, + const struct drm_connector_state *state, + struct drm_property *property, + uint64_t *val) +{ + struct drm_device *dev = connector->dev; + struct drm_i915_private *dev_priv = to_i915(dev); + struct intel_digital_connector_state *intel_conn_state = + to_intel_digital_connector_state(state); + + if (property == dev_priv->force_audio_property) + *val = intel_conn_state->force_audio; + else if (property == dev_priv->broadcast_rgb_property) + *val = intel_conn_state->broadcast_rgb; + else { + DRM_DEBUG_ATOMIC("Unknown property %s\n", property->name); + return -EINVAL; + } + + return 0; +} + +/** + * intel_digital_connector_atomic_set_property - hook for connector->atomic_set_property. + * @connector: Connector to set the property for. + * @state: Connector state to set the property on. + * @property: Property to set. + * @val: New value for the property. + * + * Sets the atomic property value for a digital connector. + */ +int intel_digital_connector_atomic_set_property(struct drm_connector *connector, + struct drm_connector_state *state, + struct drm_property *property, + uint64_t val) +{ + struct drm_device *dev = connector->dev; + struct drm_i915_private *dev_priv = to_i915(dev); + struct intel_digital_connector_state *intel_conn_state = + to_intel_digital_connector_state(state); + + if (property == dev_priv->force_audio_property) { + intel_conn_state->force_audio = val; +
Re: [Intel-gfx] [PATCH v6 05/12] drm/i915: Add plumbing for digital connector state, v3.
Hey, Op 02-05-17 om 11:56 schreef Daniel Vetter: > On Mon, May 01, 2017 at 03:37:57PM +0200, Maarten Lankhorst wrote: >> Some atomic properties are common between the various kinds of >> connectors, for example a lot of them use panel fitting mode. >> It makes sense to put a lot of it in a common place, so each >> connector can use it while they're being converted. >> >> Implement the properties required for the connectors: >> - scaling mode property >> - force audio property >> - broadcast rgb >> - aspect ratio >> >> While at it, make clear that intel_digital_connector_atomic_get_property >> is a hack that has to be removed when all connector properties >> are converted to atomic. >> >> Changes since v1: >> - Scaling mode and aspect ratio are partly handled in core now. >> Changes since v2: >> - Split out the scaling mode / aspect ratio changes to a preparation >> patch. >> - Use mode_changed for panel fitter, changes to this property >> are checked by fastset. >> - Allowed_scaling_modes is removed, handled through core now. >> >> Signed-off-by: Maarten Lankhorst > Patches 3-5: Reviewed-by: Daniel Vetter > > Pls ping Dave for an Ack for getting the first 2 landed through drm-intel > (they'll still show up in the first pull request right after -rc1, so all > good imo). Merged, thanks for review. ~Maarten ___ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx
Re: [Intel-gfx] [PATCH v6 05/12] drm/i915: Add plumbing for digital connector state, v3.
On Mon, May 01, 2017 at 03:37:57PM +0200, Maarten Lankhorst wrote: > Some atomic properties are common between the various kinds of > connectors, for example a lot of them use panel fitting mode. > It makes sense to put a lot of it in a common place, so each > connector can use it while they're being converted. > > Implement the properties required for the connectors: > - scaling mode property > - force audio property > - broadcast rgb > - aspect ratio > > While at it, make clear that intel_digital_connector_atomic_get_property > is a hack that has to be removed when all connector properties > are converted to atomic. > > Changes since v1: > - Scaling mode and aspect ratio are partly handled in core now. > Changes since v2: > - Split out the scaling mode / aspect ratio changes to a preparation > patch. > - Use mode_changed for panel fitter, changes to this property > are checked by fastset. > - Allowed_scaling_modes is removed, handled through core now. > > Signed-off-by: Maarten Lankhorst Patches 3-5: Reviewed-by: Daniel Vetter Pls ping Dave for an Ack for getting the first 2 landed through drm-intel (they'll still show up in the first pull request right after -rc1, so all good imo). Cheers, Daniel > --- > drivers/gpu/drm/i915/intel_atomic.c | 131 > +-- > drivers/gpu/drm/i915/intel_display.c | 14 +++- > drivers/gpu/drm/i915/intel_drv.h | 23 ++ > 3 files changed, 159 insertions(+), 9 deletions(-) > > diff --git a/drivers/gpu/drm/i915/intel_atomic.c > b/drivers/gpu/drm/i915/intel_atomic.c > index 50fb1f76cc5f..182909f266f5 100644 > --- a/drivers/gpu/drm/i915/intel_atomic.c > +++ b/drivers/gpu/drm/i915/intel_atomic.c > @@ -36,7 +36,7 @@ > #include "intel_drv.h" > > /** > - * intel_connector_atomic_get_property - fetch connector property value > + * intel_connector_atomic_get_property - fetch legacy connector property > value > * @connector: connector to fetch property for > * @state: state containing the property value > * @property: property to look up > @@ -45,12 +45,14 @@ > * The DRM core does not store shadow copies of properties for > * atomic-capable drivers. This entrypoint is used to fetch > * the current value of a driver-specific connector property. > + * > + * This is a intermediary solution until all connectors are > + * converted to support full atomic properties. > */ > -int > -intel_connector_atomic_get_property(struct drm_connector *connector, > - const struct drm_connector_state *state, > - struct drm_property *property, > - uint64_t *val) > +int intel_connector_atomic_get_property(struct drm_connector *connector, > + const struct drm_connector_state *state, > + struct drm_property *property, > + uint64_t *val) > { > int i; > > @@ -73,7 +75,122 @@ intel_connector_atomic_get_property(struct drm_connector > *connector, > return -EINVAL; > } > > -/* > +/** > + * intel_digital_connector_atomic_get_property - hook for > connector->atomic_get_property. > + * @connector: Connector to get the property for. > + * @state: Connector state to retrieve the property from. > + * @property: Property to retrieve. > + * @val: Return value for the property. > + * > + * Returns the atomic property value for a digital connector. > + */ > +int intel_digital_connector_atomic_get_property(struct drm_connector > *connector, > + const struct > drm_connector_state *state, > + struct drm_property *property, > + uint64_t *val) > +{ > + struct drm_device *dev = connector->dev; > + struct drm_i915_private *dev_priv = to_i915(dev); > + struct intel_digital_connector_state *intel_conn_state = > + to_intel_digital_connector_state(state); > + > + if (property == dev_priv->force_audio_property) > + *val = intel_conn_state->force_audio; > + else if (property == dev_priv->broadcast_rgb_property) > + *val = intel_conn_state->broadcast_rgb; > + else { > + DRM_DEBUG_ATOMIC("Unknown property %s\n", property->name); > + return -EINVAL; > + } > + > + return 0; > +} > + > +/** > + * intel_digital_connector_atomic_set_property - hook for > connector->atomic_set_property. > + * @connector: Connector to set the property for. > + * @state: Connector state to set the property on. > + * @property: Property to set. > + * @val: New value for the property. > + * > + * Sets the atomic property value for a digital connector. > + */ > +int intel_digital_connector_atomic_set_property(struct drm_connector > *connector, > + struct drm_connector_state > *state, > +