summaryrefslogtreecommitdiff
path: root/driver/product/kernel/drivers/gpu/drm/pl111/pl111_drm_encoder.c
blob: 78c91c081068f83d17eb09a7f303f80d8fb6e349 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
/*
 *
 * (C) COPYRIGHT 2012-2013 ARM Limited. All rights reserved.
 *
 * This program is free software and is provided to you under the terms of the
 * GNU General Public License version 2 as published by the Free Software
 * Foundation, and any use by you of this program is subject to the terms
 * of such GNU licence.
 *
 * A copy of the licence is included with the program, and can also be obtained
 * from Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
 * Boston, MA  02110-1301, USA.
 *
 */



/**
 * pl111_drm_encoder.c
 * Implementation of the encoder functions for PL111 DRM
 */
#include <linux/amba/bus.h>
#include <linux/amba/clcd.h>
#include <linux/version.h>
#include <linux/shmem_fs.h>
#include <linux/dma-buf.h>
#include <linux/module.h>

#include <drm/drmP.h>
#include <drm/drm_crtc_helper.h>

#include "pl111_drm.h"

bool pl111_encoder_helper_mode_fixup(struct drm_encoder *encoder,
					struct drm_display_mode *mode,
					struct drm_display_mode *adjusted_mode)
{
	DRM_DEBUG_KMS("DRM %s on encoder=%p\n", __func__, encoder);
	return true;
}

void pl111_encoder_helper_prepare(struct drm_encoder *encoder)
{
	DRM_DEBUG_KMS("DRM %s on encoder=%p\n", __func__, encoder);
}

void pl111_encoder_helper_commit(struct drm_encoder *encoder)
{
	DRM_DEBUG_KMS("DRM %s on encoder=%p\n", __func__, encoder);
}

void pl111_encoder_helper_mode_set(struct drm_encoder *encoder,
				struct drm_display_mode *mode,
				struct drm_display_mode *adjusted_mode)
{
	DRM_DEBUG_KMS("DRM %s on encoder=%p\n", __func__, encoder);
}

void pl111_encoder_helper_disable(struct drm_encoder *encoder)
{
	DRM_DEBUG_KMS("DRM %s on encoder=%p\n", __func__, encoder);
}

void pl111_encoder_destroy(struct drm_encoder *encoder)
{
	struct pl111_drm_encoder *pl111_encoder =
					PL111_ENCODER_FROM_ENCODER(encoder);

	DRM_DEBUG_KMS("DRM %s on encoder=%p\n", __func__, encoder);

	drm_encoder_cleanup(encoder);
	kfree(pl111_encoder);
}

const struct drm_encoder_funcs encoder_funcs = {
	.destroy = pl111_encoder_destroy,
};

const struct drm_encoder_helper_funcs encoder_helper_funcs = {
	.mode_fixup = pl111_encoder_helper_mode_fixup,
	.prepare = pl111_encoder_helper_prepare,
	.commit = pl111_encoder_helper_commit,
	.mode_set = pl111_encoder_helper_mode_set,
	.disable = pl111_encoder_helper_disable,
};

struct pl111_drm_encoder *pl111_encoder_create(struct drm_device *dev,
						int possible_crtcs)
{
	struct pl111_drm_encoder *pl111_encoder;

	pl111_encoder = kzalloc(sizeof(struct pl111_drm_encoder), GFP_KERNEL);
	if (pl111_encoder == NULL) {
		pr_err("Failed to allocated pl111_drm_encoder\n");
		return NULL;
	}

	drm_encoder_init(dev, &pl111_encoder->encoder, &encoder_funcs,
				DRM_MODE_ENCODER_DAC);

	drm_encoder_helper_add(&pl111_encoder->encoder, &encoder_helper_funcs);

	pl111_encoder->encoder.possible_crtcs = possible_crtcs;

	return pl111_encoder;
}