Lines Matching +full:0 +full:- +full:datasheet
1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * Copyright (C) 2015-2016 Free Electrons
4 * Copyright (C) 2015-2016 NextThing Co
6 * Maxime Ripard <maxime.ripard@free-electrons.com>
57 if (sbridge->next_bridge->ops & DRM_BRIDGE_OP_EDID) { in simple_bridge_get_modes()
58 drm_edid = drm_bridge_edid_read(sbridge->next_bridge, connector); in simple_bridge_get_modes()
93 return drm_bridge_detect(sbridge->next_bridge); in simple_bridge_connector_detect()
111 ret = drm_bridge_attach(bridge->encoder, sbridge->next_bridge, bridge, in simple_bridge_attach()
113 if (ret < 0) in simple_bridge_attach()
117 return 0; in simple_bridge_attach()
119 drm_connector_helper_add(&sbridge->connector, in simple_bridge_attach()
121 ret = drm_connector_init_with_ddc(bridge->dev, &sbridge->connector, in simple_bridge_attach()
123 sbridge->info->connector_type, in simple_bridge_attach()
124 sbridge->next_bridge->ddc); in simple_bridge_attach()
130 drm_connector_attach_encoder(&sbridge->connector, bridge->encoder); in simple_bridge_attach()
132 return 0; in simple_bridge_attach()
140 if (sbridge->vdd) { in simple_bridge_enable()
141 ret = regulator_enable(sbridge->vdd); in simple_bridge_enable()
146 gpiod_set_value_cansleep(sbridge->enable, 1); in simple_bridge_enable()
153 gpiod_set_value_cansleep(sbridge->enable, 0); in simple_bridge_disable()
155 if (sbridge->vdd) in simple_bridge_disable()
156 regulator_disable(sbridge->vdd); in simple_bridge_disable()
170 sbridge = devm_kzalloc(&pdev->dev, sizeof(*sbridge), GFP_KERNEL); in simple_bridge_probe()
172 return -ENOMEM; in simple_bridge_probe()
174 sbridge->info = of_device_get_match_data(&pdev->dev); in simple_bridge_probe()
177 remote = of_graph_get_remote_node(pdev->dev.of_node, 1, -1); in simple_bridge_probe()
179 return -EINVAL; in simple_bridge_probe()
181 sbridge->next_bridge = of_drm_find_bridge(remote); in simple_bridge_probe()
184 if (!sbridge->next_bridge) { in simple_bridge_probe()
185 dev_dbg(&pdev->dev, "Next bridge not found, deferring probe\n"); in simple_bridge_probe()
186 return -EPROBE_DEFER; in simple_bridge_probe()
190 sbridge->vdd = devm_regulator_get_optional(&pdev->dev, "vdd"); in simple_bridge_probe()
191 if (IS_ERR(sbridge->vdd)) { in simple_bridge_probe()
192 int ret = PTR_ERR(sbridge->vdd); in simple_bridge_probe()
193 if (ret == -EPROBE_DEFER) in simple_bridge_probe()
194 return -EPROBE_DEFER; in simple_bridge_probe()
195 sbridge->vdd = NULL; in simple_bridge_probe()
196 dev_dbg(&pdev->dev, "No vdd regulator found: %d\n", ret); in simple_bridge_probe()
199 sbridge->enable = devm_gpiod_get_optional(&pdev->dev, "enable", in simple_bridge_probe()
201 if (IS_ERR(sbridge->enable)) in simple_bridge_probe()
202 return dev_err_probe(&pdev->dev, PTR_ERR(sbridge->enable), in simple_bridge_probe()
206 sbridge->bridge.funcs = &simple_bridge_bridge_funcs; in simple_bridge_probe()
207 sbridge->bridge.of_node = pdev->dev.of_node; in simple_bridge_probe()
208 sbridge->bridge.timings = sbridge->info->timings; in simple_bridge_probe()
210 return devm_drm_bridge_add(&pdev->dev, &sbridge->bridge); in simple_bridge_probe()
215 * Information taken from the ADV7123 datasheet, revision D.
220 /* Timing specifications, datasheet page 7 */
227 * Information taken from the THS8134, THS8134A, THS8134B datasheet named
231 /* From timing diagram, datasheet page 9 */
233 /* From datasheet, page 12 */
236 .hold_time_ps = 0,
240 * Information taken from the THS8135 datasheet named "SLAS343B", dated
244 /* From timing diagram, datasheet page 14 */
246 /* From datasheet, page 16 */
253 .compatible = "dumb-vga-dac",
288 .name = "simple-bridge",
294 MODULE_AUTHOR("Maxime Ripard <maxime.ripard@free-electrons.com>");