Lines Matching +full:panel +full:- +full:lvds

1 // SPDX-License-Identifier: GPL-2.0-or-later
37 return drm_bridge_attach(bridge->encoder, lvds_codec->panel_bridge, in lvds_codec_attach()
46 ret = regulator_enable(lvds_codec->vcc); in lvds_codec_enable()
48 dev_err(lvds_codec->dev, in lvds_codec_enable()
53 if (lvds_codec->powerdown_gpio) in lvds_codec_enable()
54 gpiod_set_value_cansleep(lvds_codec->powerdown_gpio, 0); in lvds_codec_enable()
62 if (lvds_codec->powerdown_gpio) in lvds_codec_disable()
63 gpiod_set_value_cansleep(lvds_codec->powerdown_gpio, 1); in lvds_codec_disable()
65 ret = regulator_disable(lvds_codec->vcc); in lvds_codec_disable()
67 dev_err(lvds_codec->dev, in lvds_codec_disable()
79 struct device *dev = &pdev->dev; in lvds_codec_probe()
81 struct drm_panel *panel; in lvds_codec_probe() local
87 return -ENOMEM; in lvds_codec_probe()
89 lvds_codec->dev = &pdev->dev; in lvds_codec_probe()
90 lvds_codec->connector_type = (uintptr_t)of_device_get_match_data(dev); in lvds_codec_probe()
92 lvds_codec->vcc = devm_regulator_get(lvds_codec->dev, "power"); in lvds_codec_probe()
93 if (IS_ERR(lvds_codec->vcc)) { in lvds_codec_probe()
94 ret = PTR_ERR(lvds_codec->vcc); in lvds_codec_probe()
95 if (ret != -EPROBE_DEFER) in lvds_codec_probe()
96 dev_err(lvds_codec->dev, in lvds_codec_probe()
101 lvds_codec->powerdown_gpio = devm_gpiod_get_optional(dev, "powerdown", in lvds_codec_probe()
103 if (IS_ERR(lvds_codec->powerdown_gpio)) in lvds_codec_probe()
104 return dev_err_probe(dev, PTR_ERR(lvds_codec->powerdown_gpio), in lvds_codec_probe()
107 /* Locate the panel DT node. */ in lvds_codec_probe()
108 panel_node = of_graph_get_remote_node(dev->of_node, 1, 0); in lvds_codec_probe()
110 dev_dbg(dev, "panel DT node not found\n"); in lvds_codec_probe()
111 return -ENXIO; in lvds_codec_probe()
114 panel = of_drm_find_panel(panel_node); in lvds_codec_probe()
116 if (IS_ERR(panel)) { in lvds_codec_probe()
117 dev_dbg(dev, "panel not found, deferring probe\n"); in lvds_codec_probe()
118 return PTR_ERR(panel); in lvds_codec_probe()
121 lvds_codec->panel_bridge = in lvds_codec_probe()
122 devm_drm_panel_bridge_add_typed(dev, panel, in lvds_codec_probe()
123 lvds_codec->connector_type); in lvds_codec_probe()
124 if (IS_ERR(lvds_codec->panel_bridge)) in lvds_codec_probe()
125 return PTR_ERR(lvds_codec->panel_bridge); in lvds_codec_probe()
128 * The panel_bridge bridge is attached to the panel's of_node, in lvds_codec_probe()
132 lvds_codec->bridge.of_node = dev->of_node; in lvds_codec_probe()
133 lvds_codec->bridge.funcs = &funcs; in lvds_codec_probe()
134 drm_bridge_add(&lvds_codec->bridge); in lvds_codec_probe()
145 drm_bridge_remove(&lvds_codec->bridge); in lvds_codec_remove()
152 .compatible = "lvds-decoder",
156 .compatible = "lvds-encoder",
171 .name = "lvds-codec",
178 MODULE_DESCRIPTION("LVDS encoders and decoders");