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

Commit 86b68716 authored by Dave Airlie's avatar Dave Airlie
Browse files

Merge branch 'drm/next/du' of git://linuxtv.org/pinchartl/fbdev into drm-next

some rcar fixes.

* 'drm/next/du' of git://linuxtv.org/pinchartl/fbdev:
  drm: rcar-du: Fix plane state free in plane reset handler
  drm: rcar-du: Enable DU0 to DPAD connection on R8A7791
  drm: rcar-du: Add dependency on OF
  drm: rcar-du: Remove obsolete rcar-du-r8a779x platform_device_id entries
parents 31875672 a32a3c80
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
config DRM_RCAR_DU
	tristate "DRM Support for R-Car Display Unit"
	depends on DRM && ARM && HAVE_DMA_ATTRS
	depends on DRM && ARM && HAVE_DMA_ATTRS && OF
	depends on ARCH_SHMOBILE || COMPILE_TEST
	select DRM_KMS_HELPER
	select DRM_KMS_CMA_HELPER
+2 −13
Original line number Diff line number Diff line
@@ -93,7 +93,7 @@ static const struct rcar_du_device_info rcar_du_r8a7791_info = {
		 * (currently unsupported) TCON output.
		 */
		[RCAR_DU_OUTPUT_DPAD0] = {
			.possible_crtcs = BIT(1),
			.possible_crtcs = BIT(1) | BIT(0),
			.encoder_type = DRM_MODE_ENCODER_NONE,
			.port = 0,
		},
@@ -106,15 +106,6 @@ static const struct rcar_du_device_info rcar_du_r8a7791_info = {
	.num_lvds = 1,
};

static const struct platform_device_id rcar_du_id_table[] = {
	{ "rcar-du-r8a7779", (kernel_ulong_t)&rcar_du_r8a7779_info },
	{ "rcar-du-r8a7790", (kernel_ulong_t)&rcar_du_r8a7790_info },
	{ "rcar-du-r8a7791", (kernel_ulong_t)&rcar_du_r8a7791_info },
	{ }
};

MODULE_DEVICE_TABLE(platform, rcar_du_id_table);

static const struct of_device_id rcar_du_of_table[] = {
	{ .compatible = "renesas,du-r8a7779", .data = &rcar_du_r8a7779_info },
	{ .compatible = "renesas,du-r8a7790", .data = &rcar_du_r8a7790_info },
@@ -167,8 +158,7 @@ static int rcar_du_load(struct drm_device *dev, unsigned long flags)
	init_waitqueue_head(&rcdu->commit.wait);

	rcdu->dev = &pdev->dev;
	rcdu->info = np ? of_match_device(rcar_du_of_table, rcdu->dev)->data
		   : (void *)platform_get_device_id(pdev)->driver_data;
	rcdu->info = of_match_device(rcar_du_of_table, rcdu->dev)->data;
	rcdu->ddev = dev;
	dev->dev_private = rcdu;

@@ -340,7 +330,6 @@ static struct platform_driver rcar_du_platform_driver = {
		.pm	= &rcar_du_pm_ops,
		.of_match_table = rcar_du_of_table,
	},
	.id_table	= rcar_du_id_table,
};

module_platform_driver(rcar_du_platform_driver);
+22 −23
Original line number Diff line number Diff line
@@ -273,29 +273,6 @@ static const struct drm_plane_helper_funcs rcar_du_plane_helper_funcs = {
	.atomic_update = rcar_du_plane_atomic_update,
};

static void rcar_du_plane_reset(struct drm_plane *plane)
{
	struct rcar_du_plane_state *state;

	if (plane->state && plane->state->fb)
		drm_framebuffer_unreference(plane->state->fb);

	kfree(plane->state);
	plane->state = NULL;

	state = kzalloc(sizeof(*state), GFP_KERNEL);
	if (state == NULL)
		return;

	state->hwindex = -1;
	state->alpha = 255;
	state->colorkey = RCAR_DU_COLORKEY_NONE;
	state->zpos = plane->type == DRM_PLANE_TYPE_PRIMARY ? 0 : 1;

	plane->state = &state->state;
	plane->state->plane = plane;
}

static struct drm_plane_state *
rcar_du_plane_atomic_duplicate_state(struct drm_plane *plane)
{
@@ -322,6 +299,28 @@ static void rcar_du_plane_atomic_destroy_state(struct drm_plane *plane,
	kfree(to_rcar_plane_state(state));
}

static void rcar_du_plane_reset(struct drm_plane *plane)
{
	struct rcar_du_plane_state *state;

	if (plane->state) {
		rcar_du_plane_atomic_destroy_state(plane, plane->state);
		plane->state = NULL;
	}

	state = kzalloc(sizeof(*state), GFP_KERNEL);
	if (state == NULL)
		return;

	state->hwindex = -1;
	state->alpha = 255;
	state->colorkey = RCAR_DU_COLORKEY_NONE;
	state->zpos = plane->type == DRM_PLANE_TYPE_PRIMARY ? 0 : 1;

	plane->state = &state->state;
	plane->state->plane = plane;
}

static int rcar_du_plane_atomic_set_property(struct drm_plane *plane,
					     struct drm_plane_state *state,
					     struct drm_property *property,