Lines Matching +full:interface +full:- +full:pix +full:- +full:fmt
1 // SPDX-License-Identifier: GPL-2.0+
3 * i.MX drm driver - parallel display implementation
9 #include <linux/media-bus-format.h>
24 #include "imx-drm.h"
58 struct drm_display_info *di = &conn_state->connector->display_info; in imx_pd_bridge_atomic_get_output_bus_fmts()
62 if (!imxpd->bus_format && !di->num_bus_formats) { in imx_pd_bridge_atomic_get_output_bus_fmts()
73 if (!imxpd->bus_format && di->num_bus_formats) in imx_pd_bridge_atomic_get_output_bus_fmts()
74 output_fmts[0] = di->bus_formats[0]; in imx_pd_bridge_atomic_get_output_bus_fmts()
76 output_fmts[0] = imxpd->bus_format; in imx_pd_bridge_atomic_get_output_bus_fmts()
106 * use the static bus format definition (imxpd->bus_format) if it's in imx_pd_bridge_atomic_get_input_bus_fmts()
110 output_fmt = imxpd->bus_format ? : MEDIA_BUS_FMT_RGB888_1X24; in imx_pd_bridge_atomic_get_input_bus_fmts()
113 if ((imxpd->bus_format && imxpd->bus_format != output_fmt) || in imx_pd_bridge_atomic_get_input_bus_fmts()
134 struct drm_display_info *di = &conn_state->connector->display_info; in imx_pd_bridge_atomic_check()
141 next_bridge_state = drm_atomic_get_new_bridge_state(crtc_state->state, in imx_pd_bridge_atomic_check()
145 bus_flags = next_bridge_state->input_bus_cfg.flags; in imx_pd_bridge_atomic_check()
147 bus_flags = di->bus_flags; in imx_pd_bridge_atomic_check()
149 bus_fmt = bridge_state->input_bus_cfg.format; in imx_pd_bridge_atomic_check()
151 return -EINVAL; in imx_pd_bridge_atomic_check()
153 bridge_state->output_bus_cfg.flags = bus_flags; in imx_pd_bridge_atomic_check()
154 bridge_state->input_bus_cfg.flags = bus_flags; in imx_pd_bridge_atomic_check()
155 imx_crtc_state->bus_flags = bus_flags; in imx_pd_bridge_atomic_check()
156 imx_crtc_state->bus_format = bridge_state->input_bus_cfg.format; in imx_pd_bridge_atomic_check()
157 imx_crtc_state->di_hsync_pin = 2; in imx_pd_bridge_atomic_check()
158 imx_crtc_state->di_vsync_pin = 3; in imx_pd_bridge_atomic_check()
169 return drm_bridge_attach(encoder, imxpd->next_bridge, bridge, flags); in imx_pd_bridge_attach()
197 encoder = &imxpd_encoder->encoder; in imx_pd_bind()
198 bridge = &imxpd->bridge; in imx_pd_bind()
200 ret = imx_drm_encoder_parse_of(drm, encoder, imxpd->dev->of_node); in imx_pd_bind()
221 struct device *dev = &pdev->dev; in imx_pd_probe()
222 struct device_node *np = dev->of_node; in imx_pd_probe()
226 const char *fmt; in imx_pd_probe() local
234 imxpd->next_bridge = devm_drm_of_get_bridge(dev, np, 1, 0); in imx_pd_probe()
235 if (imxpd->next_bridge == ERR_PTR(-ENODEV)) in imx_pd_probe()
236 imxpd->next_bridge = devm_imx_drm_legacy_bridge(dev, np, DRM_MODE_CONNECTOR_DPI); in imx_pd_probe()
237 if (IS_ERR(imxpd->next_bridge)) { in imx_pd_probe()
238 ret = PTR_ERR(imxpd->next_bridge); in imx_pd_probe()
242 ret = of_property_read_string(np, "interface-pix-fmt", &fmt); in imx_pd_probe()
244 if (!strcmp(fmt, "rgb24")) in imx_pd_probe()
246 else if (!strcmp(fmt, "rgb565")) in imx_pd_probe()
248 else if (!strcmp(fmt, "bgr666")) in imx_pd_probe()
250 else if (!strcmp(fmt, "lvds666")) in imx_pd_probe()
253 imxpd->bus_format = bus_format; in imx_pd_probe()
255 imxpd->dev = dev; in imx_pd_probe()
259 devm_drm_bridge_add(dev, &imxpd->bridge); in imx_pd_probe()
266 component_del(&pdev->dev, &imx_pd_ops); in imx_pd_remove()
270 { .compatible = "fsl,imx-parallel-display", },
280 .name = "imx-parallel-display",