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

Commit 345f3b90 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

* 'exynos-drm-next' of git://git.infradead.org/users/kmpark/linux-samsung:
  drm/exynos: add G2D driver
  drm/exynos: added vp scaling feature for hdmi
  drm/exynos: added source size to overlay structure
  drm/exynos: add additional display mode for hdmi
  drm/exynos: enable dvi mode for dvi monitor
  drm/exynos: fixed wrong pageflip finish event for interlace mode
  drm/exynos: add PM functions for hdmi and mixer
  drm/exynos: add dpms for hdmi
  drm/exynos: use threaded irq for hdmi hotplug
  drm/exynos: use platform_get_irq_byname for hdmi
  drm/exynos: cleanup for hdmi platform data
  drm/exynos: added a feature to get gem buffer information.
  drm/exynos: added drm prime feature.
  drm/exynos: added cache attribute support for gem.
  vgaarb: Provide dummy default device functions
parents ebe0f244 d7f1642c
Loading
Loading
Loading
Loading
+12 −0
Original line number Diff line number Diff line
@@ -10,6 +10,12 @@ config DRM_EXYNOS
	  Choose this option if you have a Samsung SoC EXYNOS chipset.
	  If M is selected the module will be called exynosdrm.

config DRM_EXYNOS_DMABUF
	bool "EXYNOS DRM DMABUF"
	depends on DRM_EXYNOS
	help
	  Choose this option if you want to use DMABUF feature for DRM.

config DRM_EXYNOS_FIMD
	bool "Exynos DRM FIMD"
	depends on DRM_EXYNOS && !FB_S3C
@@ -27,3 +33,9 @@ config DRM_EXYNOS_VIDI
	depends on DRM_EXYNOS
	help
	  Choose this option if you want to use Exynos VIDI for DRM.

config DRM_EXYNOS_G2D
	bool "Exynos DRM G2D"
	depends on DRM_EXYNOS
	help
	  Choose this option if you want to use Exynos G2D for DRM.
+2 −0
Original line number Diff line number Diff line
@@ -8,10 +8,12 @@ exynosdrm-y := exynos_drm_drv.o exynos_drm_encoder.o exynos_drm_connector.o \
		exynos_drm_buf.o exynos_drm_gem.o exynos_drm_core.o \
		exynos_drm_plane.o

exynosdrm-$(CONFIG_DRM_EXYNOS_DMABUF) += exynos_drm_dmabuf.o
exynosdrm-$(CONFIG_DRM_EXYNOS_FIMD)	+= exynos_drm_fimd.o
exynosdrm-$(CONFIG_DRM_EXYNOS_HDMI)	+= exynos_hdmi.o exynos_mixer.o \
					   exynos_ddc.o exynos_hdmiphy.o \
					   exynos_drm_hdmi.o
exynosdrm-$(CONFIG_DRM_EXYNOS_VIDI)	+= exynos_drm_vidi.o
exynosdrm-$(CONFIG_DRM_EXYNOS_G2D)	+= exynos_drm_g2d.o

obj-$(CONFIG_DRM_EXYNOS)		+= exynosdrm.o
+6 −6
Original line number Diff line number Diff line
@@ -35,7 +35,7 @@ static int lowlevel_buffer_allocate(struct drm_device *dev,
		unsigned int flags, struct exynos_drm_gem_buf *buf)
{
	dma_addr_t start_addr;
	unsigned int npages, page_size, i = 0;
	unsigned int npages, i = 0;
	struct scatterlist *sgl;
	int ret = 0;

@@ -53,13 +53,13 @@ static int lowlevel_buffer_allocate(struct drm_device *dev,

	if (buf->size >= SZ_1M) {
		npages = buf->size >> SECTION_SHIFT;
		page_size = SECTION_SIZE;
		buf->page_size = SECTION_SIZE;
	} else if (buf->size >= SZ_64K) {
		npages = buf->size >> 16;
		page_size = SZ_64K;
		buf->page_size = SZ_64K;
	} else {
		npages = buf->size >> PAGE_SHIFT;
		page_size = PAGE_SIZE;
		buf->page_size = PAGE_SIZE;
	}

	buf->sgt = kzalloc(sizeof(struct sg_table), GFP_KERNEL);
@@ -96,9 +96,9 @@ static int lowlevel_buffer_allocate(struct drm_device *dev,

	while (i < npages) {
		buf->pages[i] = phys_to_page(start_addr);
		sg_set_page(sgl, buf->pages[i], page_size, 0);
		sg_set_page(sgl, buf->pages[i], buf->page_size, 0);
		sg_dma_address(sgl) = start_addr;
		start_addr += page_size;
		start_addr += buf->page_size;
		sgl = sg_next(sgl);
		i++;
	}
+4 −0
Original line number Diff line number Diff line
@@ -105,6 +105,8 @@ int exynos_drm_overlay_update(struct exynos_drm_overlay *overlay,
	overlay->fb_y = pos->fb_y;
	overlay->fb_width = fb->width;
	overlay->fb_height = fb->height;
	overlay->src_width = pos->src_w;
	overlay->src_height = pos->src_h;
	overlay->bpp = fb->bits_per_pixel;
	overlay->pitch = fb->pitches[0];
	overlay->pixel_format = fb->pixel_format;
@@ -153,6 +155,8 @@ static int exynos_drm_crtc_update(struct drm_crtc *crtc)
	pos.crtc_y = 0;
	pos.crtc_w = fb->width - crtc->x;
	pos.crtc_h = fb->height - crtc->y;
	pos.src_w = pos.crtc_w;
	pos.src_h = pos.crtc_h;

	return exynos_drm_overlay_update(overlay, crtc->fb, mode, &pos);
}
+4 −0
Original line number Diff line number Diff line
@@ -42,6 +42,8 @@ void exynos_drm_crtc_disable_vblank(struct drm_device *dev, int crtc);
 *	- the unit is screen coordinates.
 * @fb_y: offset y on a framebuffer to be displayed
 *	- the unit is screen coordinates.
 * @src_w: width of source area to be displayed from a framebuffer.
 * @src_h: height of source area to be displayed from a framebuffer.
 * @crtc_x: offset x on hardware screen.
 * @crtc_y: offset y on hardware screen.
 * @crtc_w: width of hardware screen.
@@ -50,6 +52,8 @@ void exynos_drm_crtc_disable_vblank(struct drm_device *dev, int crtc);
struct exynos_drm_crtc_pos {
	unsigned int fb_x;
	unsigned int fb_y;
	unsigned int src_w;
	unsigned int src_h;
	unsigned int crtc_x;
	unsigned int crtc_y;
	unsigned int crtc_w;
Loading