diff options
Diffstat (limited to 'drivers/gpu/drm/imx/parallel-display.c')
-rw-r--r-- | drivers/gpu/drm/imx/parallel-display.c | 40 |
1 files changed, 14 insertions, 26 deletions
diff --git a/drivers/gpu/drm/imx/parallel-display.c b/drivers/gpu/drm/imx/parallel-display.c index 363e2c7741e2..2d1fd02cd3d6 100644 --- a/drivers/gpu/drm/imx/parallel-display.c +++ b/drivers/gpu/drm/imx/parallel-display.c | |||
@@ -35,7 +35,6 @@ struct imx_parallel_display { | |||
35 | void *edid; | 35 | void *edid; |
36 | int edid_len; | 36 | int edid_len; |
37 | u32 bus_format; | 37 | u32 bus_format; |
38 | int mode_valid; | ||
39 | struct drm_display_mode mode; | 38 | struct drm_display_mode mode; |
40 | struct drm_panel *panel; | 39 | struct drm_panel *panel; |
41 | }; | 40 | }; |
@@ -68,17 +67,6 @@ static int imx_pd_connector_get_modes(struct drm_connector *connector) | |||
68 | num_modes = drm_add_edid_modes(connector, imxpd->edid); | 67 | num_modes = drm_add_edid_modes(connector, imxpd->edid); |
69 | } | 68 | } |
70 | 69 | ||
71 | if (imxpd->mode_valid) { | ||
72 | struct drm_display_mode *mode = drm_mode_create(connector->dev); | ||
73 | |||
74 | if (!mode) | ||
75 | return -EINVAL; | ||
76 | drm_mode_copy(mode, &imxpd->mode); | ||
77 | mode->type |= DRM_MODE_TYPE_DRIVER | DRM_MODE_TYPE_PREFERRED, | ||
78 | drm_mode_probed_add(connector, mode); | ||
79 | num_modes++; | ||
80 | } | ||
81 | |||
82 | if (np) { | 70 | if (np) { |
83 | struct drm_display_mode *mode = drm_mode_create(connector->dev); | 71 | struct drm_display_mode *mode = drm_mode_create(connector->dev); |
84 | 72 | ||
@@ -115,8 +103,8 @@ static void imx_pd_encoder_dpms(struct drm_encoder *encoder, int mode) | |||
115 | static void imx_pd_encoder_prepare(struct drm_encoder *encoder) | 103 | static void imx_pd_encoder_prepare(struct drm_encoder *encoder) |
116 | { | 104 | { |
117 | struct imx_parallel_display *imxpd = enc_to_imxpd(encoder); | 105 | struct imx_parallel_display *imxpd = enc_to_imxpd(encoder); |
118 | 106 | imx_drm_set_bus_config(encoder, imxpd->bus_format, 2, 3, | |
119 | imx_drm_set_bus_format(encoder, imxpd->bus_format); | 107 | imxpd->connector.display_info.bus_flags); |
120 | } | 108 | } |
121 | 109 | ||
122 | static void imx_pd_encoder_commit(struct drm_encoder *encoder) | 110 | static void imx_pd_encoder_commit(struct drm_encoder *encoder) |
@@ -203,7 +191,7 @@ static int imx_pd_bind(struct device *dev, struct device *master, void *data) | |||
203 | { | 191 | { |
204 | struct drm_device *drm = data; | 192 | struct drm_device *drm = data; |
205 | struct device_node *np = dev->of_node; | 193 | struct device_node *np = dev->of_node; |
206 | struct device_node *port; | 194 | struct device_node *ep; |
207 | const u8 *edidp; | 195 | const u8 *edidp; |
208 | struct imx_parallel_display *imxpd; | 196 | struct imx_parallel_display *imxpd; |
209 | int ret; | 197 | int ret; |
@@ -230,18 +218,18 @@ static int imx_pd_bind(struct device *dev, struct device *master, void *data) | |||
230 | } | 218 | } |
231 | 219 | ||
232 | /* port@1 is the output port */ | 220 | /* port@1 is the output port */ |
233 | port = of_graph_get_port_by_id(np, 1); | 221 | ep = of_graph_get_endpoint_by_regs(np, 1, -1); |
234 | if (port) { | 222 | if (ep) { |
235 | struct device_node *endpoint, *remote; | 223 | struct device_node *remote; |
236 | 224 | ||
237 | endpoint = of_get_child_by_name(port, "endpoint"); | 225 | remote = of_graph_get_remote_port_parent(ep); |
238 | if (endpoint) { | 226 | of_node_put(ep); |
239 | remote = of_graph_get_remote_port_parent(endpoint); | 227 | if (remote) { |
240 | if (remote) | 228 | imxpd->panel = of_drm_find_panel(remote); |
241 | imxpd->panel = of_drm_find_panel(remote); | 229 | of_node_put(remote); |
242 | if (!imxpd->panel) | ||
243 | return -EPROBE_DEFER; | ||
244 | } | 230 | } |
231 | if (!imxpd->panel) | ||
232 | return -EPROBE_DEFER; | ||
245 | } | 233 | } |
246 | 234 | ||
247 | imxpd->dev = dev; | 235 | imxpd->dev = dev; |