diff options
Diffstat (limited to '')
-rw-r--r-- | drivers/gpu/drm/omapdrm/dss/display.c | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/drivers/gpu/drm/omapdrm/dss/display.c b/drivers/gpu/drm/omapdrm/dss/display.c new file mode 100644 index 000000000..3b82158b1 --- /dev/null +++ b/drivers/gpu/drm/omapdrm/dss/display.c @@ -0,0 +1,60 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * Copyright (C) 2009 Nokia Corporation + * Author: Tomi Valkeinen <tomi.valkeinen@ti.com> + * + * Some code and ideas taken from drivers/video/omap/ driver + * by Imre Deak. + */ + +#define DSS_SUBSYS_NAME "DISPLAY" + +#include <linux/kernel.h> +#include <linux/of.h> + +#include <drm/drm_connector.h> +#include <drm/drm_modes.h> + +#include "omapdss.h" + +static int disp_num_counter; + +void omapdss_display_init(struct omap_dss_device *dssdev) +{ + int id; + + /* + * Note: this presumes that all displays either have an DT alias, or + * none has. + */ + id = of_alias_get_id(dssdev->dev->of_node, "display"); + if (id < 0) + id = disp_num_counter++; + + /* Use 'label' property for name, if it exists */ + of_property_read_string(dssdev->dev->of_node, "label", &dssdev->name); + + if (dssdev->name == NULL) + dssdev->name = devm_kasprintf(dssdev->dev, GFP_KERNEL, + "display%u", id); +} +EXPORT_SYMBOL_GPL(omapdss_display_init); + +int omapdss_display_get_modes(struct drm_connector *connector, + const struct videomode *vm) +{ + struct drm_display_mode *mode; + + mode = drm_mode_create(connector->dev); + if (!mode) + return 0; + + drm_display_mode_from_videomode(vm, mode); + + mode->type = DRM_MODE_TYPE_DRIVER | DRM_MODE_TYPE_PREFERRED; + drm_mode_set_name(mode); + drm_mode_probed_add(connector, mode); + + return 1; +} +EXPORT_SYMBOL_GPL(omapdss_display_get_modes); |