aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/omapdrm/displays
diff options
context:
space:
mode:
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>2018-02-28 10:30:30 -0500
committerTomi Valkeinen <tomi.valkeinen@ti.com>2018-09-03 09:13:26 -0400
commit7269fde4e8c96e67cd39f456cabf3329b06efffc (patch)
tree3dcfb29263b1e029fa586010bfad3df903c58e95 /drivers/gpu/drm/omapdrm/displays
parentfb5571717c24c264518aaaf1ab4ec4df73e4cebd (diff)
drm/omap: displays: Remove input omap_dss_device from panel data
All connectors, encoders and panels store a pointer to their input omap_dss_device in the panel driver data structure. This duplicates the src field in the omap_dss_device structure. Remove the private copy and use the src field. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Sebastian Reichel <sebastian.reichel@collabora.co.uk> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Diffstat (limited to 'drivers/gpu/drm/omapdrm/displays')
-rw-r--r--drivers/gpu/drm/omapdrm/displays/connector-analog-tv.c41
-rw-r--r--drivers/gpu/drm/omapdrm/displays/connector-dvi.c43
-rw-r--r--drivers/gpu/drm/omapdrm/displays/connector-hdmi.c88
-rw-r--r--drivers/gpu/drm/omapdrm/displays/encoder-opa362.c41
-rw-r--r--drivers/gpu/drm/omapdrm/displays/encoder-tfp410.c41
-rw-r--r--drivers/gpu/drm/omapdrm/displays/encoder-tpd12s015.c68
-rw-r--r--drivers/gpu/drm/omapdrm/displays/panel-dpi.c44
-rw-r--r--drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c190
-rw-r--r--drivers/gpu/drm/omapdrm/displays/panel-lgphilips-lb035q02.c41
-rw-r--r--drivers/gpu/drm/omapdrm/displays/panel-nec-nl8048hl11.c42
-rw-r--r--drivers/gpu/drm/omapdrm/displays/panel-sharp-ls037v7dw01.c42
-rw-r--r--drivers/gpu/drm/omapdrm/displays/panel-sony-acx565akm.c42
-rw-r--r--drivers/gpu/drm/omapdrm/displays/panel-tpo-td028ttec1.c42
-rw-r--r--drivers/gpu/drm/omapdrm/displays/panel-tpo-td043mtea1.c44
14 files changed, 362 insertions, 447 deletions
diff --git a/drivers/gpu/drm/omapdrm/displays/connector-analog-tv.c b/drivers/gpu/drm/omapdrm/displays/connector-analog-tv.c
index fb5c4dcafa2d..7d16c320749f 100644
--- a/drivers/gpu/drm/omapdrm/displays/connector-analog-tv.c
+++ b/drivers/gpu/drm/omapdrm/displays/connector-analog-tv.c
@@ -18,7 +18,6 @@
18 18
19struct panel_drv_data { 19struct panel_drv_data {
20 struct omap_dss_device dssdev; 20 struct omap_dss_device dssdev;
21 struct omap_dss_device *in;
22 21
23 struct device *dev; 22 struct device *dev;
24 23
@@ -45,40 +44,37 @@ static const struct videomode tvc_pal_vm = {
45static int tvc_connect(struct omap_dss_device *dssdev) 44static int tvc_connect(struct omap_dss_device *dssdev)
46{ 45{
47 struct panel_drv_data *ddata = to_panel_data(dssdev); 46 struct panel_drv_data *ddata = to_panel_data(dssdev);
48 struct omap_dss_device *in; 47 struct omap_dss_device *src;
49 int r; 48 int r;
50 49
51 in = omapdss_of_find_source_for_first_ep(ddata->dev->of_node); 50 src = omapdss_of_find_source_for_first_ep(ddata->dev->of_node);
52 if (IS_ERR(in)) { 51 if (IS_ERR(src)) {
53 dev_err(ddata->dev, "failed to find video source\n"); 52 dev_err(ddata->dev, "failed to find video source\n");
54 return PTR_ERR(in); 53 return PTR_ERR(src);
55 } 54 }
56 55
57 r = omapdss_device_connect(in, dssdev); 56 r = omapdss_device_connect(src, dssdev);
58 if (r) { 57 if (r) {
59 omap_dss_put_device(in); 58 omap_dss_put_device(src);
60 return r; 59 return r;
61 } 60 }
62 61
63 ddata->in = in;
64 return 0; 62 return 0;
65} 63}
66 64
67static void tvc_disconnect(struct omap_dss_device *dssdev) 65static void tvc_disconnect(struct omap_dss_device *dssdev)
68{ 66{
69 struct panel_drv_data *ddata = to_panel_data(dssdev); 67 struct omap_dss_device *src = dssdev->src;
70 struct omap_dss_device *in = ddata->in;
71 68
72 omapdss_device_disconnect(in, dssdev); 69 omapdss_device_disconnect(src, dssdev);
73 70
74 omap_dss_put_device(in); 71 omap_dss_put_device(src);
75 ddata->in = NULL;
76} 72}
77 73
78static int tvc_enable(struct omap_dss_device *dssdev) 74static int tvc_enable(struct omap_dss_device *dssdev)
79{ 75{
80 struct panel_drv_data *ddata = to_panel_data(dssdev); 76 struct panel_drv_data *ddata = to_panel_data(dssdev);
81 struct omap_dss_device *in = ddata->in; 77 struct omap_dss_device *src = dssdev->src;
82 int r; 78 int r;
83 79
84 dev_dbg(ddata->dev, "enable\n"); 80 dev_dbg(ddata->dev, "enable\n");
@@ -89,9 +85,9 @@ static int tvc_enable(struct omap_dss_device *dssdev)
89 if (omapdss_device_is_enabled(dssdev)) 85 if (omapdss_device_is_enabled(dssdev))
90 return 0; 86 return 0;
91 87
92 in->ops->set_timings(in, &ddata->vm); 88 src->ops->set_timings(src, &ddata->vm);
93 89
94 r = in->ops->enable(in); 90 r = src->ops->enable(src);
95 if (r) 91 if (r)
96 return r; 92 return r;
97 93
@@ -103,14 +99,14 @@ static int tvc_enable(struct omap_dss_device *dssdev)
103static void tvc_disable(struct omap_dss_device *dssdev) 99static void tvc_disable(struct omap_dss_device *dssdev)
104{ 100{
105 struct panel_drv_data *ddata = to_panel_data(dssdev); 101 struct panel_drv_data *ddata = to_panel_data(dssdev);
106 struct omap_dss_device *in = ddata->in; 102 struct omap_dss_device *src = dssdev->src;
107 103
108 dev_dbg(ddata->dev, "disable\n"); 104 dev_dbg(ddata->dev, "disable\n");
109 105
110 if (!omapdss_device_is_enabled(dssdev)) 106 if (!omapdss_device_is_enabled(dssdev))
111 return; 107 return;
112 108
113 in->ops->disable(in); 109 src->ops->disable(src);
114 110
115 dssdev->state = OMAP_DSS_DISPLAY_DISABLED; 111 dssdev->state = OMAP_DSS_DISPLAY_DISABLED;
116} 112}
@@ -119,11 +115,11 @@ static void tvc_set_timings(struct omap_dss_device *dssdev,
119 struct videomode *vm) 115 struct videomode *vm)
120{ 116{
121 struct panel_drv_data *ddata = to_panel_data(dssdev); 117 struct panel_drv_data *ddata = to_panel_data(dssdev);
122 struct omap_dss_device *in = ddata->in; 118 struct omap_dss_device *src = dssdev->src;
123 119
124 ddata->vm = *vm; 120 ddata->vm = *vm;
125 121
126 in->ops->set_timings(in, vm); 122 src->ops->set_timings(src, vm);
127} 123}
128 124
129static void tvc_get_timings(struct omap_dss_device *dssdev, 125static void tvc_get_timings(struct omap_dss_device *dssdev,
@@ -137,10 +133,9 @@ static void tvc_get_timings(struct omap_dss_device *dssdev,
137static int tvc_check_timings(struct omap_dss_device *dssdev, 133static int tvc_check_timings(struct omap_dss_device *dssdev,
138 struct videomode *vm) 134 struct videomode *vm)
139{ 135{
140 struct panel_drv_data *ddata = to_panel_data(dssdev); 136 struct omap_dss_device *src = dssdev->src;
141 struct omap_dss_device *in = ddata->in;
142 137
143 return in->ops->check_timings(in, vm); 138 return src->ops->check_timings(src, vm);
144} 139}
145 140
146static const struct omap_dss_driver tvc_driver = { 141static const struct omap_dss_driver tvc_driver = {
diff --git a/drivers/gpu/drm/omapdrm/displays/connector-dvi.c b/drivers/gpu/drm/omapdrm/displays/connector-dvi.c
index e47214a12118..211d59cf8dcd 100644
--- a/drivers/gpu/drm/omapdrm/displays/connector-dvi.c
+++ b/drivers/gpu/drm/omapdrm/displays/connector-dvi.c
@@ -40,7 +40,6 @@ static const struct videomode dvic_default_vm = {
40 40
41struct panel_drv_data { 41struct panel_drv_data {
42 struct omap_dss_device dssdev; 42 struct omap_dss_device dssdev;
43 struct omap_dss_device *in;
44 43
45 struct videomode vm; 44 struct videomode vm;
46 45
@@ -59,41 +58,37 @@ struct panel_drv_data {
59 58
60static int dvic_connect(struct omap_dss_device *dssdev) 59static int dvic_connect(struct omap_dss_device *dssdev)
61{ 60{
62 struct panel_drv_data *ddata = to_panel_data(dssdev); 61 struct omap_dss_device *src;
63 struct omap_dss_device *in;
64 int r; 62 int r;
65 63
66 in = omapdss_of_find_source_for_first_ep(dssdev->dev->of_node); 64 src = omapdss_of_find_source_for_first_ep(dssdev->dev->of_node);
67 if (IS_ERR(in)) { 65 if (IS_ERR(src)) {
68 dev_err(dssdev->dev, "failed to find video source\n"); 66 dev_err(dssdev->dev, "failed to find video source\n");
69 return PTR_ERR(in); 67 return PTR_ERR(src);
70 } 68 }
71 69
72 r = omapdss_device_connect(in, dssdev); 70 r = omapdss_device_connect(src, dssdev);
73 if (r) { 71 if (r) {
74 omap_dss_put_device(in); 72 omap_dss_put_device(src);
75 return r; 73 return r;
76 } 74 }
77 75
78 ddata->in = in;
79 return 0; 76 return 0;
80} 77}
81 78
82static void dvic_disconnect(struct omap_dss_device *dssdev) 79static void dvic_disconnect(struct omap_dss_device *dssdev)
83{ 80{
84 struct panel_drv_data *ddata = to_panel_data(dssdev); 81 struct omap_dss_device *src = dssdev->src;
85 struct omap_dss_device *in = ddata->in;
86 82
87 omapdss_device_disconnect(in, dssdev); 83 omapdss_device_disconnect(src, dssdev);
88 84
89 omap_dss_put_device(in); 85 omap_dss_put_device(src);
90 ddata->in = NULL;
91} 86}
92 87
93static int dvic_enable(struct omap_dss_device *dssdev) 88static int dvic_enable(struct omap_dss_device *dssdev)
94{ 89{
95 struct panel_drv_data *ddata = to_panel_data(dssdev); 90 struct panel_drv_data *ddata = to_panel_data(dssdev);
96 struct omap_dss_device *in = ddata->in; 91 struct omap_dss_device *src = dssdev->src;
97 int r; 92 int r;
98 93
99 if (!omapdss_device_is_connected(dssdev)) 94 if (!omapdss_device_is_connected(dssdev))
@@ -102,9 +97,9 @@ static int dvic_enable(struct omap_dss_device *dssdev)
102 if (omapdss_device_is_enabled(dssdev)) 97 if (omapdss_device_is_enabled(dssdev))
103 return 0; 98 return 0;
104 99
105 in->ops->set_timings(in, &ddata->vm); 100 src->ops->set_timings(src, &ddata->vm);
106 101
107 r = in->ops->enable(in); 102 r = src->ops->enable(src);
108 if (r) 103 if (r)
109 return r; 104 return r;
110 105
@@ -115,13 +110,12 @@ static int dvic_enable(struct omap_dss_device *dssdev)
115 110
116static void dvic_disable(struct omap_dss_device *dssdev) 111static void dvic_disable(struct omap_dss_device *dssdev)
117{ 112{
118 struct panel_drv_data *ddata = to_panel_data(dssdev); 113 struct omap_dss_device *src = dssdev->src;
119 struct omap_dss_device *in = ddata->in;
120 114
121 if (!omapdss_device_is_enabled(dssdev)) 115 if (!omapdss_device_is_enabled(dssdev))
122 return; 116 return;
123 117
124 in->ops->disable(in); 118 src->ops->disable(src);
125 119
126 dssdev->state = OMAP_DSS_DISPLAY_DISABLED; 120 dssdev->state = OMAP_DSS_DISPLAY_DISABLED;
127} 121}
@@ -130,11 +124,11 @@ static void dvic_set_timings(struct omap_dss_device *dssdev,
130 struct videomode *vm) 124 struct videomode *vm)
131{ 125{
132 struct panel_drv_data *ddata = to_panel_data(dssdev); 126 struct panel_drv_data *ddata = to_panel_data(dssdev);
133 struct omap_dss_device *in = ddata->in; 127 struct omap_dss_device *src = dssdev->src;
134 128
135 ddata->vm = *vm; 129 ddata->vm = *vm;
136 130
137 in->ops->set_timings(in, vm); 131 src->ops->set_timings(src, vm);
138} 132}
139 133
140static void dvic_get_timings(struct omap_dss_device *dssdev, 134static void dvic_get_timings(struct omap_dss_device *dssdev,
@@ -148,10 +142,9 @@ static void dvic_get_timings(struct omap_dss_device *dssdev,
148static int dvic_check_timings(struct omap_dss_device *dssdev, 142static int dvic_check_timings(struct omap_dss_device *dssdev,
149 struct videomode *vm) 143 struct videomode *vm)
150{ 144{
151 struct panel_drv_data *ddata = to_panel_data(dssdev); 145 struct omap_dss_device *src = dssdev->src;
152 struct omap_dss_device *in = ddata->in;
153 146
154 return in->ops->check_timings(in, vm); 147 return src->ops->check_timings(src, vm);
155} 148}
156 149
157static int dvic_ddc_read(struct i2c_adapter *adapter, 150static int dvic_ddc_read(struct i2c_adapter *adapter,
diff --git a/drivers/gpu/drm/omapdrm/displays/connector-hdmi.c b/drivers/gpu/drm/omapdrm/displays/connector-hdmi.c
index 671f2f29c8d3..0998b8715096 100644
--- a/drivers/gpu/drm/omapdrm/displays/connector-hdmi.c
+++ b/drivers/gpu/drm/omapdrm/displays/connector-hdmi.c
@@ -37,7 +37,6 @@ static const struct videomode hdmic_default_vm = {
37 37
38struct panel_drv_data { 38struct panel_drv_data {
39 struct omap_dss_device dssdev; 39 struct omap_dss_device dssdev;
40 struct omap_dss_device *in;
41 void (*hpd_cb)(void *cb_data, enum drm_connector_status status); 40 void (*hpd_cb)(void *cb_data, enum drm_connector_status status);
42 void *hpd_cb_data; 41 void *hpd_cb_data;
43 bool hpd_enabled; 42 bool hpd_enabled;
@@ -55,40 +54,37 @@ struct panel_drv_data {
55static int hdmic_connect(struct omap_dss_device *dssdev) 54static int hdmic_connect(struct omap_dss_device *dssdev)
56{ 55{
57 struct panel_drv_data *ddata = to_panel_data(dssdev); 56 struct panel_drv_data *ddata = to_panel_data(dssdev);
58 struct omap_dss_device *in; 57 struct omap_dss_device *src;
59 int r; 58 int r;
60 59
61 in = omapdss_of_find_source_for_first_ep(ddata->dev->of_node); 60 src = omapdss_of_find_source_for_first_ep(ddata->dev->of_node);
62 if (IS_ERR(in)) { 61 if (IS_ERR(src)) {
63 dev_err(ddata->dev, "failed to find video source\n"); 62 dev_err(ddata->dev, "failed to find video source\n");
64 return PTR_ERR(in); 63 return PTR_ERR(src);
65 } 64 }
66 65
67 r = omapdss_device_connect(in, dssdev); 66 r = omapdss_device_connect(src, dssdev);
68 if (r) { 67 if (r) {
69 omap_dss_put_device(in); 68 omap_dss_put_device(src);
70 return r; 69 return r;
71 } 70 }
72 71
73 ddata->in = in;
74 return 0; 72 return 0;
75} 73}
76 74
77static void hdmic_disconnect(struct omap_dss_device *dssdev) 75static void hdmic_disconnect(struct omap_dss_device *dssdev)
78{ 76{
79 struct panel_drv_data *ddata = to_panel_data(dssdev); 77 struct omap_dss_device *src = dssdev->src;
80 struct omap_dss_device *in = ddata->in;
81 78
82 omapdss_device_disconnect(in, dssdev); 79 omapdss_device_disconnect(src, dssdev);
83 80
84 omap_dss_put_device(in); 81 omap_dss_put_device(src);
85 ddata->in = NULL;
86} 82}
87 83
88static int hdmic_enable(struct omap_dss_device *dssdev) 84static int hdmic_enable(struct omap_dss_device *dssdev)
89{ 85{
90 struct panel_drv_data *ddata = to_panel_data(dssdev); 86 struct panel_drv_data *ddata = to_panel_data(dssdev);
91 struct omap_dss_device *in = ddata->in; 87 struct omap_dss_device *src = dssdev->src;
92 int r; 88 int r;
93 89
94 dev_dbg(ddata->dev, "enable\n"); 90 dev_dbg(ddata->dev, "enable\n");
@@ -99,9 +95,9 @@ static int hdmic_enable(struct omap_dss_device *dssdev)
99 if (omapdss_device_is_enabled(dssdev)) 95 if (omapdss_device_is_enabled(dssdev))
100 return 0; 96 return 0;
101 97
102 in->ops->set_timings(in, &ddata->vm); 98 src->ops->set_timings(src, &ddata->vm);
103 99
104 r = in->ops->enable(in); 100 r = src->ops->enable(src);
105 if (r) 101 if (r)
106 return r; 102 return r;
107 103
@@ -113,14 +109,14 @@ static int hdmic_enable(struct omap_dss_device *dssdev)
113static void hdmic_disable(struct omap_dss_device *dssdev) 109static void hdmic_disable(struct omap_dss_device *dssdev)
114{ 110{
115 struct panel_drv_data *ddata = to_panel_data(dssdev); 111 struct panel_drv_data *ddata = to_panel_data(dssdev);
116 struct omap_dss_device *in = ddata->in; 112 struct omap_dss_device *src = dssdev->src;
117 113
118 dev_dbg(ddata->dev, "disable\n"); 114 dev_dbg(ddata->dev, "disable\n");
119 115
120 if (!omapdss_device_is_enabled(dssdev)) 116 if (!omapdss_device_is_enabled(dssdev))
121 return; 117 return;
122 118
123 in->ops->disable(in); 119 src->ops->disable(src);
124 120
125 dssdev->state = OMAP_DSS_DISPLAY_DISABLED; 121 dssdev->state = OMAP_DSS_DISPLAY_DISABLED;
126} 122}
@@ -129,11 +125,11 @@ static void hdmic_set_timings(struct omap_dss_device *dssdev,
129 struct videomode *vm) 125 struct videomode *vm)
130{ 126{
131 struct panel_drv_data *ddata = to_panel_data(dssdev); 127 struct panel_drv_data *ddata = to_panel_data(dssdev);
132 struct omap_dss_device *in = ddata->in; 128 struct omap_dss_device *src = dssdev->src;
133 129
134 ddata->vm = *vm; 130 ddata->vm = *vm;
135 131
136 in->ops->set_timings(in, vm); 132 src->ops->set_timings(src, vm);
137} 133}
138 134
139static void hdmic_get_timings(struct omap_dss_device *dssdev, 135static void hdmic_get_timings(struct omap_dss_device *dssdev,
@@ -147,33 +143,31 @@ static void hdmic_get_timings(struct omap_dss_device *dssdev,
147static int hdmic_check_timings(struct omap_dss_device *dssdev, 143static int hdmic_check_timings(struct omap_dss_device *dssdev,
148 struct videomode *vm) 144 struct videomode *vm)
149{ 145{
150 struct panel_drv_data *ddata = to_panel_data(dssdev); 146 struct omap_dss_device *src = dssdev->src;
151 struct omap_dss_device *in = ddata->in;
152 147
153 return in->ops->check_timings(in, vm); 148 return src->ops->check_timings(src, vm);
154} 149}
155 150
156static int hdmic_read_edid(struct omap_dss_device *dssdev, 151static int hdmic_read_edid(struct omap_dss_device *dssdev,
157 u8 *edid, int len) 152 u8 *edid, int len)
158{ 153{
159 struct panel_drv_data *ddata = to_panel_data(dssdev); 154 struct omap_dss_device *src = dssdev->src;
160 struct omap_dss_device *in = ddata->in;
161 155
162 return in->ops->hdmi.read_edid(in, edid, len); 156 return src->ops->hdmi.read_edid(src, edid, len);
163} 157}
164 158
165static bool hdmic_detect(struct omap_dss_device *dssdev) 159static bool hdmic_detect(struct omap_dss_device *dssdev)
166{ 160{
167 struct panel_drv_data *ddata = to_panel_data(dssdev); 161 struct panel_drv_data *ddata = to_panel_data(dssdev);
168 struct omap_dss_device *in = ddata->in; 162 struct omap_dss_device *src = dssdev->src;
169 bool connected; 163 bool connected;
170 164
171 if (gpio_is_valid(ddata->hpd_gpio)) 165 if (gpio_is_valid(ddata->hpd_gpio))
172 connected = gpio_get_value_cansleep(ddata->hpd_gpio); 166 connected = gpio_get_value_cansleep(ddata->hpd_gpio);
173 else 167 else
174 connected = in->ops->hdmi.detect(in); 168 connected = src->ops->hdmi.detect(src);
175 if (!connected && in->ops->hdmi.lost_hotplug) 169 if (!connected && src->ops->hdmi.lost_hotplug)
176 in->ops->hdmi.lost_hotplug(in); 170 src->ops->hdmi.lost_hotplug(src);
177 return connected; 171 return connected;
178} 172}
179 173
@@ -183,7 +177,7 @@ static int hdmic_register_hpd_cb(struct omap_dss_device *dssdev,
183 void *cb_data) 177 void *cb_data)
184{ 178{
185 struct panel_drv_data *ddata = to_panel_data(dssdev); 179 struct panel_drv_data *ddata = to_panel_data(dssdev);
186 struct omap_dss_device *in = ddata->in; 180 struct omap_dss_device *src = dssdev->src;
187 181
188 if (gpio_is_valid(ddata->hpd_gpio)) { 182 if (gpio_is_valid(ddata->hpd_gpio)) {
189 mutex_lock(&ddata->hpd_lock); 183 mutex_lock(&ddata->hpd_lock);
@@ -191,8 +185,8 @@ static int hdmic_register_hpd_cb(struct omap_dss_device *dssdev,
191 ddata->hpd_cb_data = cb_data; 185 ddata->hpd_cb_data = cb_data;
192 mutex_unlock(&ddata->hpd_lock); 186 mutex_unlock(&ddata->hpd_lock);
193 return 0; 187 return 0;
194 } else if (in->ops->hdmi.register_hpd_cb) { 188 } else if (src->ops->hdmi.register_hpd_cb) {
195 return in->ops->hdmi.register_hpd_cb(in, cb, cb_data); 189 return src->ops->hdmi.register_hpd_cb(src, cb, cb_data);
196 } 190 }
197 191
198 return -ENOTSUPP; 192 return -ENOTSUPP;
@@ -201,61 +195,59 @@ static int hdmic_register_hpd_cb(struct omap_dss_device *dssdev,
201static void hdmic_unregister_hpd_cb(struct omap_dss_device *dssdev) 195static void hdmic_unregister_hpd_cb(struct omap_dss_device *dssdev)
202{ 196{
203 struct panel_drv_data *ddata = to_panel_data(dssdev); 197 struct panel_drv_data *ddata = to_panel_data(dssdev);
204 struct omap_dss_device *in = ddata->in; 198 struct omap_dss_device *src = dssdev->src;
205 199
206 if (gpio_is_valid(ddata->hpd_gpio)) { 200 if (gpio_is_valid(ddata->hpd_gpio)) {
207 mutex_lock(&ddata->hpd_lock); 201 mutex_lock(&ddata->hpd_lock);
208 ddata->hpd_cb = NULL; 202 ddata->hpd_cb = NULL;
209 ddata->hpd_cb_data = NULL; 203 ddata->hpd_cb_data = NULL;
210 mutex_unlock(&ddata->hpd_lock); 204 mutex_unlock(&ddata->hpd_lock);
211 } else if (in->ops->hdmi.unregister_hpd_cb) { 205 } else if (src->ops->hdmi.unregister_hpd_cb) {
212 in->ops->hdmi.unregister_hpd_cb(in); 206 src->ops->hdmi.unregister_hpd_cb(src);
213 } 207 }
214} 208}
215 209
216static void hdmic_enable_hpd(struct omap_dss_device *dssdev) 210static void hdmic_enable_hpd(struct omap_dss_device *dssdev)
217{ 211{
218 struct panel_drv_data *ddata = to_panel_data(dssdev); 212 struct panel_drv_data *ddata = to_panel_data(dssdev);
219 struct omap_dss_device *in = ddata->in; 213 struct omap_dss_device *src = dssdev->src;
220 214
221 if (gpio_is_valid(ddata->hpd_gpio)) { 215 if (gpio_is_valid(ddata->hpd_gpio)) {
222 mutex_lock(&ddata->hpd_lock); 216 mutex_lock(&ddata->hpd_lock);
223 ddata->hpd_enabled = true; 217 ddata->hpd_enabled = true;
224 mutex_unlock(&ddata->hpd_lock); 218 mutex_unlock(&ddata->hpd_lock);
225 } else if (in->ops->hdmi.enable_hpd) { 219 } else if (src->ops->hdmi.enable_hpd) {
226 in->ops->hdmi.enable_hpd(in); 220 src->ops->hdmi.enable_hpd(src);
227 } 221 }
228} 222}
229 223
230static void hdmic_disable_hpd(struct omap_dss_device *dssdev) 224static void hdmic_disable_hpd(struct omap_dss_device *dssdev)
231{ 225{
232 struct panel_drv_data *ddata = to_panel_data(dssdev); 226 struct panel_drv_data *ddata = to_panel_data(dssdev);
233 struct omap_dss_device *in = ddata->in; 227 struct omap_dss_device *src = dssdev->src;
234 228
235 if (gpio_is_valid(ddata->hpd_gpio)) { 229 if (gpio_is_valid(ddata->hpd_gpio)) {
236 mutex_lock(&ddata->hpd_lock); 230 mutex_lock(&ddata->hpd_lock);
237 ddata->hpd_enabled = false; 231 ddata->hpd_enabled = false;
238 mutex_unlock(&ddata->hpd_lock); 232 mutex_unlock(&ddata->hpd_lock);
239 } else if (in->ops->hdmi.disable_hpd) { 233 } else if (src->ops->hdmi.disable_hpd) {
240 in->ops->hdmi.disable_hpd(in); 234 src->ops->hdmi.disable_hpd(src);
241 } 235 }
242} 236}
243 237
244static int hdmic_set_hdmi_mode(struct omap_dss_device *dssdev, bool hdmi_mode) 238static int hdmic_set_hdmi_mode(struct omap_dss_device *dssdev, bool hdmi_mode)
245{ 239{
246 struct panel_drv_data *ddata = to_panel_data(dssdev); 240 struct omap_dss_device *src = dssdev->src;
247 struct omap_dss_device *in = ddata->in;
248 241
249 return in->ops->hdmi.set_hdmi_mode(in, hdmi_mode); 242 return src->ops->hdmi.set_hdmi_mode(src, hdmi_mode);
250} 243}
251 244
252static int hdmic_set_infoframe(struct omap_dss_device *dssdev, 245static int hdmic_set_infoframe(struct omap_dss_device *dssdev,
253 const struct hdmi_avi_infoframe *avi) 246 const struct hdmi_avi_infoframe *avi)
254{ 247{
255 struct panel_drv_data *ddata = to_panel_data(dssdev); 248 struct omap_dss_device *src = dssdev->src;
256 struct omap_dss_device *in = ddata->in;
257 249
258 return in->ops->hdmi.set_infoframe(in, avi); 250 return src->ops->hdmi.set_infoframe(src, avi);
259} 251}
260 252
261static const struct omap_dss_driver hdmic_driver = { 253static const struct omap_dss_driver hdmic_driver = {
diff --git a/drivers/gpu/drm/omapdrm/displays/encoder-opa362.c b/drivers/gpu/drm/omapdrm/displays/encoder-opa362.c
index c058f889700d..a190bcf08738 100644
--- a/drivers/gpu/drm/omapdrm/displays/encoder-opa362.c
+++ b/drivers/gpu/drm/omapdrm/displays/encoder-opa362.c
@@ -23,7 +23,6 @@
23 23
24struct panel_drv_data { 24struct panel_drv_data {
25 struct omap_dss_device dssdev; 25 struct omap_dss_device dssdev;
26 struct omap_dss_device *in;
27 26
28 struct gpio_desc *enable_gpio; 27 struct gpio_desc *enable_gpio;
29 28
@@ -35,23 +34,21 @@ struct panel_drv_data {
35static int opa362_connect(struct omap_dss_device *dssdev, 34static int opa362_connect(struct omap_dss_device *dssdev,
36 struct omap_dss_device *dst) 35 struct omap_dss_device *dst)
37{ 36{
38 struct panel_drv_data *ddata = to_panel_data(dssdev); 37 struct omap_dss_device *src;
39 struct omap_dss_device *in;
40 int r; 38 int r;
41 39
42 in = omapdss_of_find_source_for_first_ep(dssdev->dev->of_node); 40 src = omapdss_of_find_source_for_first_ep(dssdev->dev->of_node);
43 if (IS_ERR(in)) { 41 if (IS_ERR(src)) {
44 dev_err(dssdev->dev, "failed to find video source\n"); 42 dev_err(dssdev->dev, "failed to find video source\n");
45 return PTR_ERR(in); 43 return PTR_ERR(src);
46 } 44 }
47 45
48 r = omapdss_device_connect(in, dssdev); 46 r = omapdss_device_connect(src, dssdev);
49 if (r) { 47 if (r) {
50 omap_dss_put_device(in); 48 omap_dss_put_device(src);
51 return r; 49 return r;
52 } 50 }
53 51
54 ddata->in = in;
55 return 0; 52 return 0;
56} 53}
57 54
@@ -59,18 +56,17 @@ static void opa362_disconnect(struct omap_dss_device *dssdev,
59 struct omap_dss_device *dst) 56 struct omap_dss_device *dst)
60{ 57{
61 struct panel_drv_data *ddata = to_panel_data(dssdev); 58 struct panel_drv_data *ddata = to_panel_data(dssdev);
62 struct omap_dss_device *in = ddata->in; 59 struct omap_dss_device *src = dssdev->src;
63 60
64 omapdss_device_disconnect(in, &ddata->dssdev); 61 omapdss_device_disconnect(src, &ddata->dssdev);
65 62
66 omap_dss_put_device(in); 63 omap_dss_put_device(src);
67 ddata->in = NULL;
68} 64}
69 65
70static int opa362_enable(struct omap_dss_device *dssdev) 66static int opa362_enable(struct omap_dss_device *dssdev)
71{ 67{
72 struct panel_drv_data *ddata = to_panel_data(dssdev); 68 struct panel_drv_data *ddata = to_panel_data(dssdev);
73 struct omap_dss_device *in = ddata->in; 69 struct omap_dss_device *src = dssdev->src;
74 int r; 70 int r;
75 71
76 dev_dbg(dssdev->dev, "enable\n"); 72 dev_dbg(dssdev->dev, "enable\n");
@@ -81,9 +77,9 @@ static int opa362_enable(struct omap_dss_device *dssdev)
81 if (omapdss_device_is_enabled(dssdev)) 77 if (omapdss_device_is_enabled(dssdev))
82 return 0; 78 return 0;
83 79
84 in->ops->set_timings(in, &ddata->vm); 80 src->ops->set_timings(src, &ddata->vm);
85 81
86 r = in->ops->enable(in); 82 r = src->ops->enable(src);
87 if (r) 83 if (r)
88 return r; 84 return r;
89 85
@@ -98,7 +94,7 @@ static int opa362_enable(struct omap_dss_device *dssdev)
98static void opa362_disable(struct omap_dss_device *dssdev) 94static void opa362_disable(struct omap_dss_device *dssdev)
99{ 95{
100 struct panel_drv_data *ddata = to_panel_data(dssdev); 96 struct panel_drv_data *ddata = to_panel_data(dssdev);
101 struct omap_dss_device *in = ddata->in; 97 struct omap_dss_device *src = dssdev->src;
102 98
103 dev_dbg(dssdev->dev, "disable\n"); 99 dev_dbg(dssdev->dev, "disable\n");
104 100
@@ -108,7 +104,7 @@ static void opa362_disable(struct omap_dss_device *dssdev)
108 if (ddata->enable_gpio) 104 if (ddata->enable_gpio)
109 gpiod_set_value_cansleep(ddata->enable_gpio, 0); 105 gpiod_set_value_cansleep(ddata->enable_gpio, 0);
110 106
111 in->ops->disable(in); 107 src->ops->disable(src);
112 108
113 dssdev->state = OMAP_DSS_DISPLAY_DISABLED; 109 dssdev->state = OMAP_DSS_DISPLAY_DISABLED;
114} 110}
@@ -117,24 +113,23 @@ static void opa362_set_timings(struct omap_dss_device *dssdev,
117 struct videomode *vm) 113 struct videomode *vm)
118{ 114{
119 struct panel_drv_data *ddata = to_panel_data(dssdev); 115 struct panel_drv_data *ddata = to_panel_data(dssdev);
120 struct omap_dss_device *in = ddata->in; 116 struct omap_dss_device *src = dssdev->src;
121 117
122 dev_dbg(dssdev->dev, "set_timings\n"); 118 dev_dbg(dssdev->dev, "set_timings\n");
123 119
124 ddata->vm = *vm; 120 ddata->vm = *vm;
125 121
126 in->ops->set_timings(in, vm); 122 src->ops->set_timings(src, vm);
127} 123}
128 124
129static int opa362_check_timings(struct omap_dss_device *dssdev, 125static int opa362_check_timings(struct omap_dss_device *dssdev,
130 struct videomode *vm) 126 struct videomode *vm)
131{ 127{
132 struct panel_drv_data *ddata = to_panel_data(dssdev); 128 struct omap_dss_device *src = dssdev->src;
133 struct omap_dss_device *in = ddata->in;
134 129
135 dev_dbg(dssdev->dev, "check_timings\n"); 130 dev_dbg(dssdev->dev, "check_timings\n");
136 131
137 return in->ops->check_timings(in, vm); 132 return src->ops->check_timings(src, vm);
138} 133}
139 134
140static const struct omap_dss_device_ops opa362_ops = { 135static const struct omap_dss_device_ops opa362_ops = {
diff --git a/drivers/gpu/drm/omapdrm/displays/encoder-tfp410.c b/drivers/gpu/drm/omapdrm/displays/encoder-tfp410.c
index b0e75af56485..db52eb49cff7 100644
--- a/drivers/gpu/drm/omapdrm/displays/encoder-tfp410.c
+++ b/drivers/gpu/drm/omapdrm/displays/encoder-tfp410.c
@@ -19,7 +19,6 @@
19 19
20struct panel_drv_data { 20struct panel_drv_data {
21 struct omap_dss_device dssdev; 21 struct omap_dss_device dssdev;
22 struct omap_dss_device *in;
23 22
24 int pd_gpio; 23 int pd_gpio;
25 24
@@ -31,23 +30,21 @@ struct panel_drv_data {
31static int tfp410_connect(struct omap_dss_device *dssdev, 30static int tfp410_connect(struct omap_dss_device *dssdev,
32 struct omap_dss_device *dst) 31 struct omap_dss_device *dst)
33{ 32{
34 struct panel_drv_data *ddata = to_panel_data(dssdev); 33 struct omap_dss_device *src;
35 struct omap_dss_device *in;
36 int r; 34 int r;
37 35
38 in = omapdss_of_find_source_for_first_ep(dssdev->dev->of_node); 36 src = omapdss_of_find_source_for_first_ep(dssdev->dev->of_node);
39 if (IS_ERR(in)) { 37 if (IS_ERR(src)) {
40 dev_err(dssdev->dev, "failed to find video source\n"); 38 dev_err(dssdev->dev, "failed to find video source\n");
41 return PTR_ERR(in); 39 return PTR_ERR(src);
42 } 40 }
43 41
44 r = omapdss_device_connect(in, dssdev); 42 r = omapdss_device_connect(src, dssdev);
45 if (r) { 43 if (r) {
46 omap_dss_put_device(in); 44 omap_dss_put_device(src);
47 return r; 45 return r;
48 } 46 }
49 47
50 ddata->in = in;
51 return 0; 48 return 0;
52} 49}
53 50
@@ -55,18 +52,17 @@ static void tfp410_disconnect(struct omap_dss_device *dssdev,
55 struct omap_dss_device *dst) 52 struct omap_dss_device *dst)
56{ 53{
57 struct panel_drv_data *ddata = to_panel_data(dssdev); 54 struct panel_drv_data *ddata = to_panel_data(dssdev);
58 struct omap_dss_device *in = ddata->in; 55 struct omap_dss_device *src = dssdev->src;
59 56
60 omapdss_device_disconnect(in, &ddata->dssdev); 57 omapdss_device_disconnect(src, &ddata->dssdev);
61 58
62 omap_dss_put_device(in); 59 omap_dss_put_device(src);
63 ddata->in = NULL;
64} 60}
65 61
66static int tfp410_enable(struct omap_dss_device *dssdev) 62static int tfp410_enable(struct omap_dss_device *dssdev)
67{ 63{
68 struct panel_drv_data *ddata = to_panel_data(dssdev); 64 struct panel_drv_data *ddata = to_panel_data(dssdev);
69 struct omap_dss_device *in = ddata->in; 65 struct omap_dss_device *src = dssdev->src;
70 int r; 66 int r;
71 67
72 if (!omapdss_device_is_connected(dssdev)) 68 if (!omapdss_device_is_connected(dssdev))
@@ -75,9 +71,9 @@ static int tfp410_enable(struct omap_dss_device *dssdev)
75 if (omapdss_device_is_enabled(dssdev)) 71 if (omapdss_device_is_enabled(dssdev))
76 return 0; 72 return 0;
77 73
78 in->ops->set_timings(in, &ddata->vm); 74 src->ops->set_timings(src, &ddata->vm);
79 75
80 r = in->ops->enable(in); 76 r = src->ops->enable(src);
81 if (r) 77 if (r)
82 return r; 78 return r;
83 79
@@ -92,7 +88,7 @@ static int tfp410_enable(struct omap_dss_device *dssdev)
92static void tfp410_disable(struct omap_dss_device *dssdev) 88static void tfp410_disable(struct omap_dss_device *dssdev)
93{ 89{
94 struct panel_drv_data *ddata = to_panel_data(dssdev); 90 struct panel_drv_data *ddata = to_panel_data(dssdev);
95 struct omap_dss_device *in = ddata->in; 91 struct omap_dss_device *src = dssdev->src;
96 92
97 if (!omapdss_device_is_enabled(dssdev)) 93 if (!omapdss_device_is_enabled(dssdev))
98 return; 94 return;
@@ -100,7 +96,7 @@ static void tfp410_disable(struct omap_dss_device *dssdev)
100 if (gpio_is_valid(ddata->pd_gpio)) 96 if (gpio_is_valid(ddata->pd_gpio))
101 gpio_set_value_cansleep(ddata->pd_gpio, 0); 97 gpio_set_value_cansleep(ddata->pd_gpio, 0);
102 98
103 in->ops->disable(in); 99 src->ops->disable(src);
104 100
105 dssdev->state = OMAP_DSS_DISPLAY_DISABLED; 101 dssdev->state = OMAP_DSS_DISPLAY_DISABLED;
106} 102}
@@ -115,24 +111,23 @@ static void tfp410_set_timings(struct omap_dss_device *dssdev,
115 struct videomode *vm) 111 struct videomode *vm)
116{ 112{
117 struct panel_drv_data *ddata = to_panel_data(dssdev); 113 struct panel_drv_data *ddata = to_panel_data(dssdev);
118 struct omap_dss_device *in = ddata->in; 114 struct omap_dss_device *src = dssdev->src;
119 115
120 tfp410_fix_timings(vm); 116 tfp410_fix_timings(vm);
121 117
122 ddata->vm = *vm; 118 ddata->vm = *vm;
123 119
124 in->ops->set_timings(in, vm); 120 src->ops->set_timings(src, vm);
125} 121}
126 122
127static int tfp410_check_timings(struct omap_dss_device *dssdev, 123static int tfp410_check_timings(struct omap_dss_device *dssdev,
128 struct videomode *vm) 124 struct videomode *vm)
129{ 125{
130 struct panel_drv_data *ddata = to_panel_data(dssdev); 126 struct omap_dss_device *src = dssdev->src;
131 struct omap_dss_device *in = ddata->in;
132 127
133 tfp410_fix_timings(vm); 128 tfp410_fix_timings(vm);
134 129
135 return in->ops->check_timings(in, vm); 130 return src->ops->check_timings(src, vm);
136} 131}
137 132
138static const struct omap_dss_device_ops tfp410_ops = { 133static const struct omap_dss_device_ops tfp410_ops = {
diff --git a/drivers/gpu/drm/omapdrm/displays/encoder-tpd12s015.c b/drivers/gpu/drm/omapdrm/displays/encoder-tpd12s015.c
index 218cf73d1455..4537867f833f 100644
--- a/drivers/gpu/drm/omapdrm/displays/encoder-tpd12s015.c
+++ b/drivers/gpu/drm/omapdrm/displays/encoder-tpd12s015.c
@@ -21,7 +21,6 @@
21 21
22struct panel_drv_data { 22struct panel_drv_data {
23 struct omap_dss_device dssdev; 23 struct omap_dss_device dssdev;
24 struct omap_dss_device *in;
25 void (*hpd_cb)(void *cb_data, enum drm_connector_status status); 24 void (*hpd_cb)(void *cb_data, enum drm_connector_status status);
26 void *hpd_cb_data; 25 void *hpd_cb_data;
27 bool hpd_enabled; 26 bool hpd_enabled;
@@ -40,18 +39,18 @@ static int tpd_connect(struct omap_dss_device *dssdev,
40 struct omap_dss_device *dst) 39 struct omap_dss_device *dst)
41{ 40{
42 struct panel_drv_data *ddata = to_panel_data(dssdev); 41 struct panel_drv_data *ddata = to_panel_data(dssdev);
43 struct omap_dss_device *in; 42 struct omap_dss_device *src;
44 int r; 43 int r;
45 44
46 in = omapdss_of_find_source_for_first_ep(dssdev->dev->of_node); 45 src = omapdss_of_find_source_for_first_ep(dssdev->dev->of_node);
47 if (IS_ERR(in)) { 46 if (IS_ERR(src)) {
48 dev_err(dssdev->dev, "failed to find video source\n"); 47 dev_err(dssdev->dev, "failed to find video source\n");
49 return PTR_ERR(in); 48 return PTR_ERR(src);
50 } 49 }
51 50
52 r = omapdss_device_connect(in, dssdev); 51 r = omapdss_device_connect(src, dssdev);
53 if (r) { 52 if (r) {
54 omap_dss_put_device(in); 53 omap_dss_put_device(src);
55 return r; 54 return r;
56 } 55 }
57 56
@@ -61,7 +60,6 @@ static int tpd_connect(struct omap_dss_device *dssdev,
61 /* DC-DC converter needs at max 300us to get to 90% of 5V */ 60 /* DC-DC converter needs at max 300us to get to 90% of 5V */
62 udelay(300); 61 udelay(300);
63 62
64 ddata->in = in;
65 return 0; 63 return 0;
66} 64}
67 65
@@ -69,29 +67,28 @@ static void tpd_disconnect(struct omap_dss_device *dssdev,
69 struct omap_dss_device *dst) 67 struct omap_dss_device *dst)
70{ 68{
71 struct panel_drv_data *ddata = to_panel_data(dssdev); 69 struct panel_drv_data *ddata = to_panel_data(dssdev);
72 struct omap_dss_device *in = ddata->in; 70 struct omap_dss_device *src = dssdev->src;
73 71
74 gpiod_set_value_cansleep(ddata->ct_cp_hpd_gpio, 0); 72 gpiod_set_value_cansleep(ddata->ct_cp_hpd_gpio, 0);
75 gpiod_set_value_cansleep(ddata->ls_oe_gpio, 0); 73 gpiod_set_value_cansleep(ddata->ls_oe_gpio, 0);
76 74
77 omapdss_device_disconnect(in, &ddata->dssdev); 75 omapdss_device_disconnect(src, &ddata->dssdev);
78 76
79 omap_dss_put_device(in); 77 omap_dss_put_device(src);
80 ddata->in = NULL;
81} 78}
82 79
83static int tpd_enable(struct omap_dss_device *dssdev) 80static int tpd_enable(struct omap_dss_device *dssdev)
84{ 81{
85 struct panel_drv_data *ddata = to_panel_data(dssdev); 82 struct panel_drv_data *ddata = to_panel_data(dssdev);
86 struct omap_dss_device *in = ddata->in; 83 struct omap_dss_device *src = dssdev->src;
87 int r; 84 int r;
88 85
89 if (dssdev->state == OMAP_DSS_DISPLAY_ACTIVE) 86 if (dssdev->state == OMAP_DSS_DISPLAY_ACTIVE)
90 return 0; 87 return 0;
91 88
92 in->ops->set_timings(in, &ddata->vm); 89 src->ops->set_timings(src, &ddata->vm);
93 90
94 r = in->ops->enable(in); 91 r = src->ops->enable(src);
95 if (r) 92 if (r)
96 return r; 93 return r;
97 94
@@ -102,13 +99,12 @@ static int tpd_enable(struct omap_dss_device *dssdev)
102 99
103static void tpd_disable(struct omap_dss_device *dssdev) 100static void tpd_disable(struct omap_dss_device *dssdev)
104{ 101{
105 struct panel_drv_data *ddata = to_panel_data(dssdev); 102 struct omap_dss_device *src = dssdev->src;
106 struct omap_dss_device *in = ddata->in;
107 103
108 if (dssdev->state != OMAP_DSS_DISPLAY_ACTIVE) 104 if (dssdev->state != OMAP_DSS_DISPLAY_ACTIVE)
109 return; 105 return;
110 106
111 in->ops->disable(in); 107 src->ops->disable(src);
112 108
113 dssdev->state = OMAP_DSS_DISPLAY_DISABLED; 109 dssdev->state = OMAP_DSS_DISPLAY_DISABLED;
114} 110}
@@ -117,45 +113,41 @@ static void tpd_set_timings(struct omap_dss_device *dssdev,
117 struct videomode *vm) 113 struct videomode *vm)
118{ 114{
119 struct panel_drv_data *ddata = to_panel_data(dssdev); 115 struct panel_drv_data *ddata = to_panel_data(dssdev);
120 struct omap_dss_device *in = ddata->in; 116 struct omap_dss_device *src = dssdev->src;
121 117
122 ddata->vm = *vm; 118 ddata->vm = *vm;
123 119
124 in->ops->set_timings(in, vm); 120 src->ops->set_timings(src, vm);
125} 121}
126 122
127static int tpd_check_timings(struct omap_dss_device *dssdev, 123static int tpd_check_timings(struct omap_dss_device *dssdev,
128 struct videomode *vm) 124 struct videomode *vm)
129{ 125{
130 struct panel_drv_data *ddata = to_panel_data(dssdev); 126 struct omap_dss_device *src = dssdev->src;
131 struct omap_dss_device *in = ddata->in;
132 int r;
133
134 r = in->ops->check_timings(in, vm);
135 127
136 return r; 128 return src->ops->check_timings(src, vm);
137} 129}
138 130
139static int tpd_read_edid(struct omap_dss_device *dssdev, 131static int tpd_read_edid(struct omap_dss_device *dssdev,
140 u8 *edid, int len) 132 u8 *edid, int len)
141{ 133{
142 struct panel_drv_data *ddata = to_panel_data(dssdev); 134 struct panel_drv_data *ddata = to_panel_data(dssdev);
143 struct omap_dss_device *in = ddata->in; 135 struct omap_dss_device *src = dssdev->src;
144 136
145 if (!gpiod_get_value_cansleep(ddata->hpd_gpio)) 137 if (!gpiod_get_value_cansleep(ddata->hpd_gpio))
146 return -ENODEV; 138 return -ENODEV;
147 139
148 return in->ops->hdmi.read_edid(in, edid, len); 140 return src->ops->hdmi.read_edid(src, edid, len);
149} 141}
150 142
151static bool tpd_detect(struct omap_dss_device *dssdev) 143static bool tpd_detect(struct omap_dss_device *dssdev)
152{ 144{
153 struct panel_drv_data *ddata = to_panel_data(dssdev); 145 struct panel_drv_data *ddata = to_panel_data(dssdev);
154 struct omap_dss_device *in = ddata->in; 146 struct omap_dss_device *src = dssdev->src;
155 bool connected = gpiod_get_value_cansleep(ddata->hpd_gpio); 147 bool connected = gpiod_get_value_cansleep(ddata->hpd_gpio);
156 148
157 if (!connected && in->ops->hdmi.lost_hotplug) 149 if (!connected && src->ops->hdmi.lost_hotplug)
158 in->ops->hdmi.lost_hotplug(in); 150 src->ops->hdmi.lost_hotplug(src);
159 return connected; 151 return connected;
160} 152}
161 153
@@ -205,19 +197,17 @@ static void tpd_disable_hpd(struct omap_dss_device *dssdev)
205static int tpd_set_infoframe(struct omap_dss_device *dssdev, 197static int tpd_set_infoframe(struct omap_dss_device *dssdev,
206 const struct hdmi_avi_infoframe *avi) 198 const struct hdmi_avi_infoframe *avi)
207{ 199{
208 struct panel_drv_data *ddata = to_panel_data(dssdev); 200 struct omap_dss_device *src = dssdev->src;
209 struct omap_dss_device *in = ddata->in;
210 201
211 return in->ops->hdmi.set_infoframe(in, avi); 202 return src->ops->hdmi.set_infoframe(src, avi);
212} 203}
213 204
214static int tpd_set_hdmi_mode(struct omap_dss_device *dssdev, 205static int tpd_set_hdmi_mode(struct omap_dss_device *dssdev,
215 bool hdmi_mode) 206 bool hdmi_mode)
216{ 207{
217 struct panel_drv_data *ddata = to_panel_data(dssdev); 208 struct omap_dss_device *src = dssdev->src;
218 struct omap_dss_device *in = ddata->in;
219 209
220 return in->ops->hdmi.set_hdmi_mode(in, hdmi_mode); 210 return src->ops->hdmi.set_hdmi_mode(src, hdmi_mode);
221} 211}
222 212
223static const struct omap_dss_device_ops tpd_ops = { 213static const struct omap_dss_device_ops tpd_ops = {
@@ -262,7 +252,7 @@ static irqreturn_t tpd_hpd_isr(int irq, void *data)
262 252
263static int tpd_probe(struct platform_device *pdev) 253static int tpd_probe(struct platform_device *pdev)
264{ 254{
265 struct omap_dss_device *in, *dssdev; 255 struct omap_dss_device *dssdev;
266 struct panel_drv_data *ddata; 256 struct panel_drv_data *ddata;
267 int r; 257 int r;
268 struct gpio_desc *gpio; 258 struct gpio_desc *gpio;
@@ -311,8 +301,6 @@ static int tpd_probe(struct platform_device *pdev)
311 dssdev->owner = THIS_MODULE; 301 dssdev->owner = THIS_MODULE;
312 dssdev->port_num = 1; 302 dssdev->port_num = 1;
313 303
314 in = ddata->in;
315
316 r = omapdss_register_output(dssdev); 304 r = omapdss_register_output(dssdev);
317 if (r) { 305 if (r) {
318 dev_err(&pdev->dev, "Failed to register output\n"); 306 dev_err(&pdev->dev, "Failed to register output\n");
diff --git a/drivers/gpu/drm/omapdrm/displays/panel-dpi.c b/drivers/gpu/drm/omapdrm/displays/panel-dpi.c
index 4772cb2553f2..5864e24a6e21 100644
--- a/drivers/gpu/drm/omapdrm/displays/panel-dpi.c
+++ b/drivers/gpu/drm/omapdrm/displays/panel-dpi.c
@@ -23,7 +23,6 @@
23 23
24struct panel_drv_data { 24struct panel_drv_data {
25 struct omap_dss_device dssdev; 25 struct omap_dss_device dssdev;
26 struct omap_dss_device *in;
27 26
28 struct videomode vm; 27 struct videomode vm;
29 28
@@ -37,41 +36,37 @@ struct panel_drv_data {
37 36
38static int panel_dpi_connect(struct omap_dss_device *dssdev) 37static int panel_dpi_connect(struct omap_dss_device *dssdev)
39{ 38{
40 struct panel_drv_data *ddata = to_panel_data(dssdev); 39 struct omap_dss_device *src;
41 struct omap_dss_device *in;
42 int r; 40 int r;
43 41
44 in = omapdss_of_find_source_for_first_ep(dssdev->dev->of_node); 42 src = omapdss_of_find_source_for_first_ep(dssdev->dev->of_node);
45 if (IS_ERR(in)) { 43 if (IS_ERR(src)) {
46 dev_err(dssdev->dev, "failed to find video source\n"); 44 dev_err(dssdev->dev, "failed to find video source\n");
47 return PTR_ERR(in); 45 return PTR_ERR(src);
48 } 46 }
49 47
50 r = omapdss_device_connect(in, dssdev); 48 r = omapdss_device_connect(src, dssdev);
51 if (r) { 49 if (r) {
52 omap_dss_put_device(in); 50 omap_dss_put_device(src);
53 return r; 51 return r;
54 } 52 }
55 53
56 ddata->in = in;
57 return 0; 54 return 0;
58} 55}
59 56
60static void panel_dpi_disconnect(struct omap_dss_device *dssdev) 57static void panel_dpi_disconnect(struct omap_dss_device *dssdev)
61{ 58{
62 struct panel_drv_data *ddata = to_panel_data(dssdev); 59 struct omap_dss_device *src = dssdev->src;
63 struct omap_dss_device *in = ddata->in;
64 60
65 omapdss_device_disconnect(in, dssdev); 61 omapdss_device_disconnect(src, dssdev);
66 62
67 omap_dss_put_device(in); 63 omap_dss_put_device(src);
68 ddata->in = NULL;
69} 64}
70 65
71static int panel_dpi_enable(struct omap_dss_device *dssdev) 66static int panel_dpi_enable(struct omap_dss_device *dssdev)
72{ 67{
73 struct panel_drv_data *ddata = to_panel_data(dssdev); 68 struct panel_drv_data *ddata = to_panel_data(dssdev);
74 struct omap_dss_device *in = ddata->in; 69 struct omap_dss_device *src = dssdev->src;
75 int r; 70 int r;
76 71
77 if (!omapdss_device_is_connected(dssdev)) 72 if (!omapdss_device_is_connected(dssdev))
@@ -80,15 +75,15 @@ static int panel_dpi_enable(struct omap_dss_device *dssdev)
80 if (omapdss_device_is_enabled(dssdev)) 75 if (omapdss_device_is_enabled(dssdev))
81 return 0; 76 return 0;
82 77
83 in->ops->set_timings(in, &ddata->vm); 78 src->ops->set_timings(src, &ddata->vm);
84 79
85 r = in->ops->enable(in); 80 r = src->ops->enable(src);
86 if (r) 81 if (r)
87 return r; 82 return r;
88 83
89 r = regulator_enable(ddata->vcc_supply); 84 r = regulator_enable(ddata->vcc_supply);
90 if (r) { 85 if (r) {
91 in->ops->disable(in); 86 src->ops->disable(src);
92 return r; 87 return r;
93 } 88 }
94 89
@@ -103,7 +98,7 @@ static int panel_dpi_enable(struct omap_dss_device *dssdev)
103static void panel_dpi_disable(struct omap_dss_device *dssdev) 98static void panel_dpi_disable(struct omap_dss_device *dssdev)
104{ 99{
105 struct panel_drv_data *ddata = to_panel_data(dssdev); 100 struct panel_drv_data *ddata = to_panel_data(dssdev);
106 struct omap_dss_device *in = ddata->in; 101 struct omap_dss_device *src = dssdev->src;
107 102
108 if (!omapdss_device_is_enabled(dssdev)) 103 if (!omapdss_device_is_enabled(dssdev))
109 return; 104 return;
@@ -113,7 +108,7 @@ static void panel_dpi_disable(struct omap_dss_device *dssdev)
113 gpiod_set_value_cansleep(ddata->enable_gpio, 0); 108 gpiod_set_value_cansleep(ddata->enable_gpio, 0);
114 regulator_disable(ddata->vcc_supply); 109 regulator_disable(ddata->vcc_supply);
115 110
116 in->ops->disable(in); 111 src->ops->disable(src);
117 112
118 dssdev->state = OMAP_DSS_DISPLAY_DISABLED; 113 dssdev->state = OMAP_DSS_DISPLAY_DISABLED;
119} 114}
@@ -122,11 +117,11 @@ static void panel_dpi_set_timings(struct omap_dss_device *dssdev,
122 struct videomode *vm) 117 struct videomode *vm)
123{ 118{
124 struct panel_drv_data *ddata = to_panel_data(dssdev); 119 struct panel_drv_data *ddata = to_panel_data(dssdev);
125 struct omap_dss_device *in = ddata->in; 120 struct omap_dss_device *src = dssdev->src;
126 121
127 ddata->vm = *vm; 122 ddata->vm = *vm;
128 123
129 in->ops->set_timings(in, vm); 124 src->ops->set_timings(src, vm);
130} 125}
131 126
132static void panel_dpi_get_timings(struct omap_dss_device *dssdev, 127static void panel_dpi_get_timings(struct omap_dss_device *dssdev,
@@ -140,10 +135,9 @@ static void panel_dpi_get_timings(struct omap_dss_device *dssdev,
140static int panel_dpi_check_timings(struct omap_dss_device *dssdev, 135static int panel_dpi_check_timings(struct omap_dss_device *dssdev,
141 struct videomode *vm) 136 struct videomode *vm)
142{ 137{
143 struct panel_drv_data *ddata = to_panel_data(dssdev); 138 struct omap_dss_device *src = dssdev->src;
144 struct omap_dss_device *in = ddata->in;
145 139
146 return in->ops->check_timings(in, vm); 140 return src->ops->check_timings(src, vm);
147} 141}
148 142
149static const struct omap_dss_driver panel_dpi_ops = { 143static const struct omap_dss_driver panel_dpi_ops = {
diff --git a/drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c b/drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c
index 443dc874e448..365ece2927a4 100644
--- a/drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c
+++ b/drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c
@@ -41,7 +41,6 @@
41 41
42struct panel_drv_data { 42struct panel_drv_data {
43 struct omap_dss_device dssdev; 43 struct omap_dss_device dssdev;
44 struct omap_dss_device *in;
45 44
46 struct videomode vm; 45 struct videomode vm;
47 46
@@ -142,11 +141,11 @@ static void hw_guard_wait(struct panel_drv_data *ddata)
142 141
143static int dsicm_dcs_read_1(struct panel_drv_data *ddata, u8 dcs_cmd, u8 *data) 142static int dsicm_dcs_read_1(struct panel_drv_data *ddata, u8 dcs_cmd, u8 *data)
144{ 143{
145 struct omap_dss_device *in = ddata->in; 144 struct omap_dss_device *src = ddata->dssdev.src;
146 int r; 145 int r;
147 u8 buf[1]; 146 u8 buf[1];
148 147
149 r = in->ops->dsi.dcs_read(in, ddata->channel, dcs_cmd, buf, 1); 148 r = src->ops->dsi.dcs_read(src, ddata->channel, dcs_cmd, buf, 1);
150 149
151 if (r < 0) 150 if (r < 0)
152 return r; 151 return r;
@@ -158,29 +157,30 @@ static int dsicm_dcs_read_1(struct panel_drv_data *ddata, u8 dcs_cmd, u8 *data)
158 157
159static int dsicm_dcs_write_0(struct panel_drv_data *ddata, u8 dcs_cmd) 158static int dsicm_dcs_write_0(struct panel_drv_data *ddata, u8 dcs_cmd)
160{ 159{
161 struct omap_dss_device *in = ddata->in; 160 struct omap_dss_device *src = ddata->dssdev.src;
162 return in->ops->dsi.dcs_write(in, ddata->channel, &dcs_cmd, 1); 161
162 return src->ops->dsi.dcs_write(src, ddata->channel, &dcs_cmd, 1);
163} 163}
164 164
165static int dsicm_dcs_write_1(struct panel_drv_data *ddata, u8 dcs_cmd, u8 param) 165static int dsicm_dcs_write_1(struct panel_drv_data *ddata, u8 dcs_cmd, u8 param)
166{ 166{
167 struct omap_dss_device *in = ddata->in; 167 struct omap_dss_device *src = ddata->dssdev.src;
168 u8 buf[2] = { dcs_cmd, param }; 168 u8 buf[2] = { dcs_cmd, param };
169 169
170 return in->ops->dsi.dcs_write(in, ddata->channel, buf, 2); 170 return src->ops->dsi.dcs_write(src, ddata->channel, buf, 2);
171} 171}
172 172
173static int dsicm_sleep_in(struct panel_drv_data *ddata) 173static int dsicm_sleep_in(struct panel_drv_data *ddata)
174 174
175{ 175{
176 struct omap_dss_device *in = ddata->in; 176 struct omap_dss_device *src = ddata->dssdev.src;
177 u8 cmd; 177 u8 cmd;
178 int r; 178 int r;
179 179
180 hw_guard_wait(ddata); 180 hw_guard_wait(ddata);
181 181
182 cmd = MIPI_DCS_ENTER_SLEEP_MODE; 182 cmd = MIPI_DCS_ENTER_SLEEP_MODE;
183 r = in->ops->dsi.dcs_write_nosync(in, ddata->channel, &cmd, 1); 183 r = src->ops->dsi.dcs_write_nosync(src, ddata->channel, &cmd, 1);
184 if (r) 184 if (r)
185 return r; 185 return r;
186 186
@@ -228,7 +228,7 @@ static int dsicm_get_id(struct panel_drv_data *ddata, u8 *id1, u8 *id2, u8 *id3)
228static int dsicm_set_update_window(struct panel_drv_data *ddata, 228static int dsicm_set_update_window(struct panel_drv_data *ddata,
229 u16 x, u16 y, u16 w, u16 h) 229 u16 x, u16 y, u16 w, u16 h)
230{ 230{
231 struct omap_dss_device *in = ddata->in; 231 struct omap_dss_device *src = ddata->dssdev.src;
232 int r; 232 int r;
233 u16 x1 = x; 233 u16 x1 = x;
234 u16 x2 = x + w - 1; 234 u16 x2 = x + w - 1;
@@ -242,7 +242,7 @@ static int dsicm_set_update_window(struct panel_drv_data *ddata,
242 buf[3] = (x2 >> 8) & 0xff; 242 buf[3] = (x2 >> 8) & 0xff;
243 buf[4] = (x2 >> 0) & 0xff; 243 buf[4] = (x2 >> 0) & 0xff;
244 244
245 r = in->ops->dsi.dcs_write_nosync(in, ddata->channel, buf, sizeof(buf)); 245 r = src->ops->dsi.dcs_write_nosync(src, ddata->channel, buf, sizeof(buf));
246 if (r) 246 if (r)
247 return r; 247 return r;
248 248
@@ -252,11 +252,11 @@ static int dsicm_set_update_window(struct panel_drv_data *ddata,
252 buf[3] = (y2 >> 8) & 0xff; 252 buf[3] = (y2 >> 8) & 0xff;
253 buf[4] = (y2 >> 0) & 0xff; 253 buf[4] = (y2 >> 0) & 0xff;
254 254
255 r = in->ops->dsi.dcs_write_nosync(in, ddata->channel, buf, sizeof(buf)); 255 r = src->ops->dsi.dcs_write_nosync(src, ddata->channel, buf, sizeof(buf));
256 if (r) 256 if (r)
257 return r; 257 return r;
258 258
259 in->ops->dsi.bta_sync(in, ddata->channel); 259 src->ops->dsi.bta_sync(src, ddata->channel);
260 260
261 return r; 261 return r;
262} 262}
@@ -275,7 +275,7 @@ static void dsicm_cancel_ulps_work(struct panel_drv_data *ddata)
275 275
276static int dsicm_enter_ulps(struct panel_drv_data *ddata) 276static int dsicm_enter_ulps(struct panel_drv_data *ddata)
277{ 277{
278 struct omap_dss_device *in = ddata->in; 278 struct omap_dss_device *src = ddata->dssdev.src;
279 int r; 279 int r;
280 280
281 if (ddata->ulps_enabled) 281 if (ddata->ulps_enabled)
@@ -290,7 +290,7 @@ static int dsicm_enter_ulps(struct panel_drv_data *ddata)
290 if (ddata->ext_te_gpio) 290 if (ddata->ext_te_gpio)
291 disable_irq(gpiod_to_irq(ddata->ext_te_gpio)); 291 disable_irq(gpiod_to_irq(ddata->ext_te_gpio));
292 292
293 in->ops->dsi.disable(in, false, true); 293 src->ops->dsi.disable(src, false, true);
294 294
295 ddata->ulps_enabled = true; 295 ddata->ulps_enabled = true;
296 296
@@ -309,19 +309,19 @@ err:
309 309
310static int dsicm_exit_ulps(struct panel_drv_data *ddata) 310static int dsicm_exit_ulps(struct panel_drv_data *ddata)
311{ 311{
312 struct omap_dss_device *in = ddata->in; 312 struct omap_dss_device *src = ddata->dssdev.src;
313 int r; 313 int r;
314 314
315 if (!ddata->ulps_enabled) 315 if (!ddata->ulps_enabled)
316 return 0; 316 return 0;
317 317
318 r = in->ops->enable(in); 318 r = src->ops->enable(src);
319 if (r) { 319 if (r) {
320 dev_err(&ddata->pdev->dev, "failed to enable DSI\n"); 320 dev_err(&ddata->pdev->dev, "failed to enable DSI\n");
321 goto err1; 321 goto err1;
322 } 322 }
323 323
324 in->ops->dsi.enable_hs(in, ddata->channel, true); 324 src->ops->dsi.enable_hs(src, ddata->channel, true);
325 325
326 r = _dsicm_enable_te(ddata, true); 326 r = _dsicm_enable_te(ddata, true);
327 if (r) { 327 if (r) {
@@ -366,7 +366,7 @@ static int dsicm_wake_up(struct panel_drv_data *ddata)
366static int dsicm_bl_update_status(struct backlight_device *dev) 366static int dsicm_bl_update_status(struct backlight_device *dev)
367{ 367{
368 struct panel_drv_data *ddata = dev_get_drvdata(&dev->dev); 368 struct panel_drv_data *ddata = dev_get_drvdata(&dev->dev);
369 struct omap_dss_device *in = ddata->in; 369 struct omap_dss_device *src = ddata->dssdev.src;
370 int r = 0; 370 int r = 0;
371 int level; 371 int level;
372 372
@@ -381,13 +381,13 @@ static int dsicm_bl_update_status(struct backlight_device *dev)
381 mutex_lock(&ddata->lock); 381 mutex_lock(&ddata->lock);
382 382
383 if (ddata->enabled) { 383 if (ddata->enabled) {
384 in->ops->dsi.bus_lock(in); 384 src->ops->dsi.bus_lock(src);
385 385
386 r = dsicm_wake_up(ddata); 386 r = dsicm_wake_up(ddata);
387 if (!r) 387 if (!r)
388 r = dsicm_dcs_write_1(ddata, DCS_BRIGHTNESS, level); 388 r = dsicm_dcs_write_1(ddata, DCS_BRIGHTNESS, level);
389 389
390 in->ops->dsi.bus_unlock(in); 390 src->ops->dsi.bus_unlock(src);
391 } 391 }
392 392
393 mutex_unlock(&ddata->lock); 393 mutex_unlock(&ddata->lock);
@@ -414,21 +414,21 @@ static ssize_t dsicm_num_errors_show(struct device *dev,
414{ 414{
415 struct platform_device *pdev = to_platform_device(dev); 415 struct platform_device *pdev = to_platform_device(dev);
416 struct panel_drv_data *ddata = platform_get_drvdata(pdev); 416 struct panel_drv_data *ddata = platform_get_drvdata(pdev);
417 struct omap_dss_device *in = ddata->in; 417 struct omap_dss_device *src = ddata->dssdev.src;
418 u8 errors = 0; 418 u8 errors = 0;
419 int r; 419 int r;
420 420
421 mutex_lock(&ddata->lock); 421 mutex_lock(&ddata->lock);
422 422
423 if (ddata->enabled) { 423 if (ddata->enabled) {
424 in->ops->dsi.bus_lock(in); 424 src->ops->dsi.bus_lock(src);
425 425
426 r = dsicm_wake_up(ddata); 426 r = dsicm_wake_up(ddata);
427 if (!r) 427 if (!r)
428 r = dsicm_dcs_read_1(ddata, DCS_READ_NUM_ERRORS, 428 r = dsicm_dcs_read_1(ddata, DCS_READ_NUM_ERRORS,
429 &errors); 429 &errors);
430 430
431 in->ops->dsi.bus_unlock(in); 431 src->ops->dsi.bus_unlock(src);
432 } else { 432 } else {
433 r = -ENODEV; 433 r = -ENODEV;
434 } 434 }
@@ -446,20 +446,20 @@ static ssize_t dsicm_hw_revision_show(struct device *dev,
446{ 446{
447 struct platform_device *pdev = to_platform_device(dev); 447 struct platform_device *pdev = to_platform_device(dev);
448 struct panel_drv_data *ddata = platform_get_drvdata(pdev); 448 struct panel_drv_data *ddata = platform_get_drvdata(pdev);
449 struct omap_dss_device *in = ddata->in; 449 struct omap_dss_device *src = ddata->dssdev.src;
450 u8 id1, id2, id3; 450 u8 id1, id2, id3;
451 int r; 451 int r;
452 452
453 mutex_lock(&ddata->lock); 453 mutex_lock(&ddata->lock);
454 454
455 if (ddata->enabled) { 455 if (ddata->enabled) {
456 in->ops->dsi.bus_lock(in); 456 src->ops->dsi.bus_lock(src);
457 457
458 r = dsicm_wake_up(ddata); 458 r = dsicm_wake_up(ddata);
459 if (!r) 459 if (!r)
460 r = dsicm_get_id(ddata, &id1, &id2, &id3); 460 r = dsicm_get_id(ddata, &id1, &id2, &id3);
461 461
462 in->ops->dsi.bus_unlock(in); 462 src->ops->dsi.bus_unlock(src);
463 } else { 463 } else {
464 r = -ENODEV; 464 r = -ENODEV;
465 } 465 }
@@ -478,7 +478,7 @@ static ssize_t dsicm_store_ulps(struct device *dev,
478{ 478{
479 struct platform_device *pdev = to_platform_device(dev); 479 struct platform_device *pdev = to_platform_device(dev);
480 struct panel_drv_data *ddata = platform_get_drvdata(pdev); 480 struct panel_drv_data *ddata = platform_get_drvdata(pdev);
481 struct omap_dss_device *in = ddata->in; 481 struct omap_dss_device *src = ddata->dssdev.src;
482 unsigned long t; 482 unsigned long t;
483 int r; 483 int r;
484 484
@@ -489,14 +489,14 @@ static ssize_t dsicm_store_ulps(struct device *dev,
489 mutex_lock(&ddata->lock); 489 mutex_lock(&ddata->lock);
490 490
491 if (ddata->enabled) { 491 if (ddata->enabled) {
492 in->ops->dsi.bus_lock(in); 492 src->ops->dsi.bus_lock(src);
493 493
494 if (t) 494 if (t)
495 r = dsicm_enter_ulps(ddata); 495 r = dsicm_enter_ulps(ddata);
496 else 496 else
497 r = dsicm_wake_up(ddata); 497 r = dsicm_wake_up(ddata);
498 498
499 in->ops->dsi.bus_unlock(in); 499 src->ops->dsi.bus_unlock(src);
500 } 500 }
501 501
502 mutex_unlock(&ddata->lock); 502 mutex_unlock(&ddata->lock);
@@ -528,7 +528,7 @@ static ssize_t dsicm_store_ulps_timeout(struct device *dev,
528{ 528{
529 struct platform_device *pdev = to_platform_device(dev); 529 struct platform_device *pdev = to_platform_device(dev);
530 struct panel_drv_data *ddata = platform_get_drvdata(pdev); 530 struct panel_drv_data *ddata = platform_get_drvdata(pdev);
531 struct omap_dss_device *in = ddata->in; 531 struct omap_dss_device *src = ddata->dssdev.src;
532 unsigned long t; 532 unsigned long t;
533 int r; 533 int r;
534 534
@@ -541,9 +541,9 @@ static ssize_t dsicm_store_ulps_timeout(struct device *dev,
541 541
542 if (ddata->enabled) { 542 if (ddata->enabled) {
543 /* dsicm_wake_up will restart the timer */ 543 /* dsicm_wake_up will restart the timer */
544 in->ops->dsi.bus_lock(in); 544 src->ops->dsi.bus_lock(src);
545 r = dsicm_wake_up(ddata); 545 r = dsicm_wake_up(ddata);
546 in->ops->dsi.bus_unlock(in); 546 src->ops->dsi.bus_unlock(src);
547 } 547 }
548 548
549 mutex_unlock(&ddata->lock); 549 mutex_unlock(&ddata->lock);
@@ -603,7 +603,7 @@ static void dsicm_hw_reset(struct panel_drv_data *ddata)
603 603
604static int dsicm_power_on(struct panel_drv_data *ddata) 604static int dsicm_power_on(struct panel_drv_data *ddata)
605{ 605{
606 struct omap_dss_device *in = ddata->in; 606 struct omap_dss_device *src = ddata->dssdev.src;
607 u8 id1, id2, id3; 607 u8 id1, id2, id3;
608 int r; 608 int r;
609 struct omap_dss_dsi_config dsi_config = { 609 struct omap_dss_dsi_config dsi_config = {
@@ -635,7 +635,7 @@ static int dsicm_power_on(struct panel_drv_data *ddata)
635 } 635 }
636 636
637 if (ddata->pin_config.num_pins > 0) { 637 if (ddata->pin_config.num_pins > 0) {
638 r = in->ops->dsi.configure_pins(in, &ddata->pin_config); 638 r = src->ops->dsi.configure_pins(src, &ddata->pin_config);
639 if (r) { 639 if (r) {
640 dev_err(&ddata->pdev->dev, 640 dev_err(&ddata->pdev->dev,
641 "failed to configure DSI pins\n"); 641 "failed to configure DSI pins\n");
@@ -643,13 +643,13 @@ static int dsicm_power_on(struct panel_drv_data *ddata)
643 } 643 }
644 } 644 }
645 645
646 r = in->ops->dsi.set_config(in, &dsi_config); 646 r = src->ops->dsi.set_config(src, &dsi_config);
647 if (r) { 647 if (r) {
648 dev_err(&ddata->pdev->dev, "failed to configure DSI\n"); 648 dev_err(&ddata->pdev->dev, "failed to configure DSI\n");
649 goto err_vddi; 649 goto err_vddi;
650 } 650 }
651 651
652 r = in->ops->enable(in); 652 r = src->ops->enable(src);
653 if (r) { 653 if (r) {
654 dev_err(&ddata->pdev->dev, "failed to enable DSI\n"); 654 dev_err(&ddata->pdev->dev, "failed to enable DSI\n");
655 goto err_vddi; 655 goto err_vddi;
@@ -657,7 +657,7 @@ static int dsicm_power_on(struct panel_drv_data *ddata)
657 657
658 dsicm_hw_reset(ddata); 658 dsicm_hw_reset(ddata);
659 659
660 in->ops->dsi.enable_hs(in, ddata->channel, false); 660 src->ops->dsi.enable_hs(src, ddata->channel, false);
661 661
662 r = dsicm_sleep_out(ddata); 662 r = dsicm_sleep_out(ddata);
663 if (r) 663 if (r)
@@ -689,7 +689,7 @@ static int dsicm_power_on(struct panel_drv_data *ddata)
689 if (r) 689 if (r)
690 goto err; 690 goto err;
691 691
692 r = in->ops->dsi.enable_video_output(in, ddata->channel); 692 r = src->ops->dsi.enable_video_output(src, ddata->channel);
693 if (r) 693 if (r)
694 goto err; 694 goto err;
695 695
@@ -701,7 +701,7 @@ static int dsicm_power_on(struct panel_drv_data *ddata)
701 ddata->intro_printed = true; 701 ddata->intro_printed = true;
702 } 702 }
703 703
704 in->ops->dsi.enable_hs(in, ddata->channel, true); 704 src->ops->dsi.enable_hs(src, ddata->channel, true);
705 705
706 return 0; 706 return 0;
707err: 707err:
@@ -709,7 +709,7 @@ err:
709 709
710 dsicm_hw_reset(ddata); 710 dsicm_hw_reset(ddata);
711 711
712 in->ops->dsi.disable(in, true, false); 712 src->ops->dsi.disable(src, true, false);
713err_vddi: 713err_vddi:
714 if (ddata->vddi) 714 if (ddata->vddi)
715 regulator_disable(ddata->vddi); 715 regulator_disable(ddata->vddi);
@@ -722,10 +722,10 @@ err_vpnl:
722 722
723static void dsicm_power_off(struct panel_drv_data *ddata) 723static void dsicm_power_off(struct panel_drv_data *ddata)
724{ 724{
725 struct omap_dss_device *in = ddata->in; 725 struct omap_dss_device *src = ddata->dssdev.src;
726 int r; 726 int r;
727 727
728 in->ops->dsi.disable_video_output(in, ddata->channel); 728 src->ops->dsi.disable_video_output(src, ddata->channel);
729 729
730 r = dsicm_dcs_write_0(ddata, MIPI_DCS_SET_DISPLAY_OFF); 730 r = dsicm_dcs_write_0(ddata, MIPI_DCS_SET_DISPLAY_OFF);
731 if (!r) 731 if (!r)
@@ -737,7 +737,7 @@ static void dsicm_power_off(struct panel_drv_data *ddata)
737 dsicm_hw_reset(ddata); 737 dsicm_hw_reset(ddata);
738 } 738 }
739 739
740 in->ops->dsi.disable(in, true, false); 740 src->ops->dsi.disable(src, true, false);
741 741
742 if (ddata->vddi) 742 if (ddata->vddi)
743 regulator_disable(ddata->vddi); 743 regulator_disable(ddata->vddi);
@@ -760,61 +760,59 @@ static int dsicm_connect(struct omap_dss_device *dssdev)
760{ 760{
761 struct panel_drv_data *ddata = to_panel_data(dssdev); 761 struct panel_drv_data *ddata = to_panel_data(dssdev);
762 struct device *dev = &ddata->pdev->dev; 762 struct device *dev = &ddata->pdev->dev;
763 struct omap_dss_device *in; 763 struct omap_dss_device *src;
764 int r; 764 int r;
765 765
766 in = omapdss_of_find_source_for_first_ep(dssdev->dev->of_node); 766 src = omapdss_of_find_source_for_first_ep(dssdev->dev->of_node);
767 if (IS_ERR(in)) { 767 if (IS_ERR(src)) {
768 dev_err(dssdev->dev, "failed to find video source\n"); 768 dev_err(dssdev->dev, "failed to find video source\n");
769 return PTR_ERR(in); 769 return PTR_ERR(src);
770 } 770 }
771 771
772 r = omapdss_device_connect(in, dssdev); 772 r = omapdss_device_connect(src, dssdev);
773 if (r) { 773 if (r) {
774 dev_err(dev, "Failed to connect to video source\n"); 774 dev_err(dev, "Failed to connect to video source\n");
775 goto err_connect; 775 goto err_connect;
776 } 776 }
777 777
778 r = in->ops->dsi.request_vc(in, &ddata->channel); 778 r = src->ops->dsi.request_vc(src, &ddata->channel);
779 if (r) { 779 if (r) {
780 dev_err(dev, "failed to get virtual channel\n"); 780 dev_err(dev, "failed to get virtual channel\n");
781 goto err_req_vc; 781 goto err_req_vc;
782 } 782 }
783 783
784 r = in->ops->dsi.set_vc_id(in, ddata->channel, TCH); 784 r = src->ops->dsi.set_vc_id(src, ddata->channel, TCH);
785 if (r) { 785 if (r) {
786 dev_err(dev, "failed to set VC_ID\n"); 786 dev_err(dev, "failed to set VC_ID\n");
787 goto err_vc_id; 787 goto err_vc_id;
788 } 788 }
789 789
790 ddata->in = in;
791 return 0; 790 return 0;
792 791
793err_vc_id: 792err_vc_id:
794 in->ops->dsi.release_vc(in, ddata->channel); 793 src->ops->dsi.release_vc(src, ddata->channel);
795err_req_vc: 794err_req_vc:
796 omapdss_device_disconnect(in, dssdev); 795 omapdss_device_disconnect(src, dssdev);
797err_connect: 796err_connect:
798 omap_dss_put_device(in); 797 omap_dss_put_device(src);
799 return r; 798 return r;
800} 799}
801 800
802static void dsicm_disconnect(struct omap_dss_device *dssdev) 801static void dsicm_disconnect(struct omap_dss_device *dssdev)
803{ 802{
804 struct panel_drv_data *ddata = to_panel_data(dssdev); 803 struct panel_drv_data *ddata = to_panel_data(dssdev);
805 struct omap_dss_device *in = ddata->in; 804 struct omap_dss_device *src = dssdev->src;
806 805
807 in->ops->dsi.release_vc(in, ddata->channel); 806 src->ops->dsi.release_vc(src, ddata->channel);
808 omapdss_device_disconnect(in, dssdev); 807 omapdss_device_disconnect(src, dssdev);
809 808
810 omap_dss_put_device(in); 809 omap_dss_put_device(src);
811 ddata->in = NULL;
812} 810}
813 811
814static int dsicm_enable(struct omap_dss_device *dssdev) 812static int dsicm_enable(struct omap_dss_device *dssdev)
815{ 813{
816 struct panel_drv_data *ddata = to_panel_data(dssdev); 814 struct panel_drv_data *ddata = to_panel_data(dssdev);
817 struct omap_dss_device *in = ddata->in; 815 struct omap_dss_device *src = dssdev->src;
818 int r; 816 int r;
819 817
820 dev_dbg(&ddata->pdev->dev, "enable\n"); 818 dev_dbg(&ddata->pdev->dev, "enable\n");
@@ -831,11 +829,11 @@ static int dsicm_enable(struct omap_dss_device *dssdev)
831 goto err; 829 goto err;
832 } 830 }
833 831
834 in->ops->dsi.bus_lock(in); 832 src->ops->dsi.bus_lock(src);
835 833
836 r = dsicm_power_on(ddata); 834 r = dsicm_power_on(ddata);
837 835
838 in->ops->dsi.bus_unlock(in); 836 src->ops->dsi.bus_unlock(src);
839 837
840 if (r) 838 if (r)
841 goto err; 839 goto err;
@@ -856,7 +854,7 @@ err:
856static void dsicm_disable(struct omap_dss_device *dssdev) 854static void dsicm_disable(struct omap_dss_device *dssdev)
857{ 855{
858 struct panel_drv_data *ddata = to_panel_data(dssdev); 856 struct panel_drv_data *ddata = to_panel_data(dssdev);
859 struct omap_dss_device *in = ddata->in; 857 struct omap_dss_device *src = dssdev->src;
860 int r; 858 int r;
861 859
862 dev_dbg(&ddata->pdev->dev, "disable\n"); 860 dev_dbg(&ddata->pdev->dev, "disable\n");
@@ -867,7 +865,7 @@ static void dsicm_disable(struct omap_dss_device *dssdev)
867 865
868 dsicm_cancel_ulps_work(ddata); 866 dsicm_cancel_ulps_work(ddata);
869 867
870 in->ops->dsi.bus_lock(in); 868 src->ops->dsi.bus_lock(src);
871 869
872 if (omapdss_device_is_enabled(dssdev)) { 870 if (omapdss_device_is_enabled(dssdev)) {
873 r = dsicm_wake_up(ddata); 871 r = dsicm_wake_up(ddata);
@@ -875,7 +873,7 @@ static void dsicm_disable(struct omap_dss_device *dssdev)
875 dsicm_power_off(ddata); 873 dsicm_power_off(ddata);
876 } 874 }
877 875
878 in->ops->dsi.bus_unlock(in); 876 src->ops->dsi.bus_unlock(src);
879 877
880 dssdev->state = OMAP_DSS_DISPLAY_DISABLED; 878 dssdev->state = OMAP_DSS_DISPLAY_DISABLED;
881 879
@@ -885,16 +883,16 @@ static void dsicm_disable(struct omap_dss_device *dssdev)
885static void dsicm_framedone_cb(int err, void *data) 883static void dsicm_framedone_cb(int err, void *data)
886{ 884{
887 struct panel_drv_data *ddata = data; 885 struct panel_drv_data *ddata = data;
888 struct omap_dss_device *in = ddata->in; 886 struct omap_dss_device *src = ddata->dssdev.src;
889 887
890 dev_dbg(&ddata->pdev->dev, "framedone, err %d\n", err); 888 dev_dbg(&ddata->pdev->dev, "framedone, err %d\n", err);
891 in->ops->dsi.bus_unlock(ddata->in); 889 src->ops->dsi.bus_unlock(src);
892} 890}
893 891
894static irqreturn_t dsicm_te_isr(int irq, void *data) 892static irqreturn_t dsicm_te_isr(int irq, void *data)
895{ 893{
896 struct panel_drv_data *ddata = data; 894 struct panel_drv_data *ddata = data;
897 struct omap_dss_device *in = ddata->in; 895 struct omap_dss_device *src = ddata->dssdev.src;
898 int old; 896 int old;
899 int r; 897 int r;
900 898
@@ -903,7 +901,7 @@ static irqreturn_t dsicm_te_isr(int irq, void *data)
903 if (old) { 901 if (old) {
904 cancel_delayed_work(&ddata->te_timeout_work); 902 cancel_delayed_work(&ddata->te_timeout_work);
905 903
906 r = in->ops->dsi.update(in, ddata->channel, dsicm_framedone_cb, 904 r = src->ops->dsi.update(src, ddata->channel, dsicm_framedone_cb,
907 ddata); 905 ddata);
908 if (r) 906 if (r)
909 goto err; 907 goto err;
@@ -912,7 +910,7 @@ static irqreturn_t dsicm_te_isr(int irq, void *data)
912 return IRQ_HANDLED; 910 return IRQ_HANDLED;
913err: 911err:
914 dev_err(&ddata->pdev->dev, "start update failed\n"); 912 dev_err(&ddata->pdev->dev, "start update failed\n");
915 in->ops->dsi.bus_unlock(in); 913 src->ops->dsi.bus_unlock(src);
916 return IRQ_HANDLED; 914 return IRQ_HANDLED;
917} 915}
918 916
@@ -920,25 +918,25 @@ static void dsicm_te_timeout_work_callback(struct work_struct *work)
920{ 918{
921 struct panel_drv_data *ddata = container_of(work, struct panel_drv_data, 919 struct panel_drv_data *ddata = container_of(work, struct panel_drv_data,
922 te_timeout_work.work); 920 te_timeout_work.work);
923 struct omap_dss_device *in = ddata->in; 921 struct omap_dss_device *src = ddata->dssdev.src;
924 922
925 dev_err(&ddata->pdev->dev, "TE not received for 250ms!\n"); 923 dev_err(&ddata->pdev->dev, "TE not received for 250ms!\n");
926 924
927 atomic_set(&ddata->do_update, 0); 925 atomic_set(&ddata->do_update, 0);
928 in->ops->dsi.bus_unlock(in); 926 src->ops->dsi.bus_unlock(src);
929} 927}
930 928
931static int dsicm_update(struct omap_dss_device *dssdev, 929static int dsicm_update(struct omap_dss_device *dssdev,
932 u16 x, u16 y, u16 w, u16 h) 930 u16 x, u16 y, u16 w, u16 h)
933{ 931{
934 struct panel_drv_data *ddata = to_panel_data(dssdev); 932 struct panel_drv_data *ddata = to_panel_data(dssdev);
935 struct omap_dss_device *in = ddata->in; 933 struct omap_dss_device *src = dssdev->src;
936 int r; 934 int r;
937 935
938 dev_dbg(&ddata->pdev->dev, "update %d, %d, %d x %d\n", x, y, w, h); 936 dev_dbg(&ddata->pdev->dev, "update %d, %d, %d x %d\n", x, y, w, h);
939 937
940 mutex_lock(&ddata->lock); 938 mutex_lock(&ddata->lock);
941 in->ops->dsi.bus_lock(in); 939 src->ops->dsi.bus_lock(src);
942 940
943 r = dsicm_wake_up(ddata); 941 r = dsicm_wake_up(ddata);
944 if (r) 942 if (r)
@@ -960,17 +958,17 @@ static int dsicm_update(struct omap_dss_device *dssdev,
960 msecs_to_jiffies(250)); 958 msecs_to_jiffies(250));
961 atomic_set(&ddata->do_update, 1); 959 atomic_set(&ddata->do_update, 1);
962 } else { 960 } else {
963 r = in->ops->dsi.update(in, ddata->channel, dsicm_framedone_cb, 961 r = src->ops->dsi.update(src, ddata->channel, dsicm_framedone_cb,
964 ddata); 962 ddata);
965 if (r) 963 if (r)
966 goto err; 964 goto err;
967 } 965 }
968 966
969 /* note: no bus_unlock here. unlock is in framedone_cb */ 967 /* note: no bus_unlock here. unlock is src framedone_cb */
970 mutex_unlock(&ddata->lock); 968 mutex_unlock(&ddata->lock);
971 return 0; 969 return 0;
972err: 970err:
973 in->ops->dsi.bus_unlock(in); 971 src->ops->dsi.bus_unlock(src);
974 mutex_unlock(&ddata->lock); 972 mutex_unlock(&ddata->lock);
975 return r; 973 return r;
976} 974}
@@ -978,13 +976,13 @@ err:
978static int dsicm_sync(struct omap_dss_device *dssdev) 976static int dsicm_sync(struct omap_dss_device *dssdev)
979{ 977{
980 struct panel_drv_data *ddata = to_panel_data(dssdev); 978 struct panel_drv_data *ddata = to_panel_data(dssdev);
981 struct omap_dss_device *in = ddata->in; 979 struct omap_dss_device *src = dssdev->src;
982 980
983 dev_dbg(&ddata->pdev->dev, "sync\n"); 981 dev_dbg(&ddata->pdev->dev, "sync\n");
984 982
985 mutex_lock(&ddata->lock); 983 mutex_lock(&ddata->lock);
986 in->ops->dsi.bus_lock(in); 984 src->ops->dsi.bus_lock(src);
987 in->ops->dsi.bus_unlock(in); 985 src->ops->dsi.bus_unlock(src);
988 mutex_unlock(&ddata->lock); 986 mutex_unlock(&ddata->lock);
989 987
990 dev_dbg(&ddata->pdev->dev, "sync done\n"); 988 dev_dbg(&ddata->pdev->dev, "sync done\n");
@@ -994,7 +992,7 @@ static int dsicm_sync(struct omap_dss_device *dssdev)
994 992
995static int _dsicm_enable_te(struct panel_drv_data *ddata, bool enable) 993static int _dsicm_enable_te(struct panel_drv_data *ddata, bool enable)
996{ 994{
997 struct omap_dss_device *in = ddata->in; 995 struct omap_dss_device *src = ddata->dssdev.src;
998 int r; 996 int r;
999 997
1000 if (enable) 998 if (enable)
@@ -1003,7 +1001,7 @@ static int _dsicm_enable_te(struct panel_drv_data *ddata, bool enable)
1003 r = dsicm_dcs_write_0(ddata, MIPI_DCS_SET_TEAR_OFF); 1001 r = dsicm_dcs_write_0(ddata, MIPI_DCS_SET_TEAR_OFF);
1004 1002
1005 if (!ddata->ext_te_gpio) 1003 if (!ddata->ext_te_gpio)
1006 in->ops->dsi.enable_te(in, enable); 1004 src->ops->dsi.enable_te(src, enable);
1007 1005
1008 /* possible panel bug */ 1006 /* possible panel bug */
1009 msleep(100); 1007 msleep(100);
@@ -1014,7 +1012,7 @@ static int _dsicm_enable_te(struct panel_drv_data *ddata, bool enable)
1014static int dsicm_enable_te(struct omap_dss_device *dssdev, bool enable) 1012static int dsicm_enable_te(struct omap_dss_device *dssdev, bool enable)
1015{ 1013{
1016 struct panel_drv_data *ddata = to_panel_data(dssdev); 1014 struct panel_drv_data *ddata = to_panel_data(dssdev);
1017 struct omap_dss_device *in = ddata->in; 1015 struct omap_dss_device *src = dssdev->src;
1018 int r; 1016 int r;
1019 1017
1020 mutex_lock(&ddata->lock); 1018 mutex_lock(&ddata->lock);
@@ -1022,7 +1020,7 @@ static int dsicm_enable_te(struct omap_dss_device *dssdev, bool enable)
1022 if (ddata->te_enabled == enable) 1020 if (ddata->te_enabled == enable)
1023 goto end; 1021 goto end;
1024 1022
1025 in->ops->dsi.bus_lock(in); 1023 src->ops->dsi.bus_lock(src);
1026 1024
1027 if (ddata->enabled) { 1025 if (ddata->enabled) {
1028 r = dsicm_wake_up(ddata); 1026 r = dsicm_wake_up(ddata);
@@ -1036,13 +1034,13 @@ static int dsicm_enable_te(struct omap_dss_device *dssdev, bool enable)
1036 1034
1037 ddata->te_enabled = enable; 1035 ddata->te_enabled = enable;
1038 1036
1039 in->ops->dsi.bus_unlock(in); 1037 src->ops->dsi.bus_unlock(src);
1040end: 1038end:
1041 mutex_unlock(&ddata->lock); 1039 mutex_unlock(&ddata->lock);
1042 1040
1043 return 0; 1041 return 0;
1044err: 1042err:
1045 in->ops->dsi.bus_unlock(in); 1043 src->ops->dsi.bus_unlock(src);
1046 mutex_unlock(&ddata->lock); 1044 mutex_unlock(&ddata->lock);
1047 1045
1048 return r; 1046 return r;
@@ -1065,7 +1063,7 @@ static int dsicm_memory_read(struct omap_dss_device *dssdev,
1065 u16 x, u16 y, u16 w, u16 h) 1063 u16 x, u16 y, u16 w, u16 h)
1066{ 1064{
1067 struct panel_drv_data *ddata = to_panel_data(dssdev); 1065 struct panel_drv_data *ddata = to_panel_data(dssdev);
1068 struct omap_dss_device *in = ddata->in; 1066 struct omap_dss_device *src = dssdev->src;
1069 int r; 1067 int r;
1070 int first = 1; 1068 int first = 1;
1071 int plen; 1069 int plen;
@@ -1084,7 +1082,7 @@ static int dsicm_memory_read(struct omap_dss_device *dssdev,
1084 size = min((u32)w * h * 3, 1082 size = min((u32)w * h * 3,
1085 ddata->vm.hactive * ddata->vm.vactive * 3); 1083 ddata->vm.hactive * ddata->vm.vactive * 3);
1086 1084
1087 in->ops->dsi.bus_lock(in); 1085 src->ops->dsi.bus_lock(src);
1088 1086
1089 r = dsicm_wake_up(ddata); 1087 r = dsicm_wake_up(ddata);
1090 if (r) 1088 if (r)
@@ -1100,7 +1098,7 @@ static int dsicm_memory_read(struct omap_dss_device *dssdev,
1100 1098
1101 dsicm_set_update_window(ddata, x, y, w, h); 1099 dsicm_set_update_window(ddata, x, y, w, h);
1102 1100
1103 r = in->ops->dsi.set_max_rx_packet_size(in, ddata->channel, plen); 1101 r = src->ops->dsi.set_max_rx_packet_size(src, ddata->channel, plen);
1104 if (r) 1102 if (r)
1105 goto err2; 1103 goto err2;
1106 1104
@@ -1108,7 +1106,7 @@ static int dsicm_memory_read(struct omap_dss_device *dssdev,
1108 u8 dcs_cmd = first ? 0x2e : 0x3e; 1106 u8 dcs_cmd = first ? 0x2e : 0x3e;
1109 first = 0; 1107 first = 0;
1110 1108
1111 r = in->ops->dsi.dcs_read(in, ddata->channel, dcs_cmd, 1109 r = src->ops->dsi.dcs_read(src, ddata->channel, dcs_cmd,
1112 buf + buf_used, size - buf_used); 1110 buf + buf_used, size - buf_used);
1113 1111
1114 if (r < 0) { 1112 if (r < 0) {
@@ -1134,9 +1132,9 @@ static int dsicm_memory_read(struct omap_dss_device *dssdev,
1134 r = buf_used; 1132 r = buf_used;
1135 1133
1136err3: 1134err3:
1137 in->ops->dsi.set_max_rx_packet_size(in, ddata->channel, 1); 1135 src->ops->dsi.set_max_rx_packet_size(src, ddata->channel, 1);
1138err2: 1136err2:
1139 in->ops->dsi.bus_unlock(in); 1137 src->ops->dsi.bus_unlock(src);
1140err1: 1138err1:
1141 mutex_unlock(&ddata->lock); 1139 mutex_unlock(&ddata->lock);
1142 return r; 1140 return r;
@@ -1147,7 +1145,7 @@ static void dsicm_ulps_work(struct work_struct *work)
1147 struct panel_drv_data *ddata = container_of(work, struct panel_drv_data, 1145 struct panel_drv_data *ddata = container_of(work, struct panel_drv_data,
1148 ulps_work.work); 1146 ulps_work.work);
1149 struct omap_dss_device *dssdev = &ddata->dssdev; 1147 struct omap_dss_device *dssdev = &ddata->dssdev;
1150 struct omap_dss_device *in = ddata->in; 1148 struct omap_dss_device *src = dssdev->src;
1151 1149
1152 mutex_lock(&ddata->lock); 1150 mutex_lock(&ddata->lock);
1153 1151
@@ -1156,11 +1154,11 @@ static void dsicm_ulps_work(struct work_struct *work)
1156 return; 1154 return;
1157 } 1155 }
1158 1156
1159 in->ops->dsi.bus_lock(in); 1157 src->ops->dsi.bus_lock(src);
1160 1158
1161 dsicm_enter_ulps(ddata); 1159 dsicm_enter_ulps(ddata);
1162 1160
1163 in->ops->dsi.bus_unlock(in); 1161 src->ops->dsi.bus_unlock(src);
1164 mutex_unlock(&ddata->lock); 1162 mutex_unlock(&ddata->lock);
1165} 1163}
1166 1164
diff --git a/drivers/gpu/drm/omapdrm/displays/panel-lgphilips-lb035q02.c b/drivers/gpu/drm/omapdrm/displays/panel-lgphilips-lb035q02.c
index ea4cdc8bd2f8..2e54ac115dbc 100644
--- a/drivers/gpu/drm/omapdrm/displays/panel-lgphilips-lb035q02.c
+++ b/drivers/gpu/drm/omapdrm/displays/panel-lgphilips-lb035q02.c
@@ -45,7 +45,6 @@ static const struct videomode lb035q02_vm = {
45 45
46struct panel_drv_data { 46struct panel_drv_data {
47 struct omap_dss_device dssdev; 47 struct omap_dss_device dssdev;
48 struct omap_dss_device *in;
49 48
50 struct spi_device *spi; 49 struct spi_device *spi;
51 50
@@ -119,42 +118,39 @@ static void init_lb035q02_panel(struct spi_device *spi)
119static int lb035q02_connect(struct omap_dss_device *dssdev) 118static int lb035q02_connect(struct omap_dss_device *dssdev)
120{ 119{
121 struct panel_drv_data *ddata = to_panel_data(dssdev); 120 struct panel_drv_data *ddata = to_panel_data(dssdev);
122 struct omap_dss_device *in; 121 struct omap_dss_device *src;
123 int r; 122 int r;
124 123
125 in = omapdss_of_find_source_for_first_ep(dssdev->dev->of_node); 124 src = omapdss_of_find_source_for_first_ep(dssdev->dev->of_node);
126 if (IS_ERR(in)) { 125 if (IS_ERR(src)) {
127 dev_err(dssdev->dev, "failed to find video source\n"); 126 dev_err(dssdev->dev, "failed to find video source\n");
128 return PTR_ERR(in); 127 return PTR_ERR(src);
129 } 128 }
130 129
131 r = omapdss_device_connect(in, dssdev); 130 r = omapdss_device_connect(src, dssdev);
132 if (r) { 131 if (r) {
133 omap_dss_put_device(in); 132 omap_dss_put_device(src);
134 return r; 133 return r;
135 } 134 }
136 135
137 init_lb035q02_panel(ddata->spi); 136 init_lb035q02_panel(ddata->spi);
138 137
139 ddata->in = in;
140 return 0; 138 return 0;
141} 139}
142 140
143static void lb035q02_disconnect(struct omap_dss_device *dssdev) 141static void lb035q02_disconnect(struct omap_dss_device *dssdev)
144{ 142{
145 struct panel_drv_data *ddata = to_panel_data(dssdev); 143 struct omap_dss_device *src = dssdev->src;
146 struct omap_dss_device *in = ddata->in;
147 144
148 omapdss_device_disconnect(in, dssdev); 145 omapdss_device_disconnect(src, dssdev);
149 146
150 omap_dss_put_device(in); 147 omap_dss_put_device(src);
151 ddata->in = NULL;
152} 148}
153 149
154static int lb035q02_enable(struct omap_dss_device *dssdev) 150static int lb035q02_enable(struct omap_dss_device *dssdev)
155{ 151{
156 struct panel_drv_data *ddata = to_panel_data(dssdev); 152 struct panel_drv_data *ddata = to_panel_data(dssdev);
157 struct omap_dss_device *in = ddata->in; 153 struct omap_dss_device *src = dssdev->src;
158 int r; 154 int r;
159 155
160 if (!omapdss_device_is_connected(dssdev)) 156 if (!omapdss_device_is_connected(dssdev))
@@ -163,9 +159,9 @@ static int lb035q02_enable(struct omap_dss_device *dssdev)
163 if (omapdss_device_is_enabled(dssdev)) 159 if (omapdss_device_is_enabled(dssdev))
164 return 0; 160 return 0;
165 161
166 in->ops->set_timings(in, &ddata->vm); 162 src->ops->set_timings(src, &ddata->vm);
167 163
168 r = in->ops->enable(in); 164 r = src->ops->enable(src);
169 if (r) 165 if (r)
170 return r; 166 return r;
171 167
@@ -180,7 +176,7 @@ static int lb035q02_enable(struct omap_dss_device *dssdev)
180static void lb035q02_disable(struct omap_dss_device *dssdev) 176static void lb035q02_disable(struct omap_dss_device *dssdev)
181{ 177{
182 struct panel_drv_data *ddata = to_panel_data(dssdev); 178 struct panel_drv_data *ddata = to_panel_data(dssdev);
183 struct omap_dss_device *in = ddata->in; 179 struct omap_dss_device *src = dssdev->src;
184 180
185 if (!omapdss_device_is_enabled(dssdev)) 181 if (!omapdss_device_is_enabled(dssdev))
186 return; 182 return;
@@ -188,7 +184,7 @@ static void lb035q02_disable(struct omap_dss_device *dssdev)
188 if (ddata->enable_gpio) 184 if (ddata->enable_gpio)
189 gpiod_set_value_cansleep(ddata->enable_gpio, 0); 185 gpiod_set_value_cansleep(ddata->enable_gpio, 0);
190 186
191 in->ops->disable(in); 187 src->ops->disable(src);
192 188
193 dssdev->state = OMAP_DSS_DISPLAY_DISABLED; 189 dssdev->state = OMAP_DSS_DISPLAY_DISABLED;
194} 190}
@@ -197,11 +193,11 @@ static void lb035q02_set_timings(struct omap_dss_device *dssdev,
197 struct videomode *vm) 193 struct videomode *vm)
198{ 194{
199 struct panel_drv_data *ddata = to_panel_data(dssdev); 195 struct panel_drv_data *ddata = to_panel_data(dssdev);
200 struct omap_dss_device *in = ddata->in; 196 struct omap_dss_device *src = dssdev->src;
201 197
202 ddata->vm = *vm; 198 ddata->vm = *vm;
203 199
204 in->ops->set_timings(in, vm); 200 src->ops->set_timings(src, vm);
205} 201}
206 202
207static void lb035q02_get_timings(struct omap_dss_device *dssdev, 203static void lb035q02_get_timings(struct omap_dss_device *dssdev,
@@ -215,10 +211,9 @@ static void lb035q02_get_timings(struct omap_dss_device *dssdev,
215static int lb035q02_check_timings(struct omap_dss_device *dssdev, 211static int lb035q02_check_timings(struct omap_dss_device *dssdev,
216 struct videomode *vm) 212 struct videomode *vm)
217{ 213{
218 struct panel_drv_data *ddata = to_panel_data(dssdev); 214 struct omap_dss_device *src = dssdev->src;
219 struct omap_dss_device *in = ddata->in;
220 215
221 return in->ops->check_timings(in, vm); 216 return src->ops->check_timings(src, vm);
222} 217}
223 218
224static const struct omap_dss_driver lb035q02_ops = { 219static const struct omap_dss_driver lb035q02_ops = {
diff --git a/drivers/gpu/drm/omapdrm/displays/panel-nec-nl8048hl11.c b/drivers/gpu/drm/omapdrm/displays/panel-nec-nl8048hl11.c
index 84e9c9a8a566..6f2261ccd442 100644
--- a/drivers/gpu/drm/omapdrm/displays/panel-nec-nl8048hl11.c
+++ b/drivers/gpu/drm/omapdrm/displays/panel-nec-nl8048hl11.c
@@ -21,7 +21,6 @@
21 21
22struct panel_drv_data { 22struct panel_drv_data {
23 struct omap_dss_device dssdev; 23 struct omap_dss_device dssdev;
24 struct omap_dss_device *in;
25 24
26 struct videomode vm; 25 struct videomode vm;
27 26
@@ -114,41 +113,37 @@ static int init_nec_8048_wvga_lcd(struct spi_device *spi)
114 113
115static int nec_8048_connect(struct omap_dss_device *dssdev) 114static int nec_8048_connect(struct omap_dss_device *dssdev)
116{ 115{
117 struct panel_drv_data *ddata = to_panel_data(dssdev); 116 struct omap_dss_device *src;
118 struct omap_dss_device *in;
119 int r; 117 int r;
120 118
121 in = omapdss_of_find_source_for_first_ep(dssdev->dev->of_node); 119 src = omapdss_of_find_source_for_first_ep(dssdev->dev->of_node);
122 if (IS_ERR(in)) { 120 if (IS_ERR(src)) {
123 dev_err(dssdev->dev, "failed to find video source\n"); 121 dev_err(dssdev->dev, "failed to find video source\n");
124 return PTR_ERR(in); 122 return PTR_ERR(src);
125 } 123 }
126 124
127 r = omapdss_device_connect(in, dssdev); 125 r = omapdss_device_connect(src, dssdev);
128 if (r) { 126 if (r) {
129 omap_dss_put_device(in); 127 omap_dss_put_device(src);
130 return r; 128 return r;
131 } 129 }
132 130
133 ddata->in = in;
134 return 0; 131 return 0;
135} 132}
136 133
137static void nec_8048_disconnect(struct omap_dss_device *dssdev) 134static void nec_8048_disconnect(struct omap_dss_device *dssdev)
138{ 135{
139 struct panel_drv_data *ddata = to_panel_data(dssdev); 136 struct omap_dss_device *src = dssdev->src;
140 struct omap_dss_device *in = ddata->in;
141 137
142 omapdss_device_disconnect(in, dssdev); 138 omapdss_device_disconnect(src, dssdev);
143 139
144 omap_dss_put_device(in); 140 omap_dss_put_device(src);
145 ddata->in = NULL;
146} 141}
147 142
148static int nec_8048_enable(struct omap_dss_device *dssdev) 143static int nec_8048_enable(struct omap_dss_device *dssdev)
149{ 144{
150 struct panel_drv_data *ddata = to_panel_data(dssdev); 145 struct panel_drv_data *ddata = to_panel_data(dssdev);
151 struct omap_dss_device *in = ddata->in; 146 struct omap_dss_device *src = dssdev->src;
152 int r; 147 int r;
153 148
154 if (!omapdss_device_is_connected(dssdev)) 149 if (!omapdss_device_is_connected(dssdev))
@@ -157,9 +152,9 @@ static int nec_8048_enable(struct omap_dss_device *dssdev)
157 if (omapdss_device_is_enabled(dssdev)) 152 if (omapdss_device_is_enabled(dssdev))
158 return 0; 153 return 0;
159 154
160 in->ops->set_timings(in, &ddata->vm); 155 src->ops->set_timings(src, &ddata->vm);
161 156
162 r = in->ops->enable(in); 157 r = src->ops->enable(src);
163 if (r) 158 if (r)
164 return r; 159 return r;
165 160
@@ -174,7 +169,7 @@ static int nec_8048_enable(struct omap_dss_device *dssdev)
174static void nec_8048_disable(struct omap_dss_device *dssdev) 169static void nec_8048_disable(struct omap_dss_device *dssdev)
175{ 170{
176 struct panel_drv_data *ddata = to_panel_data(dssdev); 171 struct panel_drv_data *ddata = to_panel_data(dssdev);
177 struct omap_dss_device *in = ddata->in; 172 struct omap_dss_device *src = dssdev->src;
178 173
179 if (!omapdss_device_is_enabled(dssdev)) 174 if (!omapdss_device_is_enabled(dssdev))
180 return; 175 return;
@@ -182,7 +177,7 @@ static void nec_8048_disable(struct omap_dss_device *dssdev)
182 if (gpio_is_valid(ddata->res_gpio)) 177 if (gpio_is_valid(ddata->res_gpio))
183 gpio_set_value_cansleep(ddata->res_gpio, 0); 178 gpio_set_value_cansleep(ddata->res_gpio, 0);
184 179
185 in->ops->disable(in); 180 src->ops->disable(src);
186 181
187 dssdev->state = OMAP_DSS_DISPLAY_DISABLED; 182 dssdev->state = OMAP_DSS_DISPLAY_DISABLED;
188} 183}
@@ -191,11 +186,11 @@ static void nec_8048_set_timings(struct omap_dss_device *dssdev,
191 struct videomode *vm) 186 struct videomode *vm)
192{ 187{
193 struct panel_drv_data *ddata = to_panel_data(dssdev); 188 struct panel_drv_data *ddata = to_panel_data(dssdev);
194 struct omap_dss_device *in = ddata->in; 189 struct omap_dss_device *src = dssdev->src;
195 190
196 ddata->vm = *vm; 191 ddata->vm = *vm;
197 192
198 in->ops->set_timings(in, vm); 193 src->ops->set_timings(src, vm);
199} 194}
200 195
201static void nec_8048_get_timings(struct omap_dss_device *dssdev, 196static void nec_8048_get_timings(struct omap_dss_device *dssdev,
@@ -209,10 +204,9 @@ static void nec_8048_get_timings(struct omap_dss_device *dssdev,
209static int nec_8048_check_timings(struct omap_dss_device *dssdev, 204static int nec_8048_check_timings(struct omap_dss_device *dssdev,
210 struct videomode *vm) 205 struct videomode *vm)
211{ 206{
212 struct panel_drv_data *ddata = to_panel_data(dssdev); 207 struct omap_dss_device *src = dssdev->src;
213 struct omap_dss_device *in = ddata->in;
214 208
215 return in->ops->check_timings(in, vm); 209 return src->ops->check_timings(src, vm);
216} 210}
217 211
218static const struct omap_dss_driver nec_8048_ops = { 212static const struct omap_dss_driver nec_8048_ops = {
diff --git a/drivers/gpu/drm/omapdrm/displays/panel-sharp-ls037v7dw01.c b/drivers/gpu/drm/omapdrm/displays/panel-sharp-ls037v7dw01.c
index a6ec328ee3d3..369501251fa9 100644
--- a/drivers/gpu/drm/omapdrm/displays/panel-sharp-ls037v7dw01.c
+++ b/drivers/gpu/drm/omapdrm/displays/panel-sharp-ls037v7dw01.c
@@ -21,7 +21,6 @@
21 21
22struct panel_drv_data { 22struct panel_drv_data {
23 struct omap_dss_device dssdev; 23 struct omap_dss_device dssdev;
24 struct omap_dss_device *in;
25 struct regulator *vcc; 24 struct regulator *vcc;
26 25
27 struct videomode vm; 26 struct videomode vm;
@@ -60,41 +59,37 @@ static const struct videomode sharp_ls_vm = {
60 59
61static int sharp_ls_connect(struct omap_dss_device *dssdev) 60static int sharp_ls_connect(struct omap_dss_device *dssdev)
62{ 61{
63 struct panel_drv_data *ddata = to_panel_data(dssdev); 62 struct omap_dss_device *src;
64 struct omap_dss_device *in;
65 int r; 63 int r;
66 64
67 in = omapdss_of_find_source_for_first_ep(dssdev->dev->of_node); 65 src = omapdss_of_find_source_for_first_ep(dssdev->dev->of_node);
68 if (IS_ERR(in)) { 66 if (IS_ERR(src)) {
69 dev_err(dssdev->dev, "failed to find video source\n"); 67 dev_err(dssdev->dev, "failed to find video source\n");
70 return PTR_ERR(in); 68 return PTR_ERR(src);
71 } 69 }
72 70
73 r = omapdss_device_connect(in, dssdev); 71 r = omapdss_device_connect(src, dssdev);
74 if (r) { 72 if (r) {
75 omap_dss_put_device(in); 73 omap_dss_put_device(src);
76 return r; 74 return r;
77 } 75 }
78 76
79 ddata->in = in;
80 return 0; 77 return 0;
81} 78}
82 79
83static void sharp_ls_disconnect(struct omap_dss_device *dssdev) 80static void sharp_ls_disconnect(struct omap_dss_device *dssdev)
84{ 81{
85 struct panel_drv_data *ddata = to_panel_data(dssdev); 82 struct omap_dss_device *src = dssdev->src;
86 struct omap_dss_device *in = ddata->in;
87 83
88 omapdss_device_disconnect(in, dssdev); 84 omapdss_device_disconnect(src, dssdev);
89 85
90 omap_dss_put_device(in); 86 omap_dss_put_device(src);
91 ddata->in = NULL;
92} 87}
93 88
94static int sharp_ls_enable(struct omap_dss_device *dssdev) 89static int sharp_ls_enable(struct omap_dss_device *dssdev)
95{ 90{
96 struct panel_drv_data *ddata = to_panel_data(dssdev); 91 struct panel_drv_data *ddata = to_panel_data(dssdev);
97 struct omap_dss_device *in = ddata->in; 92 struct omap_dss_device *src = dssdev->src;
98 int r; 93 int r;
99 94
100 if (!omapdss_device_is_connected(dssdev)) 95 if (!omapdss_device_is_connected(dssdev))
@@ -103,7 +98,7 @@ static int sharp_ls_enable(struct omap_dss_device *dssdev)
103 if (omapdss_device_is_enabled(dssdev)) 98 if (omapdss_device_is_enabled(dssdev))
104 return 0; 99 return 0;
105 100
106 in->ops->set_timings(in, &ddata->vm); 101 src->ops->set_timings(src, &ddata->vm);
107 102
108 if (ddata->vcc) { 103 if (ddata->vcc) {
109 r = regulator_enable(ddata->vcc); 104 r = regulator_enable(ddata->vcc);
@@ -111,7 +106,7 @@ static int sharp_ls_enable(struct omap_dss_device *dssdev)
111 return r; 106 return r;
112 } 107 }
113 108
114 r = in->ops->enable(in); 109 r = src->ops->enable(src);
115 if (r) { 110 if (r) {
116 regulator_disable(ddata->vcc); 111 regulator_disable(ddata->vcc);
117 return r; 112 return r;
@@ -134,7 +129,7 @@ static int sharp_ls_enable(struct omap_dss_device *dssdev)
134static void sharp_ls_disable(struct omap_dss_device *dssdev) 129static void sharp_ls_disable(struct omap_dss_device *dssdev)
135{ 130{
136 struct panel_drv_data *ddata = to_panel_data(dssdev); 131 struct panel_drv_data *ddata = to_panel_data(dssdev);
137 struct omap_dss_device *in = ddata->in; 132 struct omap_dss_device *src = dssdev->src;
138 133
139 if (!omapdss_device_is_enabled(dssdev)) 134 if (!omapdss_device_is_enabled(dssdev))
140 return; 135 return;
@@ -149,7 +144,7 @@ static void sharp_ls_disable(struct omap_dss_device *dssdev)
149 144
150 msleep(100); 145 msleep(100);
151 146
152 in->ops->disable(in); 147 src->ops->disable(src);
153 148
154 if (ddata->vcc) 149 if (ddata->vcc)
155 regulator_disable(ddata->vcc); 150 regulator_disable(ddata->vcc);
@@ -161,11 +156,11 @@ static void sharp_ls_set_timings(struct omap_dss_device *dssdev,
161 struct videomode *vm) 156 struct videomode *vm)
162{ 157{
163 struct panel_drv_data *ddata = to_panel_data(dssdev); 158 struct panel_drv_data *ddata = to_panel_data(dssdev);
164 struct omap_dss_device *in = ddata->in; 159 struct omap_dss_device *src = dssdev->src;
165 160
166 ddata->vm = *vm; 161 ddata->vm = *vm;
167 162
168 in->ops->set_timings(in, vm); 163 src->ops->set_timings(src, vm);
169} 164}
170 165
171static void sharp_ls_get_timings(struct omap_dss_device *dssdev, 166static void sharp_ls_get_timings(struct omap_dss_device *dssdev,
@@ -179,10 +174,9 @@ static void sharp_ls_get_timings(struct omap_dss_device *dssdev,
179static int sharp_ls_check_timings(struct omap_dss_device *dssdev, 174static int sharp_ls_check_timings(struct omap_dss_device *dssdev,
180 struct videomode *vm) 175 struct videomode *vm)
181{ 176{
182 struct panel_drv_data *ddata = to_panel_data(dssdev); 177 struct omap_dss_device *src = dssdev->src;
183 struct omap_dss_device *in = ddata->in;
184 178
185 return in->ops->check_timings(in, vm); 179 return src->ops->check_timings(src, vm);
186} 180}
187 181
188static const struct omap_dss_driver sharp_ls_ops = { 182static const struct omap_dss_driver sharp_ls_ops = {
diff --git a/drivers/gpu/drm/omapdrm/displays/panel-sony-acx565akm.c b/drivers/gpu/drm/omapdrm/displays/panel-sony-acx565akm.c
index 0a2efcb84532..5bfd24c5ad5c 100644
--- a/drivers/gpu/drm/omapdrm/displays/panel-sony-acx565akm.c
+++ b/drivers/gpu/drm/omapdrm/displays/panel-sony-acx565akm.c
@@ -64,7 +64,6 @@
64 64
65struct panel_drv_data { 65struct panel_drv_data {
66 struct omap_dss_device dssdev; 66 struct omap_dss_device dssdev;
67 struct omap_dss_device *in;
68 67
69 int reset_gpio; 68 int reset_gpio;
70 69
@@ -509,48 +508,44 @@ static const struct attribute_group bldev_attr_group = {
509 508
510static int acx565akm_connect(struct omap_dss_device *dssdev) 509static int acx565akm_connect(struct omap_dss_device *dssdev)
511{ 510{
512 struct panel_drv_data *ddata = to_panel_data(dssdev); 511 struct omap_dss_device *src;
513 struct omap_dss_device *in;
514 int r; 512 int r;
515 513
516 in = omapdss_of_find_source_for_first_ep(dssdev->dev->of_node); 514 src = omapdss_of_find_source_for_first_ep(dssdev->dev->of_node);
517 if (IS_ERR(in)) { 515 if (IS_ERR(src)) {
518 dev_err(dssdev->dev, "failed to find video source\n"); 516 dev_err(dssdev->dev, "failed to find video source\n");
519 return PTR_ERR(in); 517 return PTR_ERR(src);
520 } 518 }
521 519
522 r = omapdss_device_connect(in, dssdev); 520 r = omapdss_device_connect(src, dssdev);
523 if (r) { 521 if (r) {
524 omap_dss_put_device(in); 522 omap_dss_put_device(src);
525 return r; 523 return r;
526 } 524 }
527 525
528 ddata->in = in;
529 return 0; 526 return 0;
530} 527}
531 528
532static void acx565akm_disconnect(struct omap_dss_device *dssdev) 529static void acx565akm_disconnect(struct omap_dss_device *dssdev)
533{ 530{
534 struct panel_drv_data *ddata = to_panel_data(dssdev); 531 struct omap_dss_device *src = dssdev->src;
535 struct omap_dss_device *in = ddata->in;
536 532
537 omapdss_device_disconnect(in, dssdev); 533 omapdss_device_disconnect(src, dssdev);
538 534
539 omap_dss_put_device(in); 535 omap_dss_put_device(src);
540 ddata->in = NULL;
541} 536}
542 537
543static int acx565akm_panel_power_on(struct omap_dss_device *dssdev) 538static int acx565akm_panel_power_on(struct omap_dss_device *dssdev)
544{ 539{
545 struct panel_drv_data *ddata = to_panel_data(dssdev); 540 struct panel_drv_data *ddata = to_panel_data(dssdev);
546 struct omap_dss_device *in = ddata->in; 541 struct omap_dss_device *src = dssdev->src;
547 int r; 542 int r;
548 543
549 dev_dbg(&ddata->spi->dev, "%s\n", __func__); 544 dev_dbg(&ddata->spi->dev, "%s\n", __func__);
550 545
551 in->ops->set_timings(in, &ddata->vm); 546 src->ops->set_timings(src, &ddata->vm);
552 547
553 r = in->ops->enable(in); 548 r = src->ops->enable(src);
554 if (r) { 549 if (r) {
555 pr_err("%s sdi enable failed\n", __func__); 550 pr_err("%s sdi enable failed\n", __func__);
556 return r; 551 return r;
@@ -591,7 +586,7 @@ static int acx565akm_panel_power_on(struct omap_dss_device *dssdev)
591static void acx565akm_panel_power_off(struct omap_dss_device *dssdev) 586static void acx565akm_panel_power_off(struct omap_dss_device *dssdev)
592{ 587{
593 struct panel_drv_data *ddata = to_panel_data(dssdev); 588 struct panel_drv_data *ddata = to_panel_data(dssdev);
594 struct omap_dss_device *in = ddata->in; 589 struct omap_dss_device *src = dssdev->src;
595 590
596 dev_dbg(dssdev->dev, "%s\n", __func__); 591 dev_dbg(dssdev->dev, "%s\n", __func__);
597 592
@@ -615,7 +610,7 @@ static void acx565akm_panel_power_off(struct omap_dss_device *dssdev)
615 /* FIXME need to tweak this delay */ 610 /* FIXME need to tweak this delay */
616 msleep(100); 611 msleep(100);
617 612
618 in->ops->disable(in); 613 src->ops->disable(src);
619} 614}
620 615
621static int acx565akm_enable(struct omap_dss_device *dssdev) 616static int acx565akm_enable(struct omap_dss_device *dssdev)
@@ -662,11 +657,11 @@ static void acx565akm_set_timings(struct omap_dss_device *dssdev,
662 struct videomode *vm) 657 struct videomode *vm)
663{ 658{
664 struct panel_drv_data *ddata = to_panel_data(dssdev); 659 struct panel_drv_data *ddata = to_panel_data(dssdev);
665 struct omap_dss_device *in = ddata->in; 660 struct omap_dss_device *src = dssdev->src;
666 661
667 ddata->vm = *vm; 662 ddata->vm = *vm;
668 663
669 in->ops->set_timings(in, vm); 664 src->ops->set_timings(src, vm);
670} 665}
671 666
672static void acx565akm_get_timings(struct omap_dss_device *dssdev, 667static void acx565akm_get_timings(struct omap_dss_device *dssdev,
@@ -680,10 +675,9 @@ static void acx565akm_get_timings(struct omap_dss_device *dssdev,
680static int acx565akm_check_timings(struct omap_dss_device *dssdev, 675static int acx565akm_check_timings(struct omap_dss_device *dssdev,
681 struct videomode *vm) 676 struct videomode *vm)
682{ 677{
683 struct panel_drv_data *ddata = to_panel_data(dssdev); 678 struct omap_dss_device *src = dssdev->src;
684 struct omap_dss_device *in = ddata->in;
685 679
686 return in->ops->check_timings(in, vm); 680 return src->ops->check_timings(src, vm);
687} 681}
688 682
689static const struct omap_dss_driver acx565akm_ops = { 683static const struct omap_dss_driver acx565akm_ops = {
diff --git a/drivers/gpu/drm/omapdrm/displays/panel-tpo-td028ttec1.c b/drivers/gpu/drm/omapdrm/displays/panel-tpo-td028ttec1.c
index 8b5ee55982f4..9117c1ba037b 100644
--- a/drivers/gpu/drm/omapdrm/displays/panel-tpo-td028ttec1.c
+++ b/drivers/gpu/drm/omapdrm/displays/panel-tpo-td028ttec1.c
@@ -33,7 +33,6 @@
33 33
34struct panel_drv_data { 34struct panel_drv_data {
35 struct omap_dss_device dssdev; 35 struct omap_dss_device dssdev;
36 struct omap_dss_device *in;
37 36
38 struct videomode vm; 37 struct videomode vm;
39 38
@@ -168,41 +167,37 @@ enum jbt_register {
168 167
169static int td028ttec1_panel_connect(struct omap_dss_device *dssdev) 168static int td028ttec1_panel_connect(struct omap_dss_device *dssdev)
170{ 169{
171 struct panel_drv_data *ddata = to_panel_data(dssdev); 170 struct omap_dss_device *src;
172 struct omap_dss_device *in;
173 int r; 171 int r;
174 172
175 in = omapdss_of_find_source_for_first_ep(dssdev->dev->of_node); 173 src = omapdss_of_find_source_for_first_ep(dssdev->dev->of_node);
176 if (IS_ERR(in)) { 174 if (IS_ERR(src)) {
177 dev_err(dssdev->dev, "failed to find video source\n"); 175 dev_err(dssdev->dev, "failed to find video source\n");
178 return PTR_ERR(in); 176 return PTR_ERR(src);
179 } 177 }
180 178
181 r = omapdss_device_connect(in, dssdev); 179 r = omapdss_device_connect(src, dssdev);
182 if (r) { 180 if (r) {
183 omap_dss_put_device(in); 181 omap_dss_put_device(src);
184 return r; 182 return r;
185 } 183 }
186 184
187 ddata->in = in;
188 return 0; 185 return 0;
189} 186}
190 187
191static void td028ttec1_panel_disconnect(struct omap_dss_device *dssdev) 188static void td028ttec1_panel_disconnect(struct omap_dss_device *dssdev)
192{ 189{
193 struct panel_drv_data *ddata = to_panel_data(dssdev); 190 struct omap_dss_device *src = dssdev->src;
194 struct omap_dss_device *in = ddata->in;
195 191
196 omapdss_device_disconnect(in, dssdev); 192 omapdss_device_disconnect(src, dssdev);
197 193
198 omap_dss_put_device(in); 194 omap_dss_put_device(src);
199 ddata->in = NULL;
200} 195}
201 196
202static int td028ttec1_panel_enable(struct omap_dss_device *dssdev) 197static int td028ttec1_panel_enable(struct omap_dss_device *dssdev)
203{ 198{
204 struct panel_drv_data *ddata = to_panel_data(dssdev); 199 struct panel_drv_data *ddata = to_panel_data(dssdev);
205 struct omap_dss_device *in = ddata->in; 200 struct omap_dss_device *src = dssdev->src;
206 int r; 201 int r;
207 202
208 if (!omapdss_device_is_connected(dssdev)) 203 if (!omapdss_device_is_connected(dssdev))
@@ -211,9 +206,9 @@ static int td028ttec1_panel_enable(struct omap_dss_device *dssdev)
211 if (omapdss_device_is_enabled(dssdev)) 206 if (omapdss_device_is_enabled(dssdev))
212 return 0; 207 return 0;
213 208
214 in->ops->set_timings(in, &ddata->vm); 209 src->ops->set_timings(src, &ddata->vm);
215 210
216 r = in->ops->enable(in); 211 r = src->ops->enable(src);
217 if (r) 212 if (r)
218 return r; 213 return r;
219 214
@@ -310,7 +305,7 @@ transfer_err:
310static void td028ttec1_panel_disable(struct omap_dss_device *dssdev) 305static void td028ttec1_panel_disable(struct omap_dss_device *dssdev)
311{ 306{
312 struct panel_drv_data *ddata = to_panel_data(dssdev); 307 struct panel_drv_data *ddata = to_panel_data(dssdev);
313 struct omap_dss_device *in = ddata->in; 308 struct omap_dss_device *src = dssdev->src;
314 309
315 if (!omapdss_device_is_enabled(dssdev)) 310 if (!omapdss_device_is_enabled(dssdev))
316 return; 311 return;
@@ -322,7 +317,7 @@ static void td028ttec1_panel_disable(struct omap_dss_device *dssdev)
322 jbt_ret_write_0(ddata, JBT_REG_SLEEP_IN); 317 jbt_ret_write_0(ddata, JBT_REG_SLEEP_IN);
323 jbt_reg_write_1(ddata, JBT_REG_POWER_ON_OFF, 0x00); 318 jbt_reg_write_1(ddata, JBT_REG_POWER_ON_OFF, 0x00);
324 319
325 in->ops->disable(in); 320 src->ops->disable(src);
326 321
327 dssdev->state = OMAP_DSS_DISPLAY_DISABLED; 322 dssdev->state = OMAP_DSS_DISPLAY_DISABLED;
328} 323}
@@ -331,11 +326,11 @@ static void td028ttec1_panel_set_timings(struct omap_dss_device *dssdev,
331 struct videomode *vm) 326 struct videomode *vm)
332{ 327{
333 struct panel_drv_data *ddata = to_panel_data(dssdev); 328 struct panel_drv_data *ddata = to_panel_data(dssdev);
334 struct omap_dss_device *in = ddata->in; 329 struct omap_dss_device *src = dssdev->src;
335 330
336 ddata->vm = *vm; 331 ddata->vm = *vm;
337 332
338 in->ops->set_timings(in, vm); 333 src->ops->set_timings(src, vm);
339} 334}
340 335
341static void td028ttec1_panel_get_timings(struct omap_dss_device *dssdev, 336static void td028ttec1_panel_get_timings(struct omap_dss_device *dssdev,
@@ -349,10 +344,9 @@ static void td028ttec1_panel_get_timings(struct omap_dss_device *dssdev,
349static int td028ttec1_panel_check_timings(struct omap_dss_device *dssdev, 344static int td028ttec1_panel_check_timings(struct omap_dss_device *dssdev,
350 struct videomode *vm) 345 struct videomode *vm)
351{ 346{
352 struct panel_drv_data *ddata = to_panel_data(dssdev); 347 struct omap_dss_device *src = dssdev->src;
353 struct omap_dss_device *in = ddata->in;
354 348
355 return in->ops->check_timings(in, vm); 349 return src->ops->check_timings(src, vm);
356} 350}
357 351
358static const struct omap_dss_driver td028ttec1_ops = { 352static const struct omap_dss_driver td028ttec1_ops = {
diff --git a/drivers/gpu/drm/omapdrm/displays/panel-tpo-td043mtea1.c b/drivers/gpu/drm/omapdrm/displays/panel-tpo-td043mtea1.c
index 263c566df499..53742a61aa86 100644
--- a/drivers/gpu/drm/omapdrm/displays/panel-tpo-td043mtea1.c
+++ b/drivers/gpu/drm/omapdrm/displays/panel-tpo-td043mtea1.c
@@ -54,7 +54,6 @@ static const u16 tpo_td043_def_gamma[12] = {
54 54
55struct panel_drv_data { 55struct panel_drv_data {
56 struct omap_dss_device dssdev; 56 struct omap_dss_device dssdev;
57 struct omap_dss_device *in;
58 57
59 struct videomode vm; 58 struct videomode vm;
60 59
@@ -339,41 +338,37 @@ static void tpo_td043_power_off(struct panel_drv_data *ddata)
339 338
340static int tpo_td043_connect(struct omap_dss_device *dssdev) 339static int tpo_td043_connect(struct omap_dss_device *dssdev)
341{ 340{
342 struct panel_drv_data *ddata = to_panel_data(dssdev); 341 struct omap_dss_device *src;
343 struct omap_dss_device *in;
344 int r; 342 int r;
345 343
346 in = omapdss_of_find_source_for_first_ep(dssdev->dev->of_node); 344 src = omapdss_of_find_source_for_first_ep(dssdev->dev->of_node);
347 if (IS_ERR(in)) { 345 if (IS_ERR(src)) {
348 dev_err(dssdev->dev, "failed to find video source\n"); 346 dev_err(dssdev->dev, "failed to find video source\n");
349 return PTR_ERR(in); 347 return PTR_ERR(src);
350 } 348 }
351 349
352 r = omapdss_device_connect(in, dssdev); 350 r = omapdss_device_connect(src, dssdev);
353 if (r) { 351 if (r) {
354 omap_dss_put_device(in); 352 omap_dss_put_device(src);
355 return r; 353 return r;
356 } 354 }
357 355
358 ddata->in = in;
359 return 0; 356 return 0;
360} 357}
361 358
362static void tpo_td043_disconnect(struct omap_dss_device *dssdev) 359static void tpo_td043_disconnect(struct omap_dss_device *dssdev)
363{ 360{
364 struct panel_drv_data *ddata = to_panel_data(dssdev); 361 struct omap_dss_device *src = dssdev->src;
365 struct omap_dss_device *in = ddata->in;
366 362
367 omapdss_device_disconnect(in, dssdev); 363 omapdss_device_disconnect(src, dssdev);
368 364
369 omap_dss_put_device(in); 365 omap_dss_put_device(src);
370 ddata->in = NULL;
371} 366}
372 367
373static int tpo_td043_enable(struct omap_dss_device *dssdev) 368static int tpo_td043_enable(struct omap_dss_device *dssdev)
374{ 369{
375 struct panel_drv_data *ddata = to_panel_data(dssdev); 370 struct panel_drv_data *ddata = to_panel_data(dssdev);
376 struct omap_dss_device *in = ddata->in; 371 struct omap_dss_device *src = dssdev->src;
377 int r; 372 int r;
378 373
379 if (!omapdss_device_is_connected(dssdev)) 374 if (!omapdss_device_is_connected(dssdev))
@@ -382,9 +377,9 @@ static int tpo_td043_enable(struct omap_dss_device *dssdev)
382 if (omapdss_device_is_enabled(dssdev)) 377 if (omapdss_device_is_enabled(dssdev))
383 return 0; 378 return 0;
384 379
385 in->ops->set_timings(in, &ddata->vm); 380 src->ops->set_timings(src, &ddata->vm);
386 381
387 r = in->ops->enable(in); 382 r = src->ops->enable(src);
388 if (r) 383 if (r)
389 return r; 384 return r;
390 385
@@ -395,7 +390,7 @@ static int tpo_td043_enable(struct omap_dss_device *dssdev)
395 if (!ddata->spi_suspended) { 390 if (!ddata->spi_suspended) {
396 r = tpo_td043_power_on(ddata); 391 r = tpo_td043_power_on(ddata);
397 if (r) { 392 if (r) {
398 in->ops->disable(in); 393 src->ops->disable(src);
399 return r; 394 return r;
400 } 395 }
401 } 396 }
@@ -408,12 +403,12 @@ static int tpo_td043_enable(struct omap_dss_device *dssdev)
408static void tpo_td043_disable(struct omap_dss_device *dssdev) 403static void tpo_td043_disable(struct omap_dss_device *dssdev)
409{ 404{
410 struct panel_drv_data *ddata = to_panel_data(dssdev); 405 struct panel_drv_data *ddata = to_panel_data(dssdev);
411 struct omap_dss_device *in = ddata->in; 406 struct omap_dss_device *src = dssdev->src;
412 407
413 if (!omapdss_device_is_enabled(dssdev)) 408 if (!omapdss_device_is_enabled(dssdev))
414 return; 409 return;
415 410
416 in->ops->disable(in); 411 src->ops->disable(src);
417 412
418 if (!ddata->spi_suspended) 413 if (!ddata->spi_suspended)
419 tpo_td043_power_off(ddata); 414 tpo_td043_power_off(ddata);
@@ -425,11 +420,11 @@ static void tpo_td043_set_timings(struct omap_dss_device *dssdev,
425 struct videomode *vm) 420 struct videomode *vm)
426{ 421{
427 struct panel_drv_data *ddata = to_panel_data(dssdev); 422 struct panel_drv_data *ddata = to_panel_data(dssdev);
428 struct omap_dss_device *in = ddata->in; 423 struct omap_dss_device *src = dssdev->src;
429 424
430 ddata->vm = *vm; 425 ddata->vm = *vm;
431 426
432 in->ops->set_timings(in, vm); 427 src->ops->set_timings(src, vm);
433} 428}
434 429
435static void tpo_td043_get_timings(struct omap_dss_device *dssdev, 430static void tpo_td043_get_timings(struct omap_dss_device *dssdev,
@@ -443,10 +438,9 @@ static void tpo_td043_get_timings(struct omap_dss_device *dssdev,
443static int tpo_td043_check_timings(struct omap_dss_device *dssdev, 438static int tpo_td043_check_timings(struct omap_dss_device *dssdev,
444 struct videomode *vm) 439 struct videomode *vm)
445{ 440{
446 struct panel_drv_data *ddata = to_panel_data(dssdev); 441 struct omap_dss_device *src = dssdev->src;
447 struct omap_dss_device *in = ddata->in;
448 442
449 return in->ops->check_timings(in, vm); 443 return src->ops->check_timings(src, vm);
450} 444}
451 445
452static const struct omap_dss_driver tpo_td043_ops = { 446static const struct omap_dss_driver tpo_td043_ops = {