aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDave Airlie <airlied@redhat.com>2015-01-26 18:37:03 -0500
committerThierry Reding <treding@nvidia.com>2015-01-28 04:01:29 -0500
commit384764c3611645d96889742a079168c86a6fc4c4 (patch)
tree2944a1c348faf776e5305fba40cf9a9de3dac533
parentb33ef61970873d479f4273f36d7a516cd94167e1 (diff)
drm/sti: fixup for bridge interface
So sti doesn't build because the bridge interfaces changes didn't catch up to its new DVO driver. Now I might just carry this patch, but I might just push the bridge pull into a side-pull until someone resolves it. So this might not be the right solution to the problem, so please figure it out and let me know ASAP. Signed-off-by: Dave Airlie <airlied@redhat.com> Signed-off-by: Thierry Reding <treding@nvidia.com>
-rw-r--r--drivers/gpu/drm/sti/sti_dvo.c29
1 files changed, 19 insertions, 10 deletions
diff --git a/drivers/gpu/drm/sti/sti_dvo.c b/drivers/gpu/drm/sti/sti_dvo.c
index 651afad21f92..aeb5070c8363 100644
--- a/drivers/gpu/drm/sti/sti_dvo.c
+++ b/drivers/gpu/drm/sti/sti_dvo.c
@@ -91,6 +91,7 @@ struct sti_dvo {
91 struct dvo_config *config; 91 struct dvo_config *config;
92 bool enabled; 92 bool enabled;
93 struct drm_encoder *encoder; 93 struct drm_encoder *encoder;
94 struct drm_bridge *bridge;
94}; 95};
95 96
96struct sti_dvo_connector { 97struct sti_dvo_connector {
@@ -272,19 +273,12 @@ static void sti_dvo_bridge_nope(struct drm_bridge *bridge)
272 /* do nothing */ 273 /* do nothing */
273} 274}
274 275
275static void sti_dvo_brigde_destroy(struct drm_bridge *bridge)
276{
277 drm_bridge_cleanup(bridge);
278 kfree(bridge);
279}
280
281static const struct drm_bridge_funcs sti_dvo_bridge_funcs = { 276static const struct drm_bridge_funcs sti_dvo_bridge_funcs = {
282 .pre_enable = sti_dvo_pre_enable, 277 .pre_enable = sti_dvo_pre_enable,
283 .enable = sti_dvo_bridge_nope, 278 .enable = sti_dvo_bridge_nope,
284 .disable = sti_dvo_disable, 279 .disable = sti_dvo_disable,
285 .post_disable = sti_dvo_bridge_nope, 280 .post_disable = sti_dvo_bridge_nope,
286 .mode_set = sti_dvo_set_mode, 281 .mode_set = sti_dvo_set_mode,
287 .destroy = sti_dvo_brigde_destroy,
288}; 282};
289 283
290static int sti_dvo_connector_get_modes(struct drm_connector *connector) 284static int sti_dvo_connector_get_modes(struct drm_connector *connector)
@@ -416,8 +410,21 @@ static int sti_dvo_bind(struct device *dev, struct device *master, void *data)
416 return -ENOMEM; 410 return -ENOMEM;
417 411
418 bridge->driver_private = dvo; 412 bridge->driver_private = dvo;
419 drm_bridge_init(drm_dev, bridge, &sti_dvo_bridge_funcs); 413 bridge->funcs = &sti_dvo_bridge_funcs;
414 bridge->of_node = dvo->dev.of_node;
415 err = drm_bridge_add(bridge);
416 if (err) {
417 DRM_ERROR("Failed to add bridge\n");
418 return err;
419 }
420 420
421 err = drm_bridge_attach(drm_dev, bridge);
422 if (err) {
423 DRM_ERROR("Failed to attach bridge\n");
424 return err;
425 }
426
427 dvo->bridge = bridge;
421 encoder->bridge = bridge; 428 encoder->bridge = bridge;
422 connector->encoder = encoder; 429 connector->encoder = encoder;
423 dvo->encoder = encoder; 430 dvo->encoder = encoder;
@@ -446,7 +453,7 @@ static int sti_dvo_bind(struct device *dev, struct device *master, void *data)
446err_sysfs: 453err_sysfs:
447 drm_connector_unregister(drm_connector); 454 drm_connector_unregister(drm_connector);
448err_connector: 455err_connector:
449 drm_bridge_cleanup(bridge); 456 drm_bridge_remove(bridge);
450 drm_connector_cleanup(drm_connector); 457 drm_connector_cleanup(drm_connector);
451 return -EINVAL; 458 return -EINVAL;
452} 459}
@@ -454,7 +461,9 @@ err_connector:
454static void sti_dvo_unbind(struct device *dev, 461static void sti_dvo_unbind(struct device *dev,
455 struct device *master, void *data) 462 struct device *master, void *data)
456{ 463{
457 /* do nothing */ 464 struct sti_dvo *dvo = dev_get_drvdata(dev);
465
466 drm_bridge_remove(dvo->bridge);
458} 467}
459 468
460static const struct component_ops sti_dvo_ops = { 469static const struct component_ops sti_dvo_ops = {