blob: 78c91c081068f83d17eb09a7f303f80d8fb6e349 [file] [log] [blame]
/*
*
* (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;
}