Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 863f78b5 authored by Dave Airlie's avatar Dave Airlie
Browse files

Merge branch 'exynos-drm-next' of...

Merge branch 'exynos-drm-next' of git://git.infradead.org/users/kmpark/linux-samsung into drm-core-next

these patch sets include the following features:
- add Samsung SoC Exynos based HDMI support.
- add pm feature for fimd driver.
- add multi buffer plane pixel formats to drm/drm_fourcc.h.
  multi buffer plane pixel format has seperated memory spaces for each
  plane. for exampme, NV12M has Y plane and CbCr plane and these are in
  non-continuous memory region. compared with NV12, NV12M's memory shape
  is like following.
  NV12  : ______(Y)(CbCr)_______
  NV12M : __(Y)_ ..... _(CbCr)__
- bug fix to vblank.
- code clean to exynos gem framework.

* 'exynos-drm-next' of git://git.infradead.org/users/kmpark/linux-samsung:
  drm/exynos: added hdmi display support
  drm/exynos: added mutex lock and code clean.
  drm/exynos: extend vblank off delay time.
  drm/exynos: change driver name.
  drm/exynos: Support multi buffers
  drm: Add multi buffer plane pixel formats
  drm/exynos: added pm support.
  drm/exynos: remove buffer creation of fbdev from drm framebuffer creation
  drm/exynos: Split creation of gem object and gem handle
  drm/exynos: Fix a fake mmap offset creation
  drm/exynos: gem code cleanup
parents 5c2a5ce6 d8408326
Loading
Loading
Loading
Loading
+7 −0
Original line number Original line Diff line number Diff line
@@ -18,3 +18,10 @@ config DRM_EXYNOS_FIMD
	help
	help
	  Choose this option if you want to use Exynos FIMD for DRM.
	  Choose this option if you want to use Exynos FIMD for DRM.
	  If M is selected, the module will be called exynos_drm_fimd
	  If M is selected, the module will be called exynos_drm_fimd

config DRM_EXYNOS_HDMI
	tristate "Exynos DRM HDMI"
	depends on DRM_EXYNOS
	help
	  Choose this option if you want to use Exynos HDMI for DRM.
	  If M is selected, the module will be called exynos_drm_hdmi
+2 −0
Original line number Original line Diff line number Diff line
@@ -10,3 +10,5 @@ exynosdrm-y := exynos_drm_drv.o exynos_drm_encoder.o exynos_drm_connector.o \


obj-$(CONFIG_DRM_EXYNOS) += exynosdrm.o
obj-$(CONFIG_DRM_EXYNOS) += exynosdrm.o
obj-$(CONFIG_DRM_EXYNOS_FIMD) += exynos_drm_fimd.o
obj-$(CONFIG_DRM_EXYNOS_FIMD) += exynos_drm_fimd.o
obj-$(CONFIG_DRM_EXYNOS_HDMI) += exynos_hdmi.o exynos_mixer.o exynos_ddc.o \
				 exynos_hdmiphy.o exynos_drm_hdmi.o
+58 −0
Original line number Original line Diff line number Diff line
/*
 * Copyright (C) 2011 Samsung Electronics Co.Ltd
 * Authors:
 *	Seung-Woo Kim <sw0312.kim@samsung.com>
 *	Inki Dae <inki.dae@samsung.com>
 *
 * This program is free software; you can redistribute  it and/or modify it
 * under  the terms of  the GNU General  Public License as published by the
 * Free Software Foundation;  either version 2 of the  License, or (at your
 * option) any later version.
 *
 */

#include "drmP.h"

#include <linux/kernel.h>
#include <linux/i2c.h>
#include <linux/module.h>


#include "exynos_drm_drv.h"
#include "exynos_hdmi.h"

static int s5p_ddc_probe(struct i2c_client *client,
			const struct i2c_device_id *dev_id)
{
	hdmi_attach_ddc_client(client);

	dev_info(&client->adapter->dev, "attached s5p_ddc "
		"into i2c adapter successfully\n");

	return 0;
}

static int s5p_ddc_remove(struct i2c_client *client)
{
	dev_info(&client->adapter->dev, "detached s5p_ddc "
		"from i2c adapter successfully\n");

	return 0;
}

static struct i2c_device_id ddc_idtable[] = {
	{"s5p_ddc", 0},
	{ },
};

struct i2c_driver ddc_driver = {
	.driver = {
		.name = "s5p_ddc",
		.owner = THIS_MODULE,
	},
	.id_table	= ddc_idtable,
	.probe		= s5p_ddc_probe,
	.remove		= __devexit_p(s5p_ddc_remove),
	.command		= NULL,
};
EXPORT_SYMBOL(ddc_driver);
+2 −3
Original line number Original line Diff line number Diff line
@@ -73,7 +73,7 @@ struct exynos_drm_gem_buf *exynos_drm_buf_create(struct drm_device *dev,
	buffer = kzalloc(sizeof(*buffer), GFP_KERNEL);
	buffer = kzalloc(sizeof(*buffer), GFP_KERNEL);
	if (!buffer) {
	if (!buffer) {
		DRM_ERROR("failed to allocate exynos_drm_gem_buf.\n");
		DRM_ERROR("failed to allocate exynos_drm_gem_buf.\n");
		return ERR_PTR(-ENOMEM);
		return NULL;
	}
	}


	buffer->size = size;
	buffer->size = size;
@@ -84,8 +84,7 @@ struct exynos_drm_gem_buf *exynos_drm_buf_create(struct drm_device *dev,
	 */
	 */
	if (lowlevel_buffer_allocate(dev, buffer) < 0) {
	if (lowlevel_buffer_allocate(dev, buffer) < 0) {
		kfree(buffer);
		kfree(buffer);
		buffer = NULL;
		return NULL;
		return ERR_PTR(-ENOMEM);
	}
	}


	return buffer;
	return buffer;
+0 −3
Original line number Original line Diff line number Diff line
@@ -30,9 +30,6 @@
struct exynos_drm_gem_buf *exynos_drm_buf_create(struct drm_device *dev,
struct exynos_drm_gem_buf *exynos_drm_buf_create(struct drm_device *dev,
		unsigned int size);
		unsigned int size);


/* get memory information of a drm framebuffer. */
struct exynos_drm_gem_buf *exynos_drm_fb_get_buf(struct drm_framebuffer *fb);

/* remove allocated physical memory. */
/* remove allocated physical memory. */
void exynos_drm_buf_destroy(struct drm_device *dev,
void exynos_drm_buf_destroy(struct drm_device *dev,
		struct exynos_drm_gem_buf *buffer);
		struct exynos_drm_gem_buf *buffer);
Loading