mirror of https://github.com/hak5/openwrt.git
137 lines
5.1 KiB
Diff
137 lines
5.1 KiB
Diff
From 4f2277b18d6bbb6fac50b751c4e513619849b23c Mon Sep 17 00:00:00 2001
|
|
From: Boris Brezillon <boris.brezillon@bootlin.com>
|
|
Date: Thu, 6 Dec 2018 15:24:37 +0100
|
|
Subject: [PATCH] drm/connector: Allow creation of margin props alone
|
|
|
|
Commit 6c4f52dca36f5e3e2354c30591d38e92f4657ed9 upstream.
|
|
|
|
TV margins properties can only be added as part of the SDTV TV
|
|
connector properties creation, but we might need those props for HDMI
|
|
TVs too, so let's move the margins props creation in a separate
|
|
function and expose it to drivers.
|
|
|
|
We also add an helper to attach margins props to a connector.
|
|
|
|
Signed-off-by: Boris Brezillon <boris.brezillon@bootlin.com>
|
|
Reviewed-by: Eric Anholt <eric@anholt.net>
|
|
Acked-by: Daniel Vetter <daniel.vetter@ffwll.ch>
|
|
Link: https://patchwork.freedesktop.org/patch/msgid/20181206142439.10441-4-boris.brezillon@bootlin.com
|
|
---
|
|
drivers/gpu/drm/drm_connector.c | 83 ++++++++++++++++++++++++++-------
|
|
include/drm/drm_connector.h | 2 +
|
|
2 files changed, 67 insertions(+), 18 deletions(-)
|
|
|
|
--- a/drivers/gpu/drm/drm_connector.c
|
|
+++ b/drivers/gpu/drm/drm_connector.c
|
|
@@ -1110,6 +1110,70 @@ void drm_hdmi_avi_infoframe_content_type
|
|
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
|
|
@@ -1155,24 +1219,7 @@ int drm_mode_create_tv_properties(struct
|
|
/*
|
|
* 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 =
|
|
--- a/include/drm/drm_connector.h
|
|
+++ b/include/drm/drm_connector.h
|
|
@@ -1175,9 +1175,11 @@ const char *drm_get_tv_select_name(int v
|
|
const char *drm_get_content_protection_name(int val);
|
|
|
|
int drm_mode_create_dvi_i_properties(struct drm_device *dev);
|
|
+int drm_mode_create_tv_margin_properties(struct drm_device *dev);
|
|
int drm_mode_create_tv_properties(struct drm_device *dev,
|
|
unsigned int num_modes,
|
|
const char * const modes[]);
|
|
+void drm_connector_attach_tv_margin_properties(struct drm_connector *conn);
|
|
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,
|