| .. | .. |
|---|
| 1 | +// SPDX-License-Identifier: GPL-2.0-only |
|---|
| 1 | 2 | /* |
|---|
| 2 | 3 | * Exynos DRM Parallel output support. |
|---|
| 3 | 4 | * |
|---|
| 4 | 5 | * Copyright (c) 2014 Samsung Electronics Co., Ltd |
|---|
| 5 | 6 | * |
|---|
| 6 | 7 | * Contacts: Andrzej Hajda <a.hajda@samsung.com> |
|---|
| 7 | | - * |
|---|
| 8 | | - * This program is free software; you can redistribute it and/or modify |
|---|
| 9 | | - * it under the terms of the GNU General Public License version 2 as |
|---|
| 10 | | - * published by the Free Software Foundation. |
|---|
| 11 | 8 | */ |
|---|
| 12 | | - |
|---|
| 13 | | -#include <drm/drmP.h> |
|---|
| 14 | | -#include <drm/drm_crtc_helper.h> |
|---|
| 15 | | -#include <drm/drm_panel.h> |
|---|
| 16 | | -#include <drm/drm_atomic_helper.h> |
|---|
| 17 | 9 | |
|---|
| 18 | 10 | #include <linux/of_graph.h> |
|---|
| 19 | 11 | #include <linux/regulator/consumer.h> |
|---|
| 12 | + |
|---|
| 13 | +#include <drm/drm_atomic_helper.h> |
|---|
| 14 | +#include <drm/drm_panel.h> |
|---|
| 15 | +#include <drm/drm_print.h> |
|---|
| 16 | +#include <drm/drm_probe_helper.h> |
|---|
| 17 | +#include <drm/drm_simple_kms_helper.h> |
|---|
| 20 | 18 | |
|---|
| 21 | 19 | #include <video/of_videomode.h> |
|---|
| 22 | 20 | #include <video/videomode.h> |
|---|
| .. | .. |
|---|
| 44 | 42 | static enum drm_connector_status |
|---|
| 45 | 43 | exynos_dpi_detect(struct drm_connector *connector, bool force) |
|---|
| 46 | 44 | { |
|---|
| 47 | | - struct exynos_dpi *ctx = connector_to_dpi(connector); |
|---|
| 48 | | - |
|---|
| 49 | | - if (ctx->panel && !ctx->panel->connector) |
|---|
| 50 | | - drm_panel_attach(ctx->panel, &ctx->connector); |
|---|
| 51 | | - |
|---|
| 52 | 45 | return connector_status_connected; |
|---|
| 53 | 46 | } |
|---|
| 54 | 47 | |
|---|
| .. | .. |
|---|
| 77 | 70 | |
|---|
| 78 | 71 | mode = drm_mode_create(connector->dev); |
|---|
| 79 | 72 | if (!mode) { |
|---|
| 80 | | - DRM_ERROR("failed to create a new display mode\n"); |
|---|
| 73 | + DRM_DEV_ERROR(ctx->dev, |
|---|
| 74 | + "failed to create a new display mode\n"); |
|---|
| 81 | 75 | return 0; |
|---|
| 82 | 76 | } |
|---|
| 83 | 77 | drm_display_mode_from_videomode(ctx->vm, mode); |
|---|
| .. | .. |
|---|
| 87 | 81 | } |
|---|
| 88 | 82 | |
|---|
| 89 | 83 | if (ctx->panel) |
|---|
| 90 | | - return ctx->panel->funcs->get_modes(ctx->panel); |
|---|
| 84 | + return drm_panel_get_modes(ctx->panel, connector); |
|---|
| 91 | 85 | |
|---|
| 92 | 86 | return 0; |
|---|
| 93 | 87 | } |
|---|
| .. | .. |
|---|
| 108 | 102 | &exynos_dpi_connector_funcs, |
|---|
| 109 | 103 | DRM_MODE_CONNECTOR_VGA); |
|---|
| 110 | 104 | if (ret) { |
|---|
| 111 | | - DRM_ERROR("failed to initialize connector with drm\n"); |
|---|
| 105 | + DRM_DEV_ERROR(ctx->dev, |
|---|
| 106 | + "failed to initialize connector with drm\n"); |
|---|
| 112 | 107 | return ret; |
|---|
| 113 | 108 | } |
|---|
| 114 | 109 | |
|---|
| .. | .. |
|---|
| 148 | 143 | .mode_set = exynos_dpi_mode_set, |
|---|
| 149 | 144 | .enable = exynos_dpi_enable, |
|---|
| 150 | 145 | .disable = exynos_dpi_disable, |
|---|
| 151 | | -}; |
|---|
| 152 | | - |
|---|
| 153 | | -static const struct drm_encoder_funcs exynos_dpi_encoder_funcs = { |
|---|
| 154 | | - .destroy = drm_encoder_cleanup, |
|---|
| 155 | 146 | }; |
|---|
| 156 | 147 | |
|---|
| 157 | 148 | enum { |
|---|
| .. | .. |
|---|
| 202 | 193 | { |
|---|
| 203 | 194 | int ret; |
|---|
| 204 | 195 | |
|---|
| 205 | | - drm_encoder_init(dev, encoder, &exynos_dpi_encoder_funcs, |
|---|
| 206 | | - DRM_MODE_ENCODER_TMDS, NULL); |
|---|
| 196 | + drm_simple_encoder_init(dev, encoder, DRM_MODE_ENCODER_TMDS); |
|---|
| 207 | 197 | |
|---|
| 208 | 198 | drm_encoder_helper_add(encoder, &exynos_dpi_encoder_helper_funcs); |
|---|
| 209 | 199 | |
|---|
| .. | .. |
|---|
| 213 | 203 | |
|---|
| 214 | 204 | ret = exynos_dpi_create_connector(encoder); |
|---|
| 215 | 205 | if (ret) { |
|---|
| 216 | | - DRM_ERROR("failed to create connector ret = %d\n", ret); |
|---|
| 206 | + DRM_DEV_ERROR(encoder_to_dpi(encoder)->dev, |
|---|
| 207 | + "failed to create connector ret = %d\n", ret); |
|---|
| 217 | 208 | drm_encoder_cleanup(encoder); |
|---|
| 218 | 209 | return ret; |
|---|
| 219 | 210 | } |
|---|
| .. | .. |
|---|
| 252 | 243 | struct exynos_dpi *ctx = encoder_to_dpi(encoder); |
|---|
| 253 | 244 | |
|---|
| 254 | 245 | exynos_dpi_disable(&ctx->encoder); |
|---|
| 255 | | - |
|---|
| 256 | | - if (ctx->panel) |
|---|
| 257 | | - drm_panel_detach(ctx->panel); |
|---|
| 258 | 246 | |
|---|
| 259 | 247 | return 0; |
|---|
| 260 | 248 | } |
|---|