diff options
author | Dave Airlie <airlied@redhat.com> | 2015-01-26 18:37:03 -0500 |
---|---|---|
committer | Thierry Reding <treding@nvidia.com> | 2015-01-28 04:01:29 -0500 |
commit | 384764c3611645d96889742a079168c86a6fc4c4 (patch) | |
tree | 2944a1c348faf776e5305fba40cf9a9de3dac533 | |
parent | b33ef61970873d479f4273f36d7a516cd94167e1 (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.c | 29 |
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 | ||
96 | struct sti_dvo_connector { | 97 | struct 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 | ||
275 | static void sti_dvo_brigde_destroy(struct drm_bridge *bridge) | ||
276 | { | ||
277 | drm_bridge_cleanup(bridge); | ||
278 | kfree(bridge); | ||
279 | } | ||
280 | |||
281 | static const struct drm_bridge_funcs sti_dvo_bridge_funcs = { | 276 | static 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 | ||
290 | static int sti_dvo_connector_get_modes(struct drm_connector *connector) | 284 | static 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) | |||
446 | err_sysfs: | 453 | err_sysfs: |
447 | drm_connector_unregister(drm_connector); | 454 | drm_connector_unregister(drm_connector); |
448 | err_connector: | 455 | err_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: | |||
454 | static void sti_dvo_unbind(struct device *dev, | 461 | static 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 | ||
460 | static const struct component_ops sti_dvo_ops = { | 469 | static const struct component_ops sti_dvo_ops = { |