On Tue, Nov 03, 2020 at 08:58:23PM +0530, Uma Shankar wrote: > LSPCON firmware exposes HDR capability through LPCON_CAPABILITIES > DPCD register. LSPCON implementations capable of supporting > HDR set HDR_CAPABILITY bit in LSPCON_CAPABILITIES to 1. This patch > reads the same, detects the HDR capability and adds this to > intel_lspcon struct. > > v2: Addressed Jani Nikula's review comment and fixed the HDR > capability detection logic > > v3: Deferred HDR detection from lspcon_init (Ville) > > Signed-off-by: Uma Shankar <uma.shankar@xxxxxxxxx> > --- > .../drm/i915/display/intel_display_types.h | 1 + > drivers/gpu/drm/i915/display/intel_lspcon.c | 28 +++++++++++++++++++ > drivers/gpu/drm/i915/display/intel_lspcon.h | 1 + > 3 files changed, 30 insertions(+) > > diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h b/drivers/gpu/drm/i915/display/intel_display_types.h > index f6f0626649e0..25b2db337174 100644 > --- a/drivers/gpu/drm/i915/display/intel_display_types.h > +++ b/drivers/gpu/drm/i915/display/intel_display_types.h > @@ -1417,6 +1417,7 @@ struct intel_lspcon { > bool active; > enum drm_lspcon_mode mode; > enum lspcon_vendor vendor; > + bool hdr_supported; Can be packed next to the other bool. > }; > > struct intel_digital_port { > diff --git a/drivers/gpu/drm/i915/display/intel_lspcon.c b/drivers/gpu/drm/i915/display/intel_lspcon.c > index e37d45e531df..076b21885a30 100644 > --- a/drivers/gpu/drm/i915/display/intel_lspcon.c > +++ b/drivers/gpu/drm/i915/display/intel_lspcon.c > @@ -35,6 +35,8 @@ > #define LSPCON_VENDOR_PARADE_OUI 0x001CF8 > #define LSPCON_VENDOR_MCA_OUI 0x0060AD > > +#define DPCD_MCA_LSPCON_HDR_STATUS 0x70003 > + > /* AUX addresses to write MCA AVI IF */ > #define LSPCON_MCA_AVI_IF_WRITE_OFFSET 0x5C0 > #define LSPCON_MCA_AVI_IF_CTRL 0x5DF > @@ -104,6 +106,32 @@ static bool lspcon_detect_vendor(struct intel_lspcon *lspcon) > return true; > } > > +void lspcon_detect_hdr_capability(struct intel_lspcon *lspcon) > +{ > + struct intel_digital_port *dig_port = > + container_of(lspcon, struct intel_digital_port, lspcon); > + struct drm_device *dev = dig_port->base.base.dev; > + struct intel_dp *dp = lspcon_to_intel_dp(lspcon); > + u8 hdr_caps; > + int ret; > + > + /* Enable HDR for MCA based LSPCON devices */ > + if (lspcon->vendor == LSPCON_VENDOR_MCA) > + ret = drm_dp_dpcd_read(&dp->aux, DPCD_MCA_LSPCON_HDR_STATUS, > + &hdr_caps, 1); > + else > + return; > + > + if (ret < 0) { > + drm_dbg_kms(dev, "hdr capability detection failed\n"); "hdr" vs. "HDR" elsewhere. > + lspcon->hdr_supported = false; > + return; Pointless return? > + } else if (hdr_caps & 0x1) { > + drm_dbg_kms(dev, "lspcon capable of HDR\n"); "lspcon" vs. "LSPCON" No idea about the magic dpcd reg, but otherwise seems sane enough. Reviewed-by: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx> > + lspcon->hdr_supported = true; > + } > +} > + > static enum drm_lspcon_mode lspcon_get_current_mode(struct intel_lspcon *lspcon) > { > enum drm_lspcon_mode current_mode; > diff --git a/drivers/gpu/drm/i915/display/intel_lspcon.h b/drivers/gpu/drm/i915/display/intel_lspcon.h > index b03dcb7076d8..a19b3564c635 100644 > --- a/drivers/gpu/drm/i915/display/intel_lspcon.h > +++ b/drivers/gpu/drm/i915/display/intel_lspcon.h > @@ -15,6 +15,7 @@ struct intel_digital_port; > struct intel_encoder; > struct intel_lspcon; > > +void lspcon_detect_hdr_capability(struct intel_lspcon *lspcon); > void lspcon_resume(struct intel_digital_port *dig_port); > void lspcon_wait_pcon_mode(struct intel_lspcon *lspcon); > void lspcon_write_infoframe(struct intel_encoder *encoder, > -- > 2.26.2 -- Ville Syrjälä Intel _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx