aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu')
-rw-r--r--drivers/gpu/drm/omapdrm/dss/base.c1
-rw-r--r--drivers/gpu/drm/omapdrm/dss/output.c29
2 files changed, 3 insertions, 27 deletions
diff --git a/drivers/gpu/drm/omapdrm/dss/base.c b/drivers/gpu/drm/omapdrm/dss/base.c
index c3e451440d4b..02c6ed97d632 100644
--- a/drivers/gpu/drm/omapdrm/dss/base.c
+++ b/drivers/gpu/drm/omapdrm/dss/base.c
@@ -208,6 +208,7 @@ int omapdss_device_connect(struct dss_device *dss,
208 } 208 }
209 209
210 if (src) { 210 if (src) {
211 WARN_ON(src->dst);
211 dst->src = src; 212 dst->src = src;
212 src->dst = dst; 213 src->dst = dst;
213 } 214 }
diff --git a/drivers/gpu/drm/omapdrm/dss/output.c b/drivers/gpu/drm/omapdrm/dss/output.c
index 2f7a019d059e..96d74218cf91 100644
--- a/drivers/gpu/drm/omapdrm/dss/output.c
+++ b/drivers/gpu/drm/omapdrm/dss/output.c
@@ -29,61 +29,36 @@ static DEFINE_MUTEX(output_lock);
29int omapdss_output_set_device(struct omap_dss_device *out, 29int omapdss_output_set_device(struct omap_dss_device *out,
30 struct omap_dss_device *dssdev) 30 struct omap_dss_device *dssdev)
31{ 31{
32 int r; 32 int r = 0;
33 33
34 mutex_lock(&output_lock); 34 mutex_lock(&output_lock);
35 35
36 if (out->dst) {
37 dev_err(out->dev,
38 "output already has device %s connected to it\n",
39 out->dst->name);
40 r = -EINVAL;
41 goto err;
42 }
43
44 if (out->output_type != dssdev->type) { 36 if (out->output_type != dssdev->type) {
45 dev_err(out->dev, "output type and display type don't match\n"); 37 dev_err(out->dev, "output type and display type don't match\n");
46 r = -EINVAL; 38 r = -EINVAL;
47 goto err;
48 } 39 }
49 40
50 mutex_unlock(&output_lock); 41 mutex_unlock(&output_lock);
51 42
52 return 0;
53err:
54 mutex_unlock(&output_lock);
55
56 return r; 43 return r;
57} 44}
58EXPORT_SYMBOL(omapdss_output_set_device); 45EXPORT_SYMBOL(omapdss_output_set_device);
59 46
60int omapdss_output_unset_device(struct omap_dss_device *out) 47int omapdss_output_unset_device(struct omap_dss_device *out)
61{ 48{
62 int r; 49 int r = 0;
63 50
64 mutex_lock(&output_lock); 51 mutex_lock(&output_lock);
65 52
66 if (!out->dst) {
67 dev_err(out->dev,
68 "output doesn't have a device connected to it\n");
69 r = -EINVAL;
70 goto err;
71 }
72
73 if (out->dst->state != OMAP_DSS_DISPLAY_DISABLED) { 53 if (out->dst->state != OMAP_DSS_DISPLAY_DISABLED) {
74 dev_err(out->dev, 54 dev_err(out->dev,
75 "device %s is not disabled, cannot unset device\n", 55 "device %s is not disabled, cannot unset device\n",
76 out->dst->name); 56 out->dst->name);
77 r = -EINVAL; 57 r = -EINVAL;
78 goto err;
79 } 58 }
80 59
81 mutex_unlock(&output_lock); 60 mutex_unlock(&output_lock);
82 61
83 return 0;
84err:
85 mutex_unlock(&output_lock);
86
87 return r; 62 return r;
88} 63}
89EXPORT_SYMBOL(omapdss_output_unset_device); 64EXPORT_SYMBOL(omapdss_output_unset_device);