On Thu, 19 Oct 2017, Daniel Vetter <daniel@xxxxxxxx> wrote: > On Wed, Oct 18, 2017 at 03:29:48PM -0700, Sripada, Radhakrishna wrote: >> Currently the user space does not have a way to force the bpc. The >> default bpc to be programmed is decided by the driver and is run >> against connector limitations. Creating a new property for the userspace >> to recommend a certain color depth while scanning out the pixels. >> >> Cc: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx> >> Cc: Paulo Zanoni <paulo.r.zanoni@xxxxxxxxx> >> Cc: Manasi Navare <manasi.d.navare@xxxxxxxxx> >> Signed-off-by: Radhakrishna Sripada <radhakrishna.sripada@xxxxxxxxx> > > Why not put this onto the pipe directly? Also, what's the userspace > use-case here, we need those patches too. And rationale in the commit message, please. The "why". BR, Jani. > -Daniel > >> --- >> drivers/gpu/drm/i915/i915_drv.h | 7 +++++++ >> drivers/gpu/drm/i915/intel_atomic.c | 7 +++++++ >> drivers/gpu/drm/i915/intel_drv.h | 2 ++ >> drivers/gpu/drm/i915/intel_hdmi.c | 1 + >> drivers/gpu/drm/i915/intel_modes.c | 29 +++++++++++++++++++++++++++++ >> 5 files changed, 46 insertions(+) >> >> diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h >> index 2783f07c6fc4..e58856f7b08a 100644 >> --- a/drivers/gpu/drm/i915/i915_drv.h >> +++ b/drivers/gpu/drm/i915/i915_drv.h >> @@ -2521,6 +2521,7 @@ struct drm_i915_private { >> >> struct drm_property *broadcast_rgb_property; >> struct drm_property *force_audio_property; >> + struct drm_property *force_bpc_property; >> >> /* hda/i915 audio component */ >> struct i915_audio_component *audio_component; >> @@ -2858,6 +2859,12 @@ enum hdmi_force_audio { >> HDMI_AUDIO_ON, /* force turn on HDMI audio */ >> }; >> >> +enum connector_force_bpc { >> + INTEL_FORCE_BPC_AUTO, >> + INTEL_FORCE_BPC_8, >> + INTEL_FORCE_BPC_10, >> + INTEL_FORCE_BPC_12, >> +}; >> #define I915_GTT_OFFSET_NONE ((u32)-1) >> >> /* >> diff --git a/drivers/gpu/drm/i915/intel_atomic.c b/drivers/gpu/drm/i915/intel_atomic.c >> index 36d4e635e4ce..10a74669f49a 100644 >> --- a/drivers/gpu/drm/i915/intel_atomic.c >> +++ b/drivers/gpu/drm/i915/intel_atomic.c >> @@ -58,6 +58,8 @@ int intel_digital_connector_atomic_get_property(struct drm_connector *connector, >> *val = intel_conn_state->force_audio; >> else if (property == dev_priv->broadcast_rgb_property) >> *val = intel_conn_state->broadcast_rgb; >> + else if (property == dev_priv->force_bpc_property) >> + *val = intel_conn_state->force_bpc; >> else { >> DRM_DEBUG_ATOMIC("Unknown property %s\n", property->name); >> return -EINVAL; >> @@ -95,6 +97,11 @@ int intel_digital_connector_atomic_set_property(struct drm_connector *connector, >> return 0; >> } >> >> + if (property == dev_priv->force_bpc_property) { >> + intel_conn_state->force_bpc = val; >> + return 0; >> + } >> + >> DRM_DEBUG_ATOMIC("Unknown property %s\n", property->name); >> return -EINVAL; >> } >> diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h >> index 77117e188b04..654e76d19514 100644 >> --- a/drivers/gpu/drm/i915/intel_drv.h >> +++ b/drivers/gpu/drm/i915/intel_drv.h >> @@ -341,6 +341,7 @@ struct intel_digital_connector_state { >> >> enum hdmi_force_audio force_audio; >> int broadcast_rgb; >> + enum connector_force_bpc force_bpc; >> }; >> >> #define to_intel_digital_connector_state(x) container_of(x, struct intel_digital_connector_state, base) >> @@ -1708,6 +1709,7 @@ int intel_ddc_get_modes(struct drm_connector *c, struct i2c_adapter *adapter); >> void intel_attach_force_audio_property(struct drm_connector *connector); >> void intel_attach_broadcast_rgb_property(struct drm_connector *connector); >> void intel_attach_aspect_ratio_property(struct drm_connector *connector); >> +void intel_attach_force_bpc_property(struct drm_connector *connector); >> >> >> /* intel_overlay.c */ >> diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c >> index 50214e342401..a2d6d97cc730 100644 >> --- a/drivers/gpu/drm/i915/intel_hdmi.c >> +++ b/drivers/gpu/drm/i915/intel_hdmi.c >> @@ -1798,6 +1798,7 @@ intel_hdmi_add_properties(struct intel_hdmi *intel_hdmi, struct drm_connector *c >> intel_attach_force_audio_property(connector); >> intel_attach_broadcast_rgb_property(connector); >> intel_attach_aspect_ratio_property(connector); >> + intel_attach_force_bpc_property(connector); >> connector->state->picture_aspect_ratio = HDMI_PICTURE_ASPECT_NONE; >> } >> >> diff --git a/drivers/gpu/drm/i915/intel_modes.c b/drivers/gpu/drm/i915/intel_modes.c >> index 28a778b785ac..d7be44a951e8 100644 >> --- a/drivers/gpu/drm/i915/intel_modes.c >> +++ b/drivers/gpu/drm/i915/intel_modes.c >> @@ -151,3 +151,32 @@ intel_attach_aspect_ratio_property(struct drm_connector *connector) >> connector->dev->mode_config.aspect_ratio_property, >> DRM_MODE_PICTURE_ASPECT_NONE); >> } >> + >> +static const struct drm_prop_enum_list force_bpc_names[] = { >> + { INTEL_FORCE_BPC_AUTO, "Automatic" }, >> + { INTEL_FORCE_BPC_8, "8 bpc" }, >> + { INTEL_FORCE_BPC_10, "10 bpc" }, >> + { INTEL_FORCE_BPC_12, "12 bpc" }, >> +}; >> + >> +void >> +intel_attach_force_bpc_property(struct drm_connector *connector) >> +{ >> + struct drm_device *dev = connector->dev; >> + struct drm_i915_private *dev_priv = to_i915(dev); >> + struct drm_property *prop; >> + >> + prop = dev_priv->force_bpc_property; >> + if (prop == NULL) { >> + prop = drm_property_create_enum(dev, DRM_MODE_PROP_ENUM, >> + "bpc", >> + force_bpc_names, >> + ARRAY_SIZE(force_bpc_names)); >> + if (prop == NULL) >> + return; >> + >> + dev_priv->force_bpc_property = prop; >> + } >> + >> + drm_object_attach_property(&connector->base, prop, 0); >> +} >> -- >> 2.9.3 >> >> _______________________________________________ >> Intel-gfx mailing list >> Intel-gfx@xxxxxxxxxxxxxxxxxxxxx >> https://lists.freedesktop.org/mailman/listinfo/intel-gfx -- Jani Nikula, Intel Open Source Technology Center _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx