Path: blob/master/drivers/gpu/drm/bridge/imx/imx-legacy-bridge.c
26517 views
// SPDX-License-Identifier: GPL-2.0+1/*2* Freescale i.MX drm driver3*4* bridge driver for legacy DT bindings, utilizing display-timings node5*/67#include <linux/export.h>89#include <drm/drm_bridge.h>10#include <drm/drm_modes.h>11#include <drm/drm_probe_helper.h>12#include <drm/bridge/imx.h>1314#include <video/of_display_timing.h>15#include <video/of_videomode.h>1617struct imx_legacy_bridge {18struct drm_bridge base;1920struct drm_display_mode mode;21u32 bus_flags;22};2324#define to_imx_legacy_bridge(bridge) container_of(bridge, struct imx_legacy_bridge, base)2526static int imx_legacy_bridge_attach(struct drm_bridge *bridge,27struct drm_encoder *encoder,28enum drm_bridge_attach_flags flags)29{30if (!(flags & DRM_BRIDGE_ATTACH_NO_CONNECTOR))31return -EINVAL;3233return 0;34}3536static int imx_legacy_bridge_get_modes(struct drm_bridge *bridge,37struct drm_connector *connector)38{39struct imx_legacy_bridge *imx_bridge = to_imx_legacy_bridge(bridge);40int ret;4142ret = drm_connector_helper_get_modes_fixed(connector, &imx_bridge->mode);43if (ret)44return ret;4546connector->display_info.bus_flags = imx_bridge->bus_flags;4748return 0;49}5051struct drm_bridge_funcs imx_legacy_bridge_funcs = {52.attach = imx_legacy_bridge_attach,53.get_modes = imx_legacy_bridge_get_modes,54};5556struct drm_bridge *devm_imx_drm_legacy_bridge(struct device *dev,57struct device_node *np,58int type)59{60struct imx_legacy_bridge *imx_bridge;61int ret;6263imx_bridge = devm_drm_bridge_alloc(dev, struct imx_legacy_bridge,64base, &imx_legacy_bridge_funcs);65if (IS_ERR(imx_bridge))66return ERR_CAST(imx_bridge);6768ret = of_get_drm_display_mode(np,69&imx_bridge->mode,70&imx_bridge->bus_flags,71OF_USE_NATIVE_MODE);72if (ret)73return ERR_PTR(ret);7475imx_bridge->mode.type |= DRM_MODE_TYPE_DRIVER;7677imx_bridge->base.of_node = np;78imx_bridge->base.ops = DRM_BRIDGE_OP_MODES;79imx_bridge->base.type = type;8081ret = devm_drm_bridge_add(dev, &imx_bridge->base);82if (ret)83return ERR_PTR(ret);8485return &imx_bridge->base;86}87EXPORT_SYMBOL_GPL(devm_imx_drm_legacy_bridge);8889MODULE_LICENSE("GPL");90MODULE_DESCRIPTION("Freescale i.MX DRM bridge driver for legacy DT bindings");919293