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; |
