> This table is seriously deprecated, because it's unreadable and > unmaintainable. Quoting from the docs:
> "Because this table is very unwieldy, do not add any new properties here. > Instead document them in a section above." > We haven't yet moved all the existing properties over to the new layout > (patches very much welcome, especially if you spot that an entire area > you're touching like HDMI properties isn't moved yet). But the old table > is very much not cool to add stuff to. > Sorry that I didn't notice this earlier, missed it in the diffstat. >> as optional. >> I think it might be a bit misleading, if I add that one to standard >> connector properties, >> there are probably should be created some HDMI specific property chapter >> then, as there >> are already plenty of HDMI specific ones(force audio, broadcast rgb, aspect >> ratio). >> >> Shouldn't it then go in a separate patch may be? Because this work is surely >> needed, however >> goes a bit out of scope of this patch. > Don't make it worse by adding more unmaintainable and unreadable entries > to this table. That's the minimum. Moving all the standard hdmi properties > first would obviously be even better. That also makes reviewing easier, > since it's clearer what's there already, and how your new thing fits in. Ok, then I think I will add a new section called HDMI Specific Connector Properties under Standard Connector Properties and move content type description there. I can add another entries there too, however would prefer to do it in a separate patch as those are not subject of that commit. > > Best Regards, > > Lisovskiy Stanislav > > > --- > > Documentation/gpu/kms-properties.csv | 1 + > > drivers/gpu/drm/drm_atomic.c | 17 ++++++++++ > > drivers/gpu/drm/drm_connector.c | 51 ++++++++++++++++++++++++++++ > > drivers/gpu/drm/drm_edid.c | 2 ++ > > include/drm/drm_connector.h | 18 ++++++++++ > > include/drm/drm_mode_config.h | 5 +++ > > include/uapi/drm/drm_mode.h | 7 ++++ > > 7 files changed, 101 insertions(+) > > > > diff --git a/Documentation/gpu/kms-properties.csv > > b/Documentation/gpu/kms-properties.csv > > index 6b28b014cb7d..a91c9211b8d6 100644 > > --- a/Documentation/gpu/kms-properties.csv > > +++ b/Documentation/gpu/kms-properties.csv > > @@ -17,6 +17,7 @@ Owner Module/Drivers,Group,Property Name,Type,Property > > Values,Object attached,De > > ,Virtual GPU,“suggested X”,RANGE,"Min=0, > > Max=0xffffffff",Connector,property to suggest an X offset for a connector > > ,,“suggested Y”,RANGE,"Min=0, Max=0xffffffff",Connector,property to > > suggest an Y offset for a connector > > ,Optional,"""aspect ratio""",ENUM,"{ ""None"", ""4:3"", ""16:9"" > > }",Connector,TDB > > +,Optional,"""content type""",ENUM,"{ ""No data"", ""Graphics"", ""Photo"", > > ""Cinema"", ""Game"" }",Connector,TBD > > i915,Generic,"""Broadcast RGB""",ENUM,"{ ""Automatic"", ""Full"", > > ""Limited 16:235"" }",Connector,"When this property is set to Limited > > 16:235 and CTM is set, the hardware will be programmed with the result of > > the multiplication of CTM by the limited range matrix to ensure the pixels > > normaly in the range 0..1.0 are remapped to the range 16/255..235/255." > > ,,“audio”,ENUM,"{ ""force-dvi"", ""off"", ""auto"", ""on"" }",Connector,TBD > > ,SDVO-TV,“mode”,ENUM,"{ ""NTSC_M"", ""NTSC_J"", ""NTSC_443"", ""PAL_B"" } > > etc.",Connector,TBD > > diff --git a/drivers/gpu/drm/drm_atomic.c b/drivers/gpu/drm/drm_atomic.c > > index 7d25c42f22db..479499f5848e 100644 > > --- a/drivers/gpu/drm/drm_atomic.c > > +++ b/drivers/gpu/drm/drm_atomic.c > > @@ -1266,6 +1266,15 @@ static int drm_atomic_connector_set_property(struct > > drm_connector *connector, > > state->link_status = val; > > } else if (property == config->aspect_ratio_property) { > > state->picture_aspect_ratio = val; > > + } else if (property == config->content_type_property) { > > + /* > > + * Lowest two bits of content_type property control > > + * content_type, bit 2 controls itc bit. > > + * It was decided to have a single property called > > + * content_type, instead of content_type and itc. > > + */ > > + state->content_type = val & 3; > > + state->it_content = val >> 2; > > } else if (property == connector->scaling_mode_property) { > > state->scaling_mode = val; > > } else if (property == connector->content_protection_property) { > > @@ -1351,6 +1360,14 @@ drm_atomic_connector_get_property(struct > > drm_connector *connector, > > *val = state->link_status; > > } else if (property == config->aspect_ratio_property) { > > *val = state->picture_aspect_ratio; > > + } else if (property == config->content_type_property) { > > + /* > > + * Lowest two bits of content_type property control > > + * content_type, bit 2 controls itc bit. > > + * It was decided to have a single property called > > + * content_type, instead of content_type and itc. > > + */ > > + *val = state->content_type | (state->it_content << 2); > > } else if (property == connector->scaling_mode_property) { > > *val = state->scaling_mode; > > } else if (property == connector->content_protection_property) { > > diff --git a/drivers/gpu/drm/drm_connector.c > > b/drivers/gpu/drm/drm_connector.c > > index b3cde897cd80..757a0712f7c1 100644 > > --- a/drivers/gpu/drm/drm_connector.c > > +++ b/drivers/gpu/drm/drm_connector.c > > @@ -720,6 +720,14 @@ static const struct drm_prop_enum_list > > drm_aspect_ratio_enum_list[] = { > > { DRM_MODE_PICTURE_ASPECT_16_9, "16:9" }, > > }; > > > > +static const struct drm_prop_enum_list drm_content_type_enum_list[] = { > > + { DRM_MODE_CONTENT_TYPE_NO_DATA, "No data" }, > > + { DRM_MODE_CONTENT_TYPE_GRAPHICS, "Graphics" }, > > + { DRM_MODE_CONTENT_TYPE_PHOTO, "Photo" }, > > + { DRM_MODE_CONTENT_TYPE_CINEMA, "Cinema" }, > > + { DRM_MODE_CONTENT_TYPE_GAME, "Game" }, > > +}; > > + > > static const struct drm_prop_enum_list drm_panel_orientation_enum_list[] = > > { > > { DRM_MODE_PANEL_ORIENTATION_NORMAL, "Normal" }, > > { DRM_MODE_PANEL_ORIENTATION_BOTTOM_UP, "Upside Down" }, > > @@ -996,6 +1004,22 @@ int drm_mode_create_dvi_i_properties(struct > > drm_device *dev) > > } > > EXPORT_SYMBOL(drm_mode_create_dvi_i_properties); > > > > +/** > > + * drm_connector_attach_content_type_property - attach content-type > > property > > + * @dev: DRM device > > + * > > + * Called by a driver the first time a HDMI connector is made. > > + */ > > +int drm_connector_attach_content_type_property(struct drm_connector > > *connector) > > +{ > > + if (!drm_mode_create_content_type_property(connector->dev)) > > + drm_object_attach_property(&connector->base, > > + connector->dev->mode_config.content_type_property, > > + DRM_MODE_CONTENT_TYPE_NO_DATA); > > + return 0; > > +} > > +EXPORT_SYMBOL(drm_connector_attach_content_type_property); > > + > > /** > > * drm_create_tv_properties - create TV specific connector properties > > * @dev: DRM device > > @@ -1260,6 +1284,33 @@ int drm_mode_create_aspect_ratio_property(struct > > drm_device *dev) > > } > > EXPORT_SYMBOL(drm_mode_create_aspect_ratio_property); > > > > +/** > > + * drm_mode_create_content_type_property - create content type property > > + * @dev: DRM device > > + * > > + * Called by a driver the first time it's needed, must be attached to > > desired > > + * connectors. > > + * > > + * Returns: > > + * Zero on success, negative errno on failure. > > + */ > > +int drm_mode_create_content_type_property(struct drm_device *dev) > > +{ > > + if (dev->mode_config.content_type_property) > > + return 0; > > + > > + dev->mode_config.content_type_property = > > + drm_property_create_enum(dev, 0, "content type", > > + drm_content_type_enum_list, > > + ARRAY_SIZE(drm_content_type_enum_list)); > > + > > + if (dev->mode_config.content_type_property == NULL) > > + return -ENOMEM; > > + > > + return 0; > > +} > > +EXPORT_SYMBOL(drm_mode_create_content_type_property); > > + > > /** > > * drm_mode_create_suggested_offset_properties - create suggests offset > > properties > > * @dev: DRM device > > diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c > > index 134069f36482..b1b7f9683e34 100644 > > --- a/drivers/gpu/drm/drm_edid.c > > +++ b/drivers/gpu/drm/drm_edid.c > > @@ -4867,6 +4867,8 @@ drm_hdmi_avi_infoframe_from_display_mode(struct > > hdmi_avi_infoframe *frame, > > } > > > > frame->picture_aspect = HDMI_PICTURE_ASPECT_NONE; > > + frame->content_type = HDMI_CONTENT_TYPE_GRAPHICS; > > + frame->itc = 0; > > > > /* > > * Populate picture aspect ratio from either > > diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h > > index 675cc3f8cf85..1fedab750f09 100644 > > --- a/include/drm/drm_connector.h > > +++ b/include/drm/drm_connector.h > > @@ -418,6 +418,22 @@ struct drm_connector_state { > > */ > > enum hdmi_picture_aspect picture_aspect_ratio; > > > > + /** > > + * @content_type: Connector property to control the > > + * HDMI infoframe content type setting. > > + * The %DRM_MODE_CONTENT_TYPE_\* values lowest 2 bits much > > + * match the values for &enum hdmi_content_type > > + */ > > + enum hdmi_content_type content_type; > > + > > + /** > > + * @it_content: Connector property to control the > > + * HDMI infoframe it content setting(used with content type). > > + * The %DRM_MODE_CONTENT_TYPE_\* values bit 2 > > + * match the values of it_content > > + */ > > + bool it_content; > > + > > /** > > * @scaling_mode: Connector property to control the > > * upscaling, mostly used for built-in panels. > > @@ -1089,11 +1105,13 @@ int drm_mode_create_tv_properties(struct drm_device > > *dev, > > unsigned int num_modes, > > const char * const modes[]); > > int drm_mode_create_scaling_mode_property(struct drm_device *dev); > > +int drm_connector_attach_content_type_property(struct drm_connector *dev); > > int drm_connector_attach_scaling_mode_property(struct drm_connector > > *connector, > > u32 scaling_mode_mask); > > int drm_connector_attach_content_protection_property( > > struct drm_connector *connector); > > int drm_mode_create_aspect_ratio_property(struct drm_device *dev); > > +int drm_mode_create_content_type_property(struct drm_device *dev); > > int drm_mode_create_suggested_offset_properties(struct drm_device *dev); > > > > int drm_mode_connector_set_path_property(struct drm_connector *connector, > > diff --git a/include/drm/drm_mode_config.h b/include/drm/drm_mode_config.h > > index 33b3a96d66d0..fb45839179dd 100644 > > --- a/include/drm/drm_mode_config.h > > +++ b/include/drm/drm_mode_config.h > > @@ -726,6 +726,11 @@ struct drm_mode_config { > > * HDMI infoframe aspect ratio setting. > > */ > > struct drm_property *aspect_ratio_property; > > + /** > > + * @content_type_property: Optional connector property to control the > > + * HDMI infoframe content type setting. > > + */ > > + struct drm_property *content_type_property; > > /** > > * @degamma_lut_property: Optional CRTC property to set the LUT used > > to > > * convert the framebuffer's colors to linear gamma. > > diff --git a/include/uapi/drm/drm_mode.h b/include/uapi/drm/drm_mode.h > > index 50bcf4214ff9..3c234bfa80b9 100644 > > --- a/include/uapi/drm/drm_mode.h > > +++ b/include/uapi/drm/drm_mode.h > > @@ -94,6 +94,13 @@ extern "C" { > > #define DRM_MODE_PICTURE_ASPECT_4_3 1 > > #define DRM_MODE_PICTURE_ASPECT_16_9 2 > > > > +/* HDMI content type and itc bit bound together for simplicity */ > > +#define DRM_MODE_CONTENT_TYPE_NO_DATA 0 > > +#define DRM_MODE_CONTENT_TYPE_GRAPHICS 4 > > +#define DRM_MODE_CONTENT_TYPE_PHOTO 5 > > +#define DRM_MODE_CONTENT_TYPE_CINEMA 6 > > +#define DRM_MODE_CONTENT_TYPE_GAME 7 > > + > > /* Aspect ratio flag bitmask (4 bits 22:19) */ > > #define DRM_MODE_FLAG_PIC_AR_MASK (0x0F<<19) > > #define DRM_MODE_FLAG_PIC_AR_NONE \ > > -- > > 2.17.0 > > > > _______________________________________________ > > Intel-gfx mailing list > > intel-...@lists.freedesktop.org > > https://lists.freedesktop.org/mailman/listinfo/intel-gfx > > -- > Daniel Vetter > Software Engineer, Intel Corporation > http://blog.ffwll.ch -- Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch _______________________________________________ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel