Lines Matching +full:lvds +full:- +full:decoder

1 // SPDX-License-Identifier: GPL-2.0-or-later
8 #include <linux/media-bus-format.h>
41 return drm_bridge_attach(bridge->encoder, lvds_codec->panel_bridge, in lvds_codec_attach()
50 ret = regulator_enable(lvds_codec->vcc); in lvds_codec_enable()
52 dev_err(lvds_codec->dev, in lvds_codec_enable()
57 if (lvds_codec->powerdown_gpio) in lvds_codec_enable()
58 gpiod_set_value_cansleep(lvds_codec->powerdown_gpio, 0); in lvds_codec_enable()
66 if (lvds_codec->powerdown_gpio) in lvds_codec_disable()
67 gpiod_set_value_cansleep(lvds_codec->powerdown_gpio, 1); in lvds_codec_disable()
69 ret = regulator_disable(lvds_codec->vcc); in lvds_codec_disable()
71 dev_err(lvds_codec->dev, in lvds_codec_disable()
94 input_fmts[0] = lvds_codec->bus_format; in lvds_codec_atomic_get_input_bus_fmts()
112 struct device *dev = &pdev->dev; in lvds_codec_probe()
122 return -ENOMEM; in lvds_codec_probe()
124 lvds_codec->dev = &pdev->dev; in lvds_codec_probe()
125 lvds_codec->connector_type = (uintptr_t)of_device_get_match_data(dev); in lvds_codec_probe()
127 lvds_codec->vcc = devm_regulator_get(lvds_codec->dev, "power"); in lvds_codec_probe()
128 if (IS_ERR(lvds_codec->vcc)) in lvds_codec_probe()
129 return dev_err_probe(dev, PTR_ERR(lvds_codec->vcc), in lvds_codec_probe()
132 lvds_codec->powerdown_gpio = devm_gpiod_get_optional(dev, "powerdown", in lvds_codec_probe()
134 if (IS_ERR(lvds_codec->powerdown_gpio)) in lvds_codec_probe()
135 return dev_err_probe(dev, PTR_ERR(lvds_codec->powerdown_gpio), in lvds_codec_probe()
139 panel_node = of_graph_get_remote_node(dev->of_node, 1, 0); in lvds_codec_probe()
142 return -ENXIO; in lvds_codec_probe()
152 lvds_codec->panel_bridge = in lvds_codec_probe()
154 lvds_codec->connector_type); in lvds_codec_probe()
155 if (IS_ERR(lvds_codec->panel_bridge)) in lvds_codec_probe()
156 return PTR_ERR(lvds_codec->panel_bridge); in lvds_codec_probe()
158 lvds_codec->bridge.funcs = &funcs; in lvds_codec_probe()
161 * Decoder input LVDS format is a property of the decoder chip or even in lvds_codec_probe()
162 * its strapping. Handle data-mapping the same way lvds-panel does. In in lvds_codec_probe()
163 * case data-mapping is not present, do nothing, since there are still in lvds_codec_probe()
166 if (lvds_codec->connector_type != DRM_MODE_CONNECTOR_LVDS) { in lvds_codec_probe()
167 bus_node = of_graph_get_endpoint_by_regs(dev->of_node, 0, 0); in lvds_codec_probe()
170 return -ENXIO; in lvds_codec_probe()
175 if (ret == -ENODEV) { in lvds_codec_probe()
176 dev_warn(dev, "missing 'data-mapping' DT property\n"); in lvds_codec_probe()
178 dev_err(dev, "invalid 'data-mapping' DT property\n"); in lvds_codec_probe()
181 lvds_codec->bus_format = ret; in lvds_codec_probe()
184 lvds_codec->bus_format = MEDIA_BUS_FMT_RGB888_1X24; in lvds_codec_probe()
192 if (lvds_codec->connector_type == DRM_MODE_CONNECTOR_LVDS && in lvds_codec_probe()
193 !of_property_read_u32(dev->of_node, "pclk-sample", &val)) { in lvds_codec_probe()
194 lvds_codec->timings.input_bus_flags = val ? in lvds_codec_probe()
204 lvds_codec->bridge.of_node = dev->of_node; in lvds_codec_probe()
205 lvds_codec->bridge.timings = &lvds_codec->timings; in lvds_codec_probe()
206 drm_bridge_add(&lvds_codec->bridge); in lvds_codec_probe()
217 drm_bridge_remove(&lvds_codec->bridge); in lvds_codec_remove()
222 .compatible = "lvds-decoder",
226 .compatible = "lvds-encoder",
241 .name = "lvds-codec",
248 MODULE_DESCRIPTION("LVDS encoders and decoders");