Lines Matching +full:analog +full:- +full:pass

1 // SPDX-License-Identifier: GPL-2.0
9 #include <linux/media-bus-format.h>
40 return flags & DRM_BRIDGE_ATTACH_NO_CONNECTOR ? 0 : -EINVAL; in display_connector_attach()
47 if (conn->hpd_gpio) { in display_connector_detect()
48 if (gpiod_get_value_cansleep(conn->hpd_gpio)) in display_connector_detect()
54 if (conn->bridge.ddc && drm_probe_ddc(conn->bridge.ddc)) in display_connector_detect()
57 switch (conn->bridge.type) { in display_connector_detect()
74 * Composite and S-Video connectors have no other detection in display_connector_detect()
95 return drm_edid_read_ddc(connector, conn->bridge.ddc); in display_connector_edid_read()
100 * so concerning the output bus formats, either pass the bus formats from the
114 if (!prev_bridge || !prev_bridge->funcs->atomic_get_output_bus_fmts) { in display_connector_get_output_bus_fmts()
115 struct drm_connector *conn = conn_state->connector; in display_connector_get_output_bus_fmts()
123 if (conn->display_info.num_bus_formats && in display_connector_get_output_bus_fmts()
124 conn->display_info.bus_formats) in display_connector_get_output_bus_fmts()
125 out_bus_fmts[0] = conn->display_info.bus_formats[0]; in display_connector_get_output_bus_fmts()
132 prev_bridge_state = drm_atomic_get_new_bridge_state(crtc_state->state, in display_connector_get_output_bus_fmts()
135 return prev_bridge->funcs->atomic_get_output_bus_fmts(prev_bridge, prev_bridge_state, in display_connector_get_output_bus_fmts()
142 * so concerning the input bus formats, either pass the bus formats from the
157 if (!prev_bridge || !prev_bridge->funcs->atomic_get_input_bus_fmts) { in display_connector_get_input_bus_fmts()
170 prev_bridge_state = drm_atomic_get_new_bridge_state(crtc_state->state, in display_connector_get_input_bus_fmts()
173 return prev_bridge->funcs->atomic_get_input_bus_fmts(prev_bridge, prev_bridge_state, in display_connector_get_input_bus_fmts()
192 struct drm_bridge *bridge = &conn->bridge; in display_connector_hpd_irq()
203 conn->supply = devm_regulator_get_optional(&pdev->dev, name); in display_connector_get_supply()
205 if (conn->supply == ERR_PTR(-ENODEV)) in display_connector_get_supply()
206 conn->supply = NULL; in display_connector_get_supply()
208 return PTR_ERR_OR_ZERO(conn->supply); in display_connector_get_supply()
218 conn = devm_drm_bridge_alloc(&pdev->dev, struct display_connector, bridge, in display_connector_probe()
225 type = (uintptr_t)of_device_get_match_data(&pdev->dev); in display_connector_probe()
230 bool analog, digital; in display_connector_probe() local
232 analog = of_property_read_bool(pdev->dev.of_node, "analog"); in display_connector_probe()
233 digital = of_property_read_bool(pdev->dev.of_node, "digital"); in display_connector_probe()
234 if (analog && !digital) { in display_connector_probe()
235 conn->bridge.type = DRM_MODE_CONNECTOR_DVIA; in display_connector_probe()
236 } else if (!analog && digital) { in display_connector_probe()
237 conn->bridge.type = DRM_MODE_CONNECTOR_DVID; in display_connector_probe()
238 } else if (analog && digital) { in display_connector_probe()
239 conn->bridge.type = DRM_MODE_CONNECTOR_DVII; in display_connector_probe()
241 dev_err(&pdev->dev, "DVI connector with no type\n"); in display_connector_probe()
242 return -EINVAL; in display_connector_probe()
250 ret = of_property_read_string(pdev->dev.of_node, "type", in display_connector_probe()
253 dev_err(&pdev->dev, "HDMI connector with no type\n"); in display_connector_probe()
254 return -EINVAL; in display_connector_probe()
259 conn->bridge.type = DRM_MODE_CONNECTOR_HDMIA; in display_connector_probe()
261 conn->bridge.type = DRM_MODE_CONNECTOR_HDMIB; in display_connector_probe()
263 dev_err(&pdev->dev, in display_connector_probe()
266 return -EINVAL; in display_connector_probe()
273 conn->bridge.type = type; in display_connector_probe()
278 conn->bridge.interlace_allowed = true; in display_connector_probe()
282 conn->bridge.ycbcr_420_allowed = true; in display_connector_probe()
285 of_property_read_string(pdev->dev.of_node, "label", &label); in display_connector_probe()
294 conn->hpd_gpio = devm_gpiod_get_optional(&pdev->dev, "hpd", in display_connector_probe()
296 if (IS_ERR(conn->hpd_gpio)) in display_connector_probe()
297 return dev_err_probe(&pdev->dev, PTR_ERR(conn->hpd_gpio), in display_connector_probe()
300 conn->hpd_irq = gpiod_to_irq(conn->hpd_gpio); in display_connector_probe()
302 conn->hpd_irq = -EINVAL; in display_connector_probe()
305 if (conn->hpd_irq >= 0) { in display_connector_probe()
306 ret = devm_request_threaded_irq(&pdev->dev, conn->hpd_irq, in display_connector_probe()
313 dev_info(&pdev->dev, in display_connector_probe()
315 conn->hpd_irq = -EINVAL; in display_connector_probe()
325 phandle = of_parse_phandle(pdev->dev.of_node, "ddc-i2c-bus", 0); in display_connector_probe()
327 conn->bridge.ddc = of_get_i2c_adapter_by_node(phandle); in display_connector_probe()
329 if (!conn->bridge.ddc) in display_connector_probe()
330 return -EPROBE_DEFER; in display_connector_probe()
332 dev_dbg(&pdev->dev, in display_connector_probe()
341 ret = display_connector_get_supply(pdev, conn, "dp-pwr"); in display_connector_probe()
343 return dev_err_probe(&pdev->dev, ret, "failed to get DP PWR regulator\n"); in display_connector_probe()
350 conn->ddc_en = devm_gpiod_get_optional(&pdev->dev, "ddc-en", in display_connector_probe()
353 if (IS_ERR(conn->ddc_en)) { in display_connector_probe()
354 dev_err(&pdev->dev, "Couldn't get ddc-en gpio\n"); in display_connector_probe()
355 return PTR_ERR(conn->ddc_en); in display_connector_probe()
358 ret = display_connector_get_supply(pdev, conn, "hdmi-pwr"); in display_connector_probe()
360 return dev_err_probe(&pdev->dev, ret, "failed to get HDMI +5V Power regulator\n"); in display_connector_probe()
363 if (conn->supply) { in display_connector_probe()
364 ret = regulator_enable(conn->supply); in display_connector_probe()
366 dev_err(&pdev->dev, "failed to enable PWR regulator: %d\n", ret); in display_connector_probe()
371 conn->bridge.of_node = pdev->dev.of_node; in display_connector_probe()
373 if (conn->bridge.ddc) in display_connector_probe()
374 conn->bridge.ops |= DRM_BRIDGE_OP_EDID in display_connector_probe()
376 if (conn->hpd_gpio) in display_connector_probe()
377 conn->bridge.ops |= DRM_BRIDGE_OP_DETECT; in display_connector_probe()
378 if (conn->hpd_irq >= 0) in display_connector_probe()
379 conn->bridge.ops |= DRM_BRIDGE_OP_HPD; in display_connector_probe()
381 dev_dbg(&pdev->dev, in display_connector_probe()
383 drm_get_connector_type_name(conn->bridge.type), in display_connector_probe()
385 conn->bridge.ddc ? "with" : "without", in display_connector_probe()
386 conn->hpd_gpio ? "with" : "without", in display_connector_probe()
387 conn->bridge.ops); in display_connector_probe()
389 drm_bridge_add(&conn->bridge); in display_connector_probe()
398 if (conn->ddc_en) in display_connector_remove()
399 gpiod_set_value(conn->ddc_en, 0); in display_connector_remove()
401 if (conn->supply) in display_connector_remove()
402 regulator_disable(conn->supply); in display_connector_remove()
404 drm_bridge_remove(&conn->bridge); in display_connector_remove()
406 if (!IS_ERR(conn->bridge.ddc)) in display_connector_remove()
407 i2c_put_adapter(conn->bridge.ddc); in display_connector_remove()
412 .compatible = "composite-video-connector",
415 .compatible = "dvi-connector",
418 .compatible = "hdmi-connector",
421 .compatible = "svideo-connector",
424 .compatible = "vga-connector",
427 .compatible = "dp-connector",
438 .name = "display-connector",