From: Dave Airlie
<airlied@xxxxxxxxxx>This is
required to get fbcon probing to work on new connectors,
callers
should acquire the mode config lock before calling these.
Signed-off-by:
Dave Airlie
<airlied@xxxxxxxxxx>---
drivers/gpu/drm/drm_fb_helper.c | 53
+++++++++++++++++++++++++++++++++++++++++
include/drm/drm_fb_helper.h | 4 ++++
2 files changed, 57
insertions(+)
diff --git a/drivers/gpu/drm/drm_fb_helper.c
b/drivers/gpu/drm/drm_fb_helper.c
index 04d3fd3..a184204 100644
---
a/drivers/gpu/drm/drm_fb_helper.c
+++
b/drivers/gpu/drm/drm_fb_helper.c
@@ -105,6 +105,58 @@ fail:
}
EXPORT_SYMBOL(drm_fb_helper_single_add_all_connectors);
+int
drm_fb_helper_add_one_connector(struct drm_fb_helper *fb_helper, struct
drm_connector *connector)
+{
+ struct drm_fb_helper_connector
**temp;
+ struct drm_fb_helper_connector *fb_helper_connector;
+
+
WARN_ON(!mutex_is_locked(&fb_helper->dev->mode_config.mutex));
+
if (fb_helper->connector_count + 1 >
fb_helper->connector_info_alloc_count) {
+ temp =
krealloc(fb_helper->connector_info, sizeof(struct
drm_fb_helper_connector) * (fb_helper->connector_count + 1),
GFP_KERNEL);
+ if (!temp)
+ return -ENOMEM;
+
+
fb_helper->connector_info_alloc_count = fb_helper->connector_count
+ 1;
+ fb_helper->connector_info = temp;
+ }
+
+
+
fb_helper_connector = kzalloc(sizeof(struct drm_fb_helper_connector),
GFP_KERNEL);
+ if (!fb_helper_connector)
+ return -ENOMEM;
+
+
fb_helper_connector->connector = connector;
+
fb_helper->connector_info[fb_helper->connector_count++] =
fb_helper_connector;
+ return 0;
+}
+EXPORT_SYMBOL(drm_fb_helper_add_one_connector);
+
+int
drm_fb_helper_remove_one_connector(struct drm_fb_helper *fb_helper,
+
struct drm_connector *connector)
+{
+ struct
drm_fb_helper_connector *fb_helper_connector;
+ int i, j;
+
+
WARN_ON(!mutex_is_locked(&fb_helper->dev->mode_config.mutex));
+
+
for (i = 0; i < fb_helper->connector_count; i++) {
+ if
(fb_helper->connector_info[i]->connector == connector)
+
break;
+ }
+
+ if (i == fb_helper->connector_count)
+
return -EINVAL;
+ fb_helper_connector =
fb_helper->connector_info[i];
+
+ for (j = i + 1; j <
fb_helper->connector_count; j++) {
+
fb_helper->connector_info[j - 1] = fb_helper->connector_info[j];
+
}