[PATCH v3 1/4] drm: Add vrr_capable property to the drm connector

Kazlauskas, Nicholas nicholas.kazlauskas at amd.com
Tue Oct 9 12:28:00 UTC 2018


On 10/05/2018 06:10 PM, Manasi Navare wrote:
> On Fri, Oct 05, 2018 at 04:39:46PM -0400, Nicholas Kazlauskas wrote:
>> Modern display hardware is capable of supporting variable refresh rates.
>> This patch introduces the "vrr_capable" property on the connector to
>> allow userspace to query support for variable refresh rates.
>>
>> Atomic drivers should attach this property to connectors that are
>> capable of driving variable refresh rates using
>> drm_connector_attach_vrr_capable_property().
>>
>> The value should be updated based on driver and hardware capabiltiy
>> by using drm_connector_set_vrr_capable_property().
>>
>> Signed-off-by: Nicholas Kazlauskas <nicholas.kazlauskas at amd.com>
>> ---
>>   drivers/gpu/drm/drm_connector.c | 51 +++++++++++++++++++++++++++++++++
>>   include/drm/drm_connector.h     | 15 ++++++++++
>>   2 files changed, 66 insertions(+)
>>
>> diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c
>> index 1e40e5decbe9..3283703b9822 100644
>> --- a/drivers/gpu/drm/drm_connector.c
>> +++ b/drivers/gpu/drm/drm_connector.c
>> @@ -1254,6 +1254,39 @@ int drm_mode_create_scaling_mode_property(struct drm_device *dev)
>>   }
>>   EXPORT_SYMBOL(drm_mode_create_scaling_mode_property);
>>   
>> +/**
>> + * drm_connector_attach_vrr_capable_property - creates the
>> + * vrr_capable property
>> + * @connector: connector to create the vrr_capable property on.
>> + *
>> + * This is used by atomic drivers to add support for querying
>> + * variable refresh rate capability for a connector.
>> + *
>> + * The value from &drm_connector_state.vrr_capable will reads
>> + *
> 
> The sentence above looks incomplete.
> 
> Other than that this patch looks good to me. So with the kernel doc fixes:
> 
> Reviewed-by: Manasi Navare <manasi.d.navare at intel.com>
> 
> Manasi

Thanks, looks like this line should have just been removed as part of 
the immutable prop refactoring for vrr_capable.

> 
>> + * Returns:
>> + * Zero on success, negative errono on failure.
>> + */
>> +int drm_connector_attach_vrr_capable_property(
>> +	struct drm_connector *connector)
>> +{
>> +	struct drm_device *dev = connector->dev;
>> +	struct drm_property *prop;
>> +
>> +	if (!connector->vrr_capable_property) {
>> +		prop = drm_property_create_bool(dev, DRM_MODE_PROP_IMMUTABLE,
>> +			"vrr_capable");
>> +		if (!prop)
>> +			return -ENOMEM;
>> +
>> +		connector->vrr_capable_property = prop;
>> +		drm_object_attach_property(&connector->base, prop, 0);
>> +	}
>> +
>> +	return 0;
>> +}
>> +EXPORT_SYMBOL(drm_connector_attach_vrr_capable_property);
>> +
>>   /**
>>    * drm_connector_attach_scaling_mode_property - attach atomic scaling mode property
>>    * @connector: connector to attach scaling mode property on.
>> @@ -1582,6 +1615,24 @@ void drm_connector_set_link_status_property(struct drm_connector *connector,
>>   }
>>   EXPORT_SYMBOL(drm_connector_set_link_status_property);
>>   
>> +/**
>> + * drm_connector_set_vrr_capable_property - sets the variable refresh rate
>> + * capable property for a connector
>> + * @connector: drm connector
>> + * @capable: True if the connector is variable refresh rate capable
>> + *
>> + * Should be used by atomic drivers to update the indicated support for
>> + * variable refresh rate over a connector.
>> + */
>> +void drm_connector_set_vrr_capable_property(
>> +		struct drm_connector *connector, bool capable)
>> +{
>> +	return drm_object_property_set_value(&connector->base,
>> +					     connector->vrr_capable_property,
>> +					     capable);
>> +}
>> +EXPORT_SYMBOL(drm_connector_set_vrr_capable_property);
>> +
>>   /**
>>    * drm_connector_init_panel_orientation_property -
>>    *	initialize the connecters panel_orientation property
>> diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h
>> index 91a877fa00cb..b2263005234a 100644
>> --- a/include/drm/drm_connector.h
>> +++ b/include/drm/drm_connector.h
>> @@ -910,6 +910,17 @@ struct drm_connector {
>>   	 */
>>   	struct drm_property *scaling_mode_property;
>>   
>> +	/**
>> +	 * @vrr_capable_property: Optional property to help userspace
>> +	 * query hardware support for variable refresh rate on a connector.
>> +	 * connector. Drivers can add the property to a connector by
>> +	 * calling drm_connector_attach_vrr_capable_property().
>> +	 *
>> +	 * This should be updated only by calling
>> +	 * drm_connector_set_vrr_capable_property().
>> +	 */
>> +	struct drm_property *vrr_capable_property;
>> +
>>   	/**
>>   	 * @content_protection_property: DRM ENUM property for content
>>   	 * protection. See drm_connector_attach_content_protection_property().
>> @@ -1183,6 +1194,8 @@ 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_vrr_capable_property(
>> +		struct drm_connector *connector);
>>   int drm_connector_attach_content_protection_property(
>>   		struct drm_connector *connector);
>>   int drm_mode_create_aspect_ratio_property(struct drm_device *dev);
>> @@ -1199,6 +1212,8 @@ int drm_connector_update_edid_property(struct drm_connector *connector,
>>   				       const struct edid *edid);
>>   void drm_connector_set_link_status_property(struct drm_connector *connector,
>>   					    uint64_t link_status);
>> +void drm_connector_set_vrr_capable_property(
>> +		struct drm_connector *connector, bool capable);
>>   int drm_connector_init_panel_orientation_property(
>>   	struct drm_connector *connector, int width, int height);
>>   
>> -- 
>> 2.19.0
>>

Nicholas Kazlauskas


More information about the dri-devel mailing list