diff options
Diffstat (limited to 'drivers/gpu/drm/drm_connector.c')
| -rw-r--r-- | drivers/gpu/drm/drm_connector.c | 83 | 
1 files changed, 65 insertions, 18 deletions
diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c index 32946eff5488..66b2fd20369a 100644 --- a/drivers/gpu/drm/drm_connector.c +++ b/drivers/gpu/drm/drm_connector.c @@ -1138,6 +1138,70 @@ void drm_hdmi_avi_infoframe_content_type(struct hdmi_avi_infoframe *frame,  EXPORT_SYMBOL(drm_hdmi_avi_infoframe_content_type);  /** + * drm_mode_attach_tv_margin_properties - attach TV connector margin properties + * @connector: DRM connector + * + * Called by a driver when it needs to attach TV margin props to a connector. + * Typically used on SDTV and HDMI connectors. + */ +void drm_connector_attach_tv_margin_properties(struct drm_connector *connector) +{ +	struct drm_device *dev = connector->dev; + +	drm_object_attach_property(&connector->base, +				   dev->mode_config.tv_left_margin_property, +				   0); +	drm_object_attach_property(&connector->base, +				   dev->mode_config.tv_right_margin_property, +				   0); +	drm_object_attach_property(&connector->base, +				   dev->mode_config.tv_top_margin_property, +				   0); +	drm_object_attach_property(&connector->base, +				   dev->mode_config.tv_bottom_margin_property, +				   0); +} +EXPORT_SYMBOL(drm_connector_attach_tv_margin_properties); + +/** + * drm_mode_create_tv_margin_properties - create TV connector margin properties + * @dev: DRM device + * + * Called by a driver's HDMI connector initialization routine, this function + * creates the TV margin properties for a given device. No need to call this + * function for an SDTV connector, it's already called from + * drm_mode_create_tv_properties(). + */ +int drm_mode_create_tv_margin_properties(struct drm_device *dev) +{ +	if (dev->mode_config.tv_left_margin_property) +		return 0; + +	dev->mode_config.tv_left_margin_property = +		drm_property_create_range(dev, 0, "left margin", 0, 100); +	if (!dev->mode_config.tv_left_margin_property) +		return -ENOMEM; + +	dev->mode_config.tv_right_margin_property = +		drm_property_create_range(dev, 0, "right margin", 0, 100); +	if (!dev->mode_config.tv_right_margin_property) +		return -ENOMEM; + +	dev->mode_config.tv_top_margin_property = +		drm_property_create_range(dev, 0, "top margin", 0, 100); +	if (!dev->mode_config.tv_top_margin_property) +		return -ENOMEM; + +	dev->mode_config.tv_bottom_margin_property = +		drm_property_create_range(dev, 0, "bottom margin", 0, 100); +	if (!dev->mode_config.tv_bottom_margin_property) +		return -ENOMEM; + +	return 0; +} +EXPORT_SYMBOL(drm_mode_create_tv_margin_properties); + +/**   * drm_mode_create_tv_properties - create TV specific connector properties   * @dev: DRM device   * @num_modes: number of different TV formats (modes) supported @@ -1183,24 +1247,7 @@ int drm_mode_create_tv_properties(struct drm_device *dev,  	/*  	 * Other, TV specific properties: margins & TV modes.  	 */ -	dev->mode_config.tv_left_margin_property = -		drm_property_create_range(dev, 0, "left margin", 0, 100); -	if (!dev->mode_config.tv_left_margin_property) -		goto nomem; - -	dev->mode_config.tv_right_margin_property = -		drm_property_create_range(dev, 0, "right margin", 0, 100); -	if (!dev->mode_config.tv_right_margin_property) -		goto nomem; - -	dev->mode_config.tv_top_margin_property = -		drm_property_create_range(dev, 0, "top margin", 0, 100); -	if (!dev->mode_config.tv_top_margin_property) -		goto nomem; - -	dev->mode_config.tv_bottom_margin_property = -		drm_property_create_range(dev, 0, "bottom margin", 0, 100); -	if (!dev->mode_config.tv_bottom_margin_property) +	if (drm_mode_create_tv_margin_properties(dev))  		goto nomem;  	dev->mode_config.tv_mode_property =  | 
